mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-25 09:45:02 +00:00
fire arrow progress
This commit is contained in:
parent
8e60e7d101
commit
8cd9a881d0
9 changed files with 222 additions and 53 deletions
|
@ -1,3 +1,17 @@
|
||||||
|
.rdata
|
||||||
|
glabel D_80867B30
|
||||||
|
.asciz "../z_arrow_fire.c"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
glabel D_80867B44
|
||||||
|
.asciz "\"消滅\" = %s\n"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
glabel D_80867B54
|
||||||
|
.asciz "消滅"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
.text
|
||||||
glabel ArrowFire_Destroy
|
glabel ArrowFire_Destroy
|
||||||
/* 00080 80865D90 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
|
/* 00080 80865D90 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
|
||||||
/* 00084 80865D94 AFBF0014 */ sw $ra, 0x0014($sp)
|
/* 00084 80865D94 AFBF0014 */ sw $ra, 0x0014($sp)
|
||||||
|
|
|
@ -1,3 +1,33 @@
|
||||||
|
.rdata
|
||||||
|
glabel D_80867B5C
|
||||||
|
.asciz "../z_arrow_fire.c"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
glabel D_80867B70
|
||||||
|
.asciz "../z_arrow_fire.c"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
glabel D_80867B84
|
||||||
|
.asciz "../z_arrow_fire.c"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
.late_rodata
|
||||||
|
|
||||||
|
glabel D_80867BAC
|
||||||
|
.float 9.58738E-05
|
||||||
|
glabel D_80867BB0
|
||||||
|
.float 9.58738E-05
|
||||||
|
glabel D_80867BB4
|
||||||
|
.float 9.58738E-05
|
||||||
|
glabel D_80867BB8
|
||||||
|
.float 0.01
|
||||||
|
glabel D_80867BBC
|
||||||
|
.float 1500
|
||||||
|
glabel D_80867BC0
|
||||||
|
.float 0.2
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
.text
|
||||||
glabel ArrowFire_Draw
|
glabel ArrowFire_Draw
|
||||||
/* 00580 80866290 27BDFF68 */ addiu $sp, $sp, 0xFF68 ## $sp = FFFFFF68
|
/* 00580 80866290 27BDFF68 */ addiu $sp, $sp, 0xFF68 ## $sp = FFFFFF68
|
||||||
/* 00584 80866294 AFBF003C */ sw $ra, 0x003C($sp)
|
/* 00584 80866294 AFBF003C */ sw $ra, 0x003C($sp)
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
.late_rodata
|
||||||
|
glabel D_80867B98
|
||||||
|
.float 950
|
||||||
|
glabel D_80867B9C
|
||||||
|
.float 0.33333334
|
||||||
|
glabel D_80867BA0
|
||||||
|
.float 0.041666668
|
||||||
|
glabel D_80867BA4
|
||||||
|
.float 0.1
|
||||||
|
|
||||||
|
.text
|
||||||
glabel func_80865F1C
|
glabel func_80865F1C
|
||||||
/* 0020C 80865F1C 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
|
/* 0020C 80865F1C 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
|
||||||
/* 00210 80865F20 AFBF0014 */ sw $ra, 0x0014($sp)
|
/* 00210 80865F20 AFBF0014 */ sw $ra, 0x0014($sp)
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
.late_rodata
|
||||||
|
|
||||||
|
glabel D_80867BA8
|
||||||
|
.float 0.041666668
|
||||||
|
|
||||||
|
.text
|
||||||
glabel func_808660E8
|
glabel func_808660E8
|
||||||
/* 003D8 808660E8 27BDFFC8 */ addiu $sp, $sp, 0xFFC8 ## $sp = FFFFFFC8
|
/* 003D8 808660E8 27BDFFC8 */ addiu $sp, $sp, 0xFFC8 ## $sp = FFFFFFC8
|
||||||
/* 003DC 808660EC AFBF001C */ sw $ra, 0x001C($sp)
|
/* 003DC 808660EC AFBF001C */ sw $ra, 0x001C($sp)
|
||||||
|
|
|
@ -7,47 +7,9 @@
|
||||||
|
|
||||||
.section .rodata
|
.section .rodata
|
||||||
|
|
||||||
glabel D_80867B30
|
|
||||||
.asciz "../z_arrow_fire.c"
|
|
||||||
.balign 4
|
|
||||||
|
|
||||||
glabel D_80867B44
|
|
||||||
.word 0x22BEC3CC, 0xC722203D, 0x2025730A, 0x00000000
|
|
||||||
glabel D_80867B54
|
|
||||||
.word 0xBEC3CCC7, 0x00000000
|
|
||||||
glabel D_80867B5C
|
|
||||||
.asciz "../z_arrow_fire.c"
|
|
||||||
.balign 4
|
|
||||||
|
|
||||||
glabel D_80867B70
|
|
||||||
.asciz "../z_arrow_fire.c"
|
|
||||||
.balign 4
|
|
||||||
|
|
||||||
glabel D_80867B84
|
|
||||||
.asciz "../z_arrow_fire.c"
|
|
||||||
.balign 4
|
|
||||||
|
|
||||||
glabel D_80867B98
|
|
||||||
.word 0x446D8000
|
|
||||||
glabel D_80867B9C
|
|
||||||
.word 0x3EAAAAAB
|
|
||||||
glabel D_80867BA0
|
|
||||||
.word 0x3D2AAAAB
|
|
||||||
glabel D_80867BA4
|
|
||||||
.word 0x3DCCCCCD
|
|
||||||
glabel D_80867BA8
|
|
||||||
.word 0x3D2AAAAB
|
|
||||||
glabel D_80867BAC
|
|
||||||
.word 0x38C90FDB
|
|
||||||
glabel D_80867BB0
|
|
||||||
.word 0x38C90FDB
|
|
||||||
glabel D_80867BB4
|
|
||||||
.word 0x38C90FDB
|
|
||||||
glabel D_80867BB8
|
|
||||||
.word 0x3C23D70A
|
|
||||||
glabel D_80867BBC
|
|
||||||
.word 0x44BB8000
|
|
||||||
glabel D_80867BC0
|
|
||||||
.word 0x3E4CCCCD, 0x00000000, 0x00000000, 0x00000000
|
|
||||||
|
|
||||||
|
|
||||||
|
|
1
spec
1
spec
|
@ -684,7 +684,6 @@ beginseg
|
||||||
name "ovl_Arrow_Fire"
|
name "ovl_Arrow_Fire"
|
||||||
include "build/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.o"
|
include "build/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.o"
|
||||||
include "build/data/overlays/actors/z_arrow_fire.data.o"
|
include "build/data/overlays/actors/z_arrow_fire.data.o"
|
||||||
include "build/data/overlays/actors/z_arrow_fire.rodata.o"
|
|
||||||
include "build/data/overlays/actors/z_arrow_fire.reloc.o"
|
include "build/data/overlays/actors/z_arrow_fire.reloc.o"
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "z_arrow_fire.h"
|
#include "z_arrow_fire.h"
|
||||||
|
#include "../ovl_En_Arrow/z_en_arrow.h"
|
||||||
|
|
||||||
#define ROOM 0x00
|
#define ROOM 0x00
|
||||||
#define FLAGS 0x02000010
|
#define FLAGS 0x02000010
|
||||||
|
@ -8,6 +9,9 @@ void ArrowFire_Destroy(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
void ArrowFire_Update(ArrowFire* this, GlobalContext* globalCtx);
|
void ArrowFire_Update(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
void ArrowFire_Draw(ArrowFire* this, GlobalContext* globalCtx);
|
void ArrowFire_Draw(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
void func_80865DD8(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
|
void func_808660E8(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
|
void func_80865F1C(ArrowFire* this, GlobalContext* globalCtx);
|
||||||
/*
|
/*
|
||||||
const ActorInit Arrow_Fire_InitVars =
|
const ActorInit Arrow_Fire_InitVars =
|
||||||
{
|
{
|
||||||
|
@ -23,20 +27,155 @@ const ActorInit Arrow_Fire_InitVars =
|
||||||
(ActorFunc)ArrowFire_Draw,
|
(ActorFunc)ArrowFire_Draw,
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_80865D10.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/ArrowFire_Init.s")
|
static InitChainEntry initChain[] =
|
||||||
|
{
|
||||||
|
ICHAIN_VEC3F(unk_F4, 2000, ICHAIN_STOP),
|
||||||
|
};
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/ArrowFire_Destroy.s")
|
//EnFire_SetupAction
|
||||||
|
void func_80865D10(ArrowFire* this, ActorFunc* actionFunc)
|
||||||
|
{
|
||||||
|
this->actionFunc = actionFunc;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_80865DD8.s")
|
void ArrowFire_Init(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
Actor_ProcessInitChain(&this->actor, initChain);
|
||||||
|
this->fireRadius = 0;
|
||||||
|
this->unk_158= 1.0f;
|
||||||
|
func_80865D10(this, func_80865DD8);
|
||||||
|
Actor_SetScale(this, 0.01);
|
||||||
|
this->unk_168 = 0xA0;
|
||||||
|
this->unk_166 = 0;
|
||||||
|
this->unk_15C = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_80865ECC.s")
|
void ArrowFire_Destroy(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
func_800876C8(globalCtx);
|
||||||
|
LogUtils_LogThreadId("../z_arrow_fire.c", 421);
|
||||||
|
osSyncPrintf("\"消滅\" = %s\n", "消滅");
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_80865F1C.s")
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_808660E8.s")
|
//ArrowFire_DrawBack
|
||||||
|
void func_80865DD8(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
EnArrow* arrow;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/ArrowFire_Update.s")
|
arrow = this->actor.attachedA;
|
||||||
|
if ((arrow == NULL) || (arrow->actor.update == NULL))
|
||||||
|
{
|
||||||
|
Actor_Kill(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->fireRadius < 10)
|
||||||
|
{
|
||||||
|
this->fireRadius += 1;
|
||||||
|
}
|
||||||
|
// copy position and rotation from the attached arrow
|
||||||
|
this->actor.posRot.pos = arrow->actor.posRot.pos;
|
||||||
|
this->actor.shape.rot = arrow->actor.shape.rot;
|
||||||
|
|
||||||
|
func_8002F974(&this->actor, NA_SE_PL_ARROW_CHARGE_FIRE);
|
||||||
|
|
||||||
|
//If arrow's attached is null, Link has fired the arrow
|
||||||
|
if (arrow->actor.attachedA == NULL)
|
||||||
|
{
|
||||||
|
this->arrowPos = this->actor.posRot.pos;
|
||||||
|
this->fireRadius = 10;
|
||||||
|
func_80865D10(this, &func_808660E8);
|
||||||
|
this->unk_168 = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80865ECC(Vec3f* arrowPos, Vec3f* firePos, f32 scale)
|
||||||
|
{
|
||||||
|
arrowPos->x += ((firePos->x - arrowPos->x) * scale);
|
||||||
|
arrowPos->y += ((firePos->y - arrowPos->y) * scale);
|
||||||
|
arrowPos->z += ((firePos->z - arrowPos->z) * scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ArrowFire_
|
||||||
|
//#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/func_80865F1C.s")
|
||||||
|
void func_80865F1C(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
f32 scale;
|
||||||
|
|
||||||
|
if (this->actor.unk_F0 < 50.0f)
|
||||||
|
{
|
||||||
|
scale = 10.0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (950.0f < this->actor.unk_F0)
|
||||||
|
{
|
||||||
|
scale = 310.0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scale = ((this->actor.unk_F0 - 50.0f) * 0.33333334f) + 10.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//ArrowFire_Fly
|
||||||
|
void func_808660E8(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
EnArrow* arrow;
|
||||||
|
f32 distanceScaled;
|
||||||
|
s32 pad;
|
||||||
|
|
||||||
|
arrow = this->actor.attachedA;
|
||||||
|
if ((arrow == NULL) || (arrow->actor.update == NULL))
|
||||||
|
{
|
||||||
|
Actor_Kill(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// copy position and rotation from the attached arrow
|
||||||
|
this->actor.posRot.pos = arrow->actor.posRot.pos;
|
||||||
|
this->actor.shape.rot = arrow->actor.shape.rot;
|
||||||
|
distanceScaled = Math_Vec3f_DistXYZ(&this->arrowPos, &this->actor.posRot.pos) * 0.041666668f;
|
||||||
|
this->unk_158 = distanceScaled;
|
||||||
|
if (distanceScaled < 1.0f)
|
||||||
|
{
|
||||||
|
this->unk_158 = 1.0f;
|
||||||
|
}
|
||||||
|
func_80865ECC(&this->arrowPos, &this->actor.posRot.pos, 0.05f);
|
||||||
|
|
||||||
|
if (arrow->hitWall & 1)
|
||||||
|
{
|
||||||
|
Audio_PlayActorSound2(&this->actor, NA_SE_IT_EXPLOSION_FRAME);
|
||||||
|
func_80865D10(this, &func_80865F1C);
|
||||||
|
this->unk_166 = 32;
|
||||||
|
this->unk_168 = 0xFF;
|
||||||
|
}
|
||||||
|
else if (arrow->timer < 0x22)
|
||||||
|
{
|
||||||
|
if (this->unk_168 < 0x23)
|
||||||
|
{
|
||||||
|
Actor_Kill(&this->actor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->unk_168 -= 25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArrowFire_Update(ArrowFire* this, GlobalContext* globalCtx)
|
||||||
|
{
|
||||||
|
if (globalCtx->msgCtx.msgMode == 0xD || globalCtx->msgCtx.msgMode == 0x11)
|
||||||
|
{
|
||||||
|
Actor_Kill(&this->actor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->actionFunc(this, globalCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/ArrowFire_Draw.s")
|
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Arrow_Fire/ArrowFire_Draw.s")
|
||||||
|
|
|
@ -7,7 +7,13 @@
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x0000 */ Actor actor;
|
||||||
/* 0x014C */ char unk_14C[0x20];
|
/* 0x014C */ Vec3f arrowPos;
|
||||||
|
/* 0x0158 */ f32 unk_158;
|
||||||
|
/* 0x015C */ f32 unk_15C;
|
||||||
|
/* 0x0160 */ ActorFunc actionFunc;
|
||||||
|
/* 0x0164 */ s16 fireRadius;
|
||||||
|
/* 0x0166 */ u16 unk_166;
|
||||||
|
/* 0x0168 */ u8 unk_168;
|
||||||
} ArrowFire; // size = 0x016C
|
} ArrowFire; // size = 0x016C
|
||||||
|
|
||||||
extern const ActorInit Arrow_Fire_InitVars;
|
extern const ActorInit Arrow_Fire_InitVars;
|
||||||
|
|
|
@ -7,7 +7,9 @@
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x0000 */ Actor actor;
|
||||||
/* 0x014C */ char unk_14C[0x114];
|
/* 0x014C */ char unk_14C[0xFC];
|
||||||
|
/* 0x0248 */ u8 timer; // used for dissapearing when flying or hitting a wall
|
||||||
|
/* 0x0249 */ u8 hitWall;
|
||||||
} EnArrow; // size = 0x0260
|
} EnArrow; // size = 0x0260
|
||||||
|
|
||||||
extern const ActorInit En_Arrow_InitVars;
|
extern const ActorInit En_Arrow_InitVars;
|
||||||
|
|
Loading…
Reference in a new issue