mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 15:01:33 -04:00
d_magma work
This commit is contained in:
+32
-6
@@ -5,18 +5,38 @@
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "JSystem/J3DGraphBase/J3DPacket.h"
|
||||
|
||||
class dMagma_ball_c;
|
||||
class dMagma_ball_c {
|
||||
public:
|
||||
dMagma_ball_c();
|
||||
virtual ~dMagma_ball_c();
|
||||
virtual void calc(f32, u8, int) = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void setup(f32, u8, int) = 0;
|
||||
|
||||
void draw();
|
||||
bool rangeCheck(cXyz&, f32*);
|
||||
};
|
||||
|
||||
class dMagma_ballPath_c : public dMagma_ball_c {
|
||||
public:
|
||||
dMagma_ballPath_c();
|
||||
virtual ~dMagma_ballPath_c();
|
||||
virtual void calc(f32, u8, int);
|
||||
virtual void update();
|
||||
virtual void setup(f32, u8, int);
|
||||
};
|
||||
|
||||
class dMagma_floor_c {
|
||||
public:
|
||||
~dMagma_floor_c();
|
||||
dMagma_floor_c();
|
||||
|
||||
void draw();
|
||||
void calc(int);
|
||||
void update();
|
||||
void create(cXyz&, cXyz&, s16, u8, int);
|
||||
void remove();
|
||||
|
||||
~dMagma_floor_c();
|
||||
dMagma_floor_c();
|
||||
|
||||
/* 0x00 */ dMagma_ball_c** mpBalls;
|
||||
/* 0x04 */ u8 mBallNum;
|
||||
/* 0x05 */ u8 mPathNo;
|
||||
@@ -30,7 +50,7 @@ public:
|
||||
/* 0xAC */ dMagma_floor_c* mpNext;
|
||||
};
|
||||
|
||||
class dMagma_room_c{
|
||||
class dMagma_room_c {
|
||||
public:
|
||||
void newFloor(dMagma_floor_c*);
|
||||
void deleteFloor();
|
||||
@@ -51,7 +71,13 @@ public:
|
||||
|
||||
virtual void draw();
|
||||
virtual ~dMagma_packet_c();
|
||||
|
||||
|
||||
static GXTexObj mKuroTexObj;
|
||||
static Mtx mKuroMtx;
|
||||
static GXTexObj mColTexObj;
|
||||
static Mtx mBallMtx;
|
||||
static Mtx mFloorMtx;
|
||||
|
||||
/* 0x010 */ dMagma_floor_c mFloor[8];
|
||||
/* 0x590 */ dMagma_room_c mRoom[64];
|
||||
/* 0x690 */ GXColor mColor1;
|
||||
|
||||
@@ -35,6 +35,7 @@ GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback);
|
||||
GXTlutRegionCallback GXSetTlutRegionCallback(GXTlutRegionCallback callback);
|
||||
|
||||
void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 s_scale, u16 t_scale);
|
||||
void GXSetTexCoordBias(GXTexCoordID coord, GXBool s_enable, GXBool t_enable);
|
||||
|
||||
void __SetSURegs();
|
||||
void __GXSetSUTexRegs();
|
||||
|
||||
+94
-12
@@ -3,8 +3,23 @@
|
||||
// Translation Unit: d_magma.cpp
|
||||
//
|
||||
|
||||
#include "d_magma.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "d/d_magma.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "m_Do/m_Do_mtx.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
|
||||
Mtx l_colOrthoMtx;
|
||||
GXTexObj dMagma_packet_c::mKuroTexObj;
|
||||
Mtx dMagma_packet_c::mKuroMtx;
|
||||
GXTexObj dMagma_packet_c::mColTexObj;
|
||||
Mtx dMagma_packet_c::mFloorMtx;
|
||||
Mtx dMagma_packet_c::mBallMtx;
|
||||
|
||||
Vec l_YfloorPos[4] = {};
|
||||
u8 l_YfloorDL[0x27] = {};
|
||||
u8 l_YfloorMatDL[0x55] = {};
|
||||
Vec l_YballPos[0x21] = {};
|
||||
u8 l_YballMatDL[0x4b] = {};
|
||||
|
||||
/* 800755A4-800756B8 .text draw__13dMagma_ball_cFv */
|
||||
void dMagma_ball_c::draw() {
|
||||
@@ -12,7 +27,7 @@ void dMagma_ball_c::draw() {
|
||||
}
|
||||
|
||||
/* 800756B8-800757D4 .text rangeCheck__13dMagma_ball_cFR4cXyzPf */
|
||||
void dMagma_ball_c::rangeCheck(cXyz&, float*) {
|
||||
bool dMagma_ball_c::rangeCheck(cXyz&, f32*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
@@ -33,17 +48,54 @@ void dMagma_ballPath_c::setup(float, unsigned char, int) {
|
||||
|
||||
/* 80075A6C-80075CB8 .text draw__14dMagma_floor_cFv */
|
||||
void dMagma_floor_c::draw() {
|
||||
/* Nonmatching */
|
||||
GXSetArray(GX_VA_POS, l_YfloorPos, sizeof(*l_YfloorPos));
|
||||
GXLoadTexMtxImm(mTexMtx0, GX_TEXMTX2, GX_MTX3x4);
|
||||
GXLoadTexMtxImm(dMagma_packet_c::mKuroMtx, (u32)GX_PTTEXMTX0, GX_MTX3x4);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX2, GX_FALSE, GX_PTTEXMTX0);
|
||||
GXSetTexCoordScaleManually(GX_TEXCOORD0, GX_TRUE, GXGetTexObjWidth(&dMagma_packet_c::mKuroTexObj), GXGetTexObjHeight(&dMagma_packet_c::mKuroTexObj));
|
||||
GXSetTexCoordBias(GX_TEXCOORD0, GX_FALSE, GX_FALSE);
|
||||
GXCallDisplayList(&l_YfloorMatDL, 0x40);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXLoadPosMtxImm(mPosMtx, GX_PNMTX0);
|
||||
GXCallDisplayList(&l_YfloorDL, 0x20);
|
||||
GXSetArray(GX_VA_POS, l_YballPos, sizeof(*l_YballPos));
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXA, GX_CC_HALF, GX_CC_ONE, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_COMP_RGB8_GT, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_TEXC, GX_CC_C1, GX_CC_CPREV, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_APREV, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXCallDisplayList(l_YballMatDL, 0x40);
|
||||
GXLoadTexMtxImm(mBallPostMtx0, (u32)GX_PTTEXMTX1, GX_MTX3x4);
|
||||
|
||||
dMagma_ball_c** ball = &mpBalls[0];
|
||||
for (s32 i = 0; i < mBallNum; ball++, i++)
|
||||
(*ball)->draw();
|
||||
}
|
||||
|
||||
/* 80075CB8-80075DD8 .text calc__14dMagma_floor_cFi */
|
||||
void dMagma_floor_c::calc(int) {
|
||||
/* Nonmatching */
|
||||
void dMagma_floor_c::calc(int i_roomNo) {
|
||||
mDoMtx_stack_c::scaleS(1.0f, 0.05f, 1.0f);
|
||||
if (strcmp(dComIfGp_getStartStageName(), "MDrag_B") == 0 || strcmp(dComIfGp_getStartStageName(), "Xboss0") == 0)
|
||||
mDoMtx_stack_c::transM(0.0f, -(mBallPos.y + 20.0f), 0.0f);
|
||||
else
|
||||
mDoMtx_stack_c::transM(0.0f, -(mBallPos.y + 30.0f), 0.0f);
|
||||
mDoMtx_concat(l_colOrthoMtx, mDoMtx_stack_c::get(), mBallPostMtx0);
|
||||
dMagma_ball_c** ball = &mpBalls[0];
|
||||
for (s32 i = 0; i < mBallNum; ball++, i++)
|
||||
(*ball)->calc(mBallPos.y, mPathNo, i_roomNo);
|
||||
}
|
||||
|
||||
/* 80075DD8-80075E50 .text update__14dMagma_floor_cFv */
|
||||
void dMagma_floor_c::update() {
|
||||
/* Nonmatching */
|
||||
mDoMtx_concat(j3dSys.getViewMtx(), mTexMtx0, mPosMtx);
|
||||
dMagma_ball_c** ball = &mpBalls[0];
|
||||
for (s32 i = 0; i < mBallNum; ball++, i++)
|
||||
(*ball)->update();
|
||||
}
|
||||
|
||||
/* 80075E50-80076038 .text create__14dMagma_floor_cFR4cXyzR4cXyzsUci */
|
||||
@@ -58,7 +110,12 @@ dMagma_ball_c::~dMagma_ball_c() {
|
||||
|
||||
/* 80076080-80076100 .text remove__14dMagma_floor_cFv */
|
||||
void dMagma_floor_c::remove() {
|
||||
/* Nonmatching */
|
||||
dMagma_ball_c** ball = &mpBalls[0];
|
||||
for (s32 i = 0; i < mBallNum; ball++, i++)
|
||||
delete *ball;
|
||||
|
||||
delete mpBalls;
|
||||
mpBalls = NULL;
|
||||
}
|
||||
|
||||
/* 80076100-80076110 .text newFloor__13dMagma_room_cFP14dMagma_floor_c */
|
||||
@@ -88,7 +145,7 @@ dMagma_floor_c::~dMagma_floor_c() {
|
||||
|
||||
/* 80076318-80076324 .text __ct__14dMagma_floor_cFv */
|
||||
dMagma_floor_c::dMagma_floor_c() {
|
||||
/* Nonmatching */
|
||||
mpBalls = NULL;
|
||||
}
|
||||
|
||||
/* 80076324-800763CC .text __dt__15dMagma_packet_cFv */
|
||||
@@ -98,7 +155,27 @@ dMagma_packet_c::~dMagma_packet_c() {
|
||||
|
||||
/* 800763CC-800764EC .text draw__15dMagma_packet_cFv */
|
||||
void dMagma_packet_c::draw() {
|
||||
/* Nonmatching */
|
||||
j3dSys.reinitGX();
|
||||
GXSetNumIndStages(0);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXLoadTexObj(&mKuroTexObj, GX_TEXMAP0);
|
||||
GXLoadTexObj(&mColTexObj, GX_TEXMAP1);
|
||||
dKy_GxFog_set();
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetTevColor(GX_TEVREG1, mColor1);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
|
||||
dMagma_floor_c* floor = &mFloor[0];
|
||||
for (s32 i = 0; i < 8; i++, floor++) {
|
||||
if (floor->mpBalls != NULL)
|
||||
floor->draw();
|
||||
}
|
||||
|
||||
GXSetTexCoordScaleManually(GX_TEXCOORD0, GX_FALSE, 0, 0);
|
||||
GXSetTexCoordScaleManually(GX_TEXCOORD1, GX_FALSE, 0, 0);
|
||||
J3DShape::resetVcdVatCache();
|
||||
}
|
||||
|
||||
/* 800764EC-800764FC .text morfCalc__Ffff */
|
||||
@@ -113,7 +190,12 @@ void dMagma_packet_c::calc() {
|
||||
|
||||
/* 80076770-800767E4 .text update__15dMagma_packet_cFv */
|
||||
void dMagma_packet_c::update() {
|
||||
/* Nonmatching */
|
||||
dMagma_floor_c* floor = &mFloor[0];
|
||||
for (s32 i = 0; i < 8; i++, floor++) {
|
||||
if (floor->mpBalls != NULL)
|
||||
floor->update();
|
||||
}
|
||||
j3dSys.getDrawBuffer(0)->entryImm(this, 0);
|
||||
}
|
||||
|
||||
/* 800767E4-80076924 .text checkYpos__15dMagma_packet_cFR4cXyz */
|
||||
@@ -122,7 +204,7 @@ void dMagma_packet_c::checkYpos(cXyz&) {
|
||||
}
|
||||
|
||||
/* 80076924-80076AA4 .text newFloor__15dMagma_packet_cFR4cXyzR4cXyzis */
|
||||
void dMagma_packet_c::newFloor(cXyz&, cXyz&, int, short) {
|
||||
void dMagma_packet_c::newFloor(cXyz&, cXyz&, int i_roomNo, s16 i_pathNo) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user