2024-02-19 23:02:10 +01:00
|
|
|
#include "patches.h"
|
|
|
|
#include "transform_ids.h"
|
|
|
|
#include "overlays/actors/ovl_En_Test7/z_en_test7.h"
|
|
|
|
|
|
|
|
#define THIS ((EnTest7*)thisx)
|
|
|
|
|
|
|
|
// Decomp renames, TODO update decomp and remove these
|
|
|
|
#define gSoaringWarpCsWindCapsuleTexAnim gameplay_keep_Matanimheader_0815D0
|
|
|
|
#define gSoaringWarpCsWindCapsuleDL gameplay_keep_DL_080FC8
|
|
|
|
#define EnTest7_DrawFeathers func_80AF14FC
|
|
|
|
|
|
|
|
void EnTest7_DrawFeathers(PlayState* play2, OwlWarpFeather* feathers);
|
|
|
|
s32 func_80AF31D0(PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx,
|
|
|
|
Vec3f* scale, Vec3s* rot, Vec3f* pos);
|
|
|
|
|
|
|
|
extern AnimatedMaterial gSoaringWarpCsWindCapsuleTexAnim;
|
|
|
|
extern Gfx gSoaringWarpCsWindCapsuleDL[];
|
|
|
|
|
|
|
|
void EnTest7_Draw(Actor* thisx, PlayState* play) {
|
|
|
|
s32 pad[2];
|
|
|
|
EnTest7* this = THIS;
|
|
|
|
s32 sp40;
|
|
|
|
|
|
|
|
OPEN_DISPS(play->state.gfxCtx);
|
|
|
|
|
|
|
|
// Draw wings
|
|
|
|
if (this->flags & OWL_WARP_FLAGS_DRAW_WINGS) {
|
|
|
|
Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
|
|
|
|
|
|
|
|
if (mtx == NULL) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// func_80AF31D0 is an overlay symbol, so its addresses need to be offset to get the actual loaded vram address.
|
|
|
|
// TODO remove this once the recompiler is able to handle overlay symbols automatically for patch functions.
|
2024-02-24 22:14:48 +01:00
|
|
|
OverrideKeyframeDrawScaled func_80AF31D0_relocated = (OverrideKeyframeDrawScaled)actor_relocate(thisx, func_80AF31D0);
|
2024-02-19 23:02:10 +01:00
|
|
|
|
|
|
|
// @recomp Push the matrix group for the song of soaring's wings.
|
2024-02-26 07:42:57 +01:00
|
|
|
gEXMatrixGroupDecomposed(POLY_OPA_DISP++, SOARING_WINGS_TRANSFORM_ID, G_EX_PUSH, G_MTX_MODELVIEW,
|
|
|
|
G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_SKIP, G_EX_ORDER_LINEAR);
|
2024-02-19 23:02:10 +01:00
|
|
|
|
|
|
|
func_8018450C(play, &this->skeletonInfo, mtx, func_80AF31D0_relocated, NULL, &this->actor);
|
|
|
|
|
|
|
|
// @recomp Pop the wings matrix group.
|
|
|
|
gEXPopMatrixGroup(POLY_OPA_DISP++);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Draw windCapsule encasing that surrounds player after wings
|
|
|
|
if (this->flags & OWL_WARP_FLAGS_DRAW_WIND_CAPSULE) {
|
|
|
|
// @recomp Push the matrix group for the song of soaring's capsule.
|
2024-02-26 07:42:57 +01:00
|
|
|
gEXMatrixGroupDecomposed(POLY_XLU_DISP++, SOARING_CAPSULE_TRANSFORM_ID, G_EX_PUSH, G_MTX_MODELVIEW,
|
|
|
|
G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_INTERPOLATE, G_EX_COMPONENT_SKIP, G_EX_ORDER_LINEAR);
|
2024-02-19 23:02:10 +01:00
|
|
|
|
|
|
|
Matrix_Push();
|
|
|
|
Matrix_Translate(0.0f, 4000.0f, 0.0f, MTXMODE_APPLY);
|
|
|
|
Matrix_RotateZYX(0, this->windCapsule.yaw, 0, MTXMODE_APPLY);
|
|
|
|
Matrix_Scale(this->windCapsule.xzScale * 100.0f, this->windCapsule.yScale * 100.0f,
|
|
|
|
this->windCapsule.xzScale * 100.0f, MTXMODE_APPLY);
|
|
|
|
sp40 = this->windCapsule.unk_00;
|
|
|
|
AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(&gSoaringWarpCsWindCapsuleTexAnim), sp40);
|
|
|
|
Gfx_DrawDListXlu(play, gSoaringWarpCsWindCapsuleDL);
|
|
|
|
|
|
|
|
// @recomp Pop the capsule matrix group.
|
|
|
|
gEXPopMatrixGroup(POLY_XLU_DISP++);
|
|
|
|
Matrix_Pop();
|
|
|
|
}
|
|
|
|
|
|
|
|
EnTest7_DrawFeathers(play, this->feathers);
|
|
|
|
|
|
|
|
if (this->flags & OWL_WARP_FLAGS_DRAW_LENS_FLARE) {
|
|
|
|
Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, this->actor.world.pos, 70.0f,
|
|
|
|
5.0f, 0, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
CLOSE_DISPS(play->state.gfxCtx);
|
|
|
|
}
|
|
|
|
|
|
|
|
#undef TEST
|