mirror of
https://github.com/zeldaret/ss
synced 2026-08-10 11:13:58 -04:00
d_fader OK (#46)
This commit is contained in:
@@ -78,6 +78,8 @@ d/d_dylink.cpp:
|
||||
d/d_fader.cpp:
|
||||
.text start:0x80053A30 end:0x80053E70
|
||||
.ctors start:0x804DB678 end:0x804DB67C
|
||||
.data start:0x8050D348 end:0x8050D358
|
||||
.sbss start:0x80575100 end:0x80575108
|
||||
|
||||
d/d_font_manager.cpp:
|
||||
.text start:0x80053E70 end:0x800541EC
|
||||
@@ -283,6 +285,11 @@ d/lyt/d_lyt_fader.cpp:
|
||||
.sdata start:0x80572AA8 end:0x80572AB0
|
||||
.sdata2 start:0x8057ABC8 end:0x8057ABE0
|
||||
|
||||
d/lyt/d_screen_fader.cpp:
|
||||
.text start:0x80175BD0 end:0x80175FC4
|
||||
.data start:0x80528D68 end:0x80528D90
|
||||
.sdata2 start:0x8057ABE0 end:0x8057AC08
|
||||
|
||||
d/a/d_a_player.cpp:
|
||||
.text start:0x801C5C30 end:0x802471F8
|
||||
.ctors start:0x804DB824 end:0x804DB828
|
||||
|
||||
+21
-21
@@ -2185,12 +2185,12 @@ set__21dDynamicModuleControlFPUsi = .text:0x80053880; // type:function size:0xC
|
||||
do_link__21dDynamicModuleControlCFv = .text:0x80053890; // type:function size:0xA0
|
||||
do_unlink__21dDynamicModuleControlFv = .text:0x80053930; // type:function size:0x9C
|
||||
__sinit_\d_dylink_cpp = .text:0x800539D0; // type:function size:0x54 scope:local
|
||||
dFader_c____dt = .text:0x80053A30; // type:function size:0xE4
|
||||
dFader_c__create = .text:0x80053B20; // type:function size:0x128
|
||||
dFader_c__setFader = .text:0x80053C50; // type:function size:0x198
|
||||
fn_80053DF0 = .text:0x80053DF0; // type:function size:0x1C
|
||||
fn_80053E10 = .text:0x80053E10; // type:function size:0x38
|
||||
dFader_c__sinit = .text:0x80053E50; // type:function size:0x20
|
||||
__dt__8dFader_cFv = .text:0x80053A30; // type:function size:0xE4
|
||||
create__8dFader_cFv = .text:0x80053B20; // type:function size:0x128
|
||||
setFader__8dFader_cFl = .text:0x80053C50; // type:function size:0x198
|
||||
getColorFaderAlpha__8dFader_cFv = .text:0x80053DF0; // type:function size:0x1C
|
||||
initForLyt__8dFader_cFv = .text:0x80053E10; // type:function size:0x38
|
||||
__sinit_\d_fader_cpp = .text:0x80053E50; // type:function size:0x20 scope:local
|
||||
__ct__10dFontMng_cFv = .text:0x80053E70; // type:function size:0x50
|
||||
__dt__10dFontMng_cFv = .text:0x80053EC0; // type:function size:0x68
|
||||
getFont__10dFontMng_cFUc = .text:0x80053F30; // type:function size:0x34
|
||||
@@ -9830,13 +9830,13 @@ fn_801759B0__11dLytFader_cFv = .text:0x801759B0; // type:function size:0x94
|
||||
fn_80175A50__11dLytFader_cFv = .text:0x80175A50; // type:function size:0xB8
|
||||
fn_80175B10__11dLytFader_cFv = .text:0x80175B10; // type:function size:0xA4
|
||||
fn_80175BC0__11dLytFader_cFl = .text:0x80175BC0; // type:function size:0x10
|
||||
fn_80175BD0 = .text:0x80175BD0; // type:function size:0x44
|
||||
fn_80175C20 = .text:0x80175C20; // type:function size:0x58
|
||||
fn_80175C80 = .text:0x80175C80; // type:function size:0x74
|
||||
fn_80175D00 = .text:0x80175D00; // type:function size:0x158
|
||||
fn_80175E60 = .text:0x80175E60; // type:function size:0x148
|
||||
fn_80175FB0 = .text:0x80175FB0; // type:function size:0x4
|
||||
fn_80175FC0 = .text:0x80175FC0; // type:function size:0x4
|
||||
__ct__14dScreenFader_cFRC6mColorQ212mFaderBase_c7EStatus = .text:0x80175BD0; // type:function size:0x44
|
||||
__dt__14dScreenFader_cFv = .text:0x80175C20; // type:function size:0x58
|
||||
setStatus__14dScreenFader_cFQ212mFaderBase_c7EStatus = .text:0x80175C80; // type:function size:0x74
|
||||
calc__14dScreenFader_cFv = .text:0x80175D00; // type:function size:0x158
|
||||
draw__14dScreenFader_cFv = .text:0x80175E60; // type:function size:0x148
|
||||
fadeIn__14dScreenFader_cFv = .text:0x80175FB0; // type:function size:0x4
|
||||
fadeOut__14dScreenFader_cFv = .text:0x80175FC0; // type:function size:0x4
|
||||
fn_80175FD0 = .text:0x80175FD0; // type:function size:0xC8
|
||||
fn_801760A0 = .text:0x801760A0; // type:function size:0x778
|
||||
fn_80176820 = .text:0x80176820; // type:function size:0x310
|
||||
@@ -30699,7 +30699,7 @@ lbl_8050D30C = .data:0x8050D30C; // type:object size:0x14
|
||||
lbl_8050D320 = .data:0x8050D320; // type:object size:0x10
|
||||
__vt__21dDynamicModuleControl = .data:0x8050D330; // type:object size:0xC
|
||||
lbl_8050D33C = .data:0x8050D33C; // type:object size:0xC
|
||||
dFader_c__vtable = .data:0x8050D348; // type:object size:0x10
|
||||
__vt__8dFader_c = .data:0x8050D348; // type:object size:0xC
|
||||
lbl_8050D358 = .data:0x8050D358; // type:object size:0x10 data:string
|
||||
lbl_8050D368 = .data:0x8050D368; // type:object size:0x11 data:string
|
||||
lbl_8050D37C = .data:0x8050D37C; // type:object size:0x11 data:string
|
||||
@@ -33504,7 +33504,7 @@ lbl_80528D18 = .data:0x80528D18; // type:object size:0x9 scope:local data:string
|
||||
lbl_80528D24 = .data:0x80528D24; // type:object size:0x9 scope:local data:string
|
||||
lbl_80528D30 = .data:0x80528D30; // type:object size:0xE scope:local data:string
|
||||
__vt__11dLytFader_c = .data:0x80528D40; // type:object size:0x24
|
||||
lbl_80528D68 = .data:0x80528D68; // type:object size:0x28
|
||||
__vt__14dScreenFader_c = .data:0x80528D68; // type:object size:0x24
|
||||
lbl_80528D90 = .data:0x80528D90; // type:object size:0x10
|
||||
lbl_80528DA0 = .data:0x80528DA0; // type:object size:0x168
|
||||
lbl_80528F08 = .data:0x80528F08; // type:object size:0xC data:string
|
||||
@@ -39748,7 +39748,7 @@ nDMC__4dDyl = .sbss:0x805750EC; // type:object size:0x4 data:4byte
|
||||
cCc_frmHeap__4dDyl = .sbss:0x805750F0; // type:object size:0x4 data:4byte
|
||||
Initialized__4dDyl = .sbss:0x805750F4; // type:object size:0x1 data:byte
|
||||
DVD__4dDyl = .sbss:0x805750F8; // type:object size:0x4 data:4byte
|
||||
dFader_c__mColorFader = .sbss:0x80575100; // type:object size:0x8 data:byte
|
||||
mFaderColor = .sbss:0x80575100; // type:object size:0x4 scope:local data:byte
|
||||
@GUARD@getFontPath__10dFontMng_cFUc@TEMP_FONT_NAME = .sbss:0x80575108; // type:object size:0x1 data:byte
|
||||
SOME_GFX_THING = .sbss:0x80575110; // type:object size:0x8 data:4byte
|
||||
lbl_80575118 = .sbss:0x80575118; // type:object size:0x4 data:4byte
|
||||
@@ -47711,11 +47711,11 @@ lbl_8057F418 = .sdata2:0x8057F418; // type:object size:0x4 data:float
|
||||
lbl_8057F41C = .sdata2:0x8057F41C; // type:object size:0x4 data:float
|
||||
lbl_8057F420 = .sdata2:0x8057F420; // type:object size:0x8 data:double
|
||||
lbl_8057F428 = .sdata2:0x8057F428; // type:object size:0x18 data:double
|
||||
EGG__DrawGX__scColorBlack = .sdata2:0x8057F440; // type:object size:0x4 data:4byte
|
||||
EGG__DrawGX__scColorWhite = .sdata2:0x8057F444; // type:object size:0x4 data:4byte
|
||||
EGG__DrawGX__scColorRed = .sdata2:0x8057F448; // type:object size:0x4 data:4byte
|
||||
EGG__DrawGX__scColorGreen = .sdata2:0x8057F44C; // type:object size:0x4 data:4byte
|
||||
EGG__DrawGX__scColorBlue = .sdata2:0x8057F450; // type:object size:0x8 data:4byte
|
||||
BLACK__Q23EGG6DrawGX = .sdata2:0x8057F440; // type:object size:0x4 data:4byte
|
||||
WHITE__Q23EGG6DrawGX = .sdata2:0x8057F444; // type:object size:0x4 data:4byte
|
||||
RED__Q23EGG6DrawGX = .sdata2:0x8057F448; // type:object size:0x4 data:4byte
|
||||
GREEN__Q23EGG6DrawGX = .sdata2:0x8057F44C; // type:object size:0x4 data:4byte
|
||||
BLUE__Q23EGG6DrawGX = .sdata2:0x8057F450; // type:object size:0x8 data:4byte
|
||||
lbl_8057F458 = .sdata2:0x8057F458; // type:object size:0x8 data:4byte
|
||||
lbl_8057F460 = .sdata2:0x8057F460; // type:object size:0x4 data:float
|
||||
lbl_8057F464 = .sdata2:0x8057F464; // type:object size:0x4 data:float
|
||||
|
||||
@@ -313,6 +313,7 @@ config.libs = [
|
||||
Object(Matching, "d/d_dvd.cpp"),
|
||||
Object(NonMatching, "d/d_dvd_unk.cpp"),
|
||||
Object(NonMatching, "d/d_dylink.cpp"),
|
||||
Object(Matching, "d/d_fader.cpp"),
|
||||
Object(Matching, "d/d_font_manager.cpp"),
|
||||
Object(Matching, "d/d_heap.cpp"),
|
||||
Object(Matching, "d/d_rawarchive.cpp"),
|
||||
@@ -355,6 +356,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d_textbox.cpp"),
|
||||
Object(Matching, "d/lyt/d_window.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_fader.cpp"),
|
||||
Object(Matching, "d/lyt/d_screen_fader.cpp"),
|
||||
Object(NonMatching, "d/lyt/common_arrow.cpp"),
|
||||
Object(NonMatching, "d/lyt/pause_disp_00.cpp"),
|
||||
Object(NonMatching, "toBeSorted/file_manager.cpp"),
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef D_FADER_H
|
||||
#define D_FADER_H
|
||||
|
||||
#include <d/lyt/d_lyt_fader.h>
|
||||
#include <d/lyt/d_screen_fader.h>
|
||||
#include <m/m_color_fader.h>
|
||||
#include <m/m_fader.h>
|
||||
|
||||
class dFader_c : mFader_c {
|
||||
public:
|
||||
dFader_c() : mpColorFader(nullptr), mpLytFader(nullptr), mpScreenFader(nullptr) {}
|
||||
virtual ~dFader_c();
|
||||
|
||||
bool create();
|
||||
bool setFader(s32 fader);
|
||||
u8 getColorFaderAlpha();
|
||||
bool initForLyt();
|
||||
|
||||
private:
|
||||
/* 0x08 */ mColorFader_c *mpColorFader;
|
||||
/* 0x0C */ dLytFader_c *mpLytFader;
|
||||
/* 0x10 */ dScreenFader_c *mpScreenFader;
|
||||
/* 0x14 */ UNKWORD field_0x14;
|
||||
/* 0x18 */ s32 mFadeInType;
|
||||
/* 0x1C */ s32 mFadeOutType;
|
||||
/* 0x20 */ u16 field_0x20;
|
||||
/* 0x22 */ u16 field_0x22;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef D_SCREEN_FADER_H
|
||||
#define D_SCREEN_FADER_H
|
||||
|
||||
#include <m/m_fader_base.h>
|
||||
|
||||
// A fader that closes and opens vertically like a camera shutter with two blades
|
||||
class dScreenFader_c : public mFaderBase_c {
|
||||
public:
|
||||
dScreenFader_c(const mColor &color, EStatus status);
|
||||
virtual ~dScreenFader_c();
|
||||
|
||||
virtual void setStatus(EStatus status) override;
|
||||
virtual bool fadeIn() override;
|
||||
virtual bool fadeOut() override;
|
||||
virtual bool calc() override;
|
||||
virtual void draw() override;
|
||||
|
||||
private:
|
||||
/* 0x014 */ f32 mProgress;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -7,15 +7,39 @@
|
||||
#include <egg/math/eggMatrix.h>
|
||||
#include <rvl/GX.h>
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
class DrawGX {
|
||||
public:
|
||||
enum DL {
|
||||
DL_0,
|
||||
DL_1,
|
||||
DL_2,
|
||||
DL_3,
|
||||
DL_4,
|
||||
DL_5,
|
||||
DL_6,
|
||||
DL_7,
|
||||
DL_8,
|
||||
DL_9,
|
||||
DL_10,
|
||||
DL_11,
|
||||
DL_12,
|
||||
DL_13,
|
||||
DL_14,
|
||||
DL_15,
|
||||
DL_16,
|
||||
DL_17,
|
||||
|
||||
DL_MAX
|
||||
};
|
||||
|
||||
static void Initialize(Heap *);
|
||||
|
||||
static GXTexMapID GetTexMapDefault();
|
||||
static void LoadTexture(const EGG::ResTIMG *, GXTexMapID);
|
||||
static void BeginDrawScreen(bool, bool, bool);
|
||||
static void DrawDL(enum DL, const nw4r::math::MTX34 &, GXColor);
|
||||
|
||||
// TODO MORE
|
||||
|
||||
|
||||
+4
-1
@@ -4,6 +4,9 @@
|
||||
#include <nw4r/ut/ut_Color.h>
|
||||
#include <rvl/GX.h>
|
||||
|
||||
struct mColor : public nw4r::ut::Color {};
|
||||
struct mColor : public nw4r::ut::Color {
|
||||
mColor() : nw4r::ut::Color() {}
|
||||
mColor(int red, int green, int blue, int alpha) : nw4r::ut::Color(red, green, blue, alpha) {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
#include <d/d_fader.h>
|
||||
#include <m/m_fader.h>
|
||||
|
||||
static mColor mFaderColor = mColor(200, 200, 200, 0xFF);
|
||||
|
||||
dFader_c::~dFader_c() {
|
||||
if (mpScreenFader != nullptr) {
|
||||
delete mpScreenFader;
|
||||
mpScreenFader = nullptr;
|
||||
}
|
||||
if (mpLytFader != nullptr) {
|
||||
delete mpLytFader;
|
||||
mpLytFader = nullptr;
|
||||
}
|
||||
if (mpColorFader != nullptr) {
|
||||
delete mpColorFader;
|
||||
mpColorFader = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool dFader_c::create() {
|
||||
mpColorFader = new mColorFader_c(mColor(0, 0, 0, 0x80), mFaderBase_c::FADED_OUT);
|
||||
if (!mpColorFader) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mpLytFader = new dLytFader_c(mColor(0, 0, 0, 0xFF), mFaderBase_c::FADED_OUT);
|
||||
if (!mpLytFader) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mpScreenFader = new dScreenFader_c(mColor(0, 0, 0, 0xFF), mFaderBase_c::FADED_OUT);
|
||||
if (!mpScreenFader) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mFadeOutType = 0;
|
||||
mFadeInType = 0;
|
||||
field_0x20 = 0x1E;
|
||||
field_0x22 = 0x1E;
|
||||
setFader(0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dFader_c::setFader(s32 fader) {
|
||||
switch (fader) {
|
||||
case 0:
|
||||
if (mFader_c::setFader(mpColorFader)) {
|
||||
if (mpColorFader->getStatus() == mFaderBase_c::FADED_IN) {
|
||||
mpColorFader->setColor(mColor(0, 0, 0, 0xFF));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mFader_c::setFader(mpColorFader)) {
|
||||
if (mpColorFader->getStatus() == mFaderBase_c::FADED_IN) {
|
||||
mpColorFader->setColor(mFaderColor);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (mFader_c::setFader(mpLytFader)) {
|
||||
if (mpLytFader->getStatus() == mFaderBase_c::FADED_IN) {
|
||||
mpLytFader->setColor(mColor(0, 0, 0, 0xFF));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mFader_c::setFader(mpScreenFader)) {
|
||||
if (mpScreenFader->getStatus() == mFaderBase_c::FADED_IN) {
|
||||
mpScreenFader->setColor(mColor(0, 0, 0, 0xFF));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
u8 dFader_c::getColorFaderAlpha() {
|
||||
if (mpColorFader != nullptr) {
|
||||
return mpColorFader->mFaderColor.a;
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
bool dFader_c::initForLyt() {
|
||||
bool ok = false;
|
||||
if (mpLytFader != nullptr) {
|
||||
ok = mpLytFader->init();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
#include <d/lyt/d_screen_fader.h>
|
||||
#include <egg/gfx/eggDrawGX.h>
|
||||
#include <egg/gfx/eggScreen.h>
|
||||
#include <m/m_mtx.h>
|
||||
#include <nw4r/ut/ut_algorithm.h>
|
||||
|
||||
dScreenFader_c::dScreenFader_c(const mColor &color, EStatus status) : mFaderBase_c(color, status), mProgress(0.0f) {}
|
||||
|
||||
dScreenFader_c::~dScreenFader_c() {}
|
||||
|
||||
void dScreenFader_c::setStatus(EStatus status) {
|
||||
if (status == FADED_OUT) {
|
||||
mStatus = FADED_OUT;
|
||||
mProgress = EGG::Screen::GetSizeYMax() * 0.5f;
|
||||
} else if (status == FADED_IN) {
|
||||
mStatus = FADED_IN;
|
||||
mProgress = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
bool dScreenFader_c::calc() {
|
||||
bool res = mFaderBase_c::calc();
|
||||
|
||||
f32 h = EGG::Screen::GetSizeYMax() * 0.5f;
|
||||
u16 elapsed = mElapsed;
|
||||
if (elapsed > mFrame) {
|
||||
elapsed = mFrame;
|
||||
}
|
||||
|
||||
switch (mStatus) {
|
||||
case FADING_IN:
|
||||
mProgress = h - (h * nw4r::math::SinRad((float)elapsed * M_PI / ((float)(mFrame * 2))));
|
||||
break;
|
||||
case FADING_OUT:
|
||||
mProgress = h - (h * nw4r::math::CosRad((float)elapsed * M_PI / ((float)(mFrame * 2))));
|
||||
break;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
extern "C" void fn_80016200();
|
||||
|
||||
void dScreenFader_c::draw() {
|
||||
fn_80016200();
|
||||
EGG::DrawGX::BeginDrawScreen(false, false, true);
|
||||
f32 scaleX = EGG::Screen::GetSizeXMax();
|
||||
f32 scaleY = EGG::Screen::GetSizeYMax();
|
||||
|
||||
mMtx_c mtx;
|
||||
PSMTXScale(mtx, scaleX, mProgress, 1.0f);
|
||||
PSMTXTransApply(mtx, mtx, -scaleX * 0.5f, scaleY * 0.5f - mProgress, 0.0f);
|
||||
|
||||
GXColor a = EGG::DrawGX::BLACK;
|
||||
EGG::DrawGX::DrawDL(EGG::DrawGX::DL_17, mtx.nw4rm, a);
|
||||
|
||||
PSMTXScale(mtx, scaleX, mProgress, 1.0f);
|
||||
PSMTXTransApply(mtx, mtx, -scaleX * 0.5f, -scaleY * 0.5f, 0.0f);
|
||||
EGG::DrawGX::DrawDL(EGG::DrawGX::DL_17, mtx.nw4rm, a);
|
||||
}
|
||||
|
||||
bool dScreenFader_c::fadeIn() {
|
||||
return mFaderBase_c::fadeIn();
|
||||
}
|
||||
|
||||
bool dScreenFader_c::fadeOut() {
|
||||
return mFaderBase_c::fadeOut();
|
||||
}
|
||||
Reference in New Issue
Block a user