diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2023-08-12 17:09:47 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-12 18:09:47 -0600 |
| commit | 08fa2f03fc1333057e265e80dd7ba8b1fc59b472 (patch) | |
| tree | edca7bf887b5cbe93a33a29fa4115459ae79f35c /src | |
| parent | c8bb857b13dbc4d1ec0c3a7a0929e7859420a317 (diff) | |
Kytag09 and Kytag11 OK, work on d_a_bg_obj and d_kankyo (#1877)
* work on kankyo / d_a_bg_obj
* d_a_bg_obj work / kytag09 and kytag11 OK
* remove asm
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/bg/d_bg_w_kcol.cpp | 14 | ||||
| -rw-r--r-- | src/d/kankyo/d_kankyo.cpp | 218 |
2 files changed, 186 insertions, 46 deletions
diff --git a/src/d/bg/d_bg_w_kcol.cpp b/src/d/bg/d_bg_w_kcol.cpp index d349a8e034..5c28e0a1ae 100644 --- a/src/d/bg/d_bg_w_kcol.cpp +++ b/src/d/bg/d_bg_w_kcol.cpp @@ -223,14 +223,14 @@ extern "C" asm void __dt__8dBgWKColFv() { #pragma pop /* 8007E7D0-8007E804 079110 0034+00 0/0 1/1 0/0 .text initKCollision__8dBgWKColFPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dBgWKCol::initKCollision(void* param_0) { - nofralloc -#include "asm/d/bg/d_bg_w_kcol/initKCollision__8dBgWKColFPv.s" +void dBgWKCol::initKCollision(void* i_kclData) { + KCol_Header* header_p = (KCol_Header*)i_kclData; + + header_p->pos_data_offset = (u32)header_p + header_p->pos_data_offset; + header_p->nrm_data_offset = (u32)header_p + header_p->nrm_data_offset; + header_p->prism_data_offset = (u32)header_p + header_p->prism_data_offset; + header_p->block_data_offset = (u32)header_p + header_p->block_data_offset; } -#pragma pop /* 8007E804-8007E850 079144 004C+00 0/0 0/0 1/1 .text create__8dBgWKColFPvPv */ void dBgWKCol::create(void* pprism, void* plc) { diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp index 584945e6ca..02eb0bbc77 100644 --- a/src/d/kankyo/d_kankyo.cpp +++ b/src/d/kankyo/d_kankyo.cpp @@ -1177,6 +1177,78 @@ SECTION_SDATA2 static f32 lit_4852[1 + 1 /* padding */] = { }; /* 8019DD6C-8019E13C 1986AC 03D0+00 3/3 0/0 0/0 .text dKy_light_influence_id__F4cXyzi */ +// regalloc, but equivalent? +#ifdef NONMATCHING +static int dKy_light_influence_id(cXyz param_0, int param_1) { + f32 var_f31 = 1000000.0f; + + int var_r28 = -1; + int var_r27 = -1; + int var_r25 = -1; + + f32 var_f30 = 800.0f; + if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) { + var_f30 = 250.0f; + } + + for (int i = 0; i <= param_1; i++) { + for (int j = 0; j < 100; j++) { + if (g_env_light.mPointLight[j] != NULL && (i == 0 || j != var_r28) && g_env_light.mPointLight[j]->mPow > 0.01f) { + if (var_f31 > param_0.abs(g_env_light.mPointLight[j]->mPosition)) { + if (g_env_light.mPointLight[j]->mIndex & 0x8000) { + if (var_f31 > var_f30) { + if (i == 0) { + var_r28 = j; + } + + if (i != 0) { + var_r27 = j; + } + + var_f31 = var_f30; + } + } else { + var_f31 = param_0.abs(g_env_light.mPointLight[j]->mPosition); + if (var_f31 < g_env_light.mPointLight[j]->mPow) { + if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 && dComIfGp_roomControl_getStayNo() == 0) { + if (var_f31 < g_env_light.mPointLight[j]->mPow * 0.5f) { + var_r25 = 99; + } + } else { + var_r25 = 99; + } + } + + if (var_r25 != -2) { + if (i == 0) { + var_r28 = j; + } else { + var_r27 = j; + } + } + } + } + + if (g_env_light.mPointLight[j]->mIndex < 0 && var_r25 != 99) { + if (i == 0) { + var_r28 = j; + } + + var_r25 = -2; + } + } + } + var_f31 = 1000000.0f; + } + + int ret = var_r27; + if (param_1 == 0) { + ret = var_r28; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1185,9 +1257,43 @@ static asm int dKy_light_influence_id(cXyz param_0, int param_1) { #include "asm/d/kankyo/d_kankyo/dKy_light_influence_id__F4cXyzi.s" } #pragma pop +#endif /* 8019E13C-8019E404 198A7C 02C8+00 2/2 0/0 0/0 .text dKy_eflight_influence_id__F4cXyzi */ +// regalloc, but equivalent? +#ifdef NONMATCHING +static int dKy_eflight_influence_id(cXyz param_0, int param_1) { + f32 var_f31 = 1000000.0f; + + int var_r28 = -1; + int var_r27 = -1; + + for (int i = 0; i <= param_1; i++) { + for (int j = 0; j < 5; j++) { + if (g_env_light.mEfPLight[j] != NULL && (i == 0 || j != var_r28)) { + if (var_f31 > param_0.abs(g_env_light.mEfPLight[j]->mPosition) && g_env_light.mEfPLight[j]->mPow > 0.01f) { + var_f31 = param_0.abs(g_env_light.mEfPLight[j]->mPosition); + + if (i == 0) { + var_r28 = j; + } else { + var_r27 = j; + } + } + } + } + var_f31 = 1000000.0f; + } + + int ret = var_r27; + if (param_1 == 0) { + ret = var_r28; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1196,6 +1302,7 @@ static asm int dKy_eflight_influence_id(cXyz param_0, int param_1) { #include "asm/d/kankyo/d_kankyo/dKy_eflight_influence_id__F4cXyzi.s" } #pragma pop +#endif /* 8019E404-8019E430 198D44 002C+00 1/1 0/0 0/0 .text dKy_light_influence_col__Fi */ static GXColorS10 dKy_light_influence_col(int param_0) { @@ -1211,7 +1318,7 @@ SECTION_SDATA2 static f64 lit_4964 = 4503599627370496.0 /* cast u32 to float */; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm _GXColor dKy_light_influence_col(_GXColor* param_0, f32 param_1) { +asm GXColor dKy_light_influence_col(_GXColor* param_0, f32 param_1) { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_light_influence_col__FP8_GXColorf.s" } @@ -2568,17 +2675,9 @@ asm void dScnKy_env_light_c::setLight() { /* 801A133C-801A16C0 19BC7C 0384+00 2/2 0/0 0/0 .text * setLight_bg__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10PfPf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* param_0, _GXColorS10* param_1, - _GXColorS10* param_2, f32* param_3, f32* param_4) { - nofralloc -#include "asm/d/kankyo/d_kankyo/setLight_bg__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10PfPf.s" -} -#pragma pop - -/* void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* i_tevstr, _GXColorS10* param_1, +// regalloc, but equivalent i think +#ifdef NONMATCHING +void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* i_tevstr, _GXColorS10* param_1, _GXColorS10* param_2, f32* param_3, f32* param_4) { i_tevstr->mColpatPrev = g_env_light.mColPatPrev; i_tevstr->mColpatCurr = g_env_light.mColPatCurr; @@ -2587,37 +2686,36 @@ asm void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* param_0, _GXColorS10* par i_tevstr->mColpatBlend = g_env_light.mColPatBlend; } - u8 sp9D; - u8 sp9F; - u8 sp9E; - u8 spA0; - f32 sp8C; - int sp90; - int sp94; + u8 sp23; + u8 sp22; + u8 sp21; + u8 sp20; + f32 sp14; + int sp10; + int spC; setLight_palno_get(&i_tevstr->mEnvrIdxPrev, &i_tevstr->mEnvrIdxCurr, &i_tevstr->mColpatPrev, - &i_tevstr->mColpatCurr, &sp9D, &sp9F, &sp9E, &spA0, &sp8C, &sp90, &sp94, + &i_tevstr->mColpatCurr, &sp23, &sp21, &sp22, &sp20, &sp14, &sp10, &spC, &i_tevstr->mColpatBlend, &i_tevstr->mInitTimer); - stage_palette_info_class* palette_p = g_env_light.mpDmPalet; - - if (sp9D == 0xFF) { + if (sp23 == 0xFF) { for (int i = 0; i < 4; i++) { param_1[i].r = 255; param_1[i].g = 0; param_1[i].b = 0; } } else { - for (int i = 0; i < 4; i++) { - GXColorS10 sp78; - sp78.r = mBgAddColAmb.r; - sp78.b = mBgAddColAmb.b; + stage_palette_info_class* temp_r27 = &g_env_light.mpDmPalet[sp23]; + stage_palette_info_class* temp_r26 = &g_env_light.mpDmPalet[sp21]; + stage_palette_info_class* temp_r25 = &g_env_light.mpDmPalet[sp22]; + stage_palette_info_class* temp_r24 = &g_env_light.mpDmPalet[sp20]; - dKy_calc_color_set(¶m_1, &palette_p[sp9D].mK0Color[i], &palette_p[sp9E].mK0Color[i], - &palette_p[sp9F].mK0Color[i], &palette_p[spA0].mK0Color[i], sp8C, - i_tevstr->mColpatBlend, sp78, g_env_light.mColBgColRatio); + for (int i = 0; i < 4; i++) { + dKy_calc_color_set(¶m_1[i], &temp_r27->mActor_K0[i], &temp_r25->mActor_K0[i], + &temp_r26->mActor_K0[i], &temp_r24->mActor_K0[i], sp14, + i_tevstr->mColpatBlend, mBgAddColAmb, g_env_light.mColBgColRatio); } - if (daPy_py_c::checkNowWolfPowerUp()) { + if (daPy_py_c::checkNowWolfEyeUp()) { dKy_WolfPowerup_BgAmbCol(param_1); } @@ -2626,17 +2724,59 @@ asm void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* param_0, _GXColorS10* par param_1[1].a = 255; param_1[0].a = 255; - for (int i = 0; i < 4; i++) { - GXColorS10 sp80; - sp80.r = mBgAddColAmb.r; - sp80.b = mBgAddColAmb.b; + GXColorS10 sp50[6]; + for (int i = 0; i < 6; i++) { + dKy_calc_color_set(&sp50[i], &temp_r27->mBG1_K0[i], &temp_r25->mBG1_K0[i], + &temp_r26->mBG1_K0[i], &temp_r24->mBG1_K0[i], sp14, + i_tevstr->mColpatBlend, mBgAddColAmb, g_env_light.mColBgColRatio); + + if (daPy_py_c::checkNowWolfEyeUp()) { + sp50[i].r = 0; + sp50[i].g = 0; + sp50[i].b = 0; + } + + J3DLightInfo& temp_r30 = i_tevstr->field_0x074[i].getLightInfo(); + + GXColor sp28; + sp28.r = sp50[i].r; + sp28.g = sp50[i].g; + sp28.b = sp50[i].b; + sp28.a = sp50[i].a; + temp_r30.mColor = dKy_light_influence_col(&sp28, i_tevstr->field_0x374); + } - dKy_calc_color_set(¶m_1, &palette_p[sp9D].mK0Color[i], &palette_p[sp9E].mK0Color[i], - &palette_p[sp9F].mK0Color[i], &palette_p[spA0].mK0Color[i], sp8C, - i_tevstr->mColpatBlend, sp80, g_env_light.mColBgColRatio); + dKy_calc_color_set(param_2, &temp_r27->field_0x21, &temp_r25->field_0x21, + &temp_r26->field_0x21, &temp_r24->field_0x21, sp14, + i_tevstr->mColpatBlend, mFogAddCol, g_env_light.mColFogColRatio); + + *param_3 = float_kankyo_color_ratio_set(temp_r27->mFogStartZ, temp_r26->mFogStartZ, sp14, + temp_r25->mFogStartZ, temp_r24->mFogStartZ, + i_tevstr->mColpatBlend, g_env_light.field_0x11ec, + g_env_light.field_0x11f4); + *param_4 = float_kankyo_color_ratio_set( + temp_r27->mFogEndZ, temp_r26->mFogEndZ, sp14, temp_r25->mFogEndZ, temp_r24->mFogEndZ, + i_tevstr->mColpatBlend, g_env_light.field_0x11f0, g_env_light.field_0x11f4); + + if (daPy_py_c::checkNowWolfEyeUp()) { + param_2->r = 0; + param_2->g = 0; + param_2->b = 0; + dKy_WolfPowerup_FogNearFar(param_3, param_4); } } -} */ +} +#else +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +asm void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* param_0, _GXColorS10* param_1, + _GXColorS10* param_2, f32* param_3, f32* param_4) { + nofralloc +#include "asm/d/kankyo/d_kankyo/setLight_bg__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10PfPf.s" +} +#pragma pop +#endif /* 801A16C0-801A1D64 19C000 06A4+00 1/1 0/0 0/0 .text * setLight_actor__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10PfPf */ |
