mirror of
https://github.com/pmret/papermario.git
synced 2024-11-08 12:02:30 +01:00
match world partner table
This commit is contained in:
parent
abbeb58dd2
commit
64dbc07d56
2
.gitignore
vendored
2
.gitignore
vendored
@ -19,7 +19,9 @@ settings.mk
|
|||||||
/build/
|
/build/
|
||||||
/docs/doxygen/
|
/docs/doxygen/
|
||||||
/include/ld_addrs.h
|
/include/ld_addrs.h
|
||||||
|
/include/message_ids.h
|
||||||
/include/sprite/
|
/include/sprite/
|
||||||
|
/include/map
|
||||||
|
|
||||||
# Assets
|
# Assets
|
||||||
/bin
|
/bin
|
||||||
|
16
Makefile
16
Makefile
@ -37,7 +37,7 @@ LD_MAP := $(BUILD_DIR)/$(TARGET).map
|
|||||||
ASSETS_BIN := $(BUILD_DIR)/bin/assets/assets.bin
|
ASSETS_BIN := $(BUILD_DIR)/bin/assets/assets.bin
|
||||||
MSG_BIN := $(BUILD_DIR)/msg.bin
|
MSG_BIN := $(BUILD_DIR)/msg.bin
|
||||||
NPC_BIN := $(BUILD_DIR)/sprite/npc.bin
|
NPC_BIN := $(BUILD_DIR)/sprite/npc.bin
|
||||||
GENERATED_HEADERS := include/ld_addrs.h include/sprite
|
GENERATED_HEADERS := include/ld_addrs.h $(foreach dir, $(NPC_DIRS), include/$(dir).h)
|
||||||
|
|
||||||
### Tools ###
|
### Tools ###
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ setup: clean submodules tools split $(LD_SCRIPT)
|
|||||||
# tools/star-rod submodule intentionally omitted
|
# tools/star-rod submodule intentionally omitted
|
||||||
submodules:
|
submodules:
|
||||||
git submodule init tools/n64splat
|
git submodule init tools/n64splat
|
||||||
git submodule update --init --recursive
|
git submodule update --recursive
|
||||||
|
|
||||||
split:
|
split:
|
||||||
$(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites --new
|
$(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites --new
|
||||||
@ -161,12 +161,12 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0
|
|||||||
$(LD) -r -b binary -o $@ $<
|
$(LD) -r -b binary -o $@ $<
|
||||||
|
|
||||||
# Compile C files
|
# Compile C files
|
||||||
$(BUILD_DIR)/%.c.o: %.c $(MDEPS) | $(GENERATED_HEADERS)
|
$(BUILD_DIR)/%.c.o: %.c $(MDEPS) $(GENERATED_HEADERS)
|
||||||
@mkdir -p $(shell dirname $@)
|
@mkdir -p $(shell dirname $@)
|
||||||
$(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ -
|
$(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ -
|
||||||
|
|
||||||
# Compile C files (with DSL macros)
|
# Compile C files (with DSL macros)
|
||||||
$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py | $(GENERATED_HEADERS)
|
$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py $(GENERATED_HEADERS)
|
||||||
@mkdir -p $(shell dirname $@)
|
@mkdir -p $(shell dirname $@)
|
||||||
$(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ -
|
$(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ -
|
||||||
|
|
||||||
@ -257,10 +257,12 @@ include/sprite/npc/%.h: sprite/npc/%/SpriteSheet.xml tools/gen_sprite_animations
|
|||||||
@mkdir -p $(shell dirname $@)
|
@mkdir -p $(shell dirname $@)
|
||||||
@echo "building $@"
|
@echo "building $@"
|
||||||
@$(PYTHON) tools/gen_sprite_animations_h.py $@ sprite/npc/$* $(NPC_DIRS)
|
@$(PYTHON) tools/gen_sprite_animations_h.py $@ sprite/npc/$* $(NPC_DIRS)
|
||||||
include/sprite: $(foreach dir, $(NPC_DIRS), include/$(dir).h)
|
|
||||||
|
|
||||||
|
### Linker ###
|
||||||
|
|
||||||
$(LD_SCRIPT): $(SPLAT_YAML)
|
$(LD_SCRIPT): $(SPLAT_YAML)
|
||||||
$(SPLAT) --modes ld
|
$(SPLAT) --modes ld > /dev/null
|
||||||
|
|
||||||
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
|
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
|
||||||
@mkdir -p $(shell dirname $@)
|
@mkdir -p $(shell dirname $@)
|
||||||
@ -299,7 +301,7 @@ editor: tools/star-rod sprite/SpriteTable.xml
|
|||||||
|
|
||||||
### Make Settings ###
|
### Make Settings ###
|
||||||
|
|
||||||
.PHONY: clean tools test setup submodules split editor $(ROM) include/sprite
|
.PHONY: clean tools test setup submodules split editor $(ROM)
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
.SECONDARY:
|
.SECONDARY:
|
||||||
.PRECIOUS: $(ROM) %.Yay0
|
.PRECIOUS: $(ROM) %.Yay0
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
.set noat # allow manual use of $at
|
.set noat # allow manual use of $at
|
||||||
.set noreorder # don't insert nops after branches
|
.set noreorder # don't insert nops after branches
|
||||||
|
|
||||||
glabel func_802BDBBC
|
glabel world_goombario_pre_battle
|
||||||
/* 317ADC 802BDBBC 27BDFFE0 */ addiu $sp, $sp, -0x20
|
/* 317ADC 802BDBBC 27BDFFE0 */ addiu $sp, $sp, -0x20
|
||||||
/* 317AE0 802BDBC0 AFB10014 */ sw $s1, 0x14($sp)
|
/* 317AE0 802BDBC0 AFB10014 */ sw $s1, 0x14($sp)
|
||||||
/* 317AE4 802BDBC4 0080882D */ daddu $s1, $a0, $zero
|
/* 317AE4 802BDBC4 0080882D */ daddu $s1, $a0, $zero
|
||||||
@ -16,9 +16,9 @@ glabel func_802BDBBC
|
|||||||
/* 317B08 802BDBE8 0C009C22 */ jal func_80027088
|
/* 317B08 802BDBE8 0C009C22 */ jal func_80027088
|
||||||
/* 317B0C 802BDBEC 0000202D */ daddu $a0, $zero, $zero
|
/* 317B0C 802BDBEC 0000202D */ daddu $a0, $zero, $zero
|
||||||
/* 317B10 802BDBF0 0C038069 */ jal enable_player_input
|
/* 317B10 802BDBF0 0C038069 */ jal enable_player_input
|
||||||
/* 317B14 802BDBF4 00000000 */ nop
|
/* 317B14 802BDBF4 00000000 */ nop
|
||||||
/* 317B18 802BDBF8 0C0B4312 */ jal CancelMessageAndBlock
|
/* 317B18 802BDBF8 0C0B4312 */ jal CancelMessageAndBlock
|
||||||
/* 317B1C 802BDBFC 00000000 */ nop
|
/* 317B1C 802BDBFC 00000000 */ nop
|
||||||
/* 317B20 802BDC00 0C03BD17 */ jal clear_partner_move_history
|
/* 317B20 802BDC00 0C03BD17 */ jal clear_partner_move_history
|
||||||
/* 317B24 802BDC04 0220202D */ daddu $a0, $s1, $zero
|
/* 317B24 802BDC04 0220202D */ daddu $a0, $s1, $zero
|
||||||
/* 317B28 802BDC08 0220202D */ daddu $a0, $s1, $zero
|
/* 317B28 802BDC08 0220202D */ daddu $a0, $s1, $zero
|
||||||
@ -34,5 +34,5 @@ glabel func_802BDBBC
|
|||||||
/* 317B4C 802BDC2C 8FB00010 */ lw $s0, 0x10($sp)
|
/* 317B4C 802BDC2C 8FB00010 */ lw $s0, 0x10($sp)
|
||||||
/* 317B50 802BDC30 03E00008 */ jr $ra
|
/* 317B50 802BDC30 03E00008 */ jr $ra
|
||||||
/* 317B54 802BDC34 27BD0020 */ addiu $sp, $sp, 0x20
|
/* 317B54 802BDC34 27BD0020 */ addiu $sp, $sp, 0x20
|
||||||
/* 317B58 802BDC38 00000000 */ nop
|
/* 317B58 802BDC38 00000000 */ nop
|
||||||
/* 317B5C 802BDC3C 00000000 */ nop
|
/* 317B5C 802BDC3C 00000000 */ nop
|
@ -58,7 +58,7 @@ ASSETS := \
|
|||||||
|
|
||||||
MESSAGES := $(shell find msg -type f -name "*.msg" 2> /dev/null)
|
MESSAGES := $(shell find msg -type f -name "*.msg" 2> /dev/null)
|
||||||
|
|
||||||
NPC_SPRITES := world_goombario world_kooper world_bombette world_parakarry world_bow world_watt world_sushi world_lakilester battle_goombario battle_kooper battle_bombette battle_parakarry battle_bow battle_watt battle_sushi battle_lakilester kooper_without_shell world_eldstar world_mamar world_skolar world_muskular world_misstar world_klevar world_kalmar battle_eldstar battle_mamar battle_skolar battle_muskular battle_misstar battle_klevar battle_kalmar twink jr_troopa spiked_jr_troopa spiked_para_jr_troopa mage_jr_troopa para_jr_troopa goomba spiked_goomba paragoomba koopa_troopa para_troopa fuzzy bob_omb bullet_bill bill_blaster monty_mole cleft pokey battle_bandit buzzy_beetle swooper stone_chomp putrid_piranha piranha_plant sentinel world_clubba battle_clubba shy_guy groove_guy sky_guy pyro_guy spy_guy medi_guy fuzzipede jungle_guy heart_plant hurt_plant m_bush bubble kent_c_koopa dayzee lakitu spiny bzzap ruff_puff spike_top duplighost albino_dino blooper baby_blooper gulpit dry_bones thrown_bone bony_beetle magikoopa flying_magikoopa world_koopatrol koopatrol hammer_bros bush_basic bush_blocky bush_dry bush_leafy bush_matted world_kammy battle_kammy goomba_bros goomba_king spiky_goomnut dark_toad koopa_bros buzzar tutankoopa chain_chomp world_tubba battle_tubba tubbas_heart big_lantern_ghost shy_squad_guy marshal_guy stilt_guy stilt_guy_unfold shy_stack_guy shy_stack_unfold shy_stack_damage shy_stack_rock general_guy general_guy_bomb tank_guy lava_piranha_head petit_piranha lava_bud huff_n_puff tuff_puff monstar crystal_king world_bowser battle_bowser luigi toad three_sisters vanna_t toad_kid toad_guard harry_t toad_minister postmaster conductor_toad train_station_toad fishmael artist_toad koopa koopa_without_shell world_bob_omb whacka dryite mouser boo yoshi yoshi_kid raven bubulb penguin shiver_toad world_bandit goompapa goombaria goomama goompa goomma the_master chan lee merlon chet_rippo rowf minh_t russ_t tayce_t fice_t bartender chanterelle rip_cheato chuck_quizmo merluvlee merlar merlow star_kid kolorado_wife koopa_koot kolorado battle_kolorado archeologist nomadimouse world_merlee battle_merlee disguised_moustafa moustafa oaklie bootler yakkey gourmet_guy village_leader leaders_friend rafael_raven tolielup gate_flower petunia posie lily rosie sun lakilulu ninji mayor_penguin mayor_penguin_wife penguin_patrol herringway merle star_rod fire coin parade_peach parade_koopas parade_burnt_bowser parade_luigi parade_partners parade_yoshis parade_kolorados parade_chicks parade_ice_show parade_toads parade_batons parade_drums parade_flags parade_horns parade_tubba_balloon parade_wizards parade_mario parade_shy_guys parade_twink leaf
|
NPC_SPRITES := world_goombario world_kooper world_bombette world_parakarry world_bow world_watt world_sushie world_lakilester battle_goombario battle_kooper battle_bombette battle_parakarry battle_bow battle_watt battle_sushie battle_lakilester kooper_without_shell world_eldstar world_mamar world_skolar world_muskular world_misstar world_klevar world_kalmar battle_eldstar battle_mamar battle_skolar battle_muskular battle_misstar battle_klevar battle_kalmar twink jr_troopa spiked_jr_troopa spiked_para_jr_troopa mage_jr_troopa para_jr_troopa goomba spiked_goomba paragoomba koopa_troopa para_troopa fuzzy bob_omb bullet_bill bill_blaster monty_mole cleft pokey battle_bandit buzzy_beetle swooper stone_chomp putrid_piranha piranha_plant sentinel world_clubba battle_clubba shy_guy groove_guy sky_guy pyro_guy spy_guy medi_guy fuzzipede jungle_guy heart_plant hurt_plant m_bush bubble kent_c_koopa dayzee lakitu spiny bzzap ruff_puff spike_top duplighost albino_dino blooper baby_blooper gulpit dry_bones thrown_bone bony_beetle magikoopa flying_magikoopa world_koopatrol koopatrol hammer_bros bush_basic bush_blocky bush_dry bush_leafy bush_matted world_kammy battle_kammy goomba_bros goomba_king spiky_goomnut dark_toad koopa_bros buzzar tutankoopa chain_chomp world_tubba battle_tubba tubbas_heart big_lantern_ghost shy_squad_guy marshal_guy stilt_guy stilt_guy_unfold shy_stack_guy shy_stack_unfold shy_stack_damage shy_stack_rock general_guy general_guy_bomb tank_guy lava_piranha_head petit_piranha lava_bud huff_n_puff tuff_puff monstar crystal_king world_bowser battle_bowser luigi toad three_sisters vanna_t toad_kid toad_guard harry_t toad_minister postmaster conductor_toad train_station_toad fishmael artist_toad koopa koopa_without_shell world_bob_omb whacka dryite mouser boo yoshi yoshi_kid raven bubulb penguin shiver_toad world_bandit goompa goombaria gooma goompapa goomama the_master chan lee merlon chet_rippo rowf minh_t russ_t tayce_t fice_t bartender chanterelle rip_cheato chuck_quizmo merluvlee merlar merlow star_kid kolorado_wife koopa_koot kolorado battle_kolorado archeologist nomadimouse world_merlee battle_merlee disguised_moustafa moustafa oaklie bootler yakkey gourmet_guy village_leader leaders_friend rafael_raven tolielup gate_flower petunia posie lily rosie sun lakilulu ninji mayor_penguin mayor_penguin_wife penguin_patrol herringway merle star_rod fire coin parade_peach parade_koopas parade_burnt_bowser parade_luigi parade_partners parade_yoshis parade_kolorados parade_chicks parade_ice_show parade_toads parade_batons parade_drums parade_flags parade_horns parade_tubba_balloon parade_wizards parade_mario parade_shy_guys parade_twink leaf
|
||||||
|
|
||||||
# Image settings
|
# Image settings
|
||||||
$(BUILD_DIR)/img/battle/text_action_command_ratings.ia4.png: IMG_FLAGS = --flip-y
|
$(BUILD_DIR)/img/battle/text_action_command_ratings.ia4.png: IMG_FLAGS = --flip-y
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "world/partner/goombario.h"
|
||||||
|
|
||||||
|
// TODO: move to world/partner/goombario.c
|
||||||
|
|
||||||
s32 func_802BD100(s32 arg0) {
|
s32 func_802BD100(s32 arg0) {
|
||||||
s32 i;
|
s32 i;
|
||||||
@ -13,7 +16,7 @@ s32 func_802BD100(s32 arg0) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_802BD174(Npc* npc) {
|
void world_goombario_init(Npc* npc) {
|
||||||
npc->collisionHeight = 24;
|
npc->collisionHeight = 24;
|
||||||
npc->collisionRadius = 20;
|
npc->collisionRadius = 20;
|
||||||
}
|
}
|
||||||
@ -42,7 +45,7 @@ ApiStatus func_802BDB84(ScriptInstance* script, s32 isInitialCall) {
|
|||||||
|
|
||||||
// Something is up with D_8010EBB0 I think. It might be a struct or something
|
// Something is up with D_8010EBB0 I think. It might be a struct or something
|
||||||
#ifdef NON_MATCHING
|
#ifdef NON_MATCHING
|
||||||
void func_802BDBBC(s32 arg0) {
|
void world_goombario_pre_battle(s32 arg0) {
|
||||||
if (D_8010EBB0[0] != 0) {
|
if (D_8010EBB0[0] != 0) {
|
||||||
func_80027088(0);
|
func_80027088(0);
|
||||||
enable_player_input();
|
enable_player_input();
|
||||||
@ -55,5 +58,5 @@ void func_802BDBBC(s32 arg0) {
|
|||||||
D_8010EBB0[3] = 1;
|
D_8010EBB0[3] = 1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
INCLUDE_ASM(s32, "code_317020", func_802BDBBC);
|
INCLUDE_ASM(void, "code_317020", world_goombario_pre_battle, s32 arg0);
|
||||||
#endif
|
#endif
|
||||||
|
43
src/world/partner/goombaria.c
Normal file
43
src/world/partner/goombaria.c
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
void func_802BD100_324F10(Npc* npc) {
|
||||||
|
npc->collisionHeight = 24;
|
||||||
|
npc->collisionRadius = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD114_324F10(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EECC4(owner);
|
||||||
|
}
|
||||||
|
return func_800EECE8(owner) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD14C_324F10(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
PlayerData* playerData = &gPlayerData;
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
enable_partner_walking(owner, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
func_800EBA3C(owner);
|
||||||
|
func_800EBB40(owner);
|
||||||
|
playerData->unk_2F4[PartnerId_GOOMBARIA]++;
|
||||||
|
|
||||||
|
return ApiStatus_BLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD1AC_324F10(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
return ApiStatus_DONE2;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD1B4(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EE994(owner);
|
||||||
|
}
|
||||||
|
return func_800EE9B8(owner) != 0;
|
||||||
|
}
|
20
src/world/partner/goombario.h
Normal file
20
src/world/partner/goombario.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef _WORLD_PARTNER_GOOMBARIO_H_
|
||||||
|
#define _WORLD_PARTNER_GOOMBARIO_H_
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "script_api/map.h"
|
||||||
|
|
||||||
|
s32 func_802BD100(s32 arg0);
|
||||||
|
void world_goombario_init(Npc* npc);
|
||||||
|
s32 func_802BD188();
|
||||||
|
s32 func_802BD1D0();
|
||||||
|
s32 func_802BD564();
|
||||||
|
s32 func_802BD5A8();
|
||||||
|
s32 func_802BD5D8();
|
||||||
|
s32 func_802BDB30();
|
||||||
|
ApiStatus func_802BDB84(ScriptInstance* script, s32 isInitialCall);
|
||||||
|
void world_goombario_pre_battle(s32 arg0);
|
||||||
|
|
||||||
|
extern Script world_goombario_take_out;
|
||||||
|
|
||||||
|
#endif
|
32
src/world/partner/goompa.c
Normal file
32
src/world/partner/goompa.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
void func_802BD100_324A10(Npc* npc) {
|
||||||
|
npc->collisionHeight = 24;
|
||||||
|
npc->collisionRadius = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD114(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EECC4(owner);
|
||||||
|
}
|
||||||
|
return func_800EECE8(owner) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
INCLUDE_ASM(s32, "world_goompa", func_802BD14C);
|
||||||
|
|
||||||
|
INCLUDE_ASM(s32, "world_goompa", func_802BD4E0);
|
||||||
|
|
||||||
|
ApiStatus func_802BD524(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
return ApiStatus_DONE2;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD52C(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EE994(owner);
|
||||||
|
}
|
||||||
|
return func_800EE9B8(owner) != 0;
|
||||||
|
}
|
9
src/world/partner/kooper.h
Normal file
9
src/world/partner/kooper.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef _WORLD_PARTNER_KOOPER_H_
|
||||||
|
#define _WORLD_PARTNER_KOOPER_H_
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "script_api/map.h"
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
#endif
|
44
src/world/partner/twink.c
Normal file
44
src/world/partner/twink.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
// Init
|
||||||
|
void func_802BD100_325070(Npc* npc) {
|
||||||
|
npc->collisionHeight = 20;
|
||||||
|
npc->collisionRadius = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD110(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EECC4(owner);
|
||||||
|
}
|
||||||
|
return func_800EECE8(owner) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD148_325070(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
PlayerData* playerData = &gPlayerData;
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
enable_partner_flying(owner, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
update_player_move_history(owner);
|
||||||
|
func_800ED5D0(owner);
|
||||||
|
playerData->unk_2F4[PartnerId_TWINK]++;
|
||||||
|
|
||||||
|
return ApiStatus_BLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD1A8(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
return ApiStatus_DONE2;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiStatus func_802BD1B0(ScriptInstance* script, s32 isInitialCall) {
|
||||||
|
Npc* owner = script->owner2.npc;
|
||||||
|
|
||||||
|
if (isInitialCall) {
|
||||||
|
func_800EE994(owner);
|
||||||
|
}
|
||||||
|
return func_800EE9B8(owner) != 0;
|
||||||
|
}
|
227
src/world/partners.c
Normal file
227
src/world/partners.c
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
#include "common.h"
|
||||||
|
#include "ld_addrs.h"
|
||||||
|
|
||||||
|
#include "partner/goombario.h"
|
||||||
|
#include "sprite/npc/world_goombario.h"
|
||||||
|
|
||||||
|
#include "partner/kooper.h"
|
||||||
|
#include "sprite/npc/world_kooper.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_bombette.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_parakarry.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/goompa.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_watt.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_sushie.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_lakilester.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/world_bow.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/goombaria.h"
|
||||||
|
|
||||||
|
#include "sprite/npc/twink.h"
|
||||||
|
|
||||||
|
typedef struct WorldPartner {
|
||||||
|
/* 0x00 */ void* dmaStart;
|
||||||
|
/* 0x04 */ void* dmaEnd;
|
||||||
|
/* 0x08 */ void* dmaDest; ///< Always `0x802BD100`
|
||||||
|
/* 0x10 */ s32 isFlying;
|
||||||
|
/* 0x14 */ void (*init)(Npc* partner);
|
||||||
|
/* 0x18 */ Bytecode* takeOut;
|
||||||
|
/* 0x1C */ Bytecode* useAbility;
|
||||||
|
/* 0x20 */ Bytecode* update;
|
||||||
|
/* 0x24 */ Bytecode* putAway;
|
||||||
|
/* 0x28 */ NpcAnimID idle;
|
||||||
|
/* 0x2C */ UNK_FUN_PTR(testFirstStrike);
|
||||||
|
/* 0x30 */ UNK_FUN_PTR(canUseAbility);
|
||||||
|
/* 0x34 */ UNK_FUN_PTR(canPlayerPause);
|
||||||
|
/* 0x38 */ void (*preBattle)(Npc* partner);
|
||||||
|
/* 0x3C */ UNK_FUN_PTR(postBattle);
|
||||||
|
/* 0x40 */ Bytecode* whileRiding;
|
||||||
|
} WorldPartner; // size = 0x40
|
||||||
|
|
||||||
|
static s32 _pad[] = { 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
|
WorldPartner gWorldPartners[] = {
|
||||||
|
{
|
||||||
|
// Goombario
|
||||||
|
.dmaStart = &world_partner_goombario_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_goombario_ROM_END,
|
||||||
|
.dmaDest = &world_partner_goombario_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = world_goombario_init,
|
||||||
|
.takeOut = world_goombario_take_out,
|
||||||
|
.useAbility = 0x802BDD8C,
|
||||||
|
.update = 0x802BDDA8,
|
||||||
|
.putAway = 0x802BDE60,
|
||||||
|
.idle = NPC_ANIM(world_goombario, normal, idle),
|
||||||
|
.canUseAbility = func_802BD5A8,
|
||||||
|
.canPlayerPause = func_802BD5A8,
|
||||||
|
.preBattle = world_goombario_pre_battle,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Kooper
|
||||||
|
.dmaStart = &world_partner_kooper_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_kooper_ROM_END,
|
||||||
|
.dmaDest = &world_partner_kooper_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = 0x802BD200,
|
||||||
|
.takeOut = 0x802BEB44,
|
||||||
|
.useAbility = 0x802BEB64,
|
||||||
|
.update = 0x802BEB80,
|
||||||
|
.putAway = 0x802BEB9C,
|
||||||
|
.idle = NPC_ANIM(world_kooper, Palette_00, Anim_3),
|
||||||
|
.testFirstStrike = 0x802BE818,
|
||||||
|
.canUseAbility = 0x800EA514,
|
||||||
|
.canPlayerPause = 0x800EA514,
|
||||||
|
.preBattle = 0x802BEA24,
|
||||||
|
.postBattle = 0x802BEB10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Bombette
|
||||||
|
.dmaStart = &world_partner_bombette_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_bombette_ROM_END,
|
||||||
|
.dmaDest = &world_partner_bombette_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = 0x802BD2D8,
|
||||||
|
.takeOut = 0x802BE880,
|
||||||
|
.useAbility = 0x802BE8A0,
|
||||||
|
.update = 0x802BE8BC,
|
||||||
|
.putAway = 0x802BE8D8,
|
||||||
|
.idle = NPC_ANIM(world_bombette, Palette_00, Anim_3),
|
||||||
|
.testFirstStrike = 0x802BE520,
|
||||||
|
.canUseAbility = 0x802BD720,
|
||||||
|
.canPlayerPause = 0x802BD748,
|
||||||
|
.preBattle = 0x802BE6E8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Parakarry
|
||||||
|
.dmaStart = &world_partner_parakarry_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_parakarry_ROM_END,
|
||||||
|
.dmaDest = &world_partner_parakarry_VRAM,
|
||||||
|
.isFlying = TRUE,
|
||||||
|
.init = 0x802BD100,
|
||||||
|
.takeOut = 0x802BEA90,
|
||||||
|
.useAbility = 0x802BEAB0,
|
||||||
|
.update = 0x802BEACC,
|
||||||
|
.putAway = 0x802BEAE8,
|
||||||
|
.idle = NPC_ANIM(world_parakarry, Palette_00, Anim_1),
|
||||||
|
.canPlayerPause = 0x800EA514,
|
||||||
|
.preBattle = 0x802BE90C,
|
||||||
|
.postBattle = 0x802BE9D0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Goompa
|
||||||
|
.dmaStart = &world_partner_goompa_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_goompa_ROM_END,
|
||||||
|
.dmaDest = &world_partner_goompa_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = 0x802BD100,
|
||||||
|
.takeOut = 0x802BD570,
|
||||||
|
.useAbility = 0x802BD590,
|
||||||
|
.update = 0x802BD5AC,
|
||||||
|
.putAway = 0x802BD5C8,
|
||||||
|
.idle = NPC_ANIM(goompa, Palette_00, Anim_1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Watt
|
||||||
|
.dmaStart = &world_partner_watt_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_watt_ROM_END,
|
||||||
|
.dmaDest = &world_partner_watt_VRAM,
|
||||||
|
.isFlying = TRUE,
|
||||||
|
.init = 0x802BD23C,
|
||||||
|
.takeOut = 0x802BE258,
|
||||||
|
.useAbility = 0x802BE27C,
|
||||||
|
.update = 0x802BE298,
|
||||||
|
.putAway = 0x802BE2B4,
|
||||||
|
.idle = NPC_ANIM(world_watt, Palette_00, Anim_1),
|
||||||
|
.canPlayerPause = 0x800EA524,
|
||||||
|
.preBattle = 0x802BDD9C,
|
||||||
|
.postBattle = 0x802BDE10,
|
||||||
|
.whileRiding = 0x802BE2D0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Sushie
|
||||||
|
.dmaStart = &world_partner_sushie_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_sushie_ROM_END,
|
||||||
|
.dmaDest = &world_partner_sushie_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = 0x802BF520,
|
||||||
|
.takeOut = 0x802BFDDC,
|
||||||
|
.useAbility = 0x802BFDFC,
|
||||||
|
.update = 0x802BFDC0,
|
||||||
|
.putAway = 0x802BFE18,
|
||||||
|
.idle = NPC_ANIM(world_sushie, Palette_00, Anim_1),
|
||||||
|
.canPlayerPause = 0x800EA524,
|
||||||
|
.preBattle = 0x802BF9B8,
|
||||||
|
.postBattle = 0x802BFA58,
|
||||||
|
.whileRiding = 0x802BFE34,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Lakilester
|
||||||
|
.dmaStart = &world_partner_lakilester_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_lakilester_ROM_END,
|
||||||
|
.dmaDest = &world_partner_lakilester_VRAM,
|
||||||
|
.isFlying = TRUE,
|
||||||
|
.init = 0x802BD21C,
|
||||||
|
.takeOut = 0x802BFE60,
|
||||||
|
.useAbility = 0x802BFE80,
|
||||||
|
.update = 0x802BFE9C,
|
||||||
|
.putAway = 0x802BFEB8,
|
||||||
|
.idle = NPC_ANIM(world_lakilester, Palette_00, Anim_1),
|
||||||
|
.canPlayerPause = 0x800EA524,
|
||||||
|
.preBattle = 0x802BFA00,
|
||||||
|
.postBattle = 0x802BFAA8,
|
||||||
|
.whileRiding = 0x802BFED4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Bow
|
||||||
|
.dmaStart = &world_partner_bow_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_bow_ROM_END,
|
||||||
|
.dmaDest = &world_partner_bow_VRAM,
|
||||||
|
.isFlying = TRUE,
|
||||||
|
.init = 0x802BD100,
|
||||||
|
.takeOut = 0x802BDFE0,
|
||||||
|
.useAbility = 0x802BE000,
|
||||||
|
.update = 0x802BE01C,
|
||||||
|
.putAway = 0x802BE038,
|
||||||
|
.idle = NPC_ANIM(world_bow, Palette_00, Anim_1),
|
||||||
|
.canUseAbility = 0x800EA514,
|
||||||
|
.canPlayerPause = 0x800EA524,
|
||||||
|
.preBattle = 0x802BDF64,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Goombaria
|
||||||
|
.dmaStart = &world_partner_goombaria_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_goombaria_ROM_END,
|
||||||
|
.dmaDest = &world_partner_goombaria_VRAM,
|
||||||
|
.isFlying = FALSE,
|
||||||
|
.init = 0x802BD100,
|
||||||
|
.takeOut = 0x802BD1F0,
|
||||||
|
.useAbility = 0x802BD20C,
|
||||||
|
.update = 0x802BD228,
|
||||||
|
.putAway = 0x802BD244,
|
||||||
|
.idle = NPC_ANIM(goombaria, Palette_00, Anim_1),
|
||||||
|
.canUseAbility = 0x800EA514,
|
||||||
|
.canPlayerPause = 0x800EA514,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Twink
|
||||||
|
.dmaStart = &world_partner_twink_ROM_START,
|
||||||
|
.dmaEnd = &world_partner_twink_ROM_END,
|
||||||
|
.dmaDest = &world_partner_twink_VRAM,
|
||||||
|
.isFlying = TRUE,
|
||||||
|
.init = 0x802BD100,
|
||||||
|
.takeOut = 0x802BD1F0,
|
||||||
|
.useAbility = 0x802BD20C,
|
||||||
|
.update = 0x802BD228,
|
||||||
|
.putAway = 0x802BD244,
|
||||||
|
.idle = NPC_ANIM(twink, Palette_00, Anim_1),
|
||||||
|
.canUseAbility = 0x800EA514,
|
||||||
|
.canPlayerPause = 0x800EA514,
|
||||||
|
},
|
||||||
|
};
|
@ -226,6 +226,12 @@ segments:
|
|||||||
- [0x8a860, c, code_8a860_len_3f30]
|
- [0x8a860, c, code_8a860_len_3f30]
|
||||||
- [0x8e790, c, code_8e790_len_2850]
|
- [0x8e790, c, code_8e790_len_2850]
|
||||||
- [0x90fe0, bin]
|
- [0x90fe0, bin]
|
||||||
|
- type: code
|
||||||
|
start: 0x91520 # section may start earlier
|
||||||
|
vram: 0 # TODO
|
||||||
|
files:
|
||||||
|
- [0x91520, .data, world/partners]
|
||||||
|
- [0x917EC, bin]
|
||||||
- [0x93CD0, ci4, ui/hammer, 32, 32]
|
- [0x93CD0, ci4, ui/hammer, 32, 32]
|
||||||
- [0x93ED0, palette, ui/hammer]
|
- [0x93ED0, palette, ui/hammer]
|
||||||
- [0x93EF0, palette, ui/hammer.disabled]
|
- [0x93EF0, palette, ui/hammer.disabled]
|
||||||
@ -401,70 +407,81 @@ segments:
|
|||||||
files:
|
files:
|
||||||
- [0x316f30, c, code_316f30]
|
- [0x316f30, c, code_316f30]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_goombario
|
||||||
start: 0x317020
|
start: 0x317020
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x317020, c]
|
- [0x317020, c]
|
||||||
- [0x317b60, bin]
|
- [0x317b60, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_bombette
|
||||||
start: 0x317e50
|
start: 0x317e50
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x317e50, c]
|
- [0x317e50, c]
|
||||||
- [0x3195d0, bin]
|
- [0x3195d0, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_parakarry
|
||||||
start: 0x319670
|
start: 0x319670
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x319670, c]
|
- [0x319670, c]
|
||||||
- [0x31b000, bin]
|
- [0x31b000, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_kooper
|
||||||
start: 0x31b120
|
start: 0x31b120
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x31b120, c]
|
- [0x31b120, c]
|
||||||
- [0x31cb60, bin]
|
- [0x31cb60, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_watt
|
||||||
start: 0x31cc70
|
start: 0x31cc70
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x31cc70, c]
|
- [0x31cc70, c]
|
||||||
- [0x31ddc0, bin]
|
- [0x31ddc0, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_sushie
|
||||||
start: 0x31de70
|
start: 0x31de70
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x31de70, c]
|
- [0x31de70, c]
|
||||||
- [0x320b20, bin]
|
- [0x320b20, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_lakilester
|
||||||
start: 0x320c50
|
start: 0x320c50
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x320c50, c]
|
- [0x320c50, c]
|
||||||
- [0x3239b0, bin]
|
- [0x3239b0, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_bow
|
||||||
start: 0x323A50
|
start: 0x323A50
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x323A50, c]
|
- [0x323A50, c]
|
||||||
- [0x324930, bin]
|
- [0x324930, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_goompa
|
||||||
start: 0x324a10
|
start: 0x324a10
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x324a10, c, world_goompa]
|
- [0x324a10, c, world/partner/goompa]
|
||||||
- [0x324e80, bin]
|
- [0x324e80, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_goombaria
|
||||||
start: 0x324f10
|
start: 0x324f10
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x324f10, c, world_goombaria]
|
- [0x324f10, c, world/partner/goombaria]
|
||||||
- [0x325000, bin]
|
- [0x325000, bin]
|
||||||
- type: code
|
- type: code
|
||||||
|
ld_name: world_partner_twink
|
||||||
start: 0x325070
|
start: 0x325070
|
||||||
vram: 0x802BD100
|
vram: 0x802BD100
|
||||||
files:
|
files:
|
||||||
- [0x325070, c, world_twink]
|
- [0x325070, c, world/partner/twink]
|
||||||
- [0x325160, bin]
|
- [0x325160, bin]
|
||||||
- type: code
|
- type: code
|
||||||
start: 0x3251d0
|
start: 0x3251d0
|
||||||
@ -7074,7 +7091,7 @@ segments:
|
|||||||
- world_parakarry
|
- world_parakarry
|
||||||
- world_bow
|
- world_bow
|
||||||
- world_watt
|
- world_watt
|
||||||
- world_sushi
|
- world_sushie
|
||||||
- world_lakilester
|
- world_lakilester
|
||||||
- battle_goombario
|
- battle_goombario
|
||||||
- battle_kooper
|
- battle_kooper
|
||||||
@ -7082,7 +7099,7 @@ segments:
|
|||||||
- battle_parakarry
|
- battle_parakarry
|
||||||
- battle_bow
|
- battle_bow
|
||||||
- battle_watt
|
- battle_watt
|
||||||
- battle_sushi
|
- battle_sushie
|
||||||
- battle_lakilester
|
- battle_lakilester
|
||||||
- kooper_without_shell
|
- kooper_without_shell
|
||||||
- world_eldstar
|
- world_eldstar
|
||||||
@ -7285,11 +7302,11 @@ segments:
|
|||||||
- penguin
|
- penguin
|
||||||
- shiver_toad
|
- shiver_toad
|
||||||
- world_bandit
|
- world_bandit
|
||||||
- goompapa
|
|
||||||
- goombaria
|
|
||||||
- goomama
|
|
||||||
- goompa
|
- goompa
|
||||||
- goomma
|
- goombaria
|
||||||
|
- gooma
|
||||||
|
- goompapa
|
||||||
|
- goomama
|
||||||
- the_master
|
- the_master
|
||||||
- chan
|
- chan
|
||||||
- lee
|
- lee
|
||||||
|
@ -332,3 +332,5 @@ D_80078DB4 = 0x80078DB4;
|
|||||||
|
|
||||||
gSongsUsingVariationFlag = 0x8014F720;
|
gSongsUsingVariationFlag = 0x8014F720;
|
||||||
D_8014F738 = 0x8014F738;
|
D_8014F738 = 0x8014F738;
|
||||||
|
|
||||||
|
world_goombario_take_out = 0x802BDD6C;
|
||||||
|
Loading…
Reference in New Issue
Block a user