mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-11 06:34:45 -04:00
match c_bg_s, fix d_kankyo_rain double branches
This commit is contained in:
+1
-1
@@ -522,7 +522,7 @@ config.libs = [
|
||||
Object(Matching, "SSystem/SComponent/c_xyz.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_sxyz.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_math.cpp"),
|
||||
Object(NonMatching, "SSystem/SComponent/c_bg_s.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_bg_s.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_bg_s_chk.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_bg_s_gnd_chk.cpp"),
|
||||
Object(Matching, "SSystem/SComponent/c_bg_s_lin_chk.cpp"),
|
||||
|
||||
@@ -76,19 +76,17 @@ static void dummy() {
|
||||
}
|
||||
|
||||
/* 80246600-8024669C .text Release__4cBgSFP4cBgW */
|
||||
int cBgS::Release(cBgW* bgw) {
|
||||
bool cBgS::Release(cBgW* bgw) {
|
||||
if (bgw == NULL)
|
||||
return true;
|
||||
|
||||
if (bgw->ChkUsed() && bgw->GetId() >= 0 && bgw->GetId() < 0x100 && m_chk_element[bgw->GetId()].ChkUsed()) {
|
||||
m_chk_element[bgw->GetId()].Release();
|
||||
bgw->SetId(256);
|
||||
goto done;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
done:
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -136,8 +134,8 @@ f32 cBgS::GroundCross(cBgS_GndChk* chk) {
|
||||
chk->ClearPi();
|
||||
chk->mWallPrecheck = (chk->mFlag & 0x02);
|
||||
chk->mGndPrecheck = (chk->mFlag & 0x01);
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
cBgS_ChkElm* elm = &m_chk_element[bg_index];
|
||||
cBgS_ChkElm* elm = m_chk_element;
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++, elm++) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->m_bgw_base_ptr->GroundCrossGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
@@ -150,10 +148,13 @@ f32 cBgS::GroundCross(cBgS_GndChk* chk) {
|
||||
/* 80246A14-80246C98 .text ConvDzb__4cBgSFPv */
|
||||
void* cBgS::ConvDzb(void* work) {
|
||||
cBgD_t * pbgd = (cBgD_t *)work;
|
||||
if (pbgd->flag & 0x80000000)
|
||||
return;
|
||||
|
||||
pbgd->flag |= 0x80000000;
|
||||
if (((pbgd->flag & 0x80000000) == 0)) {
|
||||
pbgd->flag |= 0x80000000;
|
||||
} else {
|
||||
return pbgd;
|
||||
}
|
||||
|
||||
JUT_ASSERT(0x214, ((int)pbgd->m_v_tbl % 4) == 0);
|
||||
JUT_ASSERT(0x215, ((int)pbgd->m_t_tbl % 2) == 0);
|
||||
JUT_ASSERT(0x216, ((int)pbgd->m_b_tbl % 2) == 0);
|
||||
@@ -173,7 +174,7 @@ void* cBgS::ConvDzb(void* work) {
|
||||
for (s32 i = 0; i < pbgd->m_g_num; i++) {
|
||||
pbgd->m_g_tbl[i].m_name = (char*)((u32)pbgd + (u32)pbgd->m_g_tbl[i].m_name);
|
||||
}
|
||||
|
||||
|
||||
return pbgd;
|
||||
}
|
||||
|
||||
|
||||
+228
-219
@@ -523,11 +523,13 @@ void wave_move() {
|
||||
if (g_env_light.mWaveChan.mWaveFlatInter >= 1.0f)
|
||||
return;
|
||||
|
||||
if (dComIfGd_getView() == NULL)
|
||||
if (dComIfGd_getView() != NULL) {
|
||||
Mtx drawMtx;
|
||||
MTXInverse(dComIfGd_getViewRotMtx(), drawMtx);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
Mtx drawMtx;
|
||||
MTXInverse(dComIfGd_getViewRotMtx(), drawMtx);
|
||||
cXyz d0;
|
||||
dKy_set_eyevect_calc2(pCamera, &eyevect, g_env_light.mWaveChan.mWaveSpawnDist, 0.0f);
|
||||
d0.z = 0.0f;
|
||||
@@ -898,131 +900,133 @@ void dKyr_drawRain(Mtx drawMtx, u8** pImg) {
|
||||
if (dComIfGd_getView() != NULL) {
|
||||
Mtx camMtx;
|
||||
MTXInverse(dComIfGd_getViewRotMtx(), camMtx);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
GXTexObj texObj;
|
||||
GXInitTexObj(&texObj, pImg[0], 64, 64, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&texObj, GX_TEXMAP0);
|
||||
GXSetNumChans(0);
|
||||
GXSetTevColor(GX_TEVREG0, reg0);
|
||||
GXSetTevColor(GX_TEVREG1, reg1);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetZMode(true, GX_LEQUAL, false);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
GXTexObj texObj;
|
||||
GXInitTexObj(&texObj, pImg[0], 64, 64, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&texObj, GX_TEXMAP0);
|
||||
GXSetNumChans(0);
|
||||
GXSetTevColor(GX_TEVREG0, reg0);
|
||||
GXSetTevColor(GX_TEVREG1, reg1);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetZMode(true, GX_LEQUAL, false);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_DISABLE);
|
||||
GXSetClipMode(GX_CLIP_DISABLE);
|
||||
#endif
|
||||
GXSetNumIndStages(0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
Mtx rotMtx;
|
||||
MTXRotRad(rotMtx, 'Z', rot * 0.01745329f);
|
||||
MTXConcat(drawMtx, rotMtx, drawMtx);
|
||||
GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
GXSetNumIndStages(0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
Mtx rotMtx;
|
||||
MTXRotRad(rotMtx, 'Z', rot * 0.01745329f);
|
||||
MTXConcat(drawMtx, rotMtx, drawMtx);
|
||||
GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
|
||||
for (s32 i = 0; i < pPkt->mRainCount; i++) {
|
||||
f32 alpha = pPkt->mRainEff[i].mAlpha;
|
||||
if (alpha <= 0.0f)
|
||||
continue;
|
||||
for (s32 i = 0; i < pPkt->mRainCount; i++) {
|
||||
f32 alpha = pPkt->mRainEff[i].mAlpha;
|
||||
if (alpha <= 0.0f)
|
||||
continue;
|
||||
|
||||
reg0.a = alpha * 14.0f;
|
||||
GXSetTevColor(GX_TEVREG0, reg0);
|
||||
reg0.a = alpha * 14.0f;
|
||||
GXSetTevColor(GX_TEVREG0, reg0);
|
||||
|
||||
cXyz pos[4], p;
|
||||
cXyz pos[4], p;
|
||||
|
||||
p.x = pPkt->mRainEff[i].mBasePos.x + + pPkt->mRainEff[i].mPos.x;
|
||||
p.y = pPkt->mRainEff[i].mBasePos.y + + pPkt->mRainEff[i].mPos.y;
|
||||
p.z = pPkt->mRainEff[i].mBasePos.z + + pPkt->mRainEff[i].mPos.z;
|
||||
p.x = pPkt->mRainEff[i].mBasePos.x + + pPkt->mRainEff[i].mPos.x;
|
||||
p.y = pPkt->mRainEff[i].mBasePos.y + + pPkt->mRainEff[i].mPos.y;
|
||||
p.z = pPkt->mRainEff[i].mBasePos.z + + pPkt->mRainEff[i].mPos.z;
|
||||
|
||||
f32 dist = p.abs(pCamera->mLookat.mEye);
|
||||
dist = dist / 1500.0f + 0.1f;
|
||||
if (dist > 1.0f)
|
||||
dist = 1.0f;
|
||||
f32 dist = p.abs(pCamera->mLookat.mEye);
|
||||
dist = dist / 1500.0f + 0.1f;
|
||||
if (dist > 1.0f)
|
||||
dist = 1.0f;
|
||||
|
||||
f32 size = 2.5f + (i / 250.0f);
|
||||
f32 size = 2.5f + (i / 250.0f);
|
||||
|
||||
f32 speed = dist * 70.0f + 5.0f;
|
||||
f32 speed = dist * 70.0f + 5.0f;
|
||||
|
||||
cXyz tilt;
|
||||
tilt.x = speed * (windvec.x + pPkt->mCenterDelta.x * pPkt->mCenterDeltaMul + (i & 0x07) * 0.08f + 0.0f);
|
||||
tilt.y = speed * (windvec.y + pPkt->mCenterDelta.y * pPkt->mCenterDeltaMul + -2.0f);
|
||||
tilt.z = speed * (windvec.z + pPkt->mCenterDelta.z * pPkt->mCenterDeltaMul + (i & 0x03) * 0.08f + 0.0f);
|
||||
cXyz tilt;
|
||||
tilt.x = speed * (windvec.x + pPkt->mCenterDelta.x * pPkt->mCenterDeltaMul + (i & 0x07) * 0.08f + 0.0f);
|
||||
tilt.y = speed * (windvec.y + pPkt->mCenterDelta.y * pPkt->mCenterDeltaMul + -2.0f);
|
||||
tilt.z = speed * (windvec.z + pPkt->mCenterDelta.z * pPkt->mCenterDeltaMul + (i & 0x03) * 0.08f + 0.0f);
|
||||
|
||||
cXyz worldPos, lp;
|
||||
cXyz worldPos, lp;
|
||||
|
||||
worldPos.x = -size * -1.0f;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[0].x = (p.x + lp.x) - tilt.x;
|
||||
pos[0].y = (p.y + lp.y) - tilt.y;
|
||||
pos[0].z = (p.z + lp.z) - tilt.z;
|
||||
worldPos.x = -size * -1.0f;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[0].x = (p.x + lp.x) - tilt.x;
|
||||
pos[0].y = (p.y + lp.y) - tilt.y;
|
||||
pos[0].z = (p.z + lp.z) - tilt.z;
|
||||
|
||||
worldPos.x = size;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[1].x = (p.x + lp.x) - tilt.x;
|
||||
pos[1].y = (p.y + lp.y) - tilt.y;
|
||||
pos[1].z = (p.z + lp.z) - tilt.z;
|
||||
worldPos.x = size;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[1].x = (p.x + lp.x) - tilt.x;
|
||||
pos[1].y = (p.y + lp.y) - tilt.y;
|
||||
pos[1].z = (p.z + lp.z) - tilt.z;
|
||||
|
||||
worldPos.x = -size * -1.0f;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[2].x = p.x + lp.x;
|
||||
pos[2].y = p.y + lp.y;
|
||||
pos[2].z = p.z + lp.z;
|
||||
worldPos.x = -size * -1.0f;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[2].x = p.x + lp.x;
|
||||
pos[2].y = p.y + lp.y;
|
||||
pos[2].z = p.z + lp.z;
|
||||
|
||||
worldPos.x = size;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[3].x = p.x;
|
||||
pos[3].y = p.y;
|
||||
pos[3].z = p.z;
|
||||
worldPos.x = size;
|
||||
worldPos.y = 0.0f;
|
||||
worldPos.z = 0.0f;
|
||||
MTXMultVec(drawMtx, &worldPos, &lp);
|
||||
pos[3].x = p.x;
|
||||
pos[3].y = p.y;
|
||||
pos[3].z = p.z;
|
||||
|
||||
for (s32 j = 0; j < 4; j++) {
|
||||
static const cXyz add_table[4] = {
|
||||
cXyz(150.0f, 0.0f, 0.0f),
|
||||
cXyz(0.0f, 150.0f, 150.0f),
|
||||
cXyz(150.0f, 320.0f, 150.0f),
|
||||
cXyz(45.0f, 480.0f, 45.0f),
|
||||
};
|
||||
for (s32 j = 0; j < 4; j++) {
|
||||
static const cXyz add_table[4] = {
|
||||
cXyz(150.0f, 0.0f, 0.0f),
|
||||
cXyz(0.0f, 150.0f, 150.0f),
|
||||
cXyz(150.0f, 320.0f, 150.0f),
|
||||
cXyz(45.0f, 480.0f, 45.0f),
|
||||
};
|
||||
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
const cXyz * pAdd = &add_table[i];
|
||||
f32 addX = pAdd->x, addY = pAdd->y, addZ = pAdd->z;
|
||||
GXPosition3f32(pos[0].x + addX, pos[0].y + addY, pos[0].z + addZ);
|
||||
GXTexCoord2s16(0, 0);
|
||||
GXPosition3f32(pos[1].x + addX, pos[1].y + addY, pos[1].z + addZ);
|
||||
GXTexCoord2s16(0xFF, 0);
|
||||
GXPosition3f32(pos[2].x + addX, pos[2].y + addY, pos[2].z + addZ);
|
||||
GXTexCoord2s16(0xFF, 0xFF);
|
||||
GXPosition3f32(pos[3].x + addX, pos[3].y + addY, pos[3].z + addZ);
|
||||
GXTexCoord2s16(0, 0xFF);
|
||||
GXEnd();
|
||||
}
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
const cXyz * pAdd = &add_table[i];
|
||||
f32 addX = pAdd->x, addY = pAdd->y, addZ = pAdd->z;
|
||||
GXPosition3f32(pos[0].x + addX, pos[0].y + addY, pos[0].z + addZ);
|
||||
GXTexCoord2s16(0, 0);
|
||||
GXPosition3f32(pos[1].x + addX, pos[1].y + addY, pos[1].z + addZ);
|
||||
GXTexCoord2s16(0xFF, 0);
|
||||
GXPosition3f32(pos[2].x + addX, pos[2].y + addY, pos[2].z + addZ);
|
||||
GXTexCoord2s16(0xFF, 0xFF);
|
||||
GXPosition3f32(pos[3].x + addX, pos[3].y + addY, pos[3].z + addZ);
|
||||
GXTexCoord2s16(0, 0xFF);
|
||||
GXEnd();
|
||||
}
|
||||
}
|
||||
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
J3DShape::resetVcdVatCache();
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
J3DShape::resetVcdVatCache();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1036,120 +1040,125 @@ void dKyr_drawSibuki(Mtx drawMtx, u8** pImg) {
|
||||
if (g_env_light.mSnowCount == 0 && dComIfGd_getView() != NULL) {
|
||||
Mtx camMtx;
|
||||
MTXInverse(dComIfGd_getViewRotMtx(), camMtx);
|
||||
|
||||
f32 alpha = 200.0f;
|
||||
if (pPkt->mStatus & 1)
|
||||
alpha = 0.0f;
|
||||
else if (pPkt->mStatus & 2)
|
||||
alpha = 200.0f;
|
||||
|
||||
cLib_addCalc(&pPkt->mSibukiAlpha, alpha, 0.2f, 30.0f, 0.001f);
|
||||
|
||||
cXyz eyevect, camDir;
|
||||
dKy_set_eyevect_calc(pCamera, &eyevect, 7000.0f, 4000.0f);
|
||||
dKyr_get_vectle_calc(&pCamera->mLookat.mEye, &pCamera->mLookat.mCenter, &camDir);
|
||||
|
||||
float alphaFade = 0.0f;
|
||||
if (camDir.y > 0.0f) {
|
||||
if (camDir.y < 0.5f)
|
||||
alphaFade = 1.0f - (camDir.y / 0.5f);
|
||||
} else {
|
||||
alphaFade = 1.0f;
|
||||
}
|
||||
|
||||
GXColor color;
|
||||
color.r = 0xB4;
|
||||
color.g = 0xC8;
|
||||
color.b = 0xC8;
|
||||
color.a = (u8)(pPkt->mSibukiAlpha * alphaFade);
|
||||
|
||||
GXTexObj texObj;
|
||||
dKyr_init_btitex(&texObj, (ResTIMG*)pImg[1]);
|
||||
GXLoadTexObj(&texObj, GX_TEXMAP0);
|
||||
|
||||
GXSetNumChans(0);
|
||||
GXSetTevColor(GX_TEVREG0, color);
|
||||
GXSetTevColor(GX_TEVREG1, color);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, false, GX_PTIDENTITY);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetZMode(true, GX_GEQUAL, false);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_DISABLE);
|
||||
#endif
|
||||
GXSetNumIndStages(0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
|
||||
f32 scale;
|
||||
if (dComIfGd_getView() != NULL) {
|
||||
scale = dComIfGd_getView()->mFovy / 20.0f;
|
||||
if (scale >= 1.0f)
|
||||
scale = 1.0f;
|
||||
scale = 1.0f - scale;
|
||||
} else {
|
||||
scale = 0.2f;
|
||||
}
|
||||
|
||||
for (s32 i = 0; i < g_env_light.mRainCount >> 1; i++) {
|
||||
cXyz pos[4], p;
|
||||
|
||||
f32 size = 20.0f + (scale * cM_rndF(25.0f));
|
||||
|
||||
f32 localX = cM_rndFX(3600.0f);
|
||||
f32 localY = cM_rndFX(1500.0f);
|
||||
f32 localZ = cM_rndFX(3600.0f);
|
||||
|
||||
p.x = eyevect.x + localX;
|
||||
p.y = eyevect.y + localY;
|
||||
p.z = eyevect.z + localZ;
|
||||
|
||||
pos[0].x = p.x - size;
|
||||
pos[0].y = p.y;
|
||||
pos[0].z = p.z - size;
|
||||
|
||||
pos[1].x = p.x + size;
|
||||
pos[1].y = p.y;
|
||||
pos[1].z = p.z - size;
|
||||
|
||||
pos[2].x = p.x + size;
|
||||
pos[2].y = p.y;
|
||||
pos[2].z = p.z + size;
|
||||
|
||||
pos[3].x = p.x - size;
|
||||
pos[3].y = p.y;
|
||||
pos[3].z = p.z + size;
|
||||
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
|
||||
GXTexCoord2s16(0, 0);
|
||||
GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
|
||||
GXTexCoord2s16(0x1FF, 0);
|
||||
GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
|
||||
GXTexCoord2s16(0x1FF, 0x1FF);
|
||||
GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
|
||||
GXTexCoord2s16(0, 0x1FF);
|
||||
GXEnd();
|
||||
}
|
||||
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
J3DShape::resetVcdVatCache();
|
||||
#endif
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
f32 alpha = 200.0f;
|
||||
if (pPkt->mStatus & 1)
|
||||
alpha = 0.0f;
|
||||
else if (pPkt->mStatus & 2)
|
||||
alpha = 200.0f;
|
||||
|
||||
cLib_addCalc(&pPkt->mSibukiAlpha, alpha, 0.2f, 30.0f, 0.001f);
|
||||
|
||||
cXyz eyevect, camDir;
|
||||
dKy_set_eyevect_calc(pCamera, &eyevect, 7000.0f, 4000.0f);
|
||||
dKyr_get_vectle_calc(&pCamera->mLookat.mEye, &pCamera->mLookat.mCenter, &camDir);
|
||||
|
||||
f32 alphaFade;
|
||||
if (camDir.y > 0.0f) {
|
||||
if (camDir.y < 0.5f) {
|
||||
alphaFade = 1.0f - (camDir.y / 0.5f);
|
||||
} else {
|
||||
alphaFade = 0.0f;
|
||||
}
|
||||
} else {
|
||||
alphaFade = 1.0f;
|
||||
}
|
||||
|
||||
GXColor color;
|
||||
color.r = 0xB4;
|
||||
color.g = 0xC8;
|
||||
color.b = 0xC8;
|
||||
color.a = (u8)(pPkt->mSibukiAlpha * alphaFade);
|
||||
|
||||
GXTexObj texObj;
|
||||
dKyr_init_btitex(&texObj, (ResTIMG*)pImg[1]);
|
||||
GXLoadTexObj(&texObj, GX_TEXMAP0);
|
||||
|
||||
GXSetNumChans(0);
|
||||
GXSetTevColor(GX_TEVREG0, color);
|
||||
GXSetTevColor(GX_TEVREG1, color);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, false, GX_PTIDENTITY);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetZMode(true, GX_GEQUAL, false);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_DISABLE);
|
||||
#endif
|
||||
GXSetNumIndStages(0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXLoadPosMtxImm(drawMtx, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
|
||||
f32 scale;
|
||||
if (dComIfGd_getView() != NULL) {
|
||||
scale = dComIfGd_getView()->mFovy / 20.0f;
|
||||
if (scale >= 1.0f)
|
||||
scale = 1.0f;
|
||||
scale = 1.0f - scale;
|
||||
} else {
|
||||
scale = 0.2f;
|
||||
}
|
||||
|
||||
for (s32 i = 0; i < g_env_light.mRainCount >> 1; i++) {
|
||||
cXyz pos[4], p;
|
||||
|
||||
f32 size = 20.0f + (scale * cM_rndF(25.0f));
|
||||
|
||||
f32 localX = cM_rndFX(3600.0f);
|
||||
f32 localY = cM_rndFX(1500.0f);
|
||||
f32 localZ = cM_rndFX(3600.0f);
|
||||
|
||||
p.x = eyevect.x + localX;
|
||||
p.y = eyevect.y + localY;
|
||||
p.z = eyevect.z + localZ;
|
||||
|
||||
pos[0].x = p.x - size;
|
||||
pos[0].y = p.y;
|
||||
pos[0].z = p.z - size;
|
||||
|
||||
pos[1].x = p.x + size;
|
||||
pos[1].y = p.y;
|
||||
pos[1].z = p.z - size;
|
||||
|
||||
pos[2].x = p.x + size;
|
||||
pos[2].y = p.y;
|
||||
pos[2].z = p.z + size;
|
||||
|
||||
pos[3].x = p.x - size;
|
||||
pos[3].y = p.y;
|
||||
pos[3].z = p.z + size;
|
||||
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition3f32(pos[0].x, pos[0].y, pos[0].z);
|
||||
GXTexCoord2s16(0, 0);
|
||||
GXPosition3f32(pos[1].x, pos[1].y, pos[1].z);
|
||||
GXTexCoord2s16(0x1FF, 0);
|
||||
GXPosition3f32(pos[2].x, pos[2].y, pos[2].z);
|
||||
GXTexCoord2s16(0x1FF, 0x1FF);
|
||||
GXPosition3f32(pos[3].x, pos[3].y, pos[3].z);
|
||||
GXTexCoord2s16(0, 0x1FF);
|
||||
GXEnd();
|
||||
}
|
||||
|
||||
#if VERSION != VERSION_JPN
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
J3DShape::resetVcdVatCache();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* 80096D18-800973CC .text drawPoison__FPA4_fPPUc */
|
||||
|
||||
Reference in New Issue
Block a user