add subdirs

This commit is contained in:
theo3 2020-07-13 15:27:20 -07:00
parent c47f16e5e7
commit 62ddaaa5f6
77 changed files with 138 additions and 186 deletions

View File

@ -69,6 +69,7 @@ FIX := tools/gbafix/gbafix
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
$(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR))
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
@ -101,6 +102,10 @@ MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS))
OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
SUBDIRS := $(sort $(dir $(OBJS)))
$(shell mkdir -p $(SUBDIRS))
TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
TOOLBASE = $(TOOLDIRS:tools/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE))

View File

@ -6,118 +6,6 @@
.text
thumb_func_start Townsperson
Townsperson: @ 0x08061B8C
push {lr}
adds r2, r0, #0
ldrb r1, [r2, #0x10]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _08061BB0
ldr r0, _08061BAC @ =gUnk_0810B77C
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
b _08061BC0
.align 2, 0
_08061BAC: .4byte gUnk_0810B77C
_08061BB0:
ldr r0, _08061BC4 @ =gUnk_0810B774
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
_08061BC0:
pop {pc}
.align 2, 0
_08061BC4: .4byte gUnk_0810B774
thumb_func_start sub_08061BC8
sub_08061BC8: @ 0x08061BC8
push {r4, lr}
adds r4, r0, #0
ldr r1, _08061BFC @ =gUnk_0810B6EC
ldrb r0, [r4, #0xa]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl LoadExtraSpriteData
cmp r0, #0
beq _08061BF8
movs r0, #2
strb r0, [r4, #0x14]
ldrb r0, [r4, #0xa]
adds r0, #1
strb r0, [r4, #0xf]
ldrb r0, [r4, #0xc]
adds r0, #1
strb r0, [r4, #0xc]
adds r0, r4, #0
movs r1, #2
bl sub_08061CB4
_08061BF8:
pop {r4, pc}
.align 2, 0
_08061BFC: .4byte gUnk_0810B6EC
thumb_func_start sub_08061C00
sub_08061C00: @ 0x08061C00
push {r4, lr}
adds r4, r0, #0
movs r1, #0x20
movs r2, #0x20
bl sub_0806ED9C
adds r1, r0, #0
cmp r1, #0
bge _08061C18
ldrb r0, [r4, #0x14]
adds r1, r0, #4
b _08061C32
_08061C18:
ldrb r0, [r4, #0xf]
cmp r0, #0
bne _08061C24
movs r0, #0x10
strb r0, [r4, #0xf]
b _08061C32
_08061C24:
subs r0, #1
strb r0, [r4, #0xf]
adds r0, r4, #0
adds r0, #0x58
ldrb r0, [r0]
movs r1, #3
ands r1, r0
_08061C32:
adds r0, r4, #0
bl sub_08061CB4
adds r0, r4, #0
bl sub_0806ED78
adds r1, r4, #0
adds r1, #0x39
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
beq _08061C58
movs r0, #0
strb r0, [r1]
ldrb r0, [r4, #0xb]
ldr r1, _08061C5C @ =0x00000A01
adds r0, r0, r1
bl TextboxNoOverlapFollow
_08061C58:
pop {r4, pc}
.align 2, 0
_08061C5C: .4byte 0x00000A01
thumb_func_start Townsperson_Head
Townsperson_Head: @ 0x08061C60
push {r4, r5, lr}

149
linker.ld
View File

@ -323,16 +323,16 @@ SECTIONS {
asm/code_0801D714.o(.text);
asm/code_0801D79C.o(.text);
/* enemies */
src/octorok.o(.text);
src/enemy/octorok.o(.text);
asm/octorok.o(.text);
asm/chuchu.o(.text);
asm/leever.o(.text);
asm/peahat.o(.text);
asm/rollobite.o(.text);
asm/darkNut.o(.text);
src/hangingSeed.o(.text);
src/enemy/hangingSeed.o(.text);
asm/beetle.o(.text);
src/keese.o(.text);
src/enemy/keese.o(.text);
asm/keese.o(.text);
asm/doorMimic.o(.text);
asm/rockChuchu.o(.text);
@ -352,7 +352,7 @@ SECTIONS {
asm/madderpillar.o(.text);
asm/waterDrop.o(.text);
asm/wallMaster.o(.text);
src/bombPeahat.o(.text);
src/enemy/bombPeahat.o(.text);
asm/bombPeahat.o(.text);
asm/spark.o(.text);
asm/chaser.o(.text);
@ -371,10 +371,10 @@ SECTIONS {
asm/armos.o(.text);
asm/eyegore.o(.text);
asm/rope.o(.text);
src/smallPesto.o(.text);
src/enemy/smallPesto.o(.text);
asm/smallPesto.o(.text);
asm/acroBandits.o(.text);
src/bladeTrap.o(.text);
src/enemy/bladeTrap.o(.text);
asm/keaton.o(.text);
asm/crow.o(.text);
asm/mulldozer.o(.text);
@ -397,10 +397,10 @@ SECTIONS {
asm/flyingSkull.o(.text);
asm/mazaalBracelet.o(.text);
asm/takkuri.o(.text);
src/bowMoblin.o(.text);
src/enemy/bowMoblin.o(.text);
asm/bowMoblin.o(.text);
src/lakitu.o(.text);
src/lakituCloud.o(.text);
src/enemy/lakitu.o(.text);
src/enemy/lakituCloud.o(.text);
asm/enemy49.o(.text);
asm/vaatiRebornEnemy.o(.text);
asm/vaatiProjectile.o(.text);
@ -413,11 +413,11 @@ SECTIONS {
asm/vaatiArm.o(.text);
asm/dust.o(.text);
asm/vaatiBall.o(.text);
src/slime.o(.text);
src/enemy/slime.o(.text);
asm/slime.o(.text);
asm/miniSlime.o(.text);
asm/fireballGuy.o(.text);
src/miniFireballGuy.o(.text);
src/enemy/miniFireballGuy.o(.text);
asm/miniFireballGuy.o(.text);
asm/enemy5A.o(.text);
asm/businessScrubPrologue.o(.text);
@ -467,9 +467,9 @@ SECTIONS {
asm/code_08055FF4.o(.text);
src/textbox.o(.text);
asm/code_08056418.o(.text);
src/manager1.o(.text);
src/manager/manager1.o(.text);
asm/manager1.o(.text);
src/manager2.o(.text);
src/manager/manager2.o(.text);
asm/manager2.o(.text);
asm/manager3.o(.text);
asm/manager4.o(.text);
@ -507,14 +507,14 @@ SECTIONS {
asm/manager24.o(.text);
asm/manager25.o(.text);
asm/manager26.o(.text);
src/manager27.o(.text);
src/manager/manager27.o(.text);
asm/manager28.o(.text);
asm/manager29.o(.text);
asm/manager2A.o(.text);
asm/manager2B.o(.text);
asm/manager2C.o(.text);
asm/manager2D.o(.text);
src/manager2E.o(.text);
src/manager/manager2E.o(.text);
asm/manager2E.o(.text);
asm/manager2F.o(.text);
asm/manager30.o(.text);
@ -533,27 +533,28 @@ SECTIONS {
asm/getEmptyEntity.o(.text);
asm/code_0805E744.o(.text);
/* npcs */
src/gentari.o(.text);
src/festari.o(.text);
src/npc/gentari.o(.text);
src/npc/festari.o(.text);
asm/festari.o(.text);
src/forestMinish.o(.text);
src/postman.o(.text);
src/npc/forestMinish.o(.text);
src/npc/postman.o(.text);
asm/postman.o(.text);
asm/npc5.o(.text);
src/npc/townsperson.o(.text);
asm/townsperson.o(.text);
asm/kid.o(.text);
asm/npc9.o(.text);
src/stamp.o(.text);
src/npc/stamp.o(.text);
asm/marcy.o(.text);
src/wheaton.o(.text);
src/npc/wheaton.o(.text);
asm/pita.o(.text);
asm/minishEzlo.o(.text);
src/mailbox.o(.text);
src/npc/mailbox.o(.text);
asm/beedle.o(.text);
asm/brocco.o(.text);
asm/sittingPerson.o(.text);
asm/pina.o(.text);
src/guard.o(.text);
src/npc/guard.o(.text);
asm/guardWithSpear.o(.text);
asm/castleMaid.o(.text);
asm/din.o(.text);
@ -562,38 +563,38 @@ SECTIONS {
asm/sturgeon.o(.text);
asm/tingleSiblings.o(.text);
asm/stockwell.o(.text);
src/talon.o(.text);
src/malon.o(.text);
src/epona.o(.text);
src/milkCart.o(.text);
src/npc/talon.o(.text);
src/npc/malon.o(.text);
src/npc/epona.o(.text);
src/npc/milkCart.o(.text);
asm/ghostBrothers.o(.text);
src/smith.o(.text);
src/npc/smith.o(.text);
asm/npc23.o(.text);
asm/kingDaltus.o(.text);
asm/ministerPotho.o(.text);
asm/npc26.o(.text);
asm/vaati.o(.text);
src/zelda.o(.text);
src/mutoh.o(.text);
src/carpenter.o(.text);
src/npc/zelda.o(.text);
src/npc/mutoh.o(.text);
src/npc/carpenter.o(.text);
asm/carpenter.o(.text);
asm/castorWildsStatue.o(.text);
src/cat.o(.text);
src/npc/cat.o(.text);
asm/cat.o(.text);
asm/mountainMinish.o(.text);
asm/zeldaFollower.o(.text);
asm/melari.o(.text);
src/bladeBrothers.o(.text);
src/cow.o(.text);
src/goron.o(.text);
src/npc/bladeBrothers.o(.text);
src/npc/cow.o(.text);
src/npc/goron.o(.text);
asm/goronMerchant.o(.text);
asm/gorman.o(.text);
asm/dog.o(.text);
src/syrup.o(.text);
src/npc/syrup.o(.text);
asm/syrup.o(.text);
src/rem.o(.text);
src/npc/rem.o(.text);
asm/rem.o(.text);
src/townMinish.o(.text);
src/npc/townMinish.o(.text);
asm/townMinish.o(.text);
asm/librari.o(.text);
asm/percy.o(.text);
@ -602,24 +603,24 @@ SECTIONS {
asm/librarians.o(.text);
asm/farmers.o(.text);
asm/carlov.o(.text);
src/dampe.o(.text);
src/npc/dampe.o(.text);
asm/drLeft.o(.text);
asm/kingGustaf.o(.text);
asm/gina.o(.text);
src/simon.o(.text);
src/npc/simon.o(.text);
asm/anju.o(.text);
asm/mama.o(.text);
src/emma.o(.text);
src/teachers.o(.text);
src/windTribespeople.o(.text);
src/npc/emma.o(.text);
src/npc/teachers.o(.text);
src/npc/windTribespeople.o(.text);
asm/windTribespeople.o(.text);
asm/gregal.o(.text);
asm/mayorHagen.o(.text);
src/bigGoron.o(.text);
src/npc/bigGoron.o(.text);
asm/bigGoron.o(.text);
asm/ezloCap.o(.text);
asm/npc4E.o(.text);
src/clothesRack.o(.text);
src/npc/clothesRack.o(.text);
asm/clothesRack.o(.text);
asm/picolyteBottles.o(.text);
asm/smallTownMinish.o(.text);
@ -671,7 +672,7 @@ SECTIONS {
asm/object9.o(.text);
asm/objectA.o(.text);
asm/objectB.o(.text);
src/chestSpawner.o(.text);
src/object/chestSpawner.o(.text);
asm/chestSpawner.o(.text);
asm/objectD.o(.text);
asm/objectE.o(.text);
@ -679,18 +680,18 @@ SECTIONS {
asm/object10.o(.text);
asm/object11.o(.text);
asm/object12.o(.text);
src/railtrack.o(.text);
src/object/railtrack.o(.text);
asm/lilypadLarge.o(.text);
asm/object15.o(.text);
asm/floatingPlatform.o(.text);
asm/object17.o(.text);
asm/evilSpirit.o(.text);
asm/houseDoorExterior.o(.text);
src/object1A.o(.text);
src/greatFairy.o(.text);
src/object/object1A.o(.text);
src/object/greatFairy.o(.text);
asm/greatFairy.o(.text);
src/object1C.o(.text);
src/object1D.o(.text);
src/object/object1C.o(.text);
src/object/object1D.o(.text);
asm/object1E.o(.text);
asm/object1F.o(.text);
asm/object20.o(.text);
@ -706,7 +707,7 @@ SECTIONS {
asm/object2A.o(.text);
asm/object2B.o(.text);
asm/beanstalk.o(.text);
src/smoke.o(.text);
src/object/smoke.o(.text);
asm/pushableRock.o(.text);
asm/hittableLever.o(.text);
asm/object30.o(.text);
@ -727,7 +728,7 @@ SECTIONS {
asm/macroLink.o(.text);
asm/object3D.o(.text);
asm/object3E.o(.text);
src/giantLeaf.o(.text);
src/object/giantLeaf.o(.text);
asm/fairy.o(.text);
asm/ladderUp.o(.text);
asm/object42.o(.text);
@ -735,35 +736,35 @@ SECTIONS {
asm/object44.o(.text);
asm/object45.o(.text);
asm/giantBookLadder.o(.text);
src/heartContainer.o(.text);
src/object/heartContainer.o(.text);
asm/heartContainer.o(.text);
asm/object48.o(.text);
src/object49.o(.text);
src/object/object49.o(.text);
asm/object49.o(.text);
asm/backgroundCloud.o(.text);
asm/object4B.o(.text);
asm/pushableFurniture.o(.text);
asm/furniture.o(.text);
src/minishSizedEntrance.o(.text);
src/object/minishSizedEntrance.o(.text);
asm/minishSizedEntrance.o(.text);
src/archway.o(.text);
src/object/archway.o(.text);
asm/giantRock.o(.text);
asm/object51.o(.text);
asm/object52.o(.text);
asm/object53.o(.text);
asm/pullableLever.o(.text);
asm/minecart.o(.text);
src/thoughtBubble.o(.text);
src/object/thoughtBubble.o(.text);
asm/hiddenLadderDown.o(.text);
asm/gentariCurtains.o(.text);
asm/lavaPlatform.o(.text);
asm/object5A.o(.text);
asm/object5B.o(.text);
src/mask.o(.text);
src/object/mask.o(.text);
asm/houseDoorInterior.o(.text);
asm/whirlwind.o(.text);
asm/objectBlockingStairs.o(.text);
src/swordsmanNewsletter.o(.text);
src/object/swordsmanNewsletter.o(.text);
asm/object61.o(.text);
asm/giantTwig.o(.text);
asm/object63.o(.text);
@ -777,14 +778,14 @@ SECTIONS {
asm/crenalBeanSprout.o(.text);
asm/minecartDoor.o(.text);
asm/objectOnPillar.o(.text);
src/mineralWaterSource.o(.text);
src/object/mineralWaterSource.o(.text);
asm/minishSizedArchway.o(.text);
asm/object70.o(.text);
asm/pushableGrave.o(.text);
asm/object72.o(.text);
asm/lilypadSmall.o(.text);
asm/object74.o(.text);
src/bell.o(.text);
src/object/bell.o(.text);
asm/macroDecorations.o(.text);
asm/object79.o(.text);
asm/steam.o(.text);
@ -799,7 +800,7 @@ SECTIONS {
asm/bigPushableLever.o(.text);
asm/smallIceBlock.o(.text);
asm/bigIceBlock.o(.text);
src/object86.o(.text);
src/object/object86.o(.text);
asm/object87.o(.text);
asm/macroBook.o(.text);
asm/object89.o(.text);
@ -813,7 +814,7 @@ SECTIONS {
asm/object91.o(.text);
asm/bakerOven.o(.text);
asm/object93.o(.text);
src/windTribeFlag.o(.text);
src/object/windTribeFlag.o(.text);
asm/bird.o(.text);
asm/object96.o(.text);
asm/object97.o(.text);
@ -821,21 +822,21 @@ SECTIONS {
asm/object99.o(.text);
asm/macroAcorn.o(.text);
asm/object9B.o(.text);
src/treeHidingPortal.o(.text);
src/object/treeHidingPortal.o(.text);
asm/treeHidingPortal.o(.text);
src/lightableSwitch.o(.text);
src/object9E.o(.text);
src/fan.o(.text);
src/object/lightableSwitch.o(.text);
src/object/object9E.o(.text);
src/object/fan.o(.text);
asm/fan.o(.text);
asm/objectA0.o(.text);
asm/palaceArchway.o(.text);
asm/objectA2.o(.text);
src/cloud.o(.text);
src/object/cloud.o(.text);
asm/minishLight.o(.text);
asm/objectA5.o(.text);
asm/objectA6.o(.text);
asm/objectA7.o(.text);
src/objectA8.o(.text);
src/object/objectA8.o(.text);
asm/objectA8.o(.text);
asm/objectA9.o(.text);
asm/waterfallOpening.o(.text);
@ -844,18 +845,18 @@ SECTIONS {
asm/objectAD.o(.text);
asm/floatingBlock.o(.text);
asm/objectAF.o(.text);
src/metalDoor.o(.text);
src/object/metalDoor.o(.text);
asm/jailBars.o(.text);
asm/objectB2.o(.text);
asm/objectB3.o(.text);
asm/objectB4.o(.text);
asm/objectB5.o(.text);
asm/objectB6.o(.text);
src/well.o(.text);
src/object/well.o(.text);
asm/windTribeTeleporter.o(.text);
asm/objectB9.o(.text);
asm/objectBA.o(.text);
src/windcrest.o(.text);
src/object/windcrest.o(.text);
asm/litArea.o(.text);
asm/objectBD.o(.text);
asm/pinwheel.o(.text);
@ -914,7 +915,7 @@ SECTIONS {
data/data_080D5360.o(.rodata);
src/item.o(.rodata);
data/data_0811BD44.o(.rodata);
src/greatFairy.o(.rodata);
src/object/greatFairy.o(.rodata);
data/greatFairyAnimations.o(.rodata);
data/data_081208A0.o(.rodata);
data/strings.o(.rodata);

58
src/npc/townsperson.c Normal file
View File

@ -0,0 +1,58 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
#include "link.h"
#include "textbox.h"
extern void (*const gUnk_0810B774[])(Entity*);
extern void (*const gUnk_0810B77C[])(Entity*);
extern void sub_08061CB4(Entity*, u32);
extern u32 sub_0806ED9C(Entity*, u32, u32);
extern void sub_0806ED78(Entity*);
extern SpriteLoadData* gUnk_0810B6EC[];
void Townsperson(Entity *this)
{
if ((this->flags & 2) != 0) {
gUnk_0810B77C[this->action](this);
}
else {
gUnk_0810B774[this->action](this);
}
}
void sub_08061BC8(Entity *this)
{
if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form])) {
this->animationState = 2;
this->field_0xf = this->entityType.form + 1;
this->action++;
sub_08061CB4(this, 2);
}
}
void sub_08061C00(Entity *this)
{
s32 uVar1;
uVar1 = sub_0806ED9C(this, 0x20, 0x20);
if (uVar1 < 0) {
uVar1 = this->animationState + 4;
}
else {
if (this->field_0xf == 0) {
this->field_0xf = 0x10;
}
else {
this->field_0xf--;
uVar1 = this->animIndex & 3;
}
}
sub_08061CB4(this, uVar1);
sub_0806ED78(this);
if (this->interactType != 0) {
this->interactType = 0;
TextboxNoOverlapFollow(this->entityType.parameter + 0xa01);
}
}