d_fader OK (#46)

This commit is contained in:
robojumper
2024-10-01 14:55:07 +02:00
committed by GitHub
parent d75f4c92ef
commit 4d9a0d6390
9 changed files with 277 additions and 23 deletions
+7
View File
@@ -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
View File
@@ -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
+2
View File
@@ -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"),
+30
View File
@@ -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
+22
View File
@@ -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
+25 -1
View File
@@ -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
View File
@@ -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
+98
View File
@@ -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;
}
+68
View File
@@ -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();
}