diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index f491642c..1806fa0d 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -2304,6 +2304,8 @@ egg/gfx/eggPostEffectMaskDOF.cpp: egg/gfx/eggPostEffectSimple.cpp: .text start:0x804B1BF0 end:0x804B1E58 + .data start:0x8056F210 end:0x8056F230 + .sdata2 start:0x8057F810 end:0x8057F818 egg/gfx/eggScreen.cpp: .text start:0x804B1E60 end:0x804B30B4 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index c6466bab..7eb1cd11 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -26487,7 +26487,7 @@ scnProcDraw__Q23EGG12DrawPathBaseFUs = .text:0x804A0E60; // type:function size:0 FUN_804a0ea0 = .text:0x804A0EA0; // type:function size:0x188 __dt__Q23EGG14PostEffectMaskFv = .text:0x804A1030; // type:function size:0x40 __dt__Q23EGG14PostEffectUnk1Fv = .text:0x804A1070; // type:function size:0x40 -FUN_804a10b0 = .text:0x804A10B0; // type:function size:0x40 +__dt__Q23EGG16PostEffectSimpleFv = .text:0x804A10B0; // type:function size:0x40 FUN_804a10f0 = .text:0x804A10F0; // type:function size:0x60 FUN_804a1150 = .text:0x804A1150; // type:function size:0x21C FUN_804a1370 = .text:0x804A1370; // type:function size:0x7A4 @@ -26720,8 +26720,8 @@ FUN_804b1570 = .text:0x804B1570; // type:function size:0x64C FUN_804b1bc0 = .text:0x804B1BC0; // type:function size:0x8 FUN_804b1bd0 = .text:0x804B1BD0; // type:function size:0x8 FUN_804b1be0 = .text:0x804B1BE0; // type:function size:0x8 -FUN_804b1bf0 = .text:0x804B1BF0; // type:function size:0x5C -FUN_804b1c50 = .text:0x804B1C50; // type:function size:0x208 +__ct__Q23EGG16PostEffectSimpleFv = .text:0x804B1BF0; // type:function size:0x5C +setMaterialInternal__Q23EGG16PostEffectSimpleFv = .text:0x804B1C50; // type:function size:0x208 Initialize__Q23EGG6ScreenFPCUsPCUsPQ23EGG6Screen = .text:0x804B1E60; // type:function size:0x1DC __ct__Q23EGG6ScreenFv = .text:0x804B2040; // type:function size:0xCC __ct__Q23EGG6ScreenFffffPCQ23EGG6ScreenQ33EGG7Frustum10CanvasMode = .text:0x804B2110; // type:function size:0xBC @@ -37380,8 +37380,8 @@ __vt__Q23EGG14PostEffectBlur = .data:0x8056F170; // type:object size:0x1C __vt__Q23EGG14PostEffectUnk1 = .data:0x8056F190; // type:object size:0x20 __vt__Q23EGG14PostEffectUnk2 = .data:0x8056F1B0; // type:object size:0x1C __vt__Q23EGG14PostEffectMask = .data:0x8056F1D0; // type:object size:0x1C -lbl_8056F1F0 = .data:0x8056F1F0; // type:object size:0x20 -lbl_8056F210 = .data:0x8056F210; // type:object size:0x20 +lbl_8056F1F0 = .data:0x8056F1F0; // type:object size:0x1C +__vt__Q23EGG16PostEffectSimple = .data:0x8056F210; // type:object size:0x1C sTVModeInfo__Q23EGG6Screen = .data:0x8056F230; // type:object size:0x24 data:2byte EGG__Screen__vtable = .data:0x8056F254; // type:object size:0x14 __vt__Q23EGG16ScreenEffectBase = .data:0x8056F268; // type:object size:0xC diff --git a/configure.py b/configure.py index 9e51b0f5..53e783db 100644 --- a/configure.py +++ b/configure.py @@ -895,7 +895,7 @@ config.libs = [ Object(NonMatching, "egg/gfx/eggPostEffectUnk2.cpp"), # Unknown Object(Matching, "egg/gfx/eggPostEffectMask.cpp"), Object(NonMatching, "egg/gfx/eggPostEffectMaskDOF.cpp"), - Object(NonMatching, "egg/gfx/eggPostEffectSimple.cpp"), + Object(Matching, "egg/gfx/eggPostEffectSimple.cpp"), Object(NonMatching, "egg/gfx/eggScreen.cpp"), Object(Matching, "egg/gfx/eggScreenEffectBase.cpp"), Object(NonMatching, "egg/gfx/eggScreenEffectBlur.cpp"), # Unknown Guess diff --git a/include/egg/gfx/eggPostEffectSimple.h b/include/egg/gfx/eggPostEffectSimple.h index c0053367..4de2455f 100644 --- a/include/egg/gfx/eggPostEffectSimple.h +++ b/include/egg/gfx/eggPostEffectSimple.h @@ -1,6 +1,22 @@ #ifndef EGG_POST_EFFECT_SIMPLE_H #define EGG_POST_EFFECT_SIMPLE_H -namespace EGG {} // namespace EGG +#include "egg/gfx/eggPostEffectBase.h" +#include "rvl/GX/GXTypes.h" +namespace EGG { + +class PostEffectSimple : public PostEffectBase { +public: + PostEffectSimple(); + virtual void setMaterialInternal() override; + +private: + /* 0x2C */ GXColor field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ GXTevScale field_0x34; + /* 0x38 */ s32 field_0x38; +}; + +} // namespace EGG #endif diff --git a/src/egg/gfx/eggPostEffectSimple.cpp b/src/egg/gfx/eggPostEffectSimple.cpp index 468e8539..24c18b9f 100644 --- a/src/egg/gfx/eggPostEffectSimple.cpp +++ b/src/egg/gfx/eggPostEffectSimple.cpp @@ -1,3 +1,48 @@ #include "egg/gfx/eggPostEffectSimple.h" -namespace EGG {} // namespace EGG +#include "egg/gfx/eggDrawGX.h" +#include "nw4r/math/math_types.h" +#include "rvl/GX/GXTypes.h" + +namespace EGG { + +PostEffectSimple::PostEffectSimple() + : field_0x2C(DrawGX::WHITE), field_0x30(1.0f), field_0x34(GX_CS_SCALE_1), field_0x38(1) {} + +void PostEffectSimple::setMaterialInternal() { + loadTextureInternal(); + GXColor c = field_0x2C; + if (field_0x30 < 1.0f) { + scaleColor(c, c, true, field_0x30); + } + setMatColorChannel(); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e, 0, 0x7d); + nw4r::math::MTX34 mtx; + getBaseTexMtx(&mtx); + GXLoadTexMtxImm(mtx, 0x1e, GX_MTX_2x4); + setMatInd(); + GXSetNumTevStages(1); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); + GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); + GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); + GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_K0_A); + GXSetTevKColor(GX_KCOLOR0, c); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, mTexMapId, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_KONST, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, field_0x34, 1, GX_TEVPREV); + switch (field_0x38) { + case 0: GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); break; + case 1: GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); break; + case 2: + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXA, GX_CC_KONST, GX_CC_ZERO); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + break; + } + + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, field_0x34, true, GX_TEVPREV); + setMatPE(); +} + +} // namespace EGG