mirror of
https://github.com/zeldaret/ph
synced 2026-06-27 10:03:02 -04:00
initial work
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, 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
|
||||
mov r2, #0
|
||||
ldrne r0, [r0, #0x24]
|
||||
str r2, [r4, #0x7c]
|
||||
ldconst r0, 0x00000aa8
|
||||
mov r5, r0, asr #0x1
|
||||
str r5, [r4, #0x80]
|
||||
str r2, [r4, #0x84]
|
||||
str r5, [r4, #0x88]
|
||||
ldr r1, [r4, #0x7c]
|
||||
add r0, r5, #0x1000
|
||||
str r1, [r4, #0x8c]
|
||||
ldr r3, [r4, #0x80]
|
||||
mov r1, #1
|
||||
str r3, [r4, #0x90]
|
||||
ldr r3, [r4, #0x84]
|
||||
str r3, [r4, #0x94]
|
||||
ldr r3, [r4, #0x88]
|
||||
str r3, [r4, #0x98]
|
||||
str r2, [r4, #0xa8]
|
||||
str r5, [r4, #0xac]
|
||||
str r2, [r4, #0xb0]
|
||||
str r0, [r4, #0xb4]
|
||||
ldrh r0, [r4, #0x9c]
|
||||
bic r0, r0, #0xb0
|
||||
strh r0, [r4, #0x9c]
|
||||
strb r1, [r4, #0x9f]
|
||||
ldr r0, [r4, #0x98]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4, #0x70]
|
||||
ldr r0, [r4, #0x3c]
|
||||
cmp r0, #0
|
||||
blt _0213af78
|
||||
mov r0, r4
|
||||
bl _ZN10ActorRupee18func_ov14_0213b204Ei
|
||||
b _0213b0f4
|
||||
_0213af78:
|
||||
ldr r0, [r4, #0x144]
|
||||
cmp r0, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0213b0f4
|
||||
_0213af88:
|
||||
b _0213af98 // case 0
|
||||
b _0213afb4 // case 1
|
||||
b _0213b0c8 // case 2
|
||||
b _0213b0e8 // case 3
|
||||
_0213af98:
|
||||
str r2, [r4, #0x60]
|
||||
str r2, [r4, #0x64]
|
||||
mov r0, r4
|
||||
mov r1, r2
|
||||
str r2, [r4, #0x68]
|
||||
bl _ZN10ActorRupee18func_ov14_0213b204Ei
|
||||
b _0213b0f4
|
||||
_0213afb4:
|
||||
ldconst r0, data_027e0764
|
||||
mvn ip, #0x110
|
||||
ldr r5, [r0]
|
||||
ldmib r0, {r3, r7}
|
||||
umull sb, r0, r7, r5
|
||||
mla r0, r7, r3, r0
|
||||
ldconst r3, data_027e0764
|
||||
ldr r8, [r3, #0x10]
|
||||
ldr r6, [r3, #0xc]
|
||||
adds sl, r8, sb
|
||||
ldr fp, [r3, #0x14]
|
||||
mla r0, r6, r5, r0
|
||||
umull r3, lr, r7, sl
|
||||
adc sb, fp, r0
|
||||
adds r0, r8, r3
|
||||
str r0, [sp, #0x14]
|
||||
ldconst r0, data_027e0764
|
||||
mla lr, r7, sb, lr
|
||||
str sl, [r0]
|
||||
ldr r3, [sp, #0x14]
|
||||
str sb, [r0, #4]
|
||||
str r3, [r0]
|
||||
rsb r0, r1, #0x224
|
||||
str r0, [sp, #0x10]
|
||||
umull r0, r5, sb, r0
|
||||
str r0, [sp, #4]
|
||||
mla r5, sb, r2, r5
|
||||
mla lr, r6, sl, 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
|
||||
ldr r7, [sp, #0x14]
|
||||
rsb r1, r1, #0x334
|
||||
str sb, [r0, #4]
|
||||
umull r0, r3, sb, r1
|
||||
mla r5, r6, r7, r5
|
||||
mov r6, sl
|
||||
adds r6, r8, r6
|
||||
adc r7, fp, r5
|
||||
ldconst r5, data_027e0764
|
||||
mla r3, sb, r2, r3
|
||||
mov r0, r2
|
||||
mla r3, r0, r1, r3
|
||||
add r0, r3, #0x55
|
||||
add r0, r0, #0x500
|
||||
str r0, [sp, #8]
|
||||
add r3, ip, #0x334
|
||||
stmia r5, {r6, r7}
|
||||
umull r5, r6, r7, r3
|
||||
mla r6, r7, r2, r6
|
||||
mla r6, r2, r3, r6
|
||||
mov r1, r2
|
||||
add r2, r6, ip
|
||||
str r2, [r4, #0x60]
|
||||
ldr r2, [sp, #8]
|
||||
mov r0, r4
|
||||
str r2, [r4, #0x64]
|
||||
ldr r2, [sp]
|
||||
str sl, [sp, #0xc]
|
||||
str r2, [r4, #0x68]
|
||||
bl _ZN10ActorRupee18func_ov14_0213b204Ei
|
||||
b _0213b0f4
|
||||
_0213b0c8:
|
||||
str r2, [r4, #0x60]
|
||||
mov r0, #0x800
|
||||
str r0, [r4, #0x64]
|
||||
mov r0, r4
|
||||
mov r1, r2
|
||||
str r2, [r4, #0x68]
|
||||
bl _ZN10ActorRupee18func_ov14_0213b204Ei
|
||||
b _0213b0f4
|
||||
_0213b0e8:
|
||||
mov r0, r4
|
||||
mov r1, #5
|
||||
bl _ZN10ActorRupee18func_ov14_0213b204Ei
|
||||
_0213b0f4:
|
||||
mov r0, #1
|
||||
add sp, sp, #0x18
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
+30
-6
@@ -11,8 +11,26 @@
|
||||
#include "Physics/Transform.hpp"
|
||||
#include "Player/EquipBoomerang.hpp"
|
||||
|
||||
class Actor_UnkStruct_012 {
|
||||
public:
|
||||
/* 00 */ u16 mUnk_00;
|
||||
/* 02 */ u8 mUnk_02;
|
||||
/* 03 */ u8 mUnk_03;
|
||||
/* 04 */ u32 mUnk_04;
|
||||
/* 08 */ u32 mUnk_08;
|
||||
/* 0c */ u32 mUnk_0c;
|
||||
/* 10 */ u8 mUnk_10;
|
||||
/* 11 */ u8 mUnk_11;
|
||||
/* 12 */ u8 mUnk_12[0x2];
|
||||
/* 14 */ u32 mUnk_14;
|
||||
/* 18 */ u32 mUnk_18;
|
||||
/* 1c */
|
||||
|
||||
Actor_UnkStruct_012();
|
||||
};
|
||||
|
||||
struct Actor_UnkStruct_020 {
|
||||
/* 00 */ unk16 mUnk_00[4];
|
||||
/* 00 */ u16 mUnk_00[4];
|
||||
/* 08 */ unk8 mUnk_08[2];
|
||||
/* 0a */ unk8 mUnk_0a[2];
|
||||
/* 0c */ unk8 mUnk_0c;
|
||||
@@ -24,7 +42,7 @@ struct Actor_UnkStruct_020 {
|
||||
};
|
||||
|
||||
struct Actor_UnkStruct_09c {
|
||||
/* 0 */ unk16 mUnk_0;
|
||||
/* 0 */ u16 mUnk_0;
|
||||
/* 2 */ unk8 mUnk_2;
|
||||
/* 3 */ unk8 mUnk_3;
|
||||
/* 4 */ unk32 mUnk_4;
|
||||
@@ -36,8 +54,8 @@ struct Actor_UnkStruct_09c {
|
||||
struct Actor_UnkStruct_0a4 {
|
||||
/* 00 */ bool mUnk_00;
|
||||
/* 01 */ bool mUnk_01;
|
||||
/* 01 */ bool mUnk_02;
|
||||
/* 01 */ bool mUnk_03;
|
||||
/* 02 */ bool mUnk_02;
|
||||
/* 03 */ bool mUnk_03;
|
||||
/* 04 */ Vec3p mUnk_04;
|
||||
/* 10 */ s32 mUnk_10;
|
||||
/* 14 */
|
||||
@@ -58,9 +76,15 @@ enum PlayerCollide_ {
|
||||
PlayerCollide_Shield = 0x4,
|
||||
PlayerCollide_Gongoron = 0x8,
|
||||
PlayerCollide_Hammer = 0x10,
|
||||
|
||||
PlayerCollide_PickupFlags = PlayerCollide_Hammer | PlayerCollide_Gongoron | PlayerCollide_Sword | PlayerCollide_Player,
|
||||
};
|
||||
|
||||
class Actor {
|
||||
#include "System/SysNew.hpp"
|
||||
|
||||
#include "Item/Item.hpp"
|
||||
|
||||
class Actor : public SysObject {
|
||||
public:
|
||||
/* 000 (vtable) */
|
||||
/* 004 */ unk32 mType;
|
||||
@@ -103,7 +127,7 @@ public:
|
||||
/* 109 */ unk8 mUnk_109;
|
||||
/* 10a */ unk8 mUnk_10a[0x6];
|
||||
/* 110 */ unk8 mUnk_110;
|
||||
/* 111 */ unk8 mUnk_111;
|
||||
/* 111 */ bool mUnk_111;
|
||||
/* 112 */ unk8 mUnk_112;
|
||||
/* 113 */ unk8 mUnk_113;
|
||||
/* 114 */ unk8 mUnk_114;
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
#include "System/Resource.hpp"
|
||||
#include "Actor/Actor.hpp"
|
||||
#include "Actor/ActorType.hpp"
|
||||
#include "Item/Item.hpp"
|
||||
#include "Item/ItemManager.hpp"
|
||||
#include "Player/PlayerLinkBase.hpp"
|
||||
|
||||
typedef u32 RupeeId;
|
||||
enum RupeeId_ {
|
||||
@@ -29,15 +30,15 @@ public:
|
||||
|
||||
/* 000 (base) */
|
||||
/* 158 */ RupeeId mRupeeId;
|
||||
/* 15c */ unk16 mUnk_15c;
|
||||
/* 15c */ s16 mUnk_15c;
|
||||
/* 15e */ unk16 mUnk_15e;
|
||||
/* 160 */
|
||||
|
||||
/* 00 */ virtual ~ActorRupee() override;
|
||||
/* 08 */ virtual bool vfunc_08() override;
|
||||
/* 14 */ virtual void vfunc_14(u32 param1) override;
|
||||
/* 18 */ virtual void vfunc_18(u32 param1) override;
|
||||
/* 20 */ virtual void vfunc_20(s32 param1) override;
|
||||
/* 14 */ virtual void vfunc_14(bool param1) override;
|
||||
/* 18 */ virtual void vfunc_18(bool param1) override;
|
||||
/* 20 */ virtual void vfunc_20(bool param1) override;
|
||||
/* 60 */ virtual bool vfunc_60() override;
|
||||
/* 64 */ virtual void vfunc_64() override;
|
||||
/* b4 */
|
||||
@@ -49,6 +50,6 @@ public:
|
||||
void func_ov14_0213b204(unk32 param1);
|
||||
void Update(bool param1);
|
||||
static void func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4);
|
||||
static void func_ov14_0213b6a4(RupeeId id, void *param2);
|
||||
static void func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2);
|
||||
static bool func_ov14_0213b70c(RupeeId id);
|
||||
};
|
||||
|
||||
@@ -50,6 +50,7 @@ enum ItemFlag_ {
|
||||
|
||||
typedef s32 ItemId;
|
||||
enum ItemId_ {
|
||||
/* -1 */ ItemId_None = -1,
|
||||
/* 0x01 */ ItemId_SmallKey = 1,
|
||||
/* 0x02 */ ItemId_GreenRupee = 2,
|
||||
/* 0x03 */ ItemId_OshusSword = 3,
|
||||
|
||||
@@ -73,4 +73,6 @@ class PlayerLinkBase: public PlayerBase {
|
||||
/* 80 */ virtual void SetUnk_5e();
|
||||
/* 84 */ virtual void ResetUnk_5e();
|
||||
/* 88 */
|
||||
public:
|
||||
bool PlayItemCutscene(ItemId cutsceneItemId);
|
||||
};
|
||||
|
||||
@@ -105,5 +105,6 @@ void Actor::vfunc_b0() {}
|
||||
void Actor::GetLinkPos(Vec3p *result) {}
|
||||
void Actor::GetLinkDummyPos(Vec3p *result) {}
|
||||
Actor_UnkStruct_09c::Actor_UnkStruct_09c() {}
|
||||
Actor_UnkStruct_012::Actor_UnkStruct_012() {}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,25 +1,423 @@
|
||||
#include "Actor/ActorRupee.hpp"
|
||||
|
||||
#ifdef STUBS
|
||||
#include "Item/ItemManager.hpp"
|
||||
|
||||
Resource ActorRupee::gResource;
|
||||
ActorType ActorRupee::gType;
|
||||
|
||||
ActorRupee* ActorRupee::Create() {}
|
||||
ActorRupee::ActorRupee() {}
|
||||
bool ActorRupee::vfunc_08() {}
|
||||
bool ActorRupee::vfunc_60() {}
|
||||
void ActorRupee::vfunc_64() {}
|
||||
void ActorRupee::Move() {}
|
||||
ItemId ActorRupee::GetRupeeCutsceneItemId() {}
|
||||
void ActorRupee::func_ov14_0213b204(unk32 param1) {}
|
||||
void ActorRupee::Update(bool param1) {}
|
||||
void ActorRupee::vfunc_14(u32 param1) {}
|
||||
void ActorRupee::vfunc_18(u32 param1) {}
|
||||
void ActorRupee::vfunc_20(s32 param1) {}
|
||||
void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) {}
|
||||
void ActorRupee::func_ov14_0213b6a4(RupeeId id, void *param2) {}
|
||||
bool ActorRupee::func_ov14_0213b70c(RupeeId id) {}
|
||||
ActorRupee::~ActorRupee() {}
|
||||
extern u32 **data_027e0fe0[];
|
||||
extern u32 data_ov14_021589b4[];
|
||||
|
||||
#endif
|
||||
|
||||
u32 func_01fffd04(void*, u32);
|
||||
void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum);
|
||||
|
||||
extern u32 data_ov00_020e9370[];
|
||||
bool func_ov00_020c313c();
|
||||
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,
|
||||
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 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;
|
||||
}
|
||||
|
||||
// match?
|
||||
ActorRupee::ActorRupee() {
|
||||
mRupeeId = 8;
|
||||
mUnk_15c = 0;
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/1qjCc
|
||||
extern "C" void _ZN10ActorRupee18func_ov14_0213b204Ei();
|
||||
bool NONMATCH(ActorRupee::vfunc_08)() {
|
||||
#ifndef NONMATCHING
|
||||
#include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc"
|
||||
#else
|
||||
u32 *puVar2; // undefined
|
||||
u32 uVar4;
|
||||
u32 dVar5;
|
||||
u32 uVar6;
|
||||
u32 iVar7;
|
||||
u32 uVar8;
|
||||
u32 uVar9;
|
||||
u32 uVar10;
|
||||
u32 uVar11;
|
||||
u32 iVar12;
|
||||
|
||||
mRupeeId = mUnk_020.mUnk_00[0];
|
||||
|
||||
dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589b4[9] : FLOAT_TO_Q20(0.666);
|
||||
iVar7 = (s32)dVar5 >> 1;
|
||||
|
||||
mHitbox.pos.x = 0;
|
||||
mHitbox.pos.y = iVar7;
|
||||
mHitbox.pos.z = 0;
|
||||
mHitbox.size = iVar7;
|
||||
mUnk_08c.pos = mHitbox.pos;
|
||||
mUnk_08c.size = mHitbox.size;
|
||||
mUnk_0a4.mUnk_04.x = 0;
|
||||
mUnk_0a4.mUnk_04.y = iVar7;
|
||||
mUnk_0a4.mUnk_04.z = 0;
|
||||
mUnk_0a4.mUnk_10 = iVar7 + FLOAT_TO_Q20(1.0);
|
||||
mUnk_09c.mUnk_0 &= 0xFFFFFF4F;
|
||||
mUnk_09c.mUnk_3 = 1;
|
||||
mMaxFall = mUnk_08c.size - 1;
|
||||
|
||||
puVar2 = data_027e0764;
|
||||
|
||||
if (mUnk_03c >= 0) {
|
||||
func_ov14_0213b204(1);
|
||||
} else {
|
||||
switch(mUnk_144) {
|
||||
case 0:
|
||||
mVel.x = 0;
|
||||
mVel.y = 0;
|
||||
mVel.z = 0;
|
||||
func_ov14_0213b204(0);
|
||||
break;
|
||||
case 1:
|
||||
uVar8 = PTR_DWORD_overlay_d_14__0213b108[8];
|
||||
uVar4 = PTR_DWORD_overlay_d_14__0213b108[uVar8];
|
||||
|
||||
uVar9 = PTR_DWORD_overlay_d_14__0213b108[16];
|
||||
iVar7 = PTR_DWORD_overlay_d_14__0213b108[12];
|
||||
uVar11 = uVar9 + uVar4;
|
||||
|
||||
iVar12 = PTR_DWORD_overlay_d_14__0213b108[20];
|
||||
uVar6 = (u64)uVar11 * (u64)uVar8;
|
||||
uVar10 = (
|
||||
iVar12
|
||||
+ (iVar7 * PTR_DWORD_overlay_d_14__0213b108[0])
|
||||
+ (uVar8 * PTR_DWORD_overlay_d_14__0213b108[4])
|
||||
+ ((uVar4) >> 0x20)
|
||||
// + CARRY4(uVar9, uVar4)
|
||||
);
|
||||
|
||||
uVar4 = uVar9 + uVar6;
|
||||
PTR_DWORD_overlay_d_14__0213b108[0] = uVar11;
|
||||
puVar2[4] = uVar10;
|
||||
|
||||
puVar2[0] = uVar4;
|
||||
uVar6 = (
|
||||
iVar12
|
||||
+ (iVar7 * uVar11)
|
||||
+ (uVar8 * uVar10)
|
||||
+ ((u64)uVar11 * (FP_1(uVar8) >> 0x20))
|
||||
// + CARRY4(uVar9, uVar6)
|
||||
);
|
||||
uVar11 = uVar4 * uVar8;
|
||||
|
||||
PTR_DWORD_overlay_d_14__0213b108[4] = uVar6;
|
||||
puVar2 = PTR_DWORD_overlay_d_14__0213b108;
|
||||
uVar4 = (
|
||||
iVar12
|
||||
+ (iVar7 * uVar4)
|
||||
+ (uVar8 * uVar6)
|
||||
+ ((u64)uVar4 * (FP_1(uVar8) >> 0x20))
|
||||
// + CARRY4(uVar9, uVar11)
|
||||
);
|
||||
|
||||
PTR_DWORD_overlay_d_14__0213b108[0] = uVar9 + uVar11;
|
||||
puVar2[4] = uVar4;
|
||||
|
||||
mVel.x = (s32)((u64)uVar4 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
|
||||
mVel.y = (s32)((u64)uVar6 * FLOAT_TO_Q20(0.2) >> 0x20) + FLOAT_TO_Q20(0.3333);
|
||||
mVel.z = (s32)((u64)uVar10 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
|
||||
func_ov14_0213b204(0);
|
||||
break;
|
||||
case 2:
|
||||
mVel.x = 0;
|
||||
mVel.y = FLOAT_TO_Q20(0.5);
|
||||
mVel.z = 0;
|
||||
func_ov14_0213b204(0);
|
||||
break;
|
||||
case 3:
|
||||
func_ov14_0213b204(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ActorRupee::vfunc_60() {
|
||||
return func_ov14_0213b70c(mRupeeId);
|
||||
}
|
||||
|
||||
void ActorRupee::vfunc_64() {}
|
||||
|
||||
void ActorRupee::Move() {
|
||||
s32 size;
|
||||
|
||||
ApplyGravity();
|
||||
func_01ff9bc4(&mPos, &mVel, &mPos); // Vec3p::Add()
|
||||
mUnk_09c.mUnk_3 = 1;
|
||||
size = mMaxFall = mUnk_08c.size - 1;
|
||||
|
||||
size += mUnk_018;
|
||||
if (size < mPos.y) {
|
||||
mUnk_09c.mUnk_0 = 0x49;
|
||||
} else {
|
||||
mUnk_09c.mUnk_0 = 0xcb;
|
||||
}
|
||||
|
||||
if (func_01fffd04(this, 0)) {
|
||||
mVel.x = 0;
|
||||
mVel.z = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ItemId ActorRupee::GetRupeeCutsceneItemId() {
|
||||
switch (mRupeeId) {
|
||||
case RupeeId_Green:
|
||||
return ItemId_None;
|
||||
|
||||
case RupeeId_Blue:
|
||||
return ItemId_None;
|
||||
|
||||
case RupeeId_Red:
|
||||
return ItemId_None;
|
||||
|
||||
case RupeeId_BigGreen:
|
||||
return ItemId_BigGreenRupee;
|
||||
|
||||
case RupeeId_BigRed:
|
||||
return ItemId_BigRedRupee;
|
||||
|
||||
case RupeeId_Gold:
|
||||
return ItemId_GoldRupee;
|
||||
|
||||
case RupeeId_Rupoor10:
|
||||
return ItemId_Rupoor10;
|
||||
|
||||
case RupeeId_Rupoor50:
|
||||
return ItemId_Rupoor50;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ItemId_None;
|
||||
}
|
||||
|
||||
void ActorRupee::func_ov14_0213b204(unk32 param1) {
|
||||
switch (param1) {
|
||||
case 0:
|
||||
mVisible = true;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
mVel.x = 0;
|
||||
mVel.y = 0;
|
||||
mVel.z = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
mActiveFrames = 0;
|
||||
mUnk_130 = param1;
|
||||
}
|
||||
|
||||
void ActorRupee::Update(bool param1) {
|
||||
ItemId cutsceneItemId;
|
||||
s32 uVar3;
|
||||
Vec3p local_1c;
|
||||
u32 local_20;
|
||||
u16 rupeeValue;
|
||||
|
||||
mPrevPos = mPos;
|
||||
IncreaseActiveFrames();
|
||||
|
||||
if ((mUnk_130 != 3) && (++mUnk_15c >= 6) && CollidesWithPlayer(PlayerCollide_PickupFlags)) {
|
||||
cutsceneItemId = GetRupeeCutsceneItemId();
|
||||
|
||||
if (cutsceneItemId >= 0) {
|
||||
if (data_027e0fc8->PlayItemCutscene(cutsceneItemId)) {
|
||||
Kill();
|
||||
} else {
|
||||
func_ov14_0213b204(3);
|
||||
}
|
||||
} else {
|
||||
ItemManager* pItem = gItemManager;
|
||||
rupeeValue = GetRupeeValue(mRupeeId);
|
||||
pItem->GiveRupees(rupeeValue, false);
|
||||
uVar3 = -1;
|
||||
|
||||
switch (mRupeeId) {
|
||||
case RupeeId_Green:
|
||||
uVar3 = 0xfa;
|
||||
break;
|
||||
case RupeeId_Blue:
|
||||
uVar3 = 0xfb;
|
||||
break;
|
||||
case RupeeId_Red:
|
||||
uVar3 = 0xfc;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
func_ov00_020d7ad4(data_ov00_020eec9c, uVar3);
|
||||
Kill();
|
||||
}
|
||||
}
|
||||
|
||||
if (!(mUnk_130 != 0 && mUnk_130 != 1 && mUnk_130 != 2)) {
|
||||
if (func_ov00_020c2c0c()) {
|
||||
func_ov14_0213b204(4);
|
||||
} else if (func_ov00_020c2d54()) {
|
||||
func_ov14_0213b204(5);
|
||||
}
|
||||
}
|
||||
|
||||
switch (mUnk_130) {
|
||||
case 0:
|
||||
Move();
|
||||
if (mUnk_111) {
|
||||
local_1c = mPos;
|
||||
func_ov00_02083fb0(&local_20, data_027e0e60, &local_1c);
|
||||
if (((local_20 >> 5) & 3) == 2) {
|
||||
Kill();
|
||||
} else {
|
||||
func_ov14_0213b204(1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
PlayerLinkBase* pLink = data_027e0fc8;
|
||||
if (pLink->PlayItemCutscene(GetRupeeCutsceneItemId())) {
|
||||
Kill();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (param1) {
|
||||
mActiveFrames = 0;
|
||||
}
|
||||
if ((mUnk_03c < 0) && (mActiveFrames >= 180)) {
|
||||
func_ov14_0213b204(2);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (param1) {
|
||||
mActiveFrames = 0;
|
||||
}
|
||||
if (mActiveFrames >= 60) {
|
||||
Kill();
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (!func_ov00_020c2c70()) {
|
||||
func_ov14_0213b204(1);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (!func_ov00_020c2de4()) {
|
||||
func_ov14_0213b204(1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
KillInBounds();
|
||||
}
|
||||
|
||||
void ActorRupee::vfunc_14(bool param1) {
|
||||
if (func_ov00_020c313c(param1)) {
|
||||
Update(false);
|
||||
}
|
||||
func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos);
|
||||
}
|
||||
|
||||
void ActorRupee::vfunc_18(bool param1) {
|
||||
if (func_ov00_020c313c(param1)) {
|
||||
Update(true);
|
||||
}
|
||||
func_ov00_0207a1c8(&mUnk_0a4.mUnk_00, param1, &mPos);
|
||||
}
|
||||
|
||||
void ActorRupee::vfunc_20(bool param1) {
|
||||
if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) {
|
||||
if (mUnk_130 == 2 && mActiveFrames % 8 < 4) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (param1 ? mUnk_0a4.mUnk_01 : mUnk_0a4.mUnk_00) {
|
||||
func_ov14_0213b5f4(mRupeeId, param1, &mPos, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) {
|
||||
Actor_UnkStruct_012 unk_class;
|
||||
static u32 data_ov14_02153e28[] = { // sRupeePalettes
|
||||
0x9, // RupeeId_Green
|
||||
0xA, // RupeeId_Blue
|
||||
0x8, // RupeeId_Red
|
||||
0x9, // RupeeId_BigGreen
|
||||
0x8, // RupeeId_BigRed
|
||||
0xB, // RupeeId_Gold
|
||||
0xC, // RupeeId_Rupoor10
|
||||
0xC, // RupeeId_Rupoor50
|
||||
};
|
||||
|
||||
func_ov14_0213b6a4(id, &unk_class);
|
||||
func_0202bc38(param2, param3, data_ov14_02153e28[id], &unk_class, 0);
|
||||
|
||||
if (param4) {
|
||||
u32 var = func_ov14_0213b70c(id) ? 0x4cd : 0x400;
|
||||
func_ov05_02102c2c(&data_ov00_020e9370[0], 0, param3, var, var, 0, 0x1f, 0, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void ActorRupee::func_ov14_0213b6a4(RupeeId id, Actor_UnkStruct_012 *param2) {
|
||||
param2->mUnk_04 = 3;
|
||||
|
||||
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];
|
||||
} else {
|
||||
param2->mUnk_08 = 2;
|
||||
param2->mUnk_0c = 2;
|
||||
param2->mUnk_14 = 0x2aa;
|
||||
param2->mUnk_18 = 0xaa8;
|
||||
}
|
||||
}
|
||||
|
||||
bool ActorRupee::func_ov14_0213b70c(RupeeId id) {
|
||||
switch (id) {
|
||||
case RupeeId_BigGreen:
|
||||
case RupeeId_BigRed:
|
||||
case RupeeId_Gold:
|
||||
case RupeeId_Rupoor50:
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ActorRupee::~ActorRupee() {}
|
||||
|
||||
Reference in New Issue
Block a user