match world partner table

This commit is contained in:
Alex Bates 2020-12-22 15:53:16 +00:00
parent abbeb58dd2
commit 64dbc07d56
13 changed files with 426 additions and 25 deletions

2
.gitignore vendored
View File

@ -19,7 +19,9 @@ settings.mk
/build/
/docs/doxygen/
/include/ld_addrs.h
/include/message_ids.h
/include/sprite/
/include/map
# Assets
/bin

View File

@ -37,7 +37,7 @@ LD_MAP := $(BUILD_DIR)/$(TARGET).map
ASSETS_BIN := $(BUILD_DIR)/bin/assets/assets.bin
MSG_BIN := $(BUILD_DIR)/msg.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 ###
@ -128,7 +128,7 @@ setup: clean submodules tools split $(LD_SCRIPT)
# tools/star-rod submodule intentionally omitted
submodules:
git submodule init tools/n64splat
git submodule update --init --recursive
git submodule update --recursive
split:
$(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 $@ $<
# Compile C files
$(BUILD_DIR)/%.c.o: %.c $(MDEPS) | $(GENERATED_HEADERS)
$(BUILD_DIR)/%.c.o: %.c $(MDEPS) $(GENERATED_HEADERS)
@mkdir -p $(shell dirname $@)
$(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ -
# 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 $@)
$(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 $@)
@echo "building $@"
@$(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)
$(SPLAT) --modes ld
$(SPLAT) --modes ld > /dev/null
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
@mkdir -p $(shell dirname $@)
@ -299,7 +301,7 @@ editor: tools/star-rod sprite/SpriteTable.xml
### 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:
.SECONDARY:
.PRECIOUS: $(ROM) %.Yay0

View File

@ -1,7 +1,7 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_802BDBBC
glabel world_goombario_pre_battle
/* 317ADC 802BDBBC 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 317AE0 802BDBC0 AFB10014 */ sw $s1, 0x14($sp)
/* 317AE4 802BDBC4 0080882D */ daddu $s1, $a0, $zero
@ -16,9 +16,9 @@ glabel func_802BDBBC
/* 317B08 802BDBE8 0C009C22 */ jal func_80027088
/* 317B0C 802BDBEC 0000202D */ daddu $a0, $zero, $zero
/* 317B10 802BDBF0 0C038069 */ jal enable_player_input
/* 317B14 802BDBF4 00000000 */ nop
/* 317B14 802BDBF4 00000000 */ nop
/* 317B18 802BDBF8 0C0B4312 */ jal CancelMessageAndBlock
/* 317B1C 802BDBFC 00000000 */ nop
/* 317B1C 802BDBFC 00000000 */ nop
/* 317B20 802BDC00 0C03BD17 */ jal clear_partner_move_history
/* 317B24 802BDC04 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)
/* 317B50 802BDC30 03E00008 */ jr $ra
/* 317B54 802BDC34 27BD0020 */ addiu $sp, $sp, 0x20
/* 317B58 802BDC38 00000000 */ nop
/* 317B5C 802BDC3C 00000000 */ nop
/* 317B58 802BDC38 00000000 */ nop
/* 317B5C 802BDC3C 00000000 */ nop

View File

@ -58,7 +58,7 @@ ASSETS := \
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
$(BUILD_DIR)/img/battle/text_action_command_ratings.ia4.png: IMG_FLAGS = --flip-y

View File

@ -1,4 +1,7 @@
#include "common.h"
#include "world/partner/goombario.h"
// TODO: move to world/partner/goombario.c
s32 func_802BD100(s32 arg0) {
s32 i;
@ -13,7 +16,7 @@ s32 func_802BD100(s32 arg0) {
return 0;
}
void func_802BD174(Npc* npc) {
void world_goombario_init(Npc* npc) {
npc->collisionHeight = 24;
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
#ifdef NON_MATCHING
void func_802BDBBC(s32 arg0) {
void world_goombario_pre_battle(s32 arg0) {
if (D_8010EBB0[0] != 0) {
func_80027088(0);
enable_player_input();
@ -55,5 +58,5 @@ void func_802BDBBC(s32 arg0) {
D_8010EBB0[3] = 1;
}
#else
INCLUDE_ASM(s32, "code_317020", func_802BDBBC);
INCLUDE_ASM(void, "code_317020", world_goombario_pre_battle, s32 arg0);
#endif

View 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;
}

View 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

View 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;
}

View 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
View 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
View 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,
},
};

View File

@ -226,6 +226,12 @@ segments:
- [0x8a860, c, code_8a860_len_3f30]
- [0x8e790, c, code_8e790_len_2850]
- [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]
- [0x93ED0, palette, ui/hammer]
- [0x93EF0, palette, ui/hammer.disabled]
@ -401,70 +407,81 @@ segments:
files:
- [0x316f30, c, code_316f30]
- type: code
ld_name: world_partner_goombario
start: 0x317020
vram: 0x802BD100
files:
- [0x317020, c]
- [0x317b60, bin]
- type: code
ld_name: world_partner_bombette
start: 0x317e50
vram: 0x802BD100
files:
- [0x317e50, c]
- [0x3195d0, bin]
- type: code
ld_name: world_partner_parakarry
start: 0x319670
vram: 0x802BD100
files:
- [0x319670, c]
- [0x31b000, bin]
- type: code
ld_name: world_partner_kooper
start: 0x31b120
vram: 0x802BD100
files:
- [0x31b120, c]
- [0x31cb60, bin]
- type: code
ld_name: world_partner_watt
start: 0x31cc70
vram: 0x802BD100
files:
- [0x31cc70, c]
- [0x31ddc0, bin]
- type: code
ld_name: world_partner_sushie
start: 0x31de70
vram: 0x802BD100
files:
- [0x31de70, c]
- [0x320b20, bin]
- type: code
ld_name: world_partner_lakilester
start: 0x320c50
vram: 0x802BD100
files:
- [0x320c50, c]
- [0x3239b0, bin]
- type: code
ld_name: world_partner_bow
start: 0x323A50
vram: 0x802BD100
files:
- [0x323A50, c]
- [0x324930, bin]
- type: code
ld_name: world_partner_goompa
start: 0x324a10
vram: 0x802BD100
files:
- [0x324a10, c, world_goompa]
- [0x324a10, c, world/partner/goompa]
- [0x324e80, bin]
- type: code
ld_name: world_partner_goombaria
start: 0x324f10
vram: 0x802BD100
files:
- [0x324f10, c, world_goombaria]
- [0x324f10, c, world/partner/goombaria]
- [0x325000, bin]
- type: code
ld_name: world_partner_twink
start: 0x325070
vram: 0x802BD100
files:
- [0x325070, c, world_twink]
- [0x325070, c, world/partner/twink]
- [0x325160, bin]
- type: code
start: 0x3251d0
@ -7074,7 +7091,7 @@ segments:
- world_parakarry
- world_bow
- world_watt
- world_sushi
- world_sushie
- world_lakilester
- battle_goombario
- battle_kooper
@ -7082,7 +7099,7 @@ segments:
- battle_parakarry
- battle_bow
- battle_watt
- battle_sushi
- battle_sushie
- battle_lakilester
- kooper_without_shell
- world_eldstar
@ -7285,11 +7302,11 @@ segments:
- penguin
- shiver_toad
- world_bandit
- goompapa
- goombaria
- goomama
- goompa
- goomma
- goombaria
- gooma
- goompapa
- goomama
- the_master
- chan
- lee

View File

@ -332,3 +332,5 @@ D_80078DB4 = 0x80078DB4;
gSongsUsingVariationFlag = 0x8014F720;
D_8014F738 = 0x8014F738;
world_goombario_take_out = 0x802BDD6C;