mirror of
https://github.com/Xeeynamo/sotn-decomp.git
synced 2024-10-06 18:13:30 +00:00
Weapon assets and statically linked (#1470)
Allow to compile weapon overlays as a single C files. The benefit is to disallow symbols to be exported by statically compile them all but the header. We would no longer need to use `OVL_EXPORT` as long as the symbols are marked as `static`. The frames data is also generated as an array of data that can be just included into their respective C files, generated by JSON files on the fly. I changed `animset` to `frameset` as the data does not represent a set of animations but rather a set of frames, where every frame has multiple sprites. The information on how the frames are played (e.g. animation) is found elsewhere. Following the full list of changes to achieve this project: * The `animset` from splat is now dummied out * The `frameset` JSON is now generated by the asset manager * The `frameset` JSON is now compiled into `src/weapon/w_0xx_y.h` * The `header.c` has been moved into `shared.h` * For simplicity I added a `#define g_Animset w_000_1`. I did not want to hack the asset manager too much to force the name to be `g_Animset` and I did not want to change all the symbols yet. * Simplified `weapon_pc.c` as we now only need the exported header * Always try to build the most up-to-date asset manager: this should avoid weird errors whenever people pull new changes As the asset manager now can accept those `config` files, now the CLI supports the following commands: * `stage extract` * `stage build` * `config extract` (NEW) * `config build` (NEW) The config structure is heavily inspired to Splat to maintain consistency and continuity.
This commit is contained in:
parent
b5429e0ae8
commit
f1faef333a
8
Makefile
8
Makefile
@ -130,6 +130,7 @@ clean:
|
||||
git clean -fdx assets/
|
||||
git clean -fdx asm/$(VERSION)/
|
||||
git clean -fdx build/$(VERSION)/
|
||||
git clean -fdx $(SRC_DIR)/weapon
|
||||
git clean -fdx config/
|
||||
git clean -fdx function_calls/
|
||||
git clean -fdx sotn_calltree.txt
|
||||
@ -328,7 +329,7 @@ $(ASM_DIR)/weapon/data/w_%.data.s: # create a fake empty file if all the data ha
|
||||
touch $@
|
||||
$(ASM_DIR)/weapon/data/w_%.sbss.s: # create a fake empty file if all the bss section has been imported
|
||||
touch $@
|
||||
$(BUILD_DIR)/weapon/w0_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/header.c.o $(BUILD_DIR)/$(ASSETS_DIR)/weapon/w_%_1.animset.o $(BUILD_DIR)/$(ASSETS_DIR)/weapon/w_%_2.animset.o $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o
|
||||
$(BUILD_DIR)/weapon/w0_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o
|
||||
$(LD) $(LD_FLAGS) --no-check-sections -o $@ \
|
||||
-Map $(BUILD_DIR)/weapon/w0_$*.map \
|
||||
-T weapon0.ld \
|
||||
@ -336,7 +337,7 @@ $(BUILD_DIR)/weapon/w0_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/header.c.o $(BUILD_
|
||||
-T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).weapon.txt \
|
||||
-T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).weapon.txt \
|
||||
$^
|
||||
$(BUILD_DIR)/weapon/w1_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/header.c.o $(BUILD_DIR)/$(ASSETS_DIR)/weapon/w_%_1.animset.o $(BUILD_DIR)/$(ASSETS_DIR)/weapon/w_%_2.animset.o $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o
|
||||
$(BUILD_DIR)/weapon/w1_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o
|
||||
$(LD) $(LD_FLAGS) --no-check-sections -o $@ \
|
||||
-Map $(BUILD_DIR)/weapon/w1_$*.map \
|
||||
-T weapon1.ld \
|
||||
@ -471,9 +472,6 @@ $(SOTNASSETS): $(GO) $(SOTNASSETS_SOURCES)
|
||||
$(BUILD_DIR)/$(ASSETS_DIR)/%.spritesheet.json.o: $(ASSETS_DIR)/%.spritesheet.json
|
||||
./tools/splat_ext/spritesheet.py encode $< $(BUILD_DIR)/$(ASSETS_DIR)/$*.s
|
||||
$(AS) $(AS_FLAGS) -o $(BUILD_DIR)/$(ASSETS_DIR)/$*.o $(BUILD_DIR)/$(ASSETS_DIR)/$*.s
|
||||
$(BUILD_DIR)/$(ASSETS_DIR)/%.animset.json.o: $(ASSETS_DIR)/%.animset.json
|
||||
./tools/splat_ext/animset.py gen-asm $< $(BUILD_DIR)/$(ASSETS_DIR)/$*.s
|
||||
$(AS) $(AS_FLAGS) -o $(BUILD_DIR)/$(ASSETS_DIR)/$*.o $(BUILD_DIR)/$(ASSETS_DIR)/$*.s
|
||||
$(BUILD_DIR)/$(ASSETS_DIR)/dra/%.json.o: $(ASSETS_DIR)/dra/%.json
|
||||
./tools/splat_ext/assets.py $< $(BUILD_DIR)/$(ASSETS_DIR)/dra/$*.s
|
||||
$(AS) $(AS_FLAGS) -o $(BUILD_DIR)/$(ASSETS_DIR)/dra/$*.o $(BUILD_DIR)/$(ASSETS_DIR)/dra/$*.s
|
||||
|
@ -20,7 +20,7 @@ extract_us: $(addprefix $(BUILD_DIR)/,$(addsuffix .ld,$(PSX_US_TARGETS)))
|
||||
make build_assets
|
||||
extract_hd: $(addprefix $(BUILD_DIR)/,$(addsuffix .ld,$(PSX_HD_TARGETS)))
|
||||
make extract_assets_hd
|
||||
make build_assets
|
||||
make build_assets_hd
|
||||
|
||||
extract_disk_us: extract_disk_psxus
|
||||
extract_disk_hd: extract_disk_pspeu
|
||||
@ -80,25 +80,31 @@ $(BUILD_DIR)/$(SRC_DIR)/main/psxsdk/libgpu/sys.c.o: $(SRC_DIR)/main/psxsdk/libgp
|
||||
$(CPP) $(CPP_FLAGS) -lang-c $< | $(SOTNSTR) | $(ICONV) | $(CC) $(CC_FLAGS) $(PSXCC_FLAGS) | $(MASPSX_21) | $(AS) $(AS_FLAGS) -o $@
|
||||
|
||||
extract_assets: $(SOTNASSETS)
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/CEN/CEN.BIN -o assets/st/cen
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/DRE/DRE.BIN -o assets/st/dre
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/NO3/NO3.BIN -o assets/st/no3
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/NP3/NP3.BIN -o assets/st/np3
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/NZ0/NZ0.BIN -o assets/st/nz0
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/ST0/ST0.BIN -o assets/st/st0
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/WRP/WRP.BIN -o assets/st/wrp
|
||||
$(SOTNASSETS) extract -stage_ovl disks/$(VERSION)/ST/RWRP/RWRP.BIN -o assets/st/rwrp
|
||||
cd tools/sotn-assets; $(GO) install
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/CEN/CEN.BIN -o assets/st/cen
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/DRE/DRE.BIN -o assets/st/dre
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/NO3/NO3.BIN -o assets/st/no3
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/NP3/NP3.BIN -o assets/st/np3
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/NZ0/NZ0.BIN -o assets/st/nz0
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/ST0/ST0.BIN -o assets/st/st0
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/WRP/WRP.BIN -o assets/st/wrp
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/$(VERSION)/ST/RWRP/RWRP.BIN -o assets/st/rwrp
|
||||
$(SOTNASSETS) config extract config/assets.us.weapon.yaml
|
||||
extract_assets_hd: $(SOTNASSETS)
|
||||
$(SOTNASSETS) extract -stage_ovl disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/wrp.bin -o assets/st/wrp
|
||||
cd tools/sotn-assets; $(GO) install
|
||||
$(SOTNASSETS) stage extract -stage_ovl disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/wrp.bin -o assets/st/wrp
|
||||
build_assets: $(SOTNASSETS)
|
||||
$(SOTNASSETS) build_all -i assets/st/cen -o src/st/cen/
|
||||
$(SOTNASSETS) build_all -i assets/st/dre -o src/st/dre/
|
||||
$(SOTNASSETS) build_all -i assets/st/no3 -o src/st/no3/
|
||||
$(SOTNASSETS) build_all -i assets/st/np3 -o src/st/np3/
|
||||
$(SOTNASSETS) build_all -i assets/st/nz0 -o src/st/nz0/
|
||||
$(SOTNASSETS) build_all -i assets/st/st0 -o src/st/st0/
|
||||
$(SOTNASSETS) build_all -i assets/st/wrp -o src/st/wrp/
|
||||
$(SOTNASSETS) build_all -i assets/st/rwrp -o src/st/rwrp/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/cen -o src/st/cen/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/dre -o src/st/dre/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/no3 -o src/st/no3/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/np3 -o src/st/np3/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/nz0 -o src/st/nz0/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/st0 -o src/st/st0/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/wrp -o src/st/wrp/
|
||||
$(SOTNASSETS) stage build_all -i assets/st/rwrp -o src/st/rwrp/
|
||||
$(SOTNASSETS) config build config/assets.$(VERSION).weapon.yaml
|
||||
build_assets_hd: $(SOTNASSETS)
|
||||
$(SOTNASSETS) stage build_all -i assets/st/wrp -o src/st/wrp/
|
||||
|
||||
$(BUILD_DIR)/assets/dra/memcard_%.png.o: assets/dra/memcard_%.png
|
||||
mkdir -p $(dir $@)
|
||||
|
359
config/assets.us.weapon.yaml
Normal file
359
config/assets.us.weapon.yaml
Normal file
@ -0,0 +1,359 @@
|
||||
files:
|
||||
- target: disks/us/BIN/WEAPON0.BIN
|
||||
asset_path: assets/weapon
|
||||
src_path: src/weapon
|
||||
segments:
|
||||
- start: 0x04000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x04040, frameset, w_000_1]
|
||||
- [0x04A44, frameset, w_000_2]
|
||||
- [0x04A44, skip]
|
||||
- start: 0x0B000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x0B040, frameset, w_001_1]
|
||||
- [0x0BA44, frameset, w_001_2]
|
||||
- [0x0BA44, skip]
|
||||
- start: 0x12000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x12040, frameset, w_002_1]
|
||||
- [0x12884, frameset, w_002_2]
|
||||
- [0x12884, skip]
|
||||
- start: 0x19000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x19040, frameset, w_003_1]
|
||||
- [0x19884, frameset, w_003_2]
|
||||
- [0x19884, skip]
|
||||
- start: 0x20000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x20040, frameset, w_004_1]
|
||||
- [0x20EAC, frameset, w_004_2]
|
||||
- [0x20EAC, skip]
|
||||
- start: 0x27000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x27040, frameset, w_005_1]
|
||||
- [0x27EAC, frameset, w_005_2]
|
||||
- [0x27EAC, skip]
|
||||
- start: 0x2E000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x2E040, frameset, w_006_1]
|
||||
- [0x2E884, frameset, w_006_2]
|
||||
- [0x2E884, skip]
|
||||
- start: 0x35000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x35040, frameset, w_007_1]
|
||||
- [0x35884, frameset, w_007_2]
|
||||
- [0x35884, skip]
|
||||
- start: 0x3C000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x3C040, frameset, w_008_1]
|
||||
- [0x3C804, frameset, w_008_2]
|
||||
- [0x3C804, skip]
|
||||
- start: 0x43000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x43040, frameset, w_009_1]
|
||||
- [0x43804, frameset, w_009_2]
|
||||
- [0x43804, skip]
|
||||
- start: 0x4A000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x4A040, frameset, w_010_1]
|
||||
- [0x4A8EC, frameset, w_010_2]
|
||||
- [0x4A8EC, skip]
|
||||
- start: 0x51000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x51040, frameset, w_011_1]
|
||||
- [0x51958, frameset, w_011_2]
|
||||
- [0x51958, skip]
|
||||
- start: 0x58000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x58040, frameset, w_012_1]
|
||||
- [0x582B0, frameset, w_012_2]
|
||||
- [0x582B0, skip]
|
||||
- start: 0x5F000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x5F040, frameset, w_013_1]
|
||||
- [0x5F2B0, frameset, w_013_2]
|
||||
- [0x5F2B0, skip]
|
||||
- start: 0x66000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x66040, frameset, w_014_1]
|
||||
- [0x662B0, frameset, w_014_2]
|
||||
- [0x662B0, skip]
|
||||
- start: 0x6D000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x6D040, frameset, w_015_1]
|
||||
- [0x6D2B0, frameset, w_015_2]
|
||||
- [0x6D478, skip]
|
||||
- start: 0x74000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x74040, frameset, w_016_1]
|
||||
- [0x742B0, frameset, w_016_2]
|
||||
- [0x742B0, skip]
|
||||
- start: 0x7B000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x7B040, frameset, w_017_1]
|
||||
- [0x7B040, frameset, w_017_2]
|
||||
- [0x7B040, skip]
|
||||
- start: 0x82000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x82040, frameset, w_018_1]
|
||||
- [0x82488, frameset, w_018_2]
|
||||
- [0x82488, skip]
|
||||
- start: 0x89000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x89040, frameset, w_019_1]
|
||||
- [0x8930C, frameset, w_019_2]
|
||||
- [0x8930C, skip]
|
||||
- start: 0x90000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x90040, frameset, w_020_1]
|
||||
- [0x90630, frameset, w_020_2]
|
||||
- [0x90630, skip]
|
||||
- start: 0x97000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x97040, frameset, w_021_1]
|
||||
- [0x97564, frameset, w_021_2]
|
||||
- [0x97564, skip]
|
||||
- start: 0x9E000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x9E040, frameset, w_022_1]
|
||||
- [0x9E540, frameset, w_022_2]
|
||||
- [0x9E540, skip]
|
||||
- start: 0xA5000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xA5040, frameset, w_023_1]
|
||||
- [0xA58A4, frameset, w_023_2]
|
||||
- [0xA58A4, skip]
|
||||
- start: 0xAC000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xAC040, frameset, w_024_1]
|
||||
- [0xAC804, frameset, w_024_2]
|
||||
- [0xAC804, skip]
|
||||
- start: 0xB3000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xB3040, frameset, w_025_1]
|
||||
- [0xB3804, frameset, w_025_2]
|
||||
- [0xB3804, skip]
|
||||
- start: 0xBA000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xBA040, frameset, w_026_1]
|
||||
- [0xBA804, frameset, w_026_2]
|
||||
- [0xBA804, skip]
|
||||
- start: 0xC1000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xC1040, frameset, w_027_1]
|
||||
- [0xC1A18, frameset, w_027_2]
|
||||
- [0xC1A18, skip]
|
||||
- start: 0xC8000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xC8040, frameset, w_028_1]
|
||||
- [0xC8804, frameset, w_028_2]
|
||||
- [0xC8804, skip]
|
||||
- start: 0xCF000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xCF040, frameset, w_029_1]
|
||||
- [0xCF884, frameset, w_029_2]
|
||||
- [0xCF884, skip]
|
||||
- start: 0xD6000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xD6040, frameset, w_030_1]
|
||||
- [0xD6040, frameset, w_030_2]
|
||||
- [0xD6040, skip]
|
||||
- start: 0xDD000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xDD040, frameset, w_031_1]
|
||||
- [0xDD704, frameset, w_031_2]
|
||||
- [0xDD704, skip]
|
||||
- start: 0xE4000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xE4040, frameset, w_032_1]
|
||||
- [0xE4704, frameset, w_032_2]
|
||||
- [0xE4704, skip]
|
||||
- start: 0xEB000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xEB040, frameset, w_033_1]
|
||||
- [0xEBA9C, frameset, w_033_2]
|
||||
- [0xEBA9C, skip]
|
||||
- start: 0xF2000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xF2040, frameset, w_034_1]
|
||||
- [0xF2784, frameset, w_034_2]
|
||||
- [0xF2784, skip]
|
||||
- start: 0xF9000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0xF9040, frameset, w_035_1]
|
||||
- [0xF9404, frameset, w_035_2]
|
||||
- [0xF9404, skip]
|
||||
- start: 0x100000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x100040, frameset, w_036_1]
|
||||
- [0x100404, frameset, w_036_2]
|
||||
- [0x100404, skip]
|
||||
- start: 0x107000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x107040, frameset, w_037_1]
|
||||
- [0x107504, frameset, w_037_2]
|
||||
- [0x107504, skip]
|
||||
- start: 0x10E000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x10E040, frameset, w_038_1]
|
||||
- [0x10EC08, frameset, w_038_2]
|
||||
- [0x10EC08, skip]
|
||||
- start: 0x115000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x115040, frameset, w_039_1]
|
||||
- [0x115C08, frameset, w_039_2]
|
||||
- [0x115C08, skip]
|
||||
- start: 0x11C000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x11C040, frameset, w_040_1]
|
||||
- [0x11C504, frameset, w_040_2]
|
||||
- [0x11C504, skip]
|
||||
- start: 0x123000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x123040, frameset, w_041_1]
|
||||
- [0x123284, frameset, w_041_2]
|
||||
- [0x123284, skip]
|
||||
- start: 0x12A000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x12A040, frameset, w_042_1]
|
||||
- [0x12A3E4, frameset, w_042_2]
|
||||
- [0x12A3E4, skip]
|
||||
- start: 0x131000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x131040, frameset, w_043_1]
|
||||
- [0x131A44, frameset, w_043_2]
|
||||
- [0x131A44, skip]
|
||||
- start: 0x138000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x138040, frameset, w_044_1]
|
||||
- [0x138040, frameset, w_044_2]
|
||||
- [0x138040, skip]
|
||||
- start: 0x13F000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x13F040, frameset, w_045_1]
|
||||
- [0x13F330, frameset, w_045_2]
|
||||
- [0x13F330, skip]
|
||||
- start: 0x146000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x146040, frameset, w_046_1]
|
||||
- [0x1462B0, frameset, w_046_2]
|
||||
- [0x1462B0, skip]
|
||||
- start: 0x14D000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x14D040, frameset, w_047_1]
|
||||
- [0x14D0D4, frameset, w_047_2]
|
||||
- [0x14D228, skip]
|
||||
- start: 0x154000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x154040, frameset, w_048_1]
|
||||
- [0x154A44, frameset, w_048_2]
|
||||
- [0x154A44, skip]
|
||||
- start: 0x15B000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x15B040, frameset, w_049_1]
|
||||
- [0x15BA44, frameset, w_049_2]
|
||||
- [0x15BC00, skip]
|
||||
- start: 0x162000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x162040, frameset, w_050_1]
|
||||
- [0x162A44, frameset, w_050_2]
|
||||
- [0x162A44, skip]
|
||||
- start: 0x169000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x169040, frameset, w_051_1]
|
||||
- [0x169950, frameset, w_051_2]
|
||||
- [0x169950, skip]
|
||||
- start: 0x170000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x170040, frameset, w_052_1]
|
||||
- [0x170808, frameset, w_052_2]
|
||||
- [0x170808, skip]
|
||||
- start: 0x177000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x177040, frameset, w_053_1]
|
||||
- [0x177A44, frameset, w_053_2]
|
||||
- [0x177A44, skip]
|
||||
- start: 0x17E000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x17E040, frameset, w_054_1]
|
||||
- [0x17EA44, frameset, w_054_2]
|
||||
- [0x17EA44, skip]
|
||||
- start: 0x185000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x185040, frameset, w_055_1]
|
||||
- [0x185A44, frameset, w_055_2]
|
||||
- [0x185A44, skip]
|
||||
- start: 0x18C000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x18C040, frameset, w_056_1]
|
||||
- [0x18CA44, frameset, w_056_2]
|
||||
- [0x18CA44, skip]
|
||||
- start: 0x193000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x193040, frameset, w_057_1]
|
||||
- [0x193A44, frameset, w_057_2]
|
||||
- [0x193A44, skip]
|
||||
- start: 0x19A000
|
||||
vram: 0x8017A000
|
||||
assets:
|
||||
- [0x19A040, frameset, w_058_1]
|
||||
- [0x19A808, frameset, w_058_2]
|
||||
- [0x19A808, skip]
|
1
go.work.sum
Normal file
1
go.work.sum
Normal file
@ -0,0 +1 @@
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
@ -46,787 +46,35 @@ Weapon D_8017D000 = {
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
};
|
||||
static Weapon dummy_header = {
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
};
|
||||
|
||||
void w_000_EntityWeaponAttack(Entity* self);
|
||||
s32 w_000_func_ptr_80170004(Entity* self);
|
||||
void w_000_func_ptr_80170008(Entity* self);
|
||||
void w_000_func_ptr_8017000C(Entity* self);
|
||||
s32 w_000_func_ptr_80170010(Entity* self);
|
||||
s32 w_000_func_ptr_80170014(Entity* self);
|
||||
int w_000_GetWeaponId(void);
|
||||
void w_000_LoadWeaponPalette(s32 clutIndex);
|
||||
void w_000_EntityWeaponShieldSpell(Entity* self);
|
||||
void w_000_func_ptr_80170024(Entity* self);
|
||||
void w_000_func_ptr_80170028(Entity* self);
|
||||
|
||||
Weapon g_Weapons[] = {
|
||||
{
|
||||
w_000_EntityWeaponAttack,
|
||||
w_000_func_ptr_80170004,
|
||||
w_000_func_ptr_80170008,
|
||||
w_000_func_ptr_8017000C,
|
||||
w_000_func_ptr_80170010,
|
||||
w_000_func_ptr_80170014,
|
||||
w_000_GetWeaponId,
|
||||
w_000_LoadWeaponPalette,
|
||||
w_000_EntityWeaponShieldSpell,
|
||||
w_000_func_ptr_80170024,
|
||||
w_000_func_ptr_80170028,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
},
|
||||
{
|
||||
EntityWeaponAttackDummy,
|
||||
func_ptr_80170004Dummy,
|
||||
func_ptr_80170008Dummy,
|
||||
func_ptr_8017000CDummy,
|
||||
func_ptr_80170010Dummy,
|
||||
func_ptr_80170014Dummy,
|
||||
GetWeaponIdDummy,
|
||||
LoadWeaponPaletteDummy,
|
||||
EntityWeaponShieldSpellDummy,
|
||||
func_ptr_80170024Dummy,
|
||||
func_ptr_80170028Dummy,
|
||||
}};
|
||||
extern Weapon w_000_header;
|
||||
Weapon* g_Weapons[] = {
|
||||
&w_000_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
&dummy_header, &dummy_header, &dummy_header, &dummy_header,
|
||||
};
|
||||
|
||||
SpriteParts* g_Animset[1];
|
||||
|
||||
@ -863,7 +111,7 @@ int readSubsetToBuf(char* filename, char* dest, size_t start, size_t size) {
|
||||
}
|
||||
|
||||
void HandleWeapon0Prg(int fileId) {
|
||||
memcpy(&D_8017A000, &g_Weapons[fileId], sizeof(Weapon));
|
||||
memcpy(&D_8017A000, g_Weapons[fileId], sizeof(Weapon));
|
||||
// todo animsets
|
||||
}
|
||||
|
||||
|
2
src/weapon/.gitignore
vendored
Normal file
2
src/weapon/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
w_*_1.h
|
||||
w_*_2.h
|
@ -1,11 +0,0 @@
|
||||
#include <weapon.h>
|
||||
#include "weapon_private.h"
|
||||
|
||||
Weapon g_Weapon = {
|
||||
EntityWeaponAttack, func_ptr_80170004, func_ptr_80170008,
|
||||
func_ptr_8017000C, func_ptr_80170010, func_ptr_80170014,
|
||||
GetWeaponId, LoadWeaponPalette, EntityWeaponShieldSpell,
|
||||
func_ptr_80170024, func_ptr_80170028, WeaponUnused2C,
|
||||
WeaponUnused30, WeaponUnused34, WeaponUnused38,
|
||||
WeaponUnused3C,
|
||||
};
|
@ -2,7 +2,7 @@
|
||||
|
||||
#include "../destroy_entity.h"
|
||||
|
||||
void OVL_EXPORT(LoadWeaponPalette)(s32 clutIndex) {
|
||||
static void LoadWeaponPalette(s32 clutIndex) {
|
||||
RECT dstRect;
|
||||
u16* src;
|
||||
u16* dst;
|
||||
@ -42,7 +42,7 @@ void OVL_EXPORT(LoadWeaponPalette)(s32 clutIndex) {
|
||||
LoadImage(&dstRect, &D_8006EDCC);
|
||||
}
|
||||
|
||||
void SetSpriteBank1(SpriteParts* animset) {
|
||||
static void SetSpriteBank1(SpriteParts* animset) {
|
||||
SpritePart** spriteBankDst = g_api.o.spriteBanks;
|
||||
|
||||
spriteBankDst += 0x10;
|
||||
@ -52,7 +52,7 @@ void SetSpriteBank1(SpriteParts* animset) {
|
||||
*spriteBankDst = animset;
|
||||
}
|
||||
|
||||
void SetSpriteBank2(SpriteParts* animset) {
|
||||
static void SetSpriteBank2(SpriteParts* animset) {
|
||||
SpritePart** spriteBankDst = g_api.o.spriteBanks;
|
||||
|
||||
spriteBankDst += 0x11;
|
||||
@ -63,7 +63,7 @@ void SetSpriteBank2(SpriteParts* animset) {
|
||||
}
|
||||
|
||||
#if !defined(W_029) && !defined(W_030) && !defined(W_044) && !defined(W_051)
|
||||
void SetWeaponAnimation(u8 anim) {
|
||||
static void SetWeaponAnimation(u8 anim) {
|
||||
g_CurrentEntity->ext.weapon.anim = anim;
|
||||
g_CurrentEntity->animFrameDuration = 0;
|
||||
g_CurrentEntity->animFrameIdx = 0;
|
||||
@ -108,7 +108,7 @@ static void SetSpeedX(s32 speed) {
|
||||
#endif
|
||||
|
||||
#if !defined(W_030) && !defined(W_051)
|
||||
void DestroyEntityWeapon(bool arg0) {
|
||||
static void DestroyEntityWeapon(bool arg0) {
|
||||
if (arg0 == false) {
|
||||
DestroyEntity(&g_Entities[E_WEAPON]);
|
||||
}
|
||||
@ -119,7 +119,7 @@ void DestroyEntityWeapon(bool arg0) {
|
||||
}
|
||||
#endif
|
||||
|
||||
void SetWeaponProperties(Entity* self, s32 kind) {
|
||||
static void SetWeaponProperties(Entity* self, s32 kind) {
|
||||
Equipment equip;
|
||||
|
||||
g_api.GetEquipProperties(g_HandId, &equip, self->ext.weapon.equipId);
|
||||
|
@ -5,10 +5,13 @@
|
||||
// Mourneblade, Badelaire, Unknown#169
|
||||
|
||||
#include "weapon_private.h"
|
||||
#include "shared.h"
|
||||
#include "w_000_1.h"
|
||||
#include "w_000_2.h"
|
||||
#define g_Animset w_000_1
|
||||
#define g_Animset2 w_000_2
|
||||
#include "sfx.h"
|
||||
|
||||
u16 g_Clut0[] = {
|
||||
static u16 g_Clut0[] = {
|
||||
0x0000, 0x8000, 0xA821, 0x9DC0, 0xA821, 0xA821, 0xA821, 0xA821, // 0
|
||||
0x843F, 0xB0E4, 0x9CA4, 0x0000, 0x0000, 0x0000, 0xD294, 0xF2F3,
|
||||
0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0xED8C, 0xED8C, 0xED8C, // 1
|
||||
@ -25,7 +28,7 @@ u16 g_Clut0[] = {
|
||||
0x843F, 0xB9C0, 0x801F, 0x0000, 0x0000, 0x0000, 0xD294, 0xEA90,
|
||||
};
|
||||
|
||||
u16 g_Clut1[] = {
|
||||
static u16 g_Clut1[] = {
|
||||
0x0000, 0x8007, 0xAD6B, 0xAD6B, 0xAD6B, 0xAD6B, 0xAD6B, 0xAD6B, // 0
|
||||
0x843F, 0xB148, 0xA928, 0x0000, 0x0000, 0x0000, 0xD294, 0xF39C,
|
||||
0x0000, 0x8007, 0x0000, 0x0000, 0x0000, 0xE717, 0xE717, 0xE717, // 1
|
||||
@ -42,7 +45,7 @@ u16 g_Clut1[] = {
|
||||
0x843F, 0xB9C0, 0x801F, 0x0000, 0x0000, 0x0000, 0xD294, 0xEB5A,
|
||||
};
|
||||
|
||||
u16 g_Clut2[] = {
|
||||
static u16 g_Clut2[] = {
|
||||
0x0000, 0x8000, 0x800F, 0x800F, 0x800F, 0x800F, 0x800F, 0x800F, // 0
|
||||
0x83E0, 0x800F, 0x8CB4, 0x0000, 0x0000, 0x0000, 0xD294, 0xCF1C,
|
||||
0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0xA818, 0xB0B8, 0xAC38, // 1
|
||||
@ -59,7 +62,7 @@ u16 g_Clut2[] = {
|
||||
0x83E0, 0xB9C0, 0x801F, 0x0000, 0x0000, 0x0000, 0xD294, 0x9E1C,
|
||||
};
|
||||
|
||||
u16 g_Clut3[] = {
|
||||
static u16 g_Clut3[] = {
|
||||
0x0000, 0x8000, 0x8900, 0x8900, 0x8900, 0x8900, 0x8902, 0x8904, // 0
|
||||
0x843F, 0x9541, 0x95E1, 0x0000, 0x0000, 0x0000, 0xD294, 0xF2D1,
|
||||
0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0xA208, 0xA208, 0xA208, // 1
|
||||
@ -76,7 +79,7 @@ u16 g_Clut3[] = {
|
||||
0x843F, 0xB9C0, 0x801F, 0x0000, 0x0000, 0x0000, 0xD294, 0xB792,
|
||||
};
|
||||
|
||||
u16 g_Clut4[] = {
|
||||
static u16 g_Clut4[] = {
|
||||
0x0000, 0x8000, 0x817F, 0x81B6, 0x81DF, 0x827F, 0xA2FE, 0xD77F, // 0
|
||||
0x843F, 0x819E, 0x9A1F, 0x0000, 0x0000, 0x0000, 0xD294, 0xF39C,
|
||||
0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0xB77D, 0xB77D, 0xB77D, // 1
|
||||
@ -93,69 +96,69 @@ u16 g_Clut4[] = {
|
||||
0x843F, 0xB9C0, 0x801F, 0x0000, 0x0000, 0x0000, 0xD294, 0xF39C,
|
||||
};
|
||||
|
||||
u8 g_Anim0Frame0[] = {
|
||||
static u8 g_Anim0Frame0[] = {
|
||||
0x01, 0x02, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x05, 0x04,
|
||||
0x06, 0x06, 0x07, 0x06, 0x08, 0x06, 0x09, 0x06, 0x0A, 0x08,
|
||||
0x0B, 0x08, 0x0C, 0x08, 0x0D, 0x08, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
u8 g_Anim0Frame1[] = {
|
||||
static u8 g_Anim0Frame1[] = {
|
||||
0x0E, 0x0A, 0x0F, 0x0C, 0x10, 0x0C, 0x11, 0x0C, 0x12, 0x0C,
|
||||
0x13, 0x0E, 0x14, 0x0E, 0x15, 0x0E, 0x16, 0x0E, 0x1F, 0x08,
|
||||
0x20, 0x08, 0x21, 0x08, 0x22, 0x08, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
u8 g_Anim0Frame2[] = {
|
||||
static u8 g_Anim0Frame2[] = {
|
||||
0x0E, 0x0A, 0x17, 0x10, 0x18, 0x12, 0x19, 0x10, 0x1A, 0x12,
|
||||
0x1B, 0x14, 0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14, 0x1F, 0x08,
|
||||
0x20, 0x08, 0x21, 0x08, 0x22, 0x08, 0xFF, 0xFF};
|
||||
|
||||
u8 g_Anim0Frame3[] = {
|
||||
static u8 g_Anim0Frame3[] = {
|
||||
0x23, 0x16, 0x24, 0x18, 0x25, 0x18, 0x26, 0x18, 0x27, 0x18, 0x28, 0x1A,
|
||||
0x29, 0x1A, 0x2A, 0x1A, 0x2B, 0x1A, 0x2C, 0x08, 0xFF, 0xFF, 0x00, 0x00};
|
||||
|
||||
u8 g_Anim0Frame4[] = {
|
||||
static u8 g_Anim0Frame4[] = {
|
||||
0x2D, 0x1C, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x20,
|
||||
0x33, 0x20, 0x34, 0x20, 0x35, 0x20, 0x3E, 0x08, 0xFF, 0xFF, 0x00, 0x00};
|
||||
|
||||
u8 g_Anim0Frame5[] = {
|
||||
static u8 g_Anim0Frame5[] = {
|
||||
0x2D, 0x1C, 0x36, 0x22, 0x37, 0x22, 0x38, 0x22, 0x39, 0x22, 0x3A, 0x24,
|
||||
0x3B, 0x24, 0x3C, 0x24, 0x3D, 0x24, 0x3E, 0x08, 0xFF, 0xFF, 0x00, 0x00};
|
||||
|
||||
u8 g_Anim1Frame0[] = {
|
||||
static u8 g_Anim1Frame0[] = {
|
||||
0x01, 0x02, 0x3F, 0x26, 0x40, 0x26, 0x41, 0x26, 0x06, 0x06,
|
||||
0x07, 0x06, 0x08, 0x06, 0x09, 0x06, 0x0A, 0x08, 0x0B, 0x08,
|
||||
0x0C, 0x08, 0x0D, 0x08, 0xFF, 0xFF, 0x00, 0x00,
|
||||
};
|
||||
|
||||
u8 g_Anim1Frame1[] = {
|
||||
static u8 g_Anim1Frame1[] = {
|
||||
0x0E, 0x0A, 0x42, 0x28, 0x43, 0x28, 0x44, 0x28, 0x13, 0x0E,
|
||||
0x14, 0x0E, 0x15, 0x0E, 0x16, 0x0E, 0x1F, 0x08, 0x20, 0x08,
|
||||
0x21, 0x08, 0x22, 0x08, 0xFF, 0xFF, 0x00, 0x00,
|
||||
};
|
||||
|
||||
u8 g_Anim1Frame2[] = {
|
||||
static u8 g_Anim1Frame2[] = {
|
||||
0x0E, 0x0A, 0x45, 0x2A, 0x46, 0x2A, 0x47, 0x2A, 0x1B, 0x14,
|
||||
0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14, 0x1F, 0x08, 0x20, 0x08,
|
||||
0x21, 0x08, 0x22, 0x08, 0xFF, 0xFF, 0x00, 0x00,
|
||||
};
|
||||
|
||||
u8 g_Anim1Frame3[] = {
|
||||
static u8 g_Anim1Frame3[] = {
|
||||
0x23, 0x16, 0x48, 0x2C, 0x49, 0x2C, 0x4A, 0x2C, 0x28, 0x1A,
|
||||
0x29, 0x1A, 0x2A, 0x1A, 0x2B, 0x1A, 0x2C, 0x08, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
u8 g_Anim1Frame4[] = {
|
||||
static u8 g_Anim1Frame4[] = {
|
||||
0x2D, 0x1C, 0x4B, 0x2E, 0x4C, 0x2E, 0x4D, 0x2E, 0x32, 0x20,
|
||||
0x33, 0x20, 0x34, 0x20, 0x35, 0x20, 0x3E, 0x08, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
u8 g_Anim1Frame5[] = {
|
||||
static u8 g_Anim1Frame5[] = {
|
||||
0x2D, 0x1C, 0x4E, 0x30, 0x4F, 0x30, 0x50, 0x30, 0x3A, 0x24,
|
||||
0x3B, 0x24, 0x3C, 0x24, 0x3D, 0x24, 0x3E, 0x08, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
s8 g_Hitboxes[][4] = {
|
||||
static s8 g_Hitboxes[][4] = {
|
||||
{0, 0, 0, 0}, {4, -23, 8, 5}, {30, -17, 35, 8}, {30, -14, 18, 4},
|
||||
{-32, -31, 0, 0}, {-4, -6, 8, 5}, {22, 0, 35, 8}, {22, 3, 18, 4},
|
||||
{29, 22, 13, 11}, {12, 7, 19, 12}, {14, 14, 18, 4}, {1, -25, 8, 5},
|
||||
@ -165,17 +168,17 @@ s8 g_Hitboxes[][4] = {
|
||||
{22, 3, 26, 10},
|
||||
};
|
||||
|
||||
u8* g_Anim0[] = {
|
||||
static u8* g_Anim0[] = {
|
||||
g_Anim0Frame0, g_Anim0Frame0, g_Anim0Frame1, g_Anim0Frame2,
|
||||
g_Anim0Frame3, g_Anim0Frame4, g_Anim0Frame5,
|
||||
};
|
||||
|
||||
u8* g_Anim1[] = {
|
||||
static u8* g_Anim1[] = {
|
||||
g_Anim1Frame0, g_Anim1Frame0, g_Anim1Frame1, g_Anim1Frame2,
|
||||
g_Anim1Frame3, g_Anim1Frame4, g_Anim1Frame5,
|
||||
};
|
||||
|
||||
WeaponAnimation g_SoundEvents[] = {
|
||||
static WeaponAnimation g_SoundEvents[] = {
|
||||
{g_Anim1, g_Hitboxes, 0, SFX_WEAPON_SWISH_B, 0x41, 4},
|
||||
{g_Anim0, g_Hitboxes, 0, SFX_WEAPON_SWISH_B, 0x41, 4},
|
||||
{g_Anim0, g_Hitboxes, 0, SFX_WEAPON_SWISH_C, 0x41, 4},
|
||||
@ -183,13 +186,15 @@ WeaponAnimation g_SoundEvents[] = {
|
||||
{g_Anim0, g_Hitboxes, 0, SFX_WEAPON_SWISH_C, 0x41, 4},
|
||||
};
|
||||
|
||||
u16* g_WeaponCluts[] = {
|
||||
static u16* g_WeaponCluts[] = {
|
||||
g_Clut1, g_Clut0, g_Clut2, g_Clut3, g_Clut4,
|
||||
};
|
||||
|
||||
s32 g_HandId = HAND_ID;
|
||||
static s32 g_HandId = HAND_ID;
|
||||
|
||||
void OVL_EXPORT(EntityWeaponAttack)(Entity* self) {
|
||||
#include "shared.h"
|
||||
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s32 mask;
|
||||
s16 subType;
|
||||
@ -242,30 +247,30 @@ void OVL_EXPORT(EntityWeaponAttack)(Entity* self) {
|
||||
self->rotPivotY = PLAYER.rotPivotY;
|
||||
}
|
||||
|
||||
s32 OVL_EXPORT(func_ptr_80170004)(Entity* self) {}
|
||||
static s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void OVL_EXPORT(func_ptr_80170008)(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void OVL_EXPORT(func_ptr_8017000C)(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 OVL_EXPORT(func_ptr_80170010)(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 OVL_EXPORT(func_ptr_80170014)(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int OVL_EXPORT(GetWeaponId)(void) { return 0; }
|
||||
static int GetWeaponId(void) { return 0; }
|
||||
|
||||
void OVL_EXPORT(EntityWeaponShieldSpell)(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void OVL_EXPORT(func_ptr_80170024)(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void OVL_EXPORT(func_ptr_80170028)(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -2,7 +2,13 @@
|
||||
// Knuckle duster, Jewel knuckles, Iron Fist, Fist of Tulkas, Unknown#186,
|
||||
// Unknown#187, Unknown#188
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_001_1.h"
|
||||
#include "w_001_2.h"
|
||||
#define g_Animset w_001_1
|
||||
#define g_Animset2 w_001_2
|
||||
#include "sfx.h"
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_001", EntityWeaponAttack);
|
||||
@ -11,7 +17,7 @@ INCLUDE_ASM("weapon/nonmatchings/w_001", func_ptr_80170004);
|
||||
|
||||
extern AnimationFrame D_B000_8017AFC8[];
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
switch (self->step) {
|
||||
case 0:
|
||||
self->flags = FLAG_UNK_08000000 | FLAG_UNK_100000;
|
||||
@ -57,26 +63,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 1; }
|
||||
static int GetWeaponId(void) { return 1; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #2. Used by weapons:
|
||||
// Mace
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_002_1.h"
|
||||
#include "w_002_2.h"
|
||||
#define g_Animset w_002_1
|
||||
#define g_Animset2 w_002_2
|
||||
|
||||
extern WeaponAnimation D_12000_8017ABC4[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -57,28 +63,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 2; }
|
||||
static int GetWeaponId(void) { return 2; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #3. Used by weapons:
|
||||
// Morningstar
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_003_1.h"
|
||||
#include "w_003_2.h"
|
||||
#define g_Animset w_003_1
|
||||
#define g_Animset2 w_003_2
|
||||
|
||||
extern WeaponAnimation D_19000_8017AC28[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -59,28 +65,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 3; }
|
||||
static int GetWeaponId(void) { return 3; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,12 +1,18 @@
|
||||
// Weapon ID #4. Used by weapons:
|
||||
// Holy rod, Unknown#170
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_004_1.h"
|
||||
#include "w_004_2.h"
|
||||
#define g_Animset w_004_1
|
||||
#define g_Animset2 w_004_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern WeaponAnimation D_20000_8017B2F4[]; // g_SoundEvents
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s16 subType;
|
||||
|
||||
@ -60,28 +66,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 4; }
|
||||
static int GetWeaponId(void) { return 4; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #5. Used by weapons:
|
||||
// Star flail, Unknown#171
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_005_1.h"
|
||||
#include "w_005_2.h"
|
||||
#define g_Animset w_005_1
|
||||
#define g_Animset2 w_005_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_005", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 5; }
|
||||
static int GetWeaponId(void) { return 5; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,10 +1,16 @@
|
||||
// Weapon ID #6. Used by weapons:
|
||||
// Moon rod, Unknown#172
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_006_1.h"
|
||||
#include "w_006_2.h"
|
||||
#define g_Animset w_006_1
|
||||
#define g_Animset2 w_006_2
|
||||
|
||||
extern WeaponAnimation D_2E000_8017ABC4[];
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -148,26 +154,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 6; }
|
||||
static int GetWeaponId(void) { return 6; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #7. Used by weapons:
|
||||
// Shield rod, Unknown#173
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_007_1.h"
|
||||
#include "w_007_2.h"
|
||||
#define g_Animset w_007_1
|
||||
#define g_Animset2 w_007_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_007", EntityWeaponAttack);
|
||||
|
||||
@ -57,7 +63,7 @@ s32 func_35000_8017B604(Primitive* prim, s32 x, s32 y) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
Primitive* prim;
|
||||
s32 velocityX;
|
||||
s32 range;
|
||||
@ -98,26 +104,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
DestroyEntity(self);
|
||||
}
|
||||
}
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 7; }
|
||||
static int GetWeaponId(void) { return 7; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,13 +1,19 @@
|
||||
// Weapon ID #8. Used by weapons:
|
||||
// Leather shield, Unknown#203
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_008_1.h"
|
||||
#include "w_008_2.h"
|
||||
#define g_Animset w_008_1
|
||||
#define g_Animset2 w_008_2
|
||||
|
||||
extern SpriteParts D_3C000_8017A040[];
|
||||
extern s8 D_3C000_8017A9F8;
|
||||
extern AnimationFrame* D_3C000_8017AA40;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -143,28 +149,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 8; }
|
||||
static int GetWeaponId(void) { return 8; }
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_008", EntityWeaponShieldSpell);
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #9. Used by weapons:
|
||||
// Knight shield, Unknown#204
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_009_1.h"
|
||||
#include "w_009_2.h"
|
||||
#define g_Animset w_009_1
|
||||
#define g_Animset2 w_009_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -9,7 +15,7 @@ extern s8 D_43000_8017A9F8;
|
||||
extern AnimationFrame* D_43000_8017AA40;
|
||||
extern s32 D_43000_8017AA78[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -145,15 +151,15 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 9; }
|
||||
static int GetWeaponId(void) { return 9; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
s16 back;
|
||||
@ -423,16 +429,16 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #10. Used by weapons:
|
||||
// Iron shield, Unknown#205
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_010_1.h"
|
||||
#include "w_010_2.h"
|
||||
#define g_Animset w_010_1
|
||||
#define g_Animset2 w_010_2
|
||||
#include "items.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -13,7 +19,7 @@ extern s16 D_4A000_8017ABDC[];
|
||||
|
||||
extern s32 D_4A000_8017CC1C; // g_DebugWaitInfoTimer
|
||||
|
||||
void DebugShowWaitInfo(const char* msg) {
|
||||
static void DebugShowWaitInfo(const char* msg) {
|
||||
g_CurrentBuffer = g_CurrentBuffer->next;
|
||||
FntPrint(msg);
|
||||
if (D_4A000_8017CC1C++ & 4) {
|
||||
@ -26,14 +32,14 @@ void DebugShowWaitInfo(const char* msg) {
|
||||
FntFlush(-1);
|
||||
}
|
||||
|
||||
void DebugInputWait(const char* msg) {
|
||||
static void DebugInputWait(const char* msg) {
|
||||
while (PadRead(0))
|
||||
DebugShowWaitInfo(msg);
|
||||
while (!PadRead(0))
|
||||
DebugShowWaitInfo(msg);
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -205,15 +211,15 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 10; }
|
||||
static int GetWeaponId(void) { return 10; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
Entity* unusedEnt;
|
||||
@ -652,14 +658,14 @@ void func_ptr_80170024(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,19 +1,24 @@
|
||||
// Weapon ID #11. Used by weapons:
|
||||
// AxeLord shield, Unknown#206
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_011_1.h"
|
||||
#include "w_011_2.h"
|
||||
#define g_Animset w_011_1
|
||||
#define g_Animset2 w_011_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_51000_8017A040[];
|
||||
extern s8 D_51000_8017AB4C;
|
||||
extern AnimationFrame* D_51000_8017AB94;
|
||||
|
||||
extern AnimationFrame D_51000_8017ABCC[];
|
||||
extern AnimationFrame D_51000_8017ABE8[];
|
||||
|
||||
extern s32 D_51000_8017ABF4[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -149,15 +154,15 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 11; }
|
||||
static int GetWeaponId(void) { return 11; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
Primitive* prim;
|
||||
@ -420,7 +425,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
Collider collider;
|
||||
Entity* unusedEnt;
|
||||
|
||||
@ -630,14 +635,15 @@ void func_ptr_80170024(Entity* self) {
|
||||
}
|
||||
self->ext.timer.t++;
|
||||
}
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,13 +1,19 @@
|
||||
// Weapon ID #12. Used by weapons:
|
||||
// Chakram, Vorpal blade, Crissaegrim
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_012_1.h"
|
||||
#include "w_012_2.h"
|
||||
#define g_Animset w_012_1
|
||||
#define g_Animset2 w_012_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_012", EntityWeaponAttack);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_012", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
if (self->step == 0) {
|
||||
if (self->ext.weapon.parent->entityId == 0) {
|
||||
DestroyEntity(self);
|
||||
@ -32,26 +38,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
DestroyEntity(self);
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 12; }
|
||||
static int GetWeaponId(void) { return 12; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -7,7 +7,13 @@
|
||||
// the entities. They interact weirdly and seem to not line up.
|
||||
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_013_1.h"
|
||||
#include "w_013_2.h"
|
||||
#define g_Animset w_013_1
|
||||
#define g_Animset2 w_013_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_5F000_8017A040[];
|
||||
@ -62,7 +68,7 @@ s32 func_5F000_8017A9CC(Primitive* prim, s32 x, s32 y) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
Entity* unused;
|
||||
s16 var_s1;
|
||||
|
||||
@ -232,7 +238,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
DestroyEntity(self);
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
Entity* ents2;
|
||||
Primitive* prim;
|
||||
s16 angle;
|
||||
@ -411,7 +417,7 @@ void func_ptr_80170008(Entity* self) {
|
||||
|
||||
// Pay attention to unk80, unk8A, and childPalette. These all seem to be
|
||||
// special for Heaven Sword and we should probably have it as a special weapon.
|
||||
void func_ptr_8017000C(Entity* self) {
|
||||
static void func_ptr_8017000C(Entity* self) {
|
||||
s16 angle;
|
||||
|
||||
if (self->ext.weapon.parent->entityId == 0) {
|
||||
@ -473,24 +479,24 @@ void func_ptr_8017000C(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 13; }
|
||||
static int GetWeaponId(void) { return 13; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #14. Used by weapons:
|
||||
// Runesword
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_014_1.h"
|
||||
#include "w_014_2.h"
|
||||
#define g_Animset w_014_1
|
||||
#define g_Animset2 w_014_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_014", EntityWeaponAttack);
|
||||
|
||||
@ -55,28 +61,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
self->posY.i.hi = baseY + self->ext.weapon.parent->posY.i.hi;
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 14; }
|
||||
static int GetWeaponId(void) { return 14; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #15. Used by weapons:
|
||||
// Shuriken, Cross shuriken, Buffalo star, Flame star, TNT
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_015_1.h"
|
||||
#include "w_015_2.h"
|
||||
#define g_Animset w_015_1
|
||||
#define g_Animset2 w_015_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_015", EntityWeaponAttack);
|
||||
|
||||
@ -32,7 +38,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
extern AnimationFrame D_6D000_8017A6C0[];
|
||||
extern s32 D_6D000_8017BFC8;
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
Entity* factory;
|
||||
|
||||
if (self->step == 0) {
|
||||
@ -77,7 +83,7 @@ INCLUDE_ASM("weapon/nonmatchings/w_015", func_ptr_80170010);
|
||||
extern SpriteParts D_6D000_8017A2B0[];
|
||||
extern AnimationFrame D_6D000_8017A770[];
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {
|
||||
static s32 func_ptr_80170014(Entity* self) {
|
||||
s16 angle;
|
||||
|
||||
if (self->step == 0) {
|
||||
@ -122,20 +128,20 @@ s32 func_ptr_80170014(Entity* self) {
|
||||
self->velocityY += self->ext.weapon.accelerationY;
|
||||
}
|
||||
|
||||
int GetWeaponId(void) { return 15; }
|
||||
static int GetWeaponId(void) { return 15; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,13 +1,19 @@
|
||||
// Weapon ID #16. Used by weapons:
|
||||
// Bwaka knife, Boomerang, Javelin, Fire boomerang, Iron ball
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_016_1.h"
|
||||
#include "w_016_2.h"
|
||||
#define g_Animset w_016_1
|
||||
#define g_Animset2 w_016_2
|
||||
#include "sfx.h"
|
||||
|
||||
// Weapon 16
|
||||
extern SpriteParts D_74000_8017A040[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
FakePrim* fakePrim;
|
||||
s16 angle;
|
||||
u16 temp_a0;
|
||||
@ -129,7 +135,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_016", func_ptr_80170008);
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {
|
||||
static void func_ptr_8017000C(Entity* self) {
|
||||
s16 temp_a0;
|
||||
|
||||
switch (self->step) {
|
||||
@ -218,7 +224,7 @@ s32 func_ptr_80170010(Entity* self) {
|
||||
|
||||
// Tracing function calls in emulator indicates that this function manages
|
||||
// the physics for the Iron Ball item.
|
||||
s32 func_ptr_80170014(Entity* self) {
|
||||
static s32 func_ptr_80170014(Entity* self) {
|
||||
Collider collider;
|
||||
s16 collX;
|
||||
s16 collY;
|
||||
@ -410,20 +416,20 @@ s32 func_ptr_80170014(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
int GetWeaponId(void) { return 16; }
|
||||
static int GetWeaponId(void) { return 16; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #17. Used by weapons:
|
||||
// Pentagram, Bat Pentagram
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_017_1.h"
|
||||
#include "w_017_2.h"
|
||||
#define g_Animset w_017_1
|
||||
#define g_Animset2 w_017_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_017", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 17; }
|
||||
static int GetWeaponId(void) { return 17; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,12 +1,18 @@
|
||||
// Weapon ID #18. Used by weapons:
|
||||
// Power of Sire
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_018_1.h"
|
||||
#include "w_018_2.h"
|
||||
#define g_Animset w_018_1
|
||||
#define g_Animset2 w_018_2
|
||||
|
||||
extern const char D_82000_8017A73C[]; // "\no\n"
|
||||
extern s32 D_82000_8017B1B4; // g_DebugWaitInfoTimer
|
||||
|
||||
void DebugShowWaitInfo(const char* msg) {
|
||||
static void DebugShowWaitInfo(const char* msg) {
|
||||
g_CurrentBuffer = g_CurrentBuffer->next;
|
||||
FntPrint(msg);
|
||||
if (D_82000_8017B1B4++ & 4) {
|
||||
@ -19,7 +25,7 @@ void DebugShowWaitInfo(const char* msg) {
|
||||
FntFlush(-1);
|
||||
}
|
||||
|
||||
void DebugInputWait(const char* msg) {
|
||||
static void DebugInputWait(const char* msg) {
|
||||
while (PadRead(0))
|
||||
DebugShowWaitInfo(msg);
|
||||
while (!PadRead(0))
|
||||
@ -93,28 +99,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 18; }
|
||||
static int GetWeaponId(void) { return 18; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #19. Used by weapons:
|
||||
// Neutron bomb
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_019_1.h"
|
||||
#include "w_019_2.h"
|
||||
#define g_Animset w_019_1
|
||||
#define g_Animset2 w_019_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_019", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 19; }
|
||||
static int GetWeaponId(void) { return 19; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #20. Used by weapons:
|
||||
// Karma Coin
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_020_1.h"
|
||||
#include "w_020_2.h"
|
||||
#define g_Animset w_020_1
|
||||
#define g_Animset2 w_020_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_90000_8017A040[];
|
||||
@ -19,7 +25,7 @@ extern s32 D_90000_8017AADC[];
|
||||
extern s32 D_90000_8017AB44[];
|
||||
extern s32 D_90000_8017C238;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
Collider sp10;
|
||||
Entity* child;
|
||||
Primitive* prim;
|
||||
@ -423,7 +429,7 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
if (self->ext.weapon.parent->entityId == 0) {
|
||||
DestroyEntity(self);
|
||||
return;
|
||||
@ -461,26 +467,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
self->posY.val += self->velocityY;
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 20; }
|
||||
static int GetWeaponId(void) { return 20; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -6,7 +6,13 @@
|
||||
// tea, Green tea, Natou, Ramen, Miso soup, Sushi, Pork bun, Red bean bun,
|
||||
// Chinese bun, Dim Sum set, Pot roast, Sirloin, Turkey, Meal ticket
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_021_1.h"
|
||||
#include "w_021_2.h"
|
||||
#define g_Animset w_021_1
|
||||
#define g_Animset2 w_021_2
|
||||
|
||||
extern SpriteParts D_97000_8017A040[];
|
||||
|
||||
@ -209,7 +215,7 @@ s32 func_97000_8017AF2C(Entity* self, s32 arg1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
Collider sp10;
|
||||
s16 xShift;
|
||||
s16 yShift;
|
||||
@ -524,28 +530,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 21; }
|
||||
static int GetWeaponId(void) { return 21; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #22. Used by weapons:
|
||||
// Magic Missile
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_022_1.h"
|
||||
#include "w_022_2.h"
|
||||
#define g_Animset w_022_1
|
||||
#define g_Animset2 w_022_2
|
||||
|
||||
extern AnimationFrame D_9E000_8017A760[];
|
||||
extern AnimationFrame D_9E000_8017A800[];
|
||||
@ -102,28 +108,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 22; }
|
||||
static int GetWeaponId(void) { return 22; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #23. Used by weapons:
|
||||
// Herald shield, Unknown#207
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_023_1.h"
|
||||
#include "w_023_2.h"
|
||||
#define g_Animset w_023_1
|
||||
#define g_Animset2 w_023_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -15,7 +21,7 @@ extern s32 D_A5000_8017AC50[];
|
||||
extern SVECTOR* D_A5000_8017AC90[];
|
||||
extern VECTOR D_A5000_8017ACD8;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -163,17 +169,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 23; }
|
||||
static int GetWeaponId(void) { return 23; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
s16 back;
|
||||
s16 front;
|
||||
s16 top;
|
||||
@ -450,7 +456,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
s32 unused1;
|
||||
s32 unusedFlag;
|
||||
SVECTOR rotation_axis;
|
||||
@ -583,7 +589,7 @@ void func_ptr_80170024(Entity* self) {
|
||||
|
||||
extern AnimationFrame D_A5000_8017AB58[];
|
||||
|
||||
void func_ptr_80170028(Entity* self) {
|
||||
static void func_ptr_80170028(Entity* self) {
|
||||
|
||||
switch (self->step) {
|
||||
case 0:
|
||||
@ -632,12 +638,12 @@ void func_ptr_80170028(Entity* self) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #24. Used by weapons:
|
||||
// Dark shield, Unknown#208
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_024_1.h"
|
||||
#include "w_024_2.h"
|
||||
#define g_Animset w_024_1
|
||||
#define g_Animset2 w_024_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_AC000_8017A040[];
|
||||
@ -10,7 +16,7 @@ extern AnimationFrame* D_AC000_8017AC20;
|
||||
extern s16* D_AC000_8017ACF8[];
|
||||
extern s32 D_AC000_8017AD08[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -171,17 +177,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 24; }
|
||||
static int GetWeaponId(void) { return 24; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Entity* unusedEnt;
|
||||
Primitive* prim;
|
||||
Primitive* prevPrim;
|
||||
@ -523,7 +529,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
|
||||
// Appears to be the entity for the rising rocks as part of the Shield Rod spell
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
Primitive* prim;
|
||||
s16 selfX;
|
||||
s16 selfY;
|
||||
@ -629,14 +635,14 @@ void func_ptr_80170024(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #25. Used by weapons:
|
||||
// Goddess shield, Unknown#209
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_025_1.h"
|
||||
#include "w_025_2.h"
|
||||
#define g_Animset w_025_1
|
||||
#define g_Animset2 w_025_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -18,7 +24,7 @@ void func_B3000_8017AF14(const char* fmt, u_long end) {
|
||||
}
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -154,17 +160,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 25; }
|
||||
static int GetWeaponId(void) { return 25; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Entity* unusedEnt;
|
||||
Primitive* prim;
|
||||
Primitive* prevPrim;
|
||||
@ -473,7 +479,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
|
||||
// Probably the dancing clouds of fog that appear with the shield spell?
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
Primitive* prim;
|
||||
s16 angle;
|
||||
s16 xSize;
|
||||
@ -601,14 +607,14 @@ void func_ptr_80170024(Entity* self) {
|
||||
prim->y3 = yVar - (((rsin(angle) >> 4) * ySize) >> 8);
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #26. Used by weapons:
|
||||
// Shaman shield, Unknown#210
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_026_1.h"
|
||||
#include "w_026_2.h"
|
||||
#define g_Animset w_026_1
|
||||
#define g_Animset2 w_026_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -14,7 +20,7 @@ extern u8 D_BA000_8017AADC[];
|
||||
|
||||
extern s32 D_BA000_8017CC3C;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -150,15 +156,15 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 26; }
|
||||
static int GetWeaponId(void) { return 26; }
|
||||
|
||||
void func_BA000_8017B37C(void) {
|
||||
RECT rect;
|
||||
@ -188,7 +194,7 @@ void func_BA000_8017B37C(void) {
|
||||
LoadImage(&rect, &g_Clut[0x1100]);
|
||||
}
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
s16 back;
|
||||
s16 front;
|
||||
s16 top;
|
||||
@ -491,7 +497,7 @@ const SVECTOR D_BA000_8017AB94 = {56, 28, 0};
|
||||
|
||||
// When casting the Shaman Shield spell with the Shield Rod, an animation plays
|
||||
// where several stars rotate in 3D around Alucard. This handles that rotation.
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
SVECTOR rotation_axis;
|
||||
VECTOR transfer_vector;
|
||||
MATRIX m;
|
||||
@ -686,14 +692,14 @@ void func_ptr_80170024(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #27. Used by weapons:
|
||||
// Medusa shield, Unknown#211
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_027_1.h"
|
||||
#include "w_027_2.h"
|
||||
#define g_Animset w_027_1
|
||||
#define g_Animset2 w_027_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -11,7 +17,7 @@ extern AnimationFrame D_C1000_8017AC8C[];
|
||||
extern AnimationFrame D_C1000_8017ACB4[];
|
||||
extern s32 D_C1000_8017C6EC; // g_DebugWaitInfoTimer
|
||||
|
||||
void DebugShowWaitInfo(const char* msg) {
|
||||
static void DebugShowWaitInfo(const char* msg) {
|
||||
g_CurrentBuffer = g_CurrentBuffer->next;
|
||||
FntPrint(msg);
|
||||
if (D_C1000_8017C6EC++ & 4) {
|
||||
@ -24,7 +30,7 @@ void DebugShowWaitInfo(const char* msg) {
|
||||
FntFlush(-1);
|
||||
}
|
||||
|
||||
void DebugInputWait(const char* msg) {
|
||||
static void DebugInputWait(const char* msg) {
|
||||
while (PadRead(0))
|
||||
DebugShowWaitInfo(msg);
|
||||
while (!PadRead(0))
|
||||
@ -32,7 +38,7 @@ void DebugInputWait(const char* msg) {
|
||||
}
|
||||
|
||||
// Duplicate of Weapon 28!
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim = 0;
|
||||
bool crouchCheck = false;
|
||||
s32 attackButton;
|
||||
@ -166,17 +172,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 27; }
|
||||
static int GetWeaponId(void) { return 27; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Primitive* prim;
|
||||
s16 selfPosX;
|
||||
s16 selfPosY;
|
||||
@ -315,7 +321,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
return;
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
Primitive* prim;
|
||||
Primitive* basePrim;
|
||||
s16 angle;
|
||||
@ -547,7 +553,7 @@ void func_ptr_80170024(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {
|
||||
static void func_ptr_80170028(Entity* self) {
|
||||
Entity* parent = self->ext.generic.unk8C.entityPtr;
|
||||
if (parent->entityId == 0) {
|
||||
DestroyEntity(self);
|
||||
@ -573,12 +579,12 @@ void func_ptr_80170028(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #28. Used by weapons:
|
||||
// Skull shield, Unknown#212
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_028_1.h"
|
||||
#include "w_028_2.h"
|
||||
#define g_Animset w_028_1
|
||||
#define g_Animset2 w_028_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_C8000_8017A040[];
|
||||
@ -9,7 +15,7 @@ extern s8 D_C8000_8017AA98[];
|
||||
extern s32 D_C8000_8017AAE0[];
|
||||
extern s32 D_C8000_8017AB1C[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim = 0;
|
||||
bool crouchCheck = false;
|
||||
s32 attackButton;
|
||||
@ -143,15 +149,15 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 28; }
|
||||
static int GetWeaponId(void) { return 28; }
|
||||
|
||||
extern s16 D_C8000_8017AB18;
|
||||
extern s16 D_C8000_8017AB1A;
|
||||
@ -184,7 +190,7 @@ void func_C8000_8017B3D4(void) {
|
||||
LoadImage(&rect, &g_Clut[0x1100]);
|
||||
}
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
s32 i;
|
||||
s16 left;
|
||||
s16 right;
|
||||
@ -508,7 +514,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
func_C8000_8017B3D4();
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
Primitive* prim;
|
||||
s32 xShift;
|
||||
s16 selfPosX;
|
||||
@ -652,14 +658,14 @@ void func_ptr_80170024(Entity* self) {
|
||||
return;
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #29. Used by weapons:
|
||||
// Fire shield, Unknown#213
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_029_1.h"
|
||||
#include "w_029_2.h"
|
||||
#define g_Animset w_029_1
|
||||
#define g_Animset2 w_029_2
|
||||
#include "items.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -27,7 +33,7 @@ typedef struct {
|
||||
} FireShieldDragon;
|
||||
extern FireShieldDragon D_CF000_8017C9A0[][20];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim;
|
||||
s32 handButton;
|
||||
s32 unkAC_offset;
|
||||
@ -192,17 +198,17 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
self->ext.weapon.unk80 + D_CF000_8017AD04[g_GameTimer / 2 % 5];
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 29; }
|
||||
static int GetWeaponId(void) { return 29; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Primitive* prim;
|
||||
s32 var_v0;
|
||||
u16 selfX;
|
||||
@ -350,7 +356,7 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
return;
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {
|
||||
static void func_ptr_80170024(Entity* self) {
|
||||
// All these variables are kind of guessing names, behavior of this
|
||||
// function is a little unclear.
|
||||
Primitive* firstPrim;
|
||||
@ -560,7 +566,7 @@ void func_ptr_80170024(Entity* self) {
|
||||
g_api.CreateEntFactoryFromEntity(self, ((g_HandId + 1) << 14) + 100, 0);
|
||||
}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {
|
||||
static void func_ptr_80170028(Entity* self) {
|
||||
if (self->ext.weapon.parent->entityId == 0) {
|
||||
DestroyEntity(self);
|
||||
return;
|
||||
@ -579,12 +585,12 @@ void func_ptr_80170028(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #30. Used by weapons:
|
||||
// Sword of Dawn, Unknown#177
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_030_1.h"
|
||||
#include "w_030_2.h"
|
||||
#define g_Animset w_030_1
|
||||
#define g_Animset2 w_030_2
|
||||
|
||||
extern WeaponAnimation D_D6000_8017A5E4[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
WeaponAnimation* anim2;
|
||||
s8 animIndex;
|
||||
@ -64,22 +70,22 @@ INCLUDE_ASM("weapon/nonmatchings/w_030", func_ptr_8017000C);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_030", func_ptr_80170010);
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 30; }
|
||||
static int GetWeaponId(void) { return 30; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #31. Used by weapons:
|
||||
// Basilard, Unknown#174
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_031_1.h"
|
||||
#include "w_031_2.h"
|
||||
#define g_Animset w_031_1
|
||||
#define g_Animset2 w_031_2
|
||||
|
||||
extern WeaponAnimation D_DD000_8017A8EC[];
|
||||
|
||||
@ -66,28 +72,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 31; }
|
||||
static int GetWeaponId(void) { return 31; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #32. Used by weapons:
|
||||
// Combat knife, Unknown#175
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_032_1.h"
|
||||
#include "w_032_2.h"
|
||||
#define g_Animset w_032_1
|
||||
#define g_Animset2 w_032_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_032", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 32; }
|
||||
static int GetWeaponId(void) { return 32; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #33. Used by weapons:
|
||||
// Nunchaku
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_033_1.h"
|
||||
#include "w_033_2.h"
|
||||
#define g_Animset w_033_1
|
||||
#define g_Animset2 w_033_2
|
||||
|
||||
extern WeaponAnimation D_EB000_8017AC3C[2];
|
||||
|
||||
@ -61,28 +67,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 33; }
|
||||
static int GetWeaponId(void) { return 33; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #34. Used by weapons:
|
||||
// Shotel, Unknown#176
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_034_1.h"
|
||||
#include "w_034_2.h"
|
||||
#define g_Animset w_034_1
|
||||
#define g_Animset2 w_034_2
|
||||
|
||||
extern WeaponAnimation D_F2000_8017A934[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -58,28 +64,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_034", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 34; }
|
||||
static int GetWeaponId(void) { return 34; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #35. Used by weapons:
|
||||
// Red Rust
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_035_1.h"
|
||||
#include "w_035_2.h"
|
||||
#define g_Animset w_035_1
|
||||
#define g_Animset2 w_035_2
|
||||
|
||||
extern WeaponAnimation D_F9000_8017A530[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -59,28 +65,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 35; }
|
||||
static int GetWeaponId(void) { return 35; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #36. Used by weapons:
|
||||
// Takemitsu
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_036_1.h"
|
||||
#include "w_036_2.h"
|
||||
#define g_Animset w_036_1
|
||||
#define g_Animset2 w_036_2
|
||||
|
||||
extern WeaponAnimation D_100000_8017A540[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -58,28 +64,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 36; }
|
||||
static int GetWeaponId(void) { return 36; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,13 +1,19 @@
|
||||
// Weapon ID #37. Used by weapons:
|
||||
// Short sword, Jewel sword, Stone sword, Unknown#198
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_037_1.h"
|
||||
#include "w_037_2.h"
|
||||
#define g_Animset w_037_1
|
||||
#define g_Animset2 w_037_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern WeaponAnimation D_107000_8017A6A4[];
|
||||
extern s32 D_107000_8017BBE4;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -322,7 +328,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
|
||||
extern AnimationFrame D_107000_8017A798[];
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
Collider collider;
|
||||
s16 distX;
|
||||
s16 distY;
|
||||
@ -404,26 +410,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 37; }
|
||||
static int GetWeaponId(void) { return 37; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #38. Used by weapons:
|
||||
// Rapier, Unknown#191
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_038_1.h"
|
||||
#include "w_038_2.h"
|
||||
#define g_Animset w_038_1
|
||||
#define g_Animset2 w_038_2
|
||||
|
||||
extern WeaponAnimation D_10E000_8017ADC0[2];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -66,28 +72,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_038", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 38; }
|
||||
static int GetWeaponId(void) { return 38; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #39. Used by weapons:
|
||||
// Were Bane, Unknown#190
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_039_1.h"
|
||||
#include "w_039_2.h"
|
||||
#define g_Animset w_039_1
|
||||
#define g_Animset2 w_039_2
|
||||
|
||||
extern WeaponAnimation D_115000_8017ADC0[2];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -66,28 +72,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_039", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 39; }
|
||||
static int GetWeaponId(void) { return 39; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #40. Used by weapons:
|
||||
// Monster vial 1
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_040_1.h"
|
||||
#include "w_040_2.h"
|
||||
#define g_Animset w_040_1
|
||||
#define g_Animset2 w_040_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern AnimationFrame D_11C000_8017A724[];
|
||||
@ -29,7 +35,7 @@ void func_11C000_8017AC14(void) {
|
||||
LoadImage(&rect, D_8006EDCC);
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
Collider col;
|
||||
s32 var_a2;
|
||||
s16 xMod;
|
||||
@ -180,7 +186,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
func_11C000_8017AC14();
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
s32 var_a1;
|
||||
|
||||
if (self->step == 0) {
|
||||
@ -217,7 +223,7 @@ void func_ptr_80170008(Entity* self) {
|
||||
g_api.UpdateAnim(D_11C000_8017A844, NULL);
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {
|
||||
static void func_ptr_8017000C(Entity* self) {
|
||||
if (self->step == 0) {
|
||||
self->animSet = self->ext.weapon.parent->animSet;
|
||||
self->unk5A = self->ext.weapon.parent->unk5A;
|
||||
@ -233,24 +239,24 @@ void func_ptr_8017000C(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 40; }
|
||||
static int GetWeaponId(void) { return 40; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #41. Used by weapons:
|
||||
// Monster vial 2
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_041_1.h"
|
||||
#include "w_041_2.h"
|
||||
#define g_Animset w_041_1
|
||||
#define g_Animset2 w_041_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -199,28 +205,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
func_123000_8017A914();
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 41; }
|
||||
static int GetWeaponId(void) { return 41; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #42. Used by weapons:
|
||||
// Monster vial 3
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_042_1.h"
|
||||
#include "w_042_2.h"
|
||||
#define g_Animset w_042_1
|
||||
#define g_Animset2 w_042_2
|
||||
#include "sfx.h"
|
||||
|
||||
// data
|
||||
@ -22,7 +28,7 @@ extern s32 D_12A000_8017B5F0;
|
||||
extern const char D_12A000_8017A760[]; // "\no\n"
|
||||
extern s32 D_12A000_8017B5EC; // g_DebugWaitInfoTimer
|
||||
|
||||
void DebugShowWaitInfo(const char* msg) {
|
||||
static void DebugShowWaitInfo(const char* msg) {
|
||||
g_CurrentBuffer = g_CurrentBuffer->next;
|
||||
FntPrint(msg);
|
||||
if (D_12A000_8017B5EC++ & 4) {
|
||||
@ -35,7 +41,7 @@ void DebugShowWaitInfo(const char* msg) {
|
||||
FntFlush(-1);
|
||||
}
|
||||
|
||||
void DebugInputWait(const char* msg) {
|
||||
static void DebugInputWait(const char* msg) {
|
||||
while (PadRead(0))
|
||||
DebugShowWaitInfo(msg);
|
||||
while (!PadRead(0))
|
||||
@ -57,7 +63,7 @@ void func_12A000_8017AC08(void) {
|
||||
LoadImage(&rect, D_8006EDCC);
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
Collider col;
|
||||
s32 var_a2;
|
||||
s16 xMod;
|
||||
@ -214,7 +220,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
func_12A000_8017AC08();
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
s16 unk;
|
||||
s32 modX;
|
||||
|
||||
@ -276,7 +282,7 @@ void func_ptr_80170008(Entity* self) {
|
||||
g_api.UpdateAnim(D_12A000_8017A6DC, NULL);
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {
|
||||
static void func_ptr_8017000C(Entity* self) {
|
||||
if (self->step == 0) {
|
||||
self->animSet = self->ext.weapon.parent->animSet;
|
||||
self->unk5A = self->ext.weapon.parent->unk5A;
|
||||
@ -292,24 +298,24 @@ void func_ptr_8017000C(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 42; }
|
||||
static int GetWeaponId(void) { return 42; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #43. Used by weapons:
|
||||
// Alucard sword, Sword Familiar, Alucart sword, Unknown#197
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_043_1.h"
|
||||
#include "w_043_2.h"
|
||||
#define g_Animset w_043_1
|
||||
#define g_Animset2 w_043_2
|
||||
|
||||
extern SpriteParts D_131000_8017A040[];
|
||||
extern AnimationFrame D_131000_8017AF40[];
|
||||
@ -10,7 +16,7 @@ INCLUDE_ASM("weapon/nonmatchings/w_043", EntityWeaponAttack);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_043", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
if (self->step == 0) {
|
||||
self->unk4C = D_131000_8017AF40;
|
||||
SetSpriteBank1(D_131000_8017A040);
|
||||
@ -52,26 +58,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
self->rotPivotY = PLAYER.rotPivotY;
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 43; }
|
||||
static int GetWeaponId(void) { return 43; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #44. Used by weapons:
|
||||
// Heart Refresh
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_044_1.h"
|
||||
#include "w_044_2.h"
|
||||
#define g_Animset w_044_1
|
||||
#define g_Animset2 w_044_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_044", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 44; }
|
||||
static int GetWeaponId(void) { return 44; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #45. Used by weapons:
|
||||
// Unknown#216
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_045_1.h"
|
||||
#include "w_045_2.h"
|
||||
#define g_Animset w_045_1
|
||||
#define g_Animset2 w_045_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -38,7 +44,7 @@ int func_13F000_8017A718() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
SetSpriteBank1(D_13F000_8017A040);
|
||||
if (g_HandId != 0) {
|
||||
g_CurrentEntity->animSet = ANIMSET_OVL(0x12);
|
||||
@ -68,7 +74,7 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_045", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
SetSpriteBank1(D_13F000_8017A040);
|
||||
if (g_HandId != 0) {
|
||||
g_CurrentEntity->animSet = ANIMSET_OVL(0x12);
|
||||
@ -128,7 +134,7 @@ void func_ptr_80170008(Entity* self) {
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_045", func_ptr_8017000C);
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {
|
||||
static s32 func_ptr_80170010(Entity* self) {
|
||||
D_13F000_8017B3BC += 0x80;
|
||||
SetSpriteBank1(D_13F000_8017A040);
|
||||
if (g_HandId != 0) {
|
||||
@ -210,22 +216,22 @@ s32 func_ptr_80170010(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 45; }
|
||||
static int GetWeaponId(void) { return 45; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #46. Used by weapons:
|
||||
// Holbein dagger, Blue knuckles
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_046_1.h"
|
||||
#include "w_046_2.h"
|
||||
#define g_Animset w_046_1
|
||||
#define g_Animset2 w_046_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_046", EntityWeaponAttack);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_046", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 46; }
|
||||
static int GetWeaponId(void) { return 46; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #47. Used by weapons:
|
||||
// Dynamite
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_047_1.h"
|
||||
#include "w_047_2.h"
|
||||
#define g_Animset w_047_1
|
||||
#define g_Animset2 w_047_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_047", EntityWeaponAttack);
|
||||
|
||||
@ -47,28 +53,28 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 47; }
|
||||
static int GetWeaponId(void) { return 47; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #48. Used by weapons:
|
||||
// Thunderbrand, Unknown#178
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_048_1.h"
|
||||
#include "w_048_2.h"
|
||||
#define g_Animset w_048_1
|
||||
#define g_Animset2 w_048_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_048", EntityWeaponAttack);
|
||||
|
||||
@ -38,26 +44,26 @@ INCLUDE_ASM("weapon/nonmatchings/w_048", func_ptr_80170004);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_048", func_ptr_80170008);
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 48; }
|
||||
static int GetWeaponId(void) { return 48; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #49. Used by weapons:
|
||||
// Firebrand, Marsil, Unknown#179, Unknown#180
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_049_1.h"
|
||||
#include "w_049_2.h"
|
||||
#define g_Animset w_049_1
|
||||
#define g_Animset2 w_049_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -46,7 +52,7 @@ INCLUDE_ASM("weapon/nonmatchings/w_049", func_ptr_80170010);
|
||||
extern SpriteParts D_15B000_8017AA44[];
|
||||
extern AnimationFrame D_15B000_8017B10C[];
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {
|
||||
static s32 func_ptr_80170014(Entity* self) {
|
||||
switch (self->step) {
|
||||
case 0:
|
||||
SetSpriteBank2(D_15B000_8017AA44);
|
||||
@ -81,20 +87,20 @@ s32 func_ptr_80170014(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
int GetWeaponId(void) { return 49; }
|
||||
static int GetWeaponId(void) { return 49; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #50. Used by weapons:
|
||||
// Icebrand, Unknown#181, Unknown#199, Unknown#200, Unknown#201
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_050_1.h"
|
||||
#include "w_050_2.h"
|
||||
#define g_Animset w_050_1
|
||||
#define g_Animset2 w_050_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_050", EntityWeaponAttack);
|
||||
|
||||
@ -119,22 +125,22 @@ INCLUDE_ASM("weapon/nonmatchings/w_050", func_ptr_8017000C);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_050", func_ptr_80170010);
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 50; }
|
||||
static int GetWeaponId(void) { return 50; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -2,7 +2,13 @@
|
||||
// Estoc, Claymore, Flamberge, Zwei hander, Obsidian sword, Great Sword,
|
||||
// Unknown#182, Unknown#183, Unknown#184, Unknown#185
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_051_1.h"
|
||||
#include "w_051_2.h"
|
||||
#define g_Animset w_051_1
|
||||
#define g_Animset2 w_051_2
|
||||
#include "sfx.h"
|
||||
|
||||
u16 D_169000_8017A950[] = {
|
||||
@ -290,7 +296,7 @@ void func_169000_8017B1DC(s32 arg0) {
|
||||
LoadImage(&rect, (u_long*)D_8006EDCC);
|
||||
}
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s16 subType;
|
||||
|
||||
@ -420,7 +426,7 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {
|
||||
static void func_ptr_80170008(Entity* self) {
|
||||
AnimProperties* anim;
|
||||
Primitive* prim;
|
||||
s16 rot;
|
||||
@ -557,26 +563,26 @@ void func_ptr_80170008(Entity* self) {
|
||||
prim->y3 = y - (((rsin(rot) >> 4) * t) >> 9);
|
||||
}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 51; }
|
||||
static int GetWeaponId(void) { return 51; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,7 +1,13 @@
|
||||
// Weapon ID #52. Used by weapons:
|
||||
// Alucard shield, Unknown#214
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_052_1.h"
|
||||
#include "w_052_2.h"
|
||||
#define g_Animset w_052_1
|
||||
#define g_Animset2 w_052_2
|
||||
#include "sfx.h"
|
||||
|
||||
extern SpriteParts D_170000_8017A040[];
|
||||
@ -18,7 +24,7 @@ extern s16 D_170000_8017CBA0[];
|
||||
extern s16 D_170000_8017CBB8[];
|
||||
extern f32 D_170000_8017CBD0[11][4];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -184,17 +190,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 52; }
|
||||
static int GetWeaponId(void) { return 52; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Primitive* prim;
|
||||
s16 angle;
|
||||
s16 selfX;
|
||||
@ -676,16 +682,16 @@ s32 func_ptr_80170004(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -2,7 +2,13 @@
|
||||
// Katana, Osafune katana, Masamune, Yasutsuna, Unknown#189, Unknown#192,
|
||||
// Unknown#193, Unknown#194
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_053_1.h"
|
||||
#include "w_053_2.h"
|
||||
#define g_Animset w_053_1
|
||||
#define g_Animset2 w_053_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_053", EntityWeaponAttack);
|
||||
|
||||
@ -12,24 +18,24 @@ INCLUDE_ASM("weapon/nonmatchings/w_053", func_ptr_80170008);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_053", func_ptr_8017000C);
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 53; }
|
||||
static int GetWeaponId(void) { return 53; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #54. Used by weapons:
|
||||
// Gurthang, Unknown#195
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_054_1.h"
|
||||
#include "w_054_2.h"
|
||||
#define g_Animset w_054_1
|
||||
#define g_Animset2 w_054_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_054", EntityWeaponAttack);
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 54; }
|
||||
static int GetWeaponId(void) { return 54; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #55. Used by weapons:
|
||||
// Holy sword, Unknown#196
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_055_1.h"
|
||||
#include "w_055_2.h"
|
||||
#define g_Animset w_055_1
|
||||
#define g_Animset2 w_055_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_055", EntityWeaponAttack);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_055", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 55; }
|
||||
static int GetWeaponId(void) { return 55; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,34 +1,40 @@
|
||||
// Weapon ID #56. Used by weapons:
|
||||
// Muramasa
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_056_1.h"
|
||||
#include "w_056_2.h"
|
||||
#define g_Animset w_056_1
|
||||
#define g_Animset2 w_056_2
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_056", EntityWeaponAttack);
|
||||
|
||||
INCLUDE_ASM("weapon/nonmatchings/w_056", func_ptr_80170004);
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
int GetWeaponId(void) { return 56; }
|
||||
static int GetWeaponId(void) { return 56; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,11 +1,17 @@
|
||||
// Weapon ID #57. Used by weapons:
|
||||
// Mablung Sword
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "shared.h"
|
||||
#include "w_057_1.h"
|
||||
#include "w_057_2.h"
|
||||
#define g_Animset w_057_1
|
||||
#define g_Animset2 w_057_2
|
||||
|
||||
extern WeaponAnimation D_193000_8017B06C[];
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
WeaponAnimation* anim;
|
||||
s8 animIndex;
|
||||
|
||||
@ -59,28 +65,28 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
s32 GetWeaponId(void) { return 0; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {}
|
||||
static void EntityWeaponShieldSpell(Entity* self) {}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -1,6 +1,12 @@
|
||||
// Weapon ID #58. Used by weapons:
|
||||
// Alucart shield, Unknown#215
|
||||
#include "weapon_private.h"
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
#include "w_058_1.h"
|
||||
#include "w_058_2.h"
|
||||
#define g_Animset w_058_1
|
||||
#define g_Animset2 w_058_2
|
||||
#include "shared.h"
|
||||
#include "sfx.h"
|
||||
|
||||
@ -9,7 +15,7 @@ extern s8 D_19A000_8017AB3C;
|
||||
extern AnimationFrame* D_19A000_8017AB84;
|
||||
extern s32 D_19A000_8017BB40;
|
||||
|
||||
void EntityWeaponAttack(Entity* self) {
|
||||
static void EntityWeaponAttack(Entity* self) {
|
||||
s32 anim1;
|
||||
s32 anim2;
|
||||
s32 attackButton;
|
||||
@ -147,17 +153,17 @@ void EntityWeaponAttack(Entity* self) {
|
||||
|
||||
s32 func_ptr_80170004(Entity* self) {}
|
||||
|
||||
void func_ptr_80170008(Entity* self) {}
|
||||
static void func_ptr_80170008(Entity* self) {}
|
||||
|
||||
void func_ptr_8017000C(Entity* self) {}
|
||||
static void func_ptr_8017000C(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170010(Entity* self) {}
|
||||
static s32 func_ptr_80170010(Entity* self) {}
|
||||
|
||||
s32 func_ptr_80170014(Entity* self) {}
|
||||
static s32 func_ptr_80170014(Entity* self) {}
|
||||
|
||||
s32 GetWeaponId(void) { return 52; }
|
||||
|
||||
void EntityWeaponShieldSpell(Entity* self) {
|
||||
static void EntityWeaponShieldSpell(Entity* self) {
|
||||
Primitive* prim;
|
||||
s16 primRight;
|
||||
s16 primLeft;
|
||||
@ -345,16 +351,16 @@ void EntityWeaponShieldSpell(Entity* self) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_ptr_80170024(Entity* self) {}
|
||||
static void func_ptr_80170024(Entity* self) {}
|
||||
|
||||
void func_ptr_80170028(Entity* self) {}
|
||||
static void func_ptr_80170028(Entity* self) {}
|
||||
|
||||
void WeaponUnused2C(void) {}
|
||||
static void WeaponUnused2C(void) {}
|
||||
|
||||
void WeaponUnused30(void) {}
|
||||
static void WeaponUnused30(void) {}
|
||||
|
||||
void WeaponUnused34(void) {}
|
||||
static void WeaponUnused34(void) {}
|
||||
|
||||
void WeaponUnused38(void) {}
|
||||
static void WeaponUnused38(void) {}
|
||||
|
||||
void WeaponUnused3C(void) {}
|
||||
static void WeaponUnused3C(void) {}
|
||||
|
@ -24,34 +24,37 @@
|
||||
#endif
|
||||
|
||||
// exported
|
||||
void EntityWeaponAttack(Entity* self);
|
||||
void LoadWeaponPalette(s32 clutIndex);
|
||||
s32 func_ptr_80170004(Entity* self);
|
||||
void func_ptr_80170008(Entity* self);
|
||||
void func_ptr_8017000C(Entity* self);
|
||||
s32 func_ptr_80170010(Entity* self);
|
||||
s32 func_ptr_80170014(Entity* self);
|
||||
int GetWeaponId(void);
|
||||
void EntityWeaponShieldSpell(Entity* self);
|
||||
void func_ptr_80170024(Entity* self);
|
||||
void func_ptr_80170028(Entity* self);
|
||||
void WeaponUnused2C(void);
|
||||
void WeaponUnused30(void);
|
||||
void WeaponUnused34(void);
|
||||
void WeaponUnused38(void);
|
||||
void WeaponUnused3C(void);
|
||||
|
||||
// internals
|
||||
extern SpriteParts* g_Animset[];
|
||||
extern SpriteParts* g_Animset2[];
|
||||
extern u16* g_WeaponCluts[];
|
||||
extern s32 g_HandId;
|
||||
static void EntityWeaponAttack(Entity* self);
|
||||
static void LoadWeaponPalette(s32 clutIndex);
|
||||
static s32 func_ptr_80170004(Entity* self);
|
||||
static void func_ptr_80170008(Entity* self);
|
||||
static void func_ptr_8017000C(Entity* self);
|
||||
static s32 func_ptr_80170010(Entity* self);
|
||||
static s32 func_ptr_80170014(Entity* self);
|
||||
static int GetWeaponId(void);
|
||||
static void EntityWeaponShieldSpell(Entity* self);
|
||||
static void func_ptr_80170024(Entity* self);
|
||||
static void func_ptr_80170028(Entity* self);
|
||||
static void WeaponUnused2C(void);
|
||||
static void WeaponUnused30(void);
|
||||
static void WeaponUnused34(void);
|
||||
static void WeaponUnused38(void);
|
||||
static void WeaponUnused3C(void);
|
||||
|
||||
void DestroyEntity(Entity* entity);
|
||||
void SetSpriteBank1(SpriteParts* animset);
|
||||
void SetSpriteBank2(SpriteParts* animset);
|
||||
static void SetSpriteBank1(SpriteParts* animset);
|
||||
static void SetSpriteBank2(SpriteParts* animset);
|
||||
static void DecelerateX(s32 amount);
|
||||
static void DecelerateY(s32 amount);
|
||||
static void SetSpeedX(s32 speed);
|
||||
|
||||
Weapon OVL_EXPORT(header) = {
|
||||
EntityWeaponAttack, func_ptr_80170004, func_ptr_80170008,
|
||||
func_ptr_8017000C, func_ptr_80170010, func_ptr_80170014,
|
||||
GetWeaponId, LoadWeaponPalette, EntityWeaponShieldSpell,
|
||||
func_ptr_80170024, func_ptr_80170028, WeaponUnused2C,
|
||||
WeaponUnused30, WeaponUnused34, WeaponUnused38,
|
||||
WeaponUnused3C,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
257
tools/sotn-assets/asset_config.go
Normal file
257
tools/sotn-assets/asset_config.go
Normal file
@ -0,0 +1,257 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"gopkg.in/yaml.v2"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type assetSegmentEntry struct {
|
||||
Start int `yaml:"start"`
|
||||
Vram psx.Addr `yaml:"vram"`
|
||||
Assets [][]string `yaml:"assets"`
|
||||
}
|
||||
|
||||
type assetFileEntry struct {
|
||||
Target string `yaml:"target"`
|
||||
AssetDir string `yaml:"asset_path"`
|
||||
SourceDir string `yaml:"src_path"`
|
||||
Segments []assetSegmentEntry `yaml:"segments"`
|
||||
}
|
||||
|
||||
type assetConfig struct {
|
||||
Files []assetFileEntry `yaml:"files"`
|
||||
}
|
||||
|
||||
type assetEntry struct {
|
||||
data []byte
|
||||
start int
|
||||
end int
|
||||
assetDir string
|
||||
name string
|
||||
args []string
|
||||
ramBase psx.Addr
|
||||
}
|
||||
|
||||
type assetBuildEntry struct {
|
||||
assetDir string
|
||||
srcDir string
|
||||
name string
|
||||
}
|
||||
|
||||
var extractHandlers = map[string]func(assetEntry) error{
|
||||
"frameset": func(e assetEntry) error {
|
||||
var set []*[]sprite
|
||||
var err error
|
||||
if e.start != e.end {
|
||||
r := bytes.NewReader(e.data)
|
||||
set, _, err = readFrameSet(r, e.ramBase, e.ramBase.Sum(e.start))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
set = make([]*[]sprite, 0)
|
||||
}
|
||||
content, err := json.MarshalIndent(set, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
outPath := path.Join(e.assetDir, fmt.Sprintf("%s.frameset.json", e.name))
|
||||
dir := filepath.Dir(outPath)
|
||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||
fmt.Printf("failed to create directory %s: %v\n", dir, err)
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(outPath, content, 0644)
|
||||
},
|
||||
}
|
||||
|
||||
var buildHandlers = map[string]func(assetBuildEntry) error{
|
||||
"frameset": func(e assetBuildEntry) error {
|
||||
inFileName := path.Join(e.assetDir, fmt.Sprintf("%s.frameset.json", e.name))
|
||||
outFileName := path.Join(e.srcDir, fmt.Sprintf("%s.h", e.name))
|
||||
return buildFrameSet(inFileName, outFileName, e.name)
|
||||
},
|
||||
}
|
||||
|
||||
func parseArgs(entry []string) (offset int64, kind string, args []string, err error) {
|
||||
if len(entry) < 2 {
|
||||
err = fmt.Errorf("asset %v is malformed", entry)
|
||||
return
|
||||
}
|
||||
offsetRaw := entry[0]
|
||||
if len(offsetRaw) >= 2 && offsetRaw[0] == '0' && offsetRaw[1] == 'x' {
|
||||
offset, err = strconv.ParseInt(offsetRaw[2:], 16, 32)
|
||||
} else {
|
||||
offset, err = strconv.ParseInt(offsetRaw, 10, 32)
|
||||
}
|
||||
if err != nil {
|
||||
err = fmt.Errorf("offset %q in asset %v is malformed", offset, entry)
|
||||
return
|
||||
}
|
||||
kind = entry[1]
|
||||
args = entry[2:]
|
||||
return
|
||||
}
|
||||
|
||||
func readConfig(path string) (*assetConfig, error) {
|
||||
yamlFile, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error reading YAML file: %v", err)
|
||||
}
|
||||
var data assetConfig
|
||||
if err = yaml.Unmarshal(yamlFile, &data); err != nil {
|
||||
return nil, fmt.Errorf("Error unmarshalling YAML file: %v", err)
|
||||
}
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
func enqueueExtractAssetEntry(
|
||||
eg *errgroup.Group,
|
||||
handler func(assetEntry) error,
|
||||
assetDir string,
|
||||
name string,
|
||||
data []byte,
|
||||
start int,
|
||||
end int,
|
||||
args []string,
|
||||
ramBase psx.Addr) {
|
||||
eg.Go(func() error {
|
||||
if err := handler(assetEntry{
|
||||
data: data,
|
||||
start: start,
|
||||
end: end,
|
||||
assetDir: assetDir,
|
||||
ramBase: ramBase,
|
||||
name: name,
|
||||
args: args,
|
||||
}); err != nil {
|
||||
return fmt.Errorf("unable to extract asset %q: %v", name, err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func extractAssetFile(file assetFileEntry) error {
|
||||
var eg errgroup.Group
|
||||
data, err := os.ReadFile(file.Target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, segment := range file.Segments {
|
||||
if len(segment.Assets) == 0 {
|
||||
continue
|
||||
}
|
||||
off, kind, args, err := parseArgs(segment.Assets[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := 1; i < len(segment.Assets); i++ {
|
||||
off2, kind2, args2, err2 := parseArgs(segment.Assets[i])
|
||||
if err2 != nil {
|
||||
return err2
|
||||
}
|
||||
size := int(off2 - off)
|
||||
if size < 0 {
|
||||
return fmt.Errorf("offset 0x%X should be smaller than 0x%X, asset %v", off, off2, segment.Assets[i-1])
|
||||
}
|
||||
if kind == "skip" {
|
||||
continue
|
||||
}
|
||||
if handler, found := extractHandlers[kind]; found {
|
||||
name := strconv.FormatUint(uint64(off), 16)
|
||||
if len(args) > 0 {
|
||||
name = args[0]
|
||||
args = args[1:]
|
||||
}
|
||||
start := int(off) - segment.Start
|
||||
end := start + size
|
||||
enqueueExtractAssetEntry(&eg, handler, file.AssetDir, name, data[segment.Start:], start, end, args, segment.Vram)
|
||||
}
|
||||
off = off2
|
||||
kind = kind2
|
||||
args = args2
|
||||
}
|
||||
}
|
||||
return eg.Wait()
|
||||
}
|
||||
|
||||
func enqueueBuildAssetEntry(
|
||||
eg *errgroup.Group,
|
||||
handler func(assetBuildEntry) error,
|
||||
assetDir,
|
||||
sourceDir,
|
||||
name string) {
|
||||
eg.Go(func() error {
|
||||
err := handler(assetBuildEntry{
|
||||
assetDir: assetDir,
|
||||
srcDir: sourceDir,
|
||||
name: name,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to build asset %q: %v", name, err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func extractFromConfig(c *assetConfig) error {
|
||||
var eg errgroup.Group
|
||||
for _, file := range c.Files {
|
||||
if len(file.Segments) == 0 {
|
||||
continue
|
||||
}
|
||||
eg.Go(func() error {
|
||||
return extractAssetFile(file)
|
||||
})
|
||||
}
|
||||
return eg.Wait()
|
||||
}
|
||||
|
||||
func buildAssetFile(file assetFileEntry) error {
|
||||
var eg errgroup.Group
|
||||
for _, segment := range file.Segments {
|
||||
if len(segment.Assets) == 0 {
|
||||
continue
|
||||
}
|
||||
for _, asset := range segment.Assets {
|
||||
off, kind, args, err := parseArgs(asset)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if kind == "skip" {
|
||||
continue
|
||||
}
|
||||
if handler, found := buildHandlers[kind]; found {
|
||||
name := strconv.FormatUint(uint64(off), 16)
|
||||
if len(args) > 0 {
|
||||
name = args[0]
|
||||
args = args[1:]
|
||||
}
|
||||
enqueueBuildAssetEntry(&eg, handler, file.AssetDir, file.SourceDir, name)
|
||||
}
|
||||
}
|
||||
}
|
||||
return eg.Wait()
|
||||
}
|
||||
|
||||
func buildFromConfig(c *assetConfig) error {
|
||||
var eg errgroup.Group
|
||||
for _, file := range c.Files {
|
||||
if len(file.Segments) == 0 {
|
||||
continue
|
||||
}
|
||||
eg.Go(func() error {
|
||||
return buildAssetFile(file)
|
||||
})
|
||||
}
|
||||
return eg.Wait()
|
||||
}
|
@ -253,7 +253,7 @@ func buildLayers(inputDir string, fileName string, outputDir string) error {
|
||||
}
|
||||
|
||||
sb.WriteString("static MyLayer layers[] = {\n")
|
||||
sb.WriteString(" {},\n")
|
||||
sb.WriteString(" { NULL, NULL, 0, 0, 0, 0 },\n")
|
||||
for _, l := range layers[1:] {
|
||||
sb.WriteString(fmt.Sprintf(" { %s, %s, 0x%08X, 0x%02X, %d, %d },\n",
|
||||
makeSymbolFromFileName(l["data"].(string)),
|
||||
@ -329,6 +329,25 @@ func buildSpriteGroup(sb *strings.Builder, sprites []*[]sprite, mainSymbol strin
|
||||
}
|
||||
}
|
||||
|
||||
func buildFrameSet(inputFileName, outputFileName, prefix string) error {
|
||||
data, err := os.ReadFile(inputFileName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to open %q: %v", inputFileName, err)
|
||||
}
|
||||
|
||||
var sprites []*[]sprite
|
||||
if err := json.Unmarshal(data, &sprites); err != nil {
|
||||
return fmt.Errorf("unable to parse %q: %v", inputFileName, err)
|
||||
}
|
||||
sb := strings.Builder{}
|
||||
sb.WriteString("// clang-format off\n")
|
||||
r := rand.New(rand.NewSource(int64(len(data))))
|
||||
if len(sprites) > 0 {
|
||||
buildSpriteGroup(&sb, sprites, prefix, r)
|
||||
}
|
||||
return os.WriteFile(outputFileName, []byte(sb.String()), 0644)
|
||||
}
|
||||
|
||||
func buildSprites(fileName string, outputDir string) error {
|
||||
ovlName := path.Base(outputDir)
|
||||
data, err := os.ReadFile(fileName)
|
||||
|
@ -2,12 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type dataRange struct {
|
||||
begin PsxOffset
|
||||
end PsxOffset
|
||||
begin psx.Addr
|
||||
end psx.Addr
|
||||
}
|
||||
|
||||
func (r dataRange) Format(f fmt.State, c rune) {
|
||||
@ -15,7 +16,7 @@ func (r dataRange) Format(f fmt.State, c rune) {
|
||||
}
|
||||
|
||||
func (r dataRange) empty() bool {
|
||||
return r.begin == RamNull && r.end == RamNull
|
||||
return r.begin == psx.RamNull && r.end == psx.RamNull
|
||||
}
|
||||
|
||||
func mergeDataRanges(ranges []dataRange) dataRange {
|
||||
|
@ -2,4 +2,7 @@ module github.com/xeeynamo/sotn-decomp/tools/sotn-assets
|
||||
|
||||
go 1.21
|
||||
|
||||
require golang.org/x/sync v0.7.0 // indirect
|
||||
require (
|
||||
golang.org/x/sync v0.7.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
@ -1,2 +1,5 @@
|
||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
|
@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
)
|
||||
|
||||
@ -20,7 +21,7 @@ type gfxEntry struct {
|
||||
Y uint16
|
||||
Width uint16
|
||||
Height uint16
|
||||
Data PsxOffset
|
||||
Data psx.Addr
|
||||
}
|
||||
|
||||
type gfxBlock struct {
|
||||
@ -34,15 +35,15 @@ type gfx struct {
|
||||
indices []int
|
||||
}
|
||||
|
||||
func readGraphics(file *os.File, off PsxOffset) (gfx, dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readGraphics(file *os.File, off psx.Addr) (gfx, dataRange, error) {
|
||||
if err := off.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return gfx{}, dataRange{}, err
|
||||
}
|
||||
|
||||
// all the offsets are before the array, so it is easy to find where the offsets array ends
|
||||
blockOffsets := []PsxOffset{}
|
||||
blockOffsets := []psx.Addr{}
|
||||
for {
|
||||
var offBank PsxOffset
|
||||
var offBank psx.Addr
|
||||
if err := binary.Read(file, binary.LittleEndian, &offBank); err != nil {
|
||||
return gfx{}, dataRange{}, err
|
||||
}
|
||||
@ -53,15 +54,15 @@ func readGraphics(file *os.File, off PsxOffset) (gfx, dataRange, error) {
|
||||
}
|
||||
|
||||
// the order of each gfxBlock must be preserved
|
||||
pool := map[PsxOffset]int{}
|
||||
pool[RamNull] = -1
|
||||
pool := map[psx.Addr]int{}
|
||||
pool[psx.RamNull] = -1
|
||||
blocks := []gfxBlock{}
|
||||
ranges := []dataRange{}
|
||||
for _, blockOffset := range sortUniqueOffsets(blockOffsets) {
|
||||
if blockOffset == RamNull { // exception for ST0
|
||||
if blockOffset == psx.RamNull { // exception for ST0
|
||||
continue
|
||||
}
|
||||
if err := blockOffset.moveFile(file); err != nil {
|
||||
if err := blockOffset.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return gfx{}, dataRange{}, err
|
||||
}
|
||||
var block gfxBlock
|
||||
@ -77,7 +78,7 @@ func readGraphics(file *os.File, off PsxOffset) (gfx, dataRange, error) {
|
||||
blocks = append(blocks, block)
|
||||
ranges = append(ranges, dataRange{
|
||||
begin: blockOffset,
|
||||
end: blockOffset.sum(4),
|
||||
end: blockOffset.Sum(4),
|
||||
})
|
||||
continue
|
||||
}
|
||||
@ -96,7 +97,7 @@ func readGraphics(file *os.File, off PsxOffset) (gfx, dataRange, error) {
|
||||
blocks = append(blocks, block)
|
||||
ranges = append(ranges, dataRange{
|
||||
begin: blockOffset,
|
||||
end: blockOffset.sum(4 + len(block.entries)*12 + 4),
|
||||
end: blockOffset.Sum(4 + len(block.entries)*12 + 4),
|
||||
})
|
||||
}
|
||||
|
||||
@ -107,6 +108,6 @@ func readGraphics(file *os.File, off PsxOffset) (gfx, dataRange, error) {
|
||||
|
||||
return g, mergeDataRanges(append(ranges, dataRange{
|
||||
begin: off,
|
||||
end: off.sum(len(blockOffsets) * 4),
|
||||
end: off.Sum(len(blockOffsets) * 4),
|
||||
})), nil
|
||||
}
|
||||
|
@ -3,13 +3,14 @@ package main
|
||||
import (
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type layer struct {
|
||||
Data PsxOffset
|
||||
Tiledef PsxOffset
|
||||
Data psx.Addr
|
||||
Tiledef psx.Addr
|
||||
PackedInfo uint32
|
||||
ZPriority uint16
|
||||
UnkE uint8
|
||||
@ -76,44 +77,44 @@ func (r roomLayers) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(m)
|
||||
}
|
||||
|
||||
func readLayers(file *os.File, off PsxOffset) ([]roomLayers, dataRange, error) {
|
||||
func readLayers(file *os.File, off psx.Addr) ([]roomLayers, dataRange, error) {
|
||||
if off == 0 {
|
||||
return nil, dataRange{}, nil
|
||||
}
|
||||
if err := off.moveFile(file); err != nil {
|
||||
if err := off.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
|
||||
// when the data starts to no longer makes sense, we can assume we reached the end of the array
|
||||
layerOffsets := []PsxOffset{}
|
||||
layersOff := make([]PsxOffset, 2)
|
||||
layerOffsets := []psx.Addr{}
|
||||
layersOff := make([]psx.Addr, 2)
|
||||
for {
|
||||
if err := binary.Read(file, binary.LittleEndian, layersOff); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
if layersOff[0] <= RamStageBegin || layersOff[0] >= off ||
|
||||
layersOff[1] <= RamStageBegin || layersOff[1] >= off {
|
||||
if layersOff[0] <= psx.RamStageBegin || layersOff[0] >= off ||
|
||||
layersOff[1] <= psx.RamStageBegin || layersOff[1] >= off {
|
||||
break
|
||||
}
|
||||
layerOffsets = append(layerOffsets, layersOff...)
|
||||
}
|
||||
|
||||
// Creates a map of layers, so we can re-use them when a layer is used by multiple rooms
|
||||
pool := map[PsxOffset]*layer{}
|
||||
pool[PsxOffset(0)] = nil
|
||||
pool := map[psx.Addr]*layer{}
|
||||
pool[psx.Addr(0)] = nil
|
||||
for _, layerOffset := range layerOffsets {
|
||||
if _, exists := pool[layerOffset]; exists {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := layerOffset.moveFile(file); err != nil {
|
||||
if err := layerOffset.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
var l layer
|
||||
if err := binary.Read(file, binary.LittleEndian, &l); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
if l.Data != RamNull || l.Tiledef != RamNull || l.PackedInfo != 0 {
|
||||
if l.Data != psx.RamNull || l.Tiledef != psx.RamNull || l.PackedInfo != 0 {
|
||||
pool[layerOffset] = &l
|
||||
} else {
|
||||
pool[layerOffset] = nil
|
||||
@ -129,6 +130,6 @@ func readLayers(file *os.File, off PsxOffset) ([]roomLayers, dataRange, error) {
|
||||
}
|
||||
return roomsLayers, dataRange{
|
||||
begin: slices.Min(layerOffsets),
|
||||
end: off.sum(count * 8),
|
||||
end: off.Sum(count * 8),
|
||||
}, nil
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
@ -73,24 +74,24 @@ func hydrateYOrderFields(x layouts, y layouts) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func readEntityLayout(file *os.File, off PsxOffset, count int, isX bool) (layouts, []dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readEntityLayout(file *os.File, off psx.Addr, count int, isX bool) (layouts, []dataRange, error) {
|
||||
if err := off.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return layouts{}, nil, err
|
||||
}
|
||||
|
||||
// there are two copies of the layout, one ordered by X and the other one ordered by Y
|
||||
// we will only read the first one, which is ordered by Y
|
||||
blockOffsets := make([]PsxOffset, count)
|
||||
blockOffsets := make([]psx.Addr, count)
|
||||
if err := binary.Read(file, binary.LittleEndian, blockOffsets); err != nil {
|
||||
return layouts{}, nil, err
|
||||
}
|
||||
|
||||
// the order of each layout entry must be preserved
|
||||
pool := map[PsxOffset]int{}
|
||||
pool := map[psx.Addr]int{}
|
||||
blocks := [][]layoutEntry{}
|
||||
xRanges := []dataRange{}
|
||||
for _, blockOffset := range sortUniqueOffsets(blockOffsets) {
|
||||
if err := blockOffset.moveFile(file); err != nil {
|
||||
if err := blockOffset.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return layouts{}, nil, err
|
||||
}
|
||||
entries := []layoutEntry{}
|
||||
@ -116,18 +117,18 @@ func readEntityLayout(file *os.File, off PsxOffset, count int, isX bool) (layout
|
||||
blocks = append(blocks, entries)
|
||||
xRanges = append(xRanges, dataRange{
|
||||
begin: blockOffset,
|
||||
end: blockOffset.sum(len(entries) * 10),
|
||||
end: blockOffset.Sum(len(entries) * 10),
|
||||
})
|
||||
}
|
||||
// the very last entry needs to be aligned by 4
|
||||
xRanges[len(xRanges)-1].end = xRanges[len(xRanges)-1].end.align4()
|
||||
xRanges[len(xRanges)-1].end = xRanges[len(xRanges)-1].end.Align4()
|
||||
|
||||
l := layouts{Entities: blocks}
|
||||
for _, blockOffset := range blockOffsets {
|
||||
l.Indices = append(l.Indices, pool[blockOffset])
|
||||
}
|
||||
|
||||
endOfArray := off.sum(count * 4)
|
||||
endOfArray := off.Sum(count * 4)
|
||||
if isX { // we want to do the same thing with the vertically aligned layout
|
||||
yLayouts, yRanges, err := readEntityLayout(file, endOfArray, count, false)
|
||||
if err != nil {
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
"path"
|
||||
)
|
||||
@ -22,23 +23,23 @@ type ovl struct {
|
||||
graphics dataContainer[gfx]
|
||||
layouts dataContainer[layouts]
|
||||
layoutsExtraRange dataRange
|
||||
tileMaps dataContainer[map[PsxOffset][]byte]
|
||||
tileDefs dataContainer[map[PsxOffset]tileDef]
|
||||
tileMaps dataContainer[map[psx.Addr][]byte]
|
||||
tileDefs dataContainer[map[psx.Addr]tileDef]
|
||||
}
|
||||
|
||||
func getOvlAssets(fileName string) (ovl, error) {
|
||||
type stageHeader struct {
|
||||
FnUpdate PsxOffset
|
||||
FnHitDetection PsxOffset
|
||||
FnUpdateRoomPos PsxOffset
|
||||
FnInitRoomEntities PsxOffset
|
||||
Rooms PsxOffset // ✅
|
||||
Sprites PsxOffset // ✅
|
||||
Cluts PsxOffset // 🫥
|
||||
Layouts PsxOffset // ✅
|
||||
Layers PsxOffset // ✅
|
||||
Graphics PsxOffset // 🫥 WIP
|
||||
FnUpdateStageEntities PsxOffset
|
||||
FnUpdate psx.Addr
|
||||
FnHitDetection psx.Addr
|
||||
FnUpdateRoomPos psx.Addr
|
||||
FnInitRoomEntities psx.Addr
|
||||
Rooms psx.Addr // ✅
|
||||
Sprites psx.Addr // ✅
|
||||
Cluts psx.Addr // 🫥
|
||||
Layouts psx.Addr // ✅
|
||||
Layers psx.Addr // ✅
|
||||
Graphics psx.Addr // 🫥 WIP
|
||||
FnUpdateStageEntities psx.Addr
|
||||
}
|
||||
|
||||
file, err := os.Open(fileName)
|
||||
@ -74,7 +75,7 @@ func getOvlAssets(fileName string) (ovl, error) {
|
||||
|
||||
// check for unused tile defs (CEN has one)
|
||||
for tileMapsRange.end < tileDefsRange.begin {
|
||||
offset := tileDefsRange.begin.sum(-0x10)
|
||||
offset := tileDefsRange.begin.Sum(-0x10)
|
||||
unusedTileDef, unusedTileDefRange, err := readTiledef(file, offset)
|
||||
if err != nil {
|
||||
return ovl{}, fmt.Errorf("there is a gap between tileMaps and tileDefs: %w", err)
|
||||
@ -83,7 +84,7 @@ func getOvlAssets(fileName string) (ovl, error) {
|
||||
tileDefsRange = mergeDataRanges([]dataRange{tileDefsRange, unusedTileDefRange})
|
||||
}
|
||||
|
||||
sprites, spritesRange, err := readSpritesBanks(file, header.Sprites)
|
||||
sprites, spritesRange, err := readSpritesBanks(file, psx.RamStageBegin, header.Sprites)
|
||||
if err != nil {
|
||||
return ovl{}, fmt.Errorf("unable to gather all sprites: %w", err)
|
||||
}
|
||||
@ -94,7 +95,7 @@ func getOvlAssets(fileName string) (ovl, error) {
|
||||
}
|
||||
|
||||
layoutOff := header.Layouts
|
||||
if layoutOff == RamNull {
|
||||
if layoutOff == psx.RamNull {
|
||||
// some overlays have this field nulled, we have to find the offset ourselves
|
||||
// it should be usually be right after header.Graphics
|
||||
layoutOff = graphicsRange.end // ⚠️ assumption
|
||||
@ -125,8 +126,8 @@ func getOvlAssets(fileName string) (ovl, error) {
|
||||
graphics: dataContainer[gfx]{dataRange: graphicsRange, content: graphics},
|
||||
layouts: dataContainer[layouts]{dataRange: layoutsRange[1], content: entityLayouts},
|
||||
layoutsExtraRange: layoutsRange[0],
|
||||
tileMaps: dataContainer[map[PsxOffset][]byte]{dataRange: tileMapsRange, content: tileMaps},
|
||||
tileDefs: dataContainer[map[PsxOffset]tileDef]{dataRange: tileDefsRange, content: tileDefs},
|
||||
tileMaps: dataContainer[map[psx.Addr][]byte]{dataRange: tileMapsRange, content: tileMaps},
|
||||
tileDefs: dataContainer[map[psx.Addr]tileDef]{dataRange: tileDefsRange, content: tileDefs},
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -246,7 +247,7 @@ func info(fileName string) error {
|
||||
fmt.Println(" - [0x0, .data, header]")
|
||||
for i := 0; i < len(entries); i++ {
|
||||
e := entries[i]
|
||||
s := fmt.Sprintf(" - [0x%X, .data, %s]", e.dataRange.begin.real(), e.name)
|
||||
s := fmt.Sprintf(" - [0x%X, .data, %s]", e.dataRange.begin.Real(psx.RamStageBegin), e.name)
|
||||
if e.comment != "" {
|
||||
s = fmt.Sprintf("%s # %s", s, e.comment)
|
||||
}
|
||||
@ -254,7 +255,7 @@ func info(fileName string) error {
|
||||
|
||||
// if there is a gap between the current entry and the next one, mark it as unrecognized data
|
||||
if i == len(entries)-1 || e.dataRange.end != entries[i+1].dataRange.begin {
|
||||
fmt.Printf(" - [0x%X, data]\n", e.dataRange.end.real())
|
||||
fmt.Printf(" - [0x%X, data]\n", e.dataRange.end.Real(psx.RamStageBegin))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@ -288,92 +289,143 @@ func testStuff() {
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Println("expected 'info', 'extract', 'build' or 'build_all' subcommands")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
switch os.Args[1] {
|
||||
case "info":
|
||||
extractCmd := flag.NewFlagSet("info", flag.ExitOnError)
|
||||
func handlerStage(args []string) error {
|
||||
commands := map[string]func(args []string) error{}
|
||||
commands["info"] = func(args []string) error {
|
||||
var stageOvl string
|
||||
extractCmd := flag.NewFlagSet("info", flag.ExitOnError)
|
||||
extractCmd.StringVar(&stageOvl, "stage_ovl", "", "The overlay file to process")
|
||||
extractCmd.Parse(os.Args[2:])
|
||||
if err := info(stageOvl); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
case "extract":
|
||||
extractCmd := flag.NewFlagSet("extract", flag.ExitOnError)
|
||||
extractCmd.Parse(args)
|
||||
return info(stageOvl)
|
||||
}
|
||||
commands["extract"] = func(args []string) error {
|
||||
var stageOvl string
|
||||
var assetDir string
|
||||
extractCmd := flag.NewFlagSet("extract", flag.ExitOnError)
|
||||
extractCmd.StringVar(&stageOvl, "stage_ovl", "", "The overlay file to process")
|
||||
extractCmd.StringVar(&assetDir, "o", "", "Where to extract the asset files")
|
||||
extractCmd.Parse(args)
|
||||
|
||||
extractCmd.Parse(os.Args[2:])
|
||||
if stageOvl == "" || assetDir == "" {
|
||||
fmt.Println("stage_ovl and asset_dir are required for extract")
|
||||
fmt.Fprintln(os.Stderr, "stage_ovl and asset_dir are required for extract")
|
||||
extractCmd.PrintDefaults()
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := extract(stageOvl, assetDir); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
case "build":
|
||||
buildCmd := flag.NewFlagSet("build", flag.ExitOnError)
|
||||
return extract(stageOvl, assetDir)
|
||||
}
|
||||
commands["build"] = func(args []string) error {
|
||||
var file string
|
||||
var kind string
|
||||
var outputDir string
|
||||
buildCmd := flag.NewFlagSet("build", flag.ExitOnError)
|
||||
buildCmd.StringVar(&file, "file", "", "File to process")
|
||||
buildCmd.StringVar(&kind, "kind", "", "Kind of the file to process")
|
||||
buildCmd.StringVar(&outputDir, "o", "", "Where to store the processed source files")
|
||||
|
||||
buildCmd.Parse(os.Args[2:])
|
||||
buildCmd.Parse(args)
|
||||
|
||||
if file == "" || kind == "" || outputDir == "" {
|
||||
fmt.Println("file, kind, and output_dir are required for build")
|
||||
fmt.Fprintln(os.Stderr, "file, kind, and output_dir are required for build")
|
||||
buildCmd.PrintDefaults()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var err error
|
||||
switch kind {
|
||||
case "rooms":
|
||||
err = buildRooms(file, outputDir)
|
||||
return buildRooms(file, outputDir)
|
||||
case "layers":
|
||||
err = buildLayers(path.Base(file), file, outputDir)
|
||||
return buildLayers(path.Base(file), file, outputDir)
|
||||
case "sprites":
|
||||
err = buildSprites(file, outputDir)
|
||||
default:
|
||||
fmt.Println("unknown kind, valid values are 'room', 'layer', 'sprites'")
|
||||
return buildSprites(file, outputDir)
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
case "build_all":
|
||||
return fmt.Errorf("unknown kind, valid values are 'room', 'layer', 'sprites'")
|
||||
}
|
||||
commands["build_all"] = func(args []string) error {
|
||||
buildCmd := flag.NewFlagSet("build_all", flag.ExitOnError)
|
||||
var inputDir string
|
||||
var outputDir string
|
||||
buildCmd.StringVar(&inputDir, "i", "", "Folder where all the assets are located")
|
||||
buildCmd.StringVar(&outputDir, "o", "", "Where to store the processed source files")
|
||||
|
||||
buildCmd.Parse(os.Args[2:])
|
||||
buildCmd.Parse(args)
|
||||
|
||||
if inputDir == "" || outputDir == "" {
|
||||
fmt.Println("input_dir and output_dir are required for build")
|
||||
fmt.Fprintln(os.Stderr, "input_dir and output_dir are required for build")
|
||||
buildCmd.PrintDefaults()
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := buildAll(inputDir, outputDir); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
default:
|
||||
fmt.Println("expected 'info', 'extract', 'build' or 'build_all' subcommands")
|
||||
os.Exit(1)
|
||||
return buildAll(inputDir, outputDir)
|
||||
}
|
||||
|
||||
if len(args) > 0 {
|
||||
command := args[0]
|
||||
if f, found := commands[command]; found {
|
||||
return f(args[1:])
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "unknown subcommand %q. Valid subcommands are %s\n", command, joinMapKeys(commands, ", "))
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "Need a subcommand. Valid subcommands are %s\n", joinMapKeys(commands, ", "))
|
||||
}
|
||||
os.Exit(1)
|
||||
return nil
|
||||
}
|
||||
|
||||
func handlerConfigExtract(args []string) error {
|
||||
c, err := readConfig(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return extractFromConfig(c)
|
||||
}
|
||||
|
||||
func handlerConfigBuild(args []string) error {
|
||||
c, err := readConfig(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return buildFromConfig(c)
|
||||
}
|
||||
|
||||
func handlerConfig(args []string) error {
|
||||
commands := map[string]func(args []string) error{
|
||||
"extract": handlerConfigExtract,
|
||||
"build": handlerConfigBuild,
|
||||
}
|
||||
|
||||
if len(args) > 0 {
|
||||
command := args[0]
|
||||
if f, found := commands[command]; found {
|
||||
if err := f(args[1:]); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "unknown subcommand %q. Valid subcommand are %s\n", command, joinMapKeys(commands, ", "))
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "Need a subcommand. Valid subcommand are %s\n", joinMapKeys(commands, ", "))
|
||||
}
|
||||
os.Exit(1)
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
commands := map[string]func(args []string) error{
|
||||
"stage": handlerStage,
|
||||
"config": handlerConfig,
|
||||
}
|
||||
|
||||
args := os.Args[1:]
|
||||
if len(args) > 0 {
|
||||
command := args[0]
|
||||
if f, found := commands[command]; found {
|
||||
if err := f(args[1:]); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "unknown command %q. Valid commands are %s\n", command, joinMapKeys(commands, ", "))
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "Need a command. Valid commands are %s\n", joinMapKeys(commands, ", "))
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
|
@ -1,27 +1,30 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
)
|
||||
|
||||
func getTilemapFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tilemap_%05X.bin", off.real())
|
||||
func getTilemapFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tilemap_%05X.bin", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
||||
func getTiledefFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tiledef_%05X.json", off.real())
|
||||
func getTiledefFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tiledef_%05X.json", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
||||
func getTiledefIndicesFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tiledef_%05X_tiles.bin", off.real())
|
||||
func getTiledefIndicesFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tiledef_%05X_tiles.bin", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
||||
func getTiledefPagesFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tiledef_%05X_pages.bin", off.real())
|
||||
func getTiledefPagesFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tiledef_%05X_pages.bin", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
||||
func getTiledefClutsFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tiledef_%05X_cluts.bin", off.real())
|
||||
func getTiledefClutsFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tiledef_%05X_cluts.bin", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
||||
func getTiledefCollisionsFileName(off PsxOffset) string {
|
||||
return fmt.Sprintf("tiledef_%05X_cols.bin", off.real())
|
||||
func getTiledefCollisionsFileName(off psx.Addr) string {
|
||||
return fmt.Sprintf("tiledef_%05X_cols.bin", off.Real(psx.RamStageBegin))
|
||||
}
|
||||
|
67
tools/sotn-assets/psx/offsets.go
Normal file
67
tools/sotn-assets/psx/offsets.go
Normal file
@ -0,0 +1,67 @@
|
||||
package psx
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
type Addr uint32
|
||||
|
||||
const (
|
||||
RamNull = Addr(0)
|
||||
RamGameBegin = Addr(0x800A0000)
|
||||
RamStageBegin = Addr(0x80180000)
|
||||
RamStageEnd = Addr(0x801C0000)
|
||||
RamGameEnd = Addr(0x801F8000)
|
||||
)
|
||||
|
||||
func (off Addr) Format(f fmt.State, c rune) {
|
||||
f.Write([]byte(fmt.Sprintf("0x%08X", uint32(off))))
|
||||
}
|
||||
|
||||
func (off Addr) Real(begin Addr) int {
|
||||
return int(off - begin)
|
||||
}
|
||||
|
||||
func (off Addr) Align4() Addr {
|
||||
if (off & 3) != 0 {
|
||||
return (off | 3) + 1
|
||||
}
|
||||
return off
|
||||
}
|
||||
|
||||
func (off Addr) Sum(x int) Addr {
|
||||
return Addr(uint32(off) + uint32(x))
|
||||
}
|
||||
|
||||
func (off Addr) DistanceTo(x Addr) int {
|
||||
return int(x - off)
|
||||
}
|
||||
|
||||
func (off Addr) InRange(begin Addr, end Addr) bool {
|
||||
return off >= begin && off < end
|
||||
}
|
||||
|
||||
func (off Addr) MoveFile(r io.ReadSeeker, begin Addr) error {
|
||||
end := RamGameEnd
|
||||
if !off.InRange(begin, end) {
|
||||
err := fmt.Errorf("offset %s is outside the boundaries [%s, %s]", off, begin, end)
|
||||
panic(err)
|
||||
return err
|
||||
}
|
||||
|
||||
fileOffset := int64(off - begin)
|
||||
r.Seek(fileOffset, 0)
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAddr(data []byte) Addr {
|
||||
return Addr(binary.LittleEndian.Uint32(data))
|
||||
}
|
||||
|
||||
func ReadAddr(r io.Reader) Addr {
|
||||
b := make([]byte, 4)
|
||||
_, _ = r.Read(b)
|
||||
return GetAddr(b)
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type PsxOffset uint32
|
||||
|
||||
const (
|
||||
RamNull = PsxOffset(0)
|
||||
RamStageBegin = PsxOffset(0x80180000)
|
||||
RamStageEnd = PsxOffset(0x801C0000)
|
||||
)
|
||||
|
||||
func (off PsxOffset) Format(f fmt.State, c rune) {
|
||||
f.Write([]byte(fmt.Sprintf("0x%08X", uint32(off))))
|
||||
}
|
||||
|
||||
func (off PsxOffset) real() int {
|
||||
return int(off - RamStageBegin)
|
||||
}
|
||||
|
||||
func (off PsxOffset) align4() PsxOffset {
|
||||
if (off & 3) != 0 {
|
||||
return (off | 3) + 1
|
||||
}
|
||||
return off
|
||||
}
|
||||
|
||||
func (off PsxOffset) sum(x int) PsxOffset {
|
||||
return PsxOffset(uint32(off) + uint32(x))
|
||||
}
|
||||
|
||||
func (off PsxOffset) distanceTo(x PsxOffset) int {
|
||||
return int(x - off)
|
||||
}
|
||||
|
||||
func (off PsxOffset) valid() bool {
|
||||
return off >= RamStageBegin && off < RamStageEnd
|
||||
}
|
||||
|
||||
func (off PsxOffset) moveFile(file *os.File) error {
|
||||
if !off.valid() {
|
||||
err := fmt.Errorf("offset %08X is outside the stage boundaries", off)
|
||||
panic(err)
|
||||
return err
|
||||
}
|
||||
|
||||
stats, err := file.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fileOffset := int64(off - RamStageBegin)
|
||||
if fileOffset >= stats.Size() {
|
||||
return fmt.Errorf("offset %08X is outside the file boundaries", off)
|
||||
}
|
||||
|
||||
file.Seek(fileOffset, 0)
|
||||
return nil
|
||||
}
|
||||
|
||||
func sortUniqueOffsets(slice []PsxOffset) []PsxOffset {
|
||||
unique := map[PsxOffset]struct{}{}
|
||||
for _, v := range slice {
|
||||
unique[v] = struct{}{}
|
||||
}
|
||||
newSlice := make([]PsxOffset, 0, len(unique))
|
||||
for offset := range unique {
|
||||
newSlice = append(newSlice, offset)
|
||||
}
|
||||
|
||||
slices.SortFunc(newSlice, func(a, b PsxOffset) int {
|
||||
if a < b {
|
||||
return -1
|
||||
} else if a > b {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
return newSlice
|
||||
}
|
@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
)
|
||||
|
||||
@ -20,11 +21,11 @@ func (r room) isTerminator() bool {
|
||||
return r.Left == 0x40
|
||||
}
|
||||
|
||||
func readRooms(file *os.File, off PsxOffset) ([]room, dataRange, error) {
|
||||
func readRooms(file *os.File, off psx.Addr) ([]room, dataRange, error) {
|
||||
if off == 0 {
|
||||
return nil, dataRange{}, nil
|
||||
}
|
||||
if err := off.moveFile(file); err != nil {
|
||||
if err := off.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
|
||||
@ -41,6 +42,6 @@ func readRooms(file *os.File, off PsxOffset) ([]room, dataRange, error) {
|
||||
}
|
||||
return rooms, dataRange{
|
||||
begin: off,
|
||||
end: off.sum(len(rooms)*8 + 4),
|
||||
end: off.Sum(len(rooms)*8 + 4),
|
||||
}, nil
|
||||
}
|
||||
|
@ -3,7 +3,8 @@ package main
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"io"
|
||||
"sort"
|
||||
)
|
||||
|
||||
@ -26,49 +27,49 @@ type spriteDefs struct {
|
||||
Indices []int `json:"indices"`
|
||||
}
|
||||
|
||||
func readSprites(file *os.File, off PsxOffset) ([]sprite, dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readSprites(r io.ReadSeeker, baseAddr, addr psx.Addr) ([]sprite, dataRange, error) {
|
||||
if err := addr.MoveFile(r, baseAddr); err != nil {
|
||||
return nil, dataRange{}, fmt.Errorf("invalid sprites: %w", err)
|
||||
}
|
||||
|
||||
var count uint16
|
||||
if err := binary.Read(file, binary.LittleEndian, &count); err != nil {
|
||||
if err := binary.Read(r, binary.LittleEndian, &count); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
|
||||
sprites := make([]sprite, count)
|
||||
if err := binary.Read(file, binary.LittleEndian, sprites); err != nil {
|
||||
if err := binary.Read(r, binary.LittleEndian, sprites); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
|
||||
return sprites, dataRange{
|
||||
begin: off,
|
||||
end: off.sum(4 + 0x16*int(count)).align4(),
|
||||
begin: addr,
|
||||
end: addr.Sum(4 + 0x16*int(count)).Align4(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func readSpriteBank(file *os.File, off PsxOffset) ([]*[]sprite, dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readFrameSet(r io.ReadSeeker, baseAddr, addr psx.Addr) ([]*[]sprite, dataRange, error) {
|
||||
if err := addr.MoveFile(r, baseAddr); err != nil {
|
||||
return nil, dataRange{}, fmt.Errorf("invalid sprite Indices: %w", err)
|
||||
}
|
||||
|
||||
// the end of the sprite array is the beginning of the earliest sprite offset
|
||||
earliestSpriteOff := RamStageEnd
|
||||
currentOff := off
|
||||
spriteOffsets := make([]PsxOffset, 0)
|
||||
earliestSpriteOff := psx.RamStageEnd
|
||||
currentOff := addr
|
||||
spriteOffsets := make([]psx.Addr, 0)
|
||||
for {
|
||||
if currentOff == earliestSpriteOff {
|
||||
break
|
||||
}
|
||||
currentOff += 4
|
||||
|
||||
var spriteOffset PsxOffset
|
||||
if err := binary.Read(file, binary.LittleEndian, &spriteOffset); err != nil {
|
||||
var spriteOffset psx.Addr
|
||||
if err := binary.Read(r, binary.LittleEndian, &spriteOffset); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
spriteOffsets = append(spriteOffsets, spriteOffset)
|
||||
if spriteOffset != RamNull {
|
||||
if !spriteOffset.valid() {
|
||||
if spriteOffset != psx.RamNull {
|
||||
if !spriteOffset.InRange(baseAddr, psx.RamGameEnd) {
|
||||
err := fmt.Errorf("sprite offset %s is not valid", spriteOffset)
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
@ -76,18 +77,18 @@ func readSpriteBank(file *os.File, off PsxOffset) ([]*[]sprite, dataRange, error
|
||||
}
|
||||
}
|
||||
headerRange := dataRange{
|
||||
begin: off,
|
||||
begin: addr,
|
||||
end: earliestSpriteOff,
|
||||
}
|
||||
|
||||
spriteBank := make([]*[]sprite, len(spriteOffsets))
|
||||
spriteRanges := []dataRange{}
|
||||
for i, offset := range spriteOffsets {
|
||||
if offset == RamNull {
|
||||
if offset == psx.RamNull {
|
||||
spriteBank[i] = nil
|
||||
continue
|
||||
}
|
||||
sprites, ranges, err := readSprites(file, offset)
|
||||
sprites, ranges, err := readSprites(r, baseAddr, offset)
|
||||
if err != nil {
|
||||
return nil, dataRange{}, fmt.Errorf("unable to read sprites: %w", err)
|
||||
}
|
||||
@ -98,37 +99,43 @@ func readSpriteBank(file *os.File, off PsxOffset) ([]*[]sprite, dataRange, error
|
||||
return spriteBank, mergeDataRanges(append(spriteRanges, headerRange)), nil
|
||||
}
|
||||
|
||||
func readSpritesBanks(file *os.File, off PsxOffset) (spriteDefs, dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readSpritesBanks(r io.ReadSeeker, baseAddr, addr psx.Addr) (spriteDefs, dataRange, error) {
|
||||
if err := addr.MoveFile(r, baseAddr); err != nil {
|
||||
return spriteDefs{}, dataRange{}, err
|
||||
}
|
||||
|
||||
offBanks := make([]PsxOffset, 24)
|
||||
if err := binary.Read(file, binary.LittleEndian, offBanks); err != nil {
|
||||
return spriteDefs{}, dataRange{}, err
|
||||
// start with a capacity of 24 as that's the length for all the stage overlays
|
||||
offBanks := make([]psx.Addr, 0, 24)
|
||||
for {
|
||||
addr := psx.ReadAddr(r)
|
||||
if addr != psx.RamNull && !addr.InRange(baseAddr, psx.RamGameEnd) {
|
||||
break
|
||||
}
|
||||
offBanks = append(offBanks, addr)
|
||||
}
|
||||
r.Seek(-4, io.SeekCurrent)
|
||||
|
||||
// the order sprites are stored must be preserved
|
||||
pool := map[PsxOffset][]*[]sprite{}
|
||||
pool := map[psx.Addr][]*[]sprite{}
|
||||
spriteRanges := []dataRange{}
|
||||
for _, offset := range offBanks {
|
||||
if offset == RamNull {
|
||||
for _, spriteAddr := range offBanks {
|
||||
if spriteAddr == psx.RamNull {
|
||||
continue
|
||||
}
|
||||
if _, found := pool[offset]; found {
|
||||
if _, found := pool[spriteAddr]; found {
|
||||
continue
|
||||
}
|
||||
bank, bankRange, err := readSpriteBank(file, offset)
|
||||
bank, bankRange, err := readFrameSet(r, baseAddr, spriteAddr)
|
||||
if err != nil {
|
||||
return spriteDefs{}, dataRange{}, fmt.Errorf("unable to read sprite Indices: %w", err)
|
||||
}
|
||||
pool[offset] = bank
|
||||
pool[spriteAddr] = bank
|
||||
spriteRanges = append(spriteRanges, bankRange)
|
||||
}
|
||||
|
||||
// the indices do not guarantee sprites to be stored in a linear order
|
||||
// we must sort the offsets to preserve the order sprites are stored
|
||||
sortedOffsets := make([]PsxOffset, 0, len(pool))
|
||||
sortedOffsets := make([]psx.Addr, 0, len(pool))
|
||||
for offset := range pool {
|
||||
sortedOffsets = append(sortedOffsets, offset)
|
||||
}
|
||||
@ -137,7 +144,7 @@ func readSpritesBanks(file *os.File, off PsxOffset) (spriteDefs, dataRange, erro
|
||||
// create a list of indices to replace the original pointers
|
||||
indices := make([]int, len(offBanks))
|
||||
for i, offset := range offBanks {
|
||||
if offset == RamNull {
|
||||
if offset == psx.RamNull {
|
||||
indices[i] = -1
|
||||
}
|
||||
for j, sortedOffset := range sortedOffsets {
|
||||
|
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
)
|
||||
|
||||
@ -20,12 +21,12 @@ type tileDefPaths struct {
|
||||
Collisions string `json:"collisions"`
|
||||
}
|
||||
|
||||
func readTiledef(file *os.File, off PsxOffset) (tileDef, dataRange, error) {
|
||||
if err := off.moveFile(file); err != nil {
|
||||
func readTiledef(file *os.File, off psx.Addr) (tileDef, dataRange, error) {
|
||||
if err := off.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
|
||||
offsets := make([]PsxOffset, 4)
|
||||
offsets := make([]psx.Addr, 4)
|
||||
if err := binary.Read(file, binary.LittleEndian, offsets); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
@ -37,28 +38,28 @@ func readTiledef(file *os.File, off PsxOffset) (tileDef, dataRange, error) {
|
||||
cols: make([]byte, off-offsets[3]),
|
||||
}
|
||||
|
||||
if err := offsets[0].moveFile(file); err != nil {
|
||||
if err := offsets[0].MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
if _, err := file.Read(td.tiles); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
|
||||
if err := offsets[1].moveFile(file); err != nil {
|
||||
if err := offsets[1].MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
if _, err := file.Read(td.pages); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
|
||||
if err := offsets[2].moveFile(file); err != nil {
|
||||
if err := offsets[2].MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
if _, err := file.Read(td.cluts); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
|
||||
if err := offsets[3].moveFile(file); err != nil {
|
||||
if err := offsets[3].MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return tileDef{}, dataRange{}, err
|
||||
}
|
||||
if _, err := file.Read(td.cols); err != nil {
|
||||
@ -67,13 +68,13 @@ func readTiledef(file *os.File, off PsxOffset) (tileDef, dataRange, error) {
|
||||
|
||||
return td, dataRange{
|
||||
begin: offsets[0],
|
||||
end: off.sum(0x10),
|
||||
end: off.Sum(0x10),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func readAllTiledefs(file *os.File, roomLayers []roomLayers) (map[PsxOffset]tileDef, dataRange, error) {
|
||||
func readAllTiledefs(file *os.File, roomLayers []roomLayers) (map[psx.Addr]tileDef, dataRange, error) {
|
||||
ranges := []dataRange{}
|
||||
processed := map[PsxOffset]tileDef{}
|
||||
processed := map[psx.Addr]tileDef{}
|
||||
for _, rl := range roomLayers {
|
||||
if rl.fg != nil {
|
||||
if _, found := processed[rl.fg.Tiledef]; !found {
|
||||
|
@ -2,11 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"os"
|
||||
)
|
||||
|
||||
func readTilemap(file *os.File, layer *layer) ([]byte, dataRange, error) {
|
||||
if err := layer.Data.moveFile(file); err != nil {
|
||||
if err := layer.Data.MoveFile(file, psx.RamStageBegin); err != nil {
|
||||
return nil, dataRange{}, err
|
||||
}
|
||||
data := make([]byte, layer.tilemapFileSize())
|
||||
@ -15,13 +16,13 @@ func readTilemap(file *os.File, layer *layer) ([]byte, dataRange, error) {
|
||||
}
|
||||
return data, dataRange{
|
||||
begin: layer.Data,
|
||||
end: layer.Data.sum(len(data)),
|
||||
end: layer.Data.Sum(len(data)),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func readAllTileMaps(file *os.File, roomLayers []roomLayers) (map[PsxOffset][]byte, dataRange, error) {
|
||||
func readAllTileMaps(file *os.File, roomLayers []roomLayers) (map[psx.Addr][]byte, dataRange, error) {
|
||||
ranges := []dataRange{}
|
||||
processed := map[PsxOffset][]byte{}
|
||||
processed := map[psx.Addr][]byte{}
|
||||
for _, rl := range roomLayers {
|
||||
if rl.fg != nil {
|
||||
if _, found := processed[rl.fg.Data]; !found {
|
||||
|
@ -1,5 +1,19 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/xeeynamo/sotn-decomp/tools/sotn-assets/psx"
|
||||
"slices"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func joinMapKeys[T any](m map[string]T, sep string) string {
|
||||
keys := make([]string, 0, len(m))
|
||||
for k := range m {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
return strings.Join(keys, sep)
|
||||
}
|
||||
|
||||
func minBy[T any](slice []T, getter func(T) int) (max int) {
|
||||
if len(slice) == 0 {
|
||||
return max
|
||||
@ -34,3 +48,24 @@ func btoi(b bool) int {
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func sortUniqueOffsets(slice []psx.Addr) []psx.Addr {
|
||||
unique := map[psx.Addr]struct{}{}
|
||||
for _, v := range slice {
|
||||
unique[v] = struct{}{}
|
||||
}
|
||||
newSlice := make([]psx.Addr, 0, len(unique))
|
||||
for offset := range unique {
|
||||
newSlice = append(newSlice, offset)
|
||||
}
|
||||
|
||||
slices.SortFunc(newSlice, func(a, b psx.Addr) int {
|
||||
if a < b {
|
||||
return -1
|
||||
} else if a > b {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
return newSlice
|
||||
}
|
||||
|
@ -1,8 +1,5 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import io
|
||||
import os
|
||||
import sys
|
||||
from typing import Optional
|
||||
@ -12,102 +9,6 @@ from pathlib import Path
|
||||
sys.path.append(f"{os.getcwd()}/tools/splat_ext")
|
||||
from splat.util import options
|
||||
from splat.segtypes.n64.segment import N64Segment
|
||||
import utils
|
||||
|
||||
|
||||
item_size = 0x16 # sizeof(SpritePart)
|
||||
|
||||
|
||||
def parse_spriteparts(data: bytearray) -> list:
|
||||
count = utils.to_s16(data[0:])
|
||||
items = []
|
||||
data = data[2:]
|
||||
for i in range(0, count):
|
||||
items.append(
|
||||
{
|
||||
"flags": utils.to_s16(data[0:]),
|
||||
"offsetx": utils.to_s16(data[2:]),
|
||||
"offsety": utils.to_s16(data[4:]),
|
||||
"width": utils.to_s16(data[6:]),
|
||||
"height": utils.to_s16(data[8:]),
|
||||
"clut": utils.to_s16(data[10:]),
|
||||
"tileset": utils.to_s16(data[12:]),
|
||||
"left": utils.to_s16(data[14:]),
|
||||
"top": utils.to_s16(data[16:]),
|
||||
"right": utils.to_s16(data[18:]),
|
||||
"bottom": utils.to_s16(data[20:]),
|
||||
}
|
||||
)
|
||||
data = data[item_size:]
|
||||
return items
|
||||
|
||||
|
||||
def parse_animset(start_ptr, data: bytearray) -> list:
|
||||
end_ptr = start_ptr + len(data)
|
||||
assumed_list_end = len(data)
|
||||
spriteparts_offsets = []
|
||||
for i in range(0, len(data), 4):
|
||||
if i >= assumed_list_end:
|
||||
break
|
||||
ptr = utils.to_u32(data[i:])
|
||||
if ptr != 0:
|
||||
if ptr < start_ptr or ptr >= end_ptr:
|
||||
utils.log_fatal(
|
||||
f"spriteparts list pointer 0x{ptr:X} is out of bounds (start:{start_ptr:X}, end:{end_ptr:X})"
|
||||
)
|
||||
offset = ptr - start_ptr
|
||||
assumed_list_end = min(assumed_list_end, offset)
|
||||
spriteparts_offsets.append(offset)
|
||||
else:
|
||||
spriteparts_offsets.append(0)
|
||||
|
||||
animset = []
|
||||
for offset in spriteparts_offsets:
|
||||
if offset != 0:
|
||||
animset.append(parse_spriteparts(data[offset:]))
|
||||
else:
|
||||
animset.append(None)
|
||||
return animset
|
||||
|
||||
|
||||
def write_animset_list_as_asm(writer: io.BufferedWriter, name: str, content: str):
|
||||
animset = json.loads(content)
|
||||
|
||||
writer.write(".section .data\n")
|
||||
writer.write(f".global {name}\n")
|
||||
writer.write(f"{name}:\n")
|
||||
|
||||
for i, spriteparts in enumerate(animset):
|
||||
if spriteparts != None:
|
||||
writer.write(f".word {name}_{i}\n")
|
||||
else:
|
||||
writer.write(".word 0\n")
|
||||
|
||||
for i, spriteparts in enumerate(animset):
|
||||
if spriteparts == None:
|
||||
continue
|
||||
n_parts = len(spriteparts)
|
||||
writer.write(f".global {name}_{i}\n")
|
||||
writer.write(f"{name}_{i}:\n")
|
||||
writer.write(f".half {n_parts}\n")
|
||||
for i, part in enumerate(spriteparts):
|
||||
writer.write(f"# part {i}\n")
|
||||
writer.write(f".half {part['flags']}\n")
|
||||
writer.write(f".half {part['offsetx']}\n")
|
||||
writer.write(f".half {part['offsety']}\n")
|
||||
writer.write(f".half {part['width']}\n")
|
||||
writer.write(f".half {part['height']}\n")
|
||||
writer.write(f".half {part['clut']}\n")
|
||||
writer.write(f".half {part['tileset']}\n")
|
||||
writer.write(f".half {part['left']}\n")
|
||||
writer.write(f".half {part['top']}\n")
|
||||
writer.write(f".half {part['right']}\n")
|
||||
writer.write(f".half {part['bottom']}\n")
|
||||
# now align by 4
|
||||
if (n_parts % 2) == 1:
|
||||
writer.write(f".word 0 # terminator\n")
|
||||
else:
|
||||
writer.write(f".half 0 # terminator\n")
|
||||
|
||||
|
||||
class PSXSegAnimset(N64Segment):
|
||||
@ -121,52 +22,9 @@ class PSXSegAnimset(N64Segment):
|
||||
return options.opts.asset_path / self.dir / f"{self.name}.animset.json"
|
||||
|
||||
def split(self, rom_bytes):
|
||||
path = self.src_path()
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
data = parse_animset(
|
||||
self.vram_start,
|
||||
rom_bytes[self.rom_start : self.rom_end],
|
||||
)
|
||||
with open(path, "w") as f:
|
||||
f.write(json.dumps(data, indent=4))
|
||||
|
||||
|
||||
def get_file_name(full_path):
|
||||
file_name = os.path.basename(full_path)
|
||||
exts = os.path.splitext(file_name)
|
||||
if len(exts) > 1 and len(exts[1]) > 0:
|
||||
return get_file_name(exts[0])
|
||||
return exts[0]
|
||||
return
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
description="De/serialize a list of animation sets"
|
||||
)
|
||||
subparsers = parser.add_subparsers(dest="command")
|
||||
|
||||
gen_asm_parser = subparsers.add_parser(
|
||||
"gen-asm",
|
||||
description="Generate assembly code from an already parsed JSON",
|
||||
)
|
||||
gen_asm_parser.add_argument(
|
||||
"input",
|
||||
help="The animset parsed in JSON to convert",
|
||||
)
|
||||
gen_asm_parser.add_argument(
|
||||
"output",
|
||||
help="Generates the correspondent assembly code",
|
||||
)
|
||||
gen_asm_parser.add_argument(
|
||||
"-s", "--symbol", required=False, type=str, help="Assign a custom symbol name"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.command == "gen-asm":
|
||||
symbol_name = args.symbol
|
||||
if symbol_name is None:
|
||||
symbol_name = get_file_name(args.input)
|
||||
with open(args.input, "r") as f_in:
|
||||
with open(args.output, "w") as f_out:
|
||||
write_animset_list_as_asm(f_out, symbol_name, f_in.read())
|
||||
print("dummy")
|
||||
exit(1)
|
||||
|
Loading…
Reference in New Issue
Block a user