From e38046cd56ed543aa741a0e26cf055739b63eefc Mon Sep 17 00:00:00 2001 From: Yanis42 <35189056+Yanis42@users.noreply.github.com> Date: Wed, 17 Apr 2024 00:39:42 +0200 Subject: [PATCH] fix some build issues --- Makefile | 2 +- asm/ov14/Actor/ActorRupee_vfunc_08.inc | 58 +++++++++++++------------- src/14_Land/Actor/ActorRupee.cpp | 50 ++++++++++++++-------- tools/lcf.py | 1 - 4 files changed, 62 insertions(+), 49 deletions(-) diff --git a/Makefile b/Makefile index 90534997..3b9a0ef2 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ LCF_FILE := $(ROOT)/$(BUILD_DIR)/arm9_linker_script.lcf OBJS_FILE := $(ROOT)/$(BUILD_DIR)/arm9_objects.txt ASM_FLAGS := -proc arm5te -d $(REGION) -i asm -msgstyle gcc -CC_FLAGS := -proc arm946e -interworking -O4,p -enum int -i include -i- -i libs/c/include -nolink -d $(REGION) -char signed -lang=c++ -sym on -msgstyle gcc +CC_FLAGS := -proc arm946e -interworking -O4,p -enum int -i include -i- -i libs/c/include -nolink -d $(REGION) -char signed -lang=c++ -sym on -msgstyle gcc -RTTI off LD_FLAGS := -proc arm946e -nostdlib -interworking -nodead -m Entry -map closure,unused -o main.bin -msgstyle gcc ifeq ($(NONMATCHING),1) diff --git a/asm/ov14/Actor/ActorRupee_vfunc_08.inc b/asm/ov14/Actor/ActorRupee_vfunc_08.inc index 6a772035..d54665af 100644 --- a/asm/ov14/Actor/ActorRupee_vfunc_08.inc +++ b/asm/ov14/Actor/ActorRupee_vfunc_08.inc @@ -1,16 +1,16 @@ - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} sub sp, sp, #0x18 mov r4, r0 ldrh r0, [r4, #0x20] str r0, [r4, #0x158] bl _ZN10ActorRupee18func_ov14_0213b70cEj cmp r0, #0 - ldconst r0, data_ov14_021589b4 + lda r0, data_ov14_021589b4 mov r2, #0 ldrne r0, [r0, #0x24] str r2, [r4, #0x7c] - ldconst r0, 0x00000aa8 + ldconst r0, #0x00000aa8 mov r5, r0, asr #0x1 str r5, [r4, #0x80] str r2, [r4, #0x84] @@ -61,54 +61,54 @@ _0213af98: bl _ZN10ActorRupee18func_ov14_0213b204Ei b _0213b0f4 _0213afb4: - ldconst r0, data_027e0764 + lda r0, data_027e0764 mvn ip, #0x110 ldr r5, [r0] ldmib r0, {r3, r7} - umull sb, r0, r7, r5 + umull r9, r0, r7, r5 mla r0, r7, r3, r0 - ldconst r3, data_027e0764 + lda r3, data_027e0764 ldr r8, [r3, #0x10] ldr r6, [r3, #0xc] - adds sl, r8, sb - ldr fp, [r3, #0x14] + adds r10, r8, r9 + ldr r11, [r3, #0x14] mla r0, r6, r5, r0 - umull r3, lr, r7, sl - adc sb, fp, r0 + umull r3, lr, r7, r10 + adc r9, r11, r0 adds r0, r8, r3 str r0, [sp, #0x14] - ldconst r0, data_027e0764 - mla lr, r7, sb, lr - str sl, [r0] + lda r0, data_027e0764 + mla lr, r7, r9, lr + str r10, [r0] ldr r3, [sp, #0x14] - str sb, [r0, #4] + str r9, [r0, #4] str r3, [r0] rsb r0, r1, #0x224 str r0, [sp, #0x10] - umull r0, r5, sb, r0 + umull r0, r5, r9, r0 str r0, [sp, #4] - mla r5, sb, r2, r5 - mla lr, r6, sl, lr + mla r5, r9, r2, r5 + mla lr, r6, r10, lr ldr r0, [sp, #0x10] mov r3, r2 mla r5, r3, r0, r5 add r0, r5, ip str r0, [sp] ldr r5, [sp, #0x14] - ldconst r0, data_027e0764 - adc sb, fp, lr - umull sl, r5, r7, r5 - mla r5, r7, sb, r5 + lda r0, data_027e0764 + adc r9, r11, lr + umull r10, r5, r7, r5 + mla r5, r7, r9, r5 ldr r7, [sp, #0x14] rsb r1, r1, #0x334 - str sb, [r0, #4] - umull r0, r3, sb, r1 + str r9, [r0, #4] + umull r0, r3, r9, r1 mla r5, r6, r7, r5 - mov r6, sl + mov r6, r10 adds r6, r8, r6 - adc r7, fp, r5 - ldconst r5, data_027e0764 - mla r3, sb, r2, r3 + adc r7, r11, r5 + lda r5, data_027e0764 + mla r3, r9, r2, r3 mov r0, r2 mla r3, r0, r1, r3 add r0, r3, #0x55 @@ -126,7 +126,7 @@ _0213afb4: mov r0, r4 str r2, [r4, #0x64] ldr r2, [sp] - str sl, [sp, #0xc] + str r10, [sp, #0xc] str r2, [r4, #0x68] bl _ZN10ActorRupee18func_ov14_0213b204Ei b _0213b0f4 @@ -146,4 +146,4 @@ _0213b0e8: _0213b0f4: mov r0, #1 add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldmia sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, pc} diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp index 60fac224..89537646 100644 --- a/src/14_Land/Actor/ActorRupee.cpp +++ b/src/14_Land/Actor/ActorRupee.cpp @@ -4,34 +4,40 @@ Resource ActorRupee::gResource; ActorType ActorRupee::gType; +static u32 data_ov14_021589d4 = 0x00000000; + +static u32 data_ov14_021589d8[] = { + 0x00000000, + 0x00000000, + 0x00000000, +}; + +static char data_ov14_021589b4[] = "anc"; + extern u32 **data_027e0fe0[]; -extern u32 data_ov14_021589b4[]; -u32 func_01fffd04(void*, u32); -void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); +extern "C" void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum); +extern "C" u32 func_01fffd04(void*, u32); extern u32 data_ov00_020e9370[]; -bool func_ov00_020c313c(); -void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); +extern "C" bool func_ov00_020c313c(); +extern "C" void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3); // --- -void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); -void func_ov05_02102c2c(u32* param_1, int param_2, Vec3p *param_3, int param_4, int param_5, +extern "C" void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool); +extern "C" void func_ov05_02102c2c(u32* param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7, char param_8, char param_9, char param_10); -void func_ov00_020d7ad4(u32* param1, u32 param2); -void func_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); -u16 GetRupeeValue(RupeeId id); +extern "C" void func_ov00_020d7ad4(u32* param1, u32 param2); +extern "C" void func_ov00_02083fb0(u32* param1, void* param2, Vec3p* param3); +extern "C" u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue + extern u32 data_ov00_020eec9c[]; extern PlayerLinkBase *data_027e0fc8; // gPlayerLink extern void *data_027e0e60; -// void func_ov05_02102c2c(int param_1, int param_2, Vec3p *param_3); -// void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, s16 param_5); -// extern u32 sRupeePalettes[]; - ActorRupee* ActorRupee::Create() { ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee(); return newRupee; @@ -45,6 +51,13 @@ ActorRupee::ActorRupee() { // https://decomp.me/scratch/1qjCc extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei(); +extern "C" void _ZN10ActorRupee18func_ov14_0213b70cEj(); +extern "C" void _ZN10ActorRupee8vfunc_14Ei(); +extern "C" void _ZN10ActorRupee8vfunc_18Ej(); +extern "C" void _ZN10ActorRupee8vfunc_20Ei(); +extern "C" void _ZN10ActorRupee8vfunc_60Ev(); +extern "C" void _ZN10ActorRupee8vfunc_64Ev(); +extern "C" u32 data_027e0764[]; bool NONMATCH(ActorRupee::vfunc_08)() { #ifndef NONMATCHING #include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc" @@ -62,7 +75,7 @@ bool NONMATCH(ActorRupee::vfunc_08)() { mRupeeId = mUnk_020.mUnk_00[0]; - dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589b4[9] : FLOAT_TO_Q20(0.666); + dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589d8[0] : FLOAT_TO_Q20(0.666); iVar7 = (s32)dVar5 >> 1; mHitbox.pos.x = 0; @@ -237,6 +250,7 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) { mUnk_130 = param1; } +extern "C" void _ZN11ItemManager10GiveRupeesEjj(); void ActorRupee::Update(bool param1) { ItemId cutsceneItemId; s32 uVar3; @@ -258,7 +272,7 @@ void ActorRupee::Update(bool param1) { } } else { ItemManager* pItem = gItemManager; - rupeeValue = GetRupeeValue(mRupeeId); + rupeeValue = func_ov00_020c5a24(mRupeeId); pItem->GiveRupees(rupeeValue, false); uVar3 = -1; @@ -390,8 +404,8 @@ void ActorRupee::func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2) { if (func_ov14_0213b70c(id)) { param2->mUnk_08 = 2; param2->mUnk_0c = 2; - param2->mUnk_14 = data_ov14_021589b4[0x8]; - param2->mUnk_18 = data_ov14_021589b4[0x9]; + param2->mUnk_14 = data_ov14_021589d4; // data_ov14_021589b4[8] + param2->mUnk_18 = data_ov14_021589d8[0]; // data_ov14_021589b4[9] } else { param2->mUnk_08 = 2; param2->mUnk_0c = 2; diff --git a/tools/lcf.py b/tools/lcf.py index 15ab4aeb..349e9c17 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -113,7 +113,6 @@ ov14 = Overlay(name='ov14', after=[ov08, ov09, ov10, ov13], objects=[ 'asm/ov14/ov14_0211f640.s', 'src/14_Land/Actor/ActorRupee.cpp', - 'asm/ov14/Actor/ActorRupee.s', 'asm/ov14/ov14_0213b778.s', ])