match c_bg_s, fix d_kankyo_rain double branches

This commit is contained in:
LagoLunatic
2023-11-30 20:22:55 -05:00
parent a8d10408a2
commit ac7c20cab4
3 changed files with 241 additions and 231 deletions
+1 -1
View File
@@ -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"),
+12 -11
View File
@@ -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
View File
@@ -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 */