Files
dusklight/src/d/d_kankyo.cpp
T
Max Roncace 136f6b3f40 d_kankyo debug work (#2918)
* Global: Define DEBUG as 0 if not already defined

* Clean up DEBUG-guarded code

* d_kankyo debug almost matching
2025-12-06 13:39:30 -08:00

12056 lines
484 KiB
C++
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_kankyo.h"
#include <dolphin.h>
#include <dolphin/gf/GFPixel.h>
#include "JSystem/JHostIO/JORFile.h"
#include "SSystem/SComponent/c_counter.h"
#include "SSystem/SComponent/c_math.h"
#include "c/c_damagereaction.h"
#include "d/actor/d_a_kytag08.h"
#include "d/actor/d_a_player.h"
#include "d/d_bg_s_gnd_chk.h"
#include "d/d_debug_pad.h"
#include "d/d_debug_viewer.h"
#include "d/d_kankyo_debug.h"
#include "d/d_kankyo_rain.h"
#include "d/d_kankyo_static.h"
#include "d/d_meter2_info.h"
#include "d/d_msg_object.h"
#include "f_ap/f_ap_game.h"
#include "f_op/f_op_camera_mng.h"
#include "f_op/f_op_kankyo.h"
#include "m_Do/m_Do_graphic.h"
#include "m_Do/m_Do_lib.h"
#ifdef DEBUG
extern "C" int atoi(const char* str);
extern "C" f32 atof(const char* str);
#endif
static void GxXFog_set();
struct sub_kankyo__class : public kankyo_class {};
// setSunpos calls these functions as inlines somehow
// these need to be moved to MSL_C once an appropriate solution is found
inline float sinf(float x) {
return sin(x);
}
inline float cosf(float x) {
return cos(x);
}
static LightStatus lightStatusBase = {
{-36384.5f, 29096.699f, 17422.199f},
{377.0f, 5207.3999f, 1220.4f},
{0xFF, 0xFF, 0xFF, 0xFF},
0,
1.0f,
0.0f,
0.0f,
1.0f,
0.0f,
0.0f,
{0.0f, -1.0f, -1.0f},
90.0f,
GX_SP_OFF,
500.0f,
1.0f,
GX_DA_OFF,
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
},
320.0f,
-320.0f,
1000.0f,
160000.0f,
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
},
0.536479f,
2.726476f,
0.0f,
0.5f,
};
static u16 lightMaskData[8] = {
GX_LIGHT0, GX_LIGHT1, GX_LIGHT2, GX_LIGHT3, GX_LIGHT4, GX_LIGHT5, GX_LIGHT6, GX_LIGHT7,
};
dScnKy_env_light_c g_env_light;
Z2EnvSeMgr g_mEnvSeMgr;
#if DEBUG
dKankyo_HIO_c g_kankyoHIO;
#endif
static LightStatus lightStatusData[8];
static u16 lightMask = 0x0001;
static LightStatus* lightStatusPt = lightStatusData;
void dKy_WolfPowerup_AmbCol(GXColorS10* in_col_p) {
JUT_ASSERT(185, in_col_p != NULL);
in_col_p->r = 40;
in_col_p->g = 52;
in_col_p->b = 49;
}
int dKy_sense_pat_get() {
int pat = 0;
if (dKy_Outdoor_check()) {
pat = 1;
} else {
pat = 5;
}
// Stage is Lake Hylia
if (!strcmp(dComIfGp_getStartStageName(), "F_SP115")) {
pat = 9;
// Room is Lake
if (dComIfGp_roomControl_getStayNo() == 0 && dComIfGs_isSaveSwitch(17) &&
!dComIfGs_isSaveSwitch(0x75))
{
pat = 2;
}
if (dComIfGs_sense_type_change_Get() > 0) {
pat = 13;
}
}
// Stage is Zora's Domain
else if (!strcmp(dComIfGp_getStartStageName(), "F_SP113"))
{
if (dComIfGs_sense_type_change_Get() > 0) {
pat = 13;
} else {
pat = 1;
}
}
// Stage is Faron Woods Cave
else if (!strcmp(dComIfGp_getStartStageName(), "D_SB10"))
{
pat = 1;
}
// Stage is Zora's River
else if (!strcmp(dComIfGp_getStartStageName(), "F_SP112"))
{
pat = 3;
}
// Stage is Upper Zora's River
else if (!strcmp(dComIfGp_getStartStageName(), "F_SP126"))
{
pat = 6;
}
// Stage is Snowpeak
else if (!strcmp(dComIfGp_getStartStageName(), "F_SP114"))
{
pat = 4;
}
// Stage is Forest Temple or Goron Mines or Goron Stockcave or Grotto
else if (!memcmp(dComIfGp_getStartStageName(), "D_MN05", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_MN04", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB04", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB05", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB06", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB07", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB08", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB09", 6))
{
pat = 5;
}
// Stage is Stallord arena or Argorok arena
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10A") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN07A"))
{
pat = 14;
}
// Stage is Death Sword arena
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10B"))
{
pat = 15;
}
// Stage is Arbiter's Grounds
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN10"))
{
pat = 8;
// Room is Central Poe room
if (dComIfGp_roomControl_getStayNo() == 2) {
pat = 14;
// Room is 2nd Poe room or 4th Poe room
} else if (dComIfGp_roomControl_getStayNo() == 3 || dComIfGp_roomControl_getStayNo() == 8) {
pat = 6;
}
}
// Stage is Blizzeta arena
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN11A"))
{
pat = 4;
}
// Stage is Snowpeak Ruins or Darkhammer or Ice Puzzle cave
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN11") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN11B") ||
!memcmp(dComIfGp_getStartStageName(), "D_SB00", 6))
{
pat = 7;
// Stage is Snowpeak Ruins and Room is Courtyard
if (!strcmp(dComIfGp_getStartStageName(), "D_MN11") &&
dComIfGp_roomControl_getStayNo() == 4)
{
pat = 4;
}
}
// Stage is Ganondorf Field or Ganondorf Defeated or Castle Town
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN09B") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN09C") ||
!strcmp(dComIfGp_getStartStageName(), "F_SP116"))
{
pat = 1;
}
// Stage is Temple of Time or City in the Sky or Hyrule Castle Throne Room or
// Cave of Ordeals or Cloud Sea or Hyrule Castle cutscenes or Lakebed Temple or Deku Toad
else if (!memcmp(dComIfGp_getStartStageName(), "D_MN06", 6) ||
!strcmp(dComIfGp_getStartStageName(), "D_MN07") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN09A") ||
!memcmp(dComIfGp_getStartStageName(), "D_SB01", 6) ||
!strcmp(dComIfGp_getStartStageName(), "R_SP300") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP301") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN01") ||
!strcmp(dComIfGp_getStartStageName(), "D_MN01B"))
{
pat = 8;
}
// Stage is Morpheel arena
else if (!strcmp(dComIfGp_getStartStageName(), "D_MN01A"))
{
pat = 14;
}
// Stage is Palace of Twilight
else if (!memcmp(dComIfGp_getStartStageName(), "D_MN08", 6))
{
pat = 9;
}
// Stage is Gorge Cave or Lake Hylia Cave
else if (!memcmp(dComIfGp_getStartStageName(), "D_SB02", 6) ||
!memcmp(dComIfGp_getStartStageName(), "D_SB03", 6))
{
pat = 10;
}
// Stage is Ordon Village Interiors or Faron Woods Interiors or
// Kakariko Graveyard or Telma's Bar or STAR game or Death Mountain or
// Hyrule Castle sewers
else if (!strcmp(dComIfGp_getStartStageName(), "R_SP01") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP108") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP209") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP116") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP161") ||
!strcmp(dComIfGp_getStartStageName(), "F_SP110") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP107"))
{
pat = 11;
// Stage is Ordon Village and Room is Sera's Shop
if (!strcmp(dComIfGp_getStartStageName(), "R_SP01") &&
dComIfGp_roomControl_getStayNo() == 1)
{
pat = 12;
}
}
// Stage is Hidden Village interiors or Castle Town interiors or Fishing Pond interiors
else if (!strcmp(dComIfGp_getStartStageName(), "R_SP128") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP160") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP127"))
{
pat = 12;
}
// Stage is Kakariko Village interiors
else if (!strcmp(dComIfGp_getStartStageName(), "R_SP109"))
{
pat = 12;
// Room is Sanctuary or Inn
if (dComIfGp_roomControl_getStayNo() == 0 || dComIfGp_roomControl_getStayNo() == 2) {
pat = 11;
}
}
return pat;
}
void dKy_WolfPowerup_BgAmbCol(GXColorS10* in_col_p) {
int pattern = 0;
JUT_ASSERT(374, in_col_p != NULL);
pattern = dKy_sense_pat_get();
#if DEBUG
if (g_kankyoHIO.navy.twilight_sense_pat != 0) {
pattern = g_kankyoHIO.navy.twilight_sense_pat;
}
if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) {
dDbVw_Report(20, 100, "sense pat[%d]", pattern);
}
#endif
switch (pattern) {
case 1:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 2:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 3:
in_col_p->r = 40;
in_col_p->g = 53;
in_col_p->b = 49;
break;
case 4:
in_col_p->r = 32;
in_col_p->g = 46;
in_col_p->b = 40;
break;
case 5:
in_col_p->r = 45;
in_col_p->g = 64;
in_col_p->b = 58;
break;
case 6:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 7:
in_col_p->r = 38;
in_col_p->g = 53;
in_col_p->b = 49;
break;
case 8:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 9:
in_col_p->r = 40;
in_col_p->g = 59;
in_col_p->b = 53;
break;
case 11:
case 12:
in_col_p->r = 45;
in_col_p->g = 64;
in_col_p->b = 58;
break;
case 10:
in_col_p->r = 40;
in_col_p->g = 60;
in_col_p->b = 58;
break;
case 13:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 14:
in_col_p->r = 33;
in_col_p->g = 48;
in_col_p->b = 44;
break;
case 15:
in_col_p->r = 30;
in_col_p->g = 48;
in_col_p->b = 59;
break;
}
#if DEBUG
if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) {
dDbVw_Report(20, 120, "R[%d]", in_col_p->r);
dDbVw_Report(20, 136, "G[%d]", in_col_p->g);
dDbVw_Report(20, 152, "B[%d]", in_col_p->b);
}
#endif
}
void dKy_WolfPowerup_FogNearFar(f32* near_p, f32* far_p) {
int pattern = 0;
JUT_ASSERT(499, near_p != NULL);
JUT_ASSERT(500, far_p != NULL);
pattern = dKy_sense_pat_get();
#if DEBUG
if (g_kankyoHIO.navy.twilight_sense_pat != 0) {
pattern = g_kankyoHIO.navy.twilight_sense_pat;
}
#endif
switch (pattern) {
case 1:
*near_p = 750.0f;
*far_p = 1750.0f;
break;
case 2:
*near_p = 5000.0f;
*far_p = 40000.0f;
break;
case 3:
*near_p = 4000.0f;
*far_p = 12000.0f;
break;
case 4:
*near_p = 500.0f;
*far_p = 2250.0f;
break;
case 5:
*near_p = 1000.0f;
*far_p = 1800.0f;
break;
case 6:
*near_p = 1000.0f;
*far_p = 2750.0f;
break;
case 7:
*near_p = 750.0f;
*far_p = 1750.0f;
break;
case 8:
*near_p = 750.0f;
*far_p = 1750.0f;
break;
case 9:
*near_p = 2000.0f;
*far_p = 3000.0f;
break;
case 10:
*near_p = 300.0f;
*far_p = 700.0f;
break;
case 11:
*near_p = 750.0f;
*far_p = 1500.0f;
break;
case 12:
*near_p = 500.0f;
*far_p = 1250.0f;
break;
case 13:
*near_p = 1000.0f;
*far_p = 80000.0f;
break;
case 14:
*near_p = 1250.0f;
*far_p = 3000.0f;
break;
case 15:
*near_p = 1000.0f;
*far_p = 4750.0f;
break;
}
#if DEBUG
if (g_kankyoHIO.navy.twilight_sense_pat_tv_display_ON) {
dDbVw_Report(100, 120, "near[%f]", *near_p);
dDbVw_Report(100, 136, "far [%f]", *far_p);
}
#endif
}
void dKy_pos2_get_angle(cXyz* pos1_p, cXyz* pos2_p, s16* pitch_p, s16* yaw_p) {
cXyz vec;
vec = *pos1_p - *pos2_p;
*pitch_p = cM_atan2s(-vec.y, vec.absXZ());
*yaw_p = cM_atan2s(vec.x, vec.z);
}
void dKy_twi_wolflight_set(int light_id) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera_p = dComIfGp_getCamera(0);
cXyz vectle;
if (camera_p == NULL) {
return;
}
s16 angle_x;
s16 angle_y;
dKy_pos2_get_angle(&camera_p->lookat.center, &camera_p->lookat.eye, &angle_x, &angle_y);
dKyr_get_vectle_calc(&camera_p->lookat.center, &camera_p->lookat.eye, &vectle);
kankyo->field_0x0c18[light_id].mPos.x = camera_p->lookat.eye.x + vectle.x * 300.0f;
kankyo->field_0x0c18[light_id].mPos.y = camera_p->lookat.eye.y + vectle.y * 300.0f;
kankyo->field_0x0c18[light_id].mPos.z = camera_p->lookat.eye.z + vectle.z * 300.0f;
int size = g_env_light.light_size;
#if DEBUG
if (g_kankyoHIO.navy.room_light_type != 0) {
size = g_kankyoHIO.navy.room_light_type - 1;
}
#endif
#if DEBUG
if (!g_kankyoHIO.navy.camera_light_adjust_ON)
#endif
{
switch (size) {
case LIGHT_SIZE_S:
kankyo->field_0x0c18[light_id].mPos.y += 1500.0f;
break;
case LIGHT_SIZE_M:
kankyo->field_0x0c18[light_id].mPos.y += 500.0f;
break;
case LIGHT_SIZE_L:
kankyo->field_0x0c18[light_id].mPos.y += 1000.0f;
break;
case LIGHT_SIZE_LL:
kankyo->field_0x0c18[light_id].mPos.y += 1500.0f;
break;
default:
kankyo->field_0x0c18[light_id].mPos.y += 500.0f;
break;
}
}
#if DEBUG
else {
kankyo->field_0x0c18[light_id].mPos.y += g_kankyoHIO.navy.camera_light_y_shift;
}
#endif
angle_x += (s16)6000;
kankyo->field_0x0c18[light_id].mAngleX = cM_sht2d(-angle_x);
kankyo->field_0x0c18[light_id].mAngleY = cM_sht2d(-angle_y) + 90.0f;
}
void dKy_lightdir_set(f32 angle_x, f32 angle_y, Vec* out_dir_p) {
MtxP view_mtx = j3dSys.getViewMtx();
Mtx inv;
Vec calc_dir;
cXyz dir;
f32 x_deg = angle_x / RAD_TO_DEG(1);
f32 y_deg = angle_y / RAD_TO_DEG(1);
dir.x = cM_fcos(x_deg) * cM_fcos(y_deg);
dir.y = cM_fsin(x_deg);
dir.z = cM_fcos(x_deg) * cM_fsin(y_deg);
cMtx_inverseTranspose(view_mtx, inv);
cMtx_multVec(inv, &dir, &calc_dir);
out_dir_p->x = calc_dir.x;
out_dir_p->y = calc_dir.y;
out_dir_p->z = calc_dir.z;
}
void dKy_GXInitLightSpot(J3DLightInfo* light_p, f32 cutoff, u8 spot_type) {
if (cutoff <= 0.0f || cutoff > 90.0f) {
spot_type = GX_SP_OFF;
}
f32 var_f30;
f32 sp8 = (cutoff * M_PI) / 180.0f;
f32 var_f4 = cosf(sp8);
f32 x, y, z;
switch (spot_type) {
case GX_SP_FLAT:
x = var_f4 * -1000.0f;
y = 1000.0f;
z = 0.0f;
break;
case GX_SP_COS:
x = -var_f4 / (1.0f - var_f4);
y = 1.0f / (1.0f - var_f4);
z = 0.0f;
break;
case GX_SP_COS2:
x = 0.0f;
y = -var_f4 / (1.0f - var_f4);
z = 1.0f / (1.0f - var_f4);
break;
case GX_SP_SHARP:
var_f30 = ((1.0f - var_f4) * (1.0f - var_f4));
x = (var_f4 * (var_f4 - 2.0f)) / var_f30;
y = 2.0f / var_f30;
z = -1.0f / var_f30;
break;
case GX_SP_RING1:
var_f30 = ((1.0f - var_f4) * (1.0f - var_f4));
x = (var_f4 * -4.0f) / var_f30;
y = ((var_f4 + 1.0f) * 4.0f) / var_f30;
z = -4.0f / var_f30;
break;
case GX_SP_RING2:
var_f30 = ((1.0f - var_f4) * (1.0f - var_f4));
x = 1.0f - (var_f4 * 2.0f * var_f4) / var_f30;
y = (var_f4 * 4.0f) / var_f30;
z = -2.0f / var_f30;
break;
case GX_SP_OFF:
default:
x = 1.0f;
y = 0.0f;
z = 0.0f;
break;
}
light_p->mCosAtten.x = x;
light_p->mCosAtten.y = y;
light_p->mCosAtten.z = z;
}
void dKy_GXInitLightDistAttn(J3DLightInfo* light_p, f32 param_1, f32 param_2, u8 distattn_type) {
f32 x;
f32 y;
f32 z;
if (param_1 < 0.0f) {
distattn_type = GX_DA_OFF;
}
if (param_2 <= 0.0f || param_2 >= 1.0f) {
distattn_type = GX_DA_OFF;
}
switch (distattn_type) {
case GX_DA_GENTLE:
x = 1.0f;
y = (1.0f - param_2) / (param_2 * param_1);
z = 0.0f;
break;
case GX_DA_MEDIUM:
x = 1.0f;
y = ((1.0f - param_2) * 0.5f) / (param_2 * param_1);
z = ((1.0f - param_2) * 0.5f) / (param_2 * param_1 * param_1);
break;
case GX_DA_STEEP:
x = 1.0f;
y = 0.0f;
z = (1.0f - param_2) / (param_1 * (param_2 * param_1));
break;
default:
case GX_DA_OFF:
x = 1.0f;
y = 0.0f;
z = 0.0f;
break;
}
light_p->mDistAtten.x = x;
light_p->mDistAtten.y = y;
light_p->mDistAtten.z = z;
}
static s16 u8_data_ratio_set(u8 start, u8 end, f32 ratio) {
return start + (int)(ratio * ((s16)end - (s16)start));
}
static s16 s16_data_ratio_set(s16 start, s16 end, f32 ratio) {
return start + (s16)(ratio * (end - start));
}
static u8 kankyo_color_ratio_calc_common(s16 color, f32 ratio) {
s16 calc = color * ratio;
if (calc < 0) {
calc = 0;
} else if (calc > 255) {
calc = 255;
}
return calc;
}
static void kankyo_color_ratio_calc(GXColor* out_col_p, GXColorS10 color, f32 ratio) {
GXColorS10 work_color;
work_color = color;
out_col_p->r = kankyo_color_ratio_calc_common(work_color.r, ratio);
out_col_p->g = kankyo_color_ratio_calc_common(work_color.g, ratio);
out_col_p->b = kankyo_color_ratio_calc_common(work_color.b, ratio);
}
static s16 kankyo_color_ratio_set(u8 color_a_start, u8 color_a_end, f32 color_ratio,
u8 color_b_start, u8 color_b_end, f32 blend_ratio, s16 add_color,
f32 scale) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
s16 a = s16_data_ratio_set(color_a_start, color_a_end, color_ratio);
s16 b = s16_data_ratio_set(color_b_start, color_b_end, color_ratio);
s16 color = s16_data_ratio_set(a, b, blend_ratio);
color = color + add_color;
color = kankyo->now_allcol_ratio * scale * color;
if (color < 0) {
color = 0;
}
if (color > 255) {
color = 255;
}
return color;
}
static f32 fl_data_ratio_set(f32 start, f32 end, f32 ratio) {
return start + ratio * (end - start);
}
static f32 float_kankyo_color_ratio_set(f32 color_a_start, f32 color_a_end, f32 color_ratio,
f32 color_b_start, f32 color_b_end, f32 blend_ratio,
f32 param_6, f32 param_7) {
f32 a = fl_data_ratio_set(color_a_start, color_a_end, color_ratio);
f32 b = fl_data_ratio_set(color_b_start, color_b_end, color_ratio);
f32 calc_color = fl_data_ratio_set(a, b, blend_ratio);
f32 var_f28 = param_7 * (param_6 - calc_color);
calc_color += var_f28;
return calc_color;
}
static f32 get_parcent(f32 max, f32 min, f32 value) {
f32 range = max - min;
if (0.0f != range) {
f32 diff = max - value;
f32 parcent = 1.0f - (diff / range);
if (!(parcent >= 1.0f)) {
return parcent;
}
}
return 1.0f;
}
f32 dKy_get_parcent(f32 max, f32 min, f32 value) {
return get_parcent(max, min, value);
}
static void dKy_FiveSenses_fullthrottle_dark_static1() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
BOOL init_mode_change = FALSE;
cXyz particle_pos;
cXyz particle_size;
particle_pos.x = 0.0f;
particle_pos.y = 0.0f;
particle_pos.z = 0.0f;
particle_size.x = 1.0f;
particle_size.y = 1.0f;
particle_size.z = 1.0f;
#if !PLATFORM_GCN
particle_size.x *= mDoGph_gInf_c::getScale();
#endif
if (daPy_py_c::checkNowWolfPowerUp()) {
kankyo->now_senses_effect = 1;
init_mode_change = TRUE;
if (kankyo->senses_effect_strength <= 0.0f) {
dComIfGp_particle_set(0x1E3, &particle_pos, NULL, NULL, &particle_size);
}
cLib_addCalc(&kankyo->senses_effect_strength, 1.0f, 0.5f, 0.1f, 0.01f);
} else if (kankyo->senses_effect_strength > 0.0f) {
if (kankyo->senses_effect_strength >= 1.0f) {
dComIfGp_particle_set(0x46A, &particle_pos, NULL, NULL, &particle_size);
}
cLib_addCalc(&kankyo->senses_effect_strength, 0.0f, 0.5f, 0.1f, 0.01f);
init_mode_change = TRUE;
}
switch (kankyo->senses_mode) {
case 0:
if (init_mode_change != TRUE) {
break;
}
kankyo->senses_ef_emitter0 = NULL;
kankyo->senses_ef_emitter1 = NULL;
kankyo->senses_ef_emitter2 = NULL;
kankyo->senses_ef_emitter0 = dComIfGp_particle_set(0x1F2, &particle_pos, NULL, NULL);
kankyo->senses_ef_emitter1 = dComIfGp_particle_set(0x1F3, &particle_pos, NULL, NULL, &particle_size);
kankyo->senses_ef_emitter2 = dComIfGp_particle_set(0x1F4, &particle_pos, NULL, NULL, &particle_size);
kankyo->senses_mode++;
case 1:
if (init_mode_change == TRUE) {
if (kankyo->senses_ef_emitter0 != NULL) {
kankyo->senses_ef_emitter0->setGlobalTranslation(particle_pos.x, particle_pos.y,
particle_pos.z);
kankyo->senses_ef_emitter0->setGlobalAlpha(kankyo->senses_effect_strength * 255.0f);
}
if (kankyo->senses_ef_emitter1 != NULL) {
kankyo->senses_ef_emitter1->setGlobalTranslation(particle_pos.x, particle_pos.y,
particle_pos.z);
kankyo->senses_ef_emitter1->setGlobalAlpha(kankyo->senses_effect_strength * 255.0f);
}
if (kankyo->senses_ef_emitter2 != NULL) {
kankyo->senses_ef_emitter2->setGlobalTranslation(particle_pos.x, particle_pos.y,
particle_pos.z);
kankyo->senses_ef_emitter2->setGlobalEnvColor(
255.0f * (1.0f - kankyo->senses_effect_strength),
255.0f * (1.0f - kankyo->senses_effect_strength),
255.0f * (1.0f - kankyo->senses_effect_strength));
}
} else {
kankyo->senses_mode++;
}
break;
case 2:
if (kankyo->senses_ef_emitter0 != NULL) {
kankyo->senses_ef_emitter0->deleteAllParticle();
kankyo->senses_ef_emitter0->becomeInvalidEmitter();
kankyo->senses_ef_emitter0->quitImmortalEmitter();
kankyo->senses_ef_emitter0->setEmitterCallBackPtr(NULL);
kankyo->senses_ef_emitter0 = NULL;
}
if (kankyo->senses_ef_emitter1 != NULL) {
kankyo->senses_ef_emitter1->deleteAllParticle();
kankyo->senses_ef_emitter1->becomeInvalidEmitter();
kankyo->senses_ef_emitter1->quitImmortalEmitter();
kankyo->senses_ef_emitter1->setEmitterCallBackPtr(NULL);
kankyo->senses_ef_emitter1 = NULL;
}
if (kankyo->senses_ef_emitter2 != NULL) {
kankyo->senses_ef_emitter2->deleteAllParticle();
kankyo->senses_ef_emitter2->becomeInvalidEmitter();
kankyo->senses_ef_emitter2->quitImmortalEmitter();
kankyo->senses_ef_emitter2->setEmitterCallBackPtr(NULL);
kankyo->senses_ef_emitter2 = NULL;
}
kankyo->senses_mode = 0;
break;
}
}
void dKy_FiveSenses_fullthrottle_dark() {
dKy_FiveSenses_fullthrottle_dark_static1();
}
int dKy_light_influence_id(cXyz position, int param_1) {
f32 closest_plight_dist = 1000000.0f;
int closest_plight_no = -1;
int var_r27 = -1;
int spC;
int sp8 = 0;
int j;
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 (j = 0; j < 100; j++) {
if (g_env_light.pointlight[j] != NULL && (i == 0 || j != closest_plight_no) &&
g_env_light.pointlight[j]->mPow > 0.01f)
{
if (closest_plight_dist > position.abs(g_env_light.pointlight[j]->mPosition)) {
if (g_env_light.pointlight[j]->mIndex & 0x8000) {
if (closest_plight_dist > var_f30) {
if (i == 0) {
closest_plight_no = j;
} else {
var_r27 = j;
}
closest_plight_dist = var_f30;
}
} else {
closest_plight_dist = position.abs(g_env_light.pointlight[j]->mPosition);
if (closest_plight_dist < g_env_light.pointlight[j]->mPow) {
#if PLATFORM_GCN
if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0 &&
dComIfGp_roomControl_getStayNo() == 0)
{
if (closest_plight_dist < g_env_light.pointlight[j]->mPow * 0.5f) {
var_r25 = 99;
}
} else {
var_r25 = 99;
}
#else
var_r25 = 99;
#endif
}
if (var_r25 != -2) {
if (i == 0) {
closest_plight_no = j;
} else {
var_r27 = j;
}
}
}
}
if (g_env_light.pointlight[j]->mIndex < 0 && var_r25 != 99) {
if (i == 0) {
closest_plight_no = j;
}
var_r25 = -2;
}
}
}
closest_plight_dist = 1000000.0f;
}
if (param_1 == 0) {
spC = closest_plight_no;
} else {
spC = var_r27;
}
return spC;
}
int dKy_eflight_influence_id(cXyz position, int param_1) {
f32 var_f31 = 1000000.0f;
int var_r28 = -1;
int var_r27 = -1;
int var_r26;
int sp8 = 0;
int j;
for (int i = 0; i <= param_1; i++) {
for (j = 0; j < 5; j++) {
if (g_env_light.efplight[j] != NULL && (i == 0 || j != var_r28)) {
if (var_f31 > position.abs(g_env_light.efplight[j]->mPosition) &&
g_env_light.efplight[j]->mPow > 0.01f)
{
var_f31 = position.abs(g_env_light.efplight[j]->mPosition);
if (i == 0) {
var_r28 = j;
} else {
var_r27 = j;
}
}
}
}
var_f31 = 1000000.0f;
}
if (param_1 == 0) {
var_r26 = var_r28;
} else {
var_r26 = var_r27;
}
return var_r26;
}
GXColorS10 dKy_light_influence_col(int light_id) {
return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mColor;
}
GXColor dKy_light_influence_col(GXColor* in_col_p, f32 ratio) {
GXColor out_col;
f32 color = in_col_p->r * ratio;
if (color <= 255.0f) {
out_col.r = color;
} else {
out_col.r = 255;
}
color = in_col_p->g * ratio;
if (color <= 255.0f) {
out_col.g = color;
} else {
out_col.g = 255;
}
color = in_col_p->b * ratio;
if (color <= 255.0f) {
out_col.b = color;
} else {
out_col.b = 255;
}
return out_col;
}
f32 dKy_light_influence_power(int light_id) {
return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mPow;
}
f32 dKy_light_influence_yuragi(int light_id) {
return g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mFluctuation;
}
f32 dKy_light_influence_distance(cXyz position, int light_id) {
return position.abs(g_env_light.pointlight[light_id >= 0 ? light_id : 0]->mPosition);
}
static void plight_init() {
g_env_light.mLightInfluence[0].mPow = 99999.9f;
for (int i = 0; i < 100; i++) {
g_env_light.pointlight[i] = NULL;
}
for (int i = 0; i < 5; i++) {
g_env_light.efplight[i] = NULL;
g_env_light.unk_0x72c[i] = NULL;
}
g_env_light.mPlayerPLightIdx = -1;
g_env_light.mPlayerEfLightIdx = -1;
}
static void darkmist_init() {
for (int i = 0; i < 10; i++) {
g_env_light.dalkmist_influence[i] = NULL;
}
}
static void plight_set() {
int plight_no = 0;
stage_plight_info_class* plight_info = dComIfGp_getStagePlightInfo();
if (plight_info != NULL) {
g_env_light.stage_plight_info = plight_info;
for (int i = 0; i < dComIfGp_getStagePlightNumInfo(); i++) {
if (plight_no < 30) {
g_env_light.mLightInfluence[plight_no].mPosition.x = plight_info[i].position.x;
g_env_light.mLightInfluence[plight_no].mPosition.y = plight_info[i].position.y;
g_env_light.mLightInfluence[plight_no].mPosition.z = plight_info[i].position.z;
g_env_light.mLightInfluence[plight_no].mColor.r = plight_info[i].color.r;
g_env_light.mLightInfluence[plight_no].mColor.g = plight_info[i].color.g;
g_env_light.mLightInfluence[plight_no].mColor.b = plight_info[i].color.b;
g_env_light.mLightInfluence[plight_no].mPow = plight_info[i].power * 200.0f;
g_env_light.mLightInfluence[plight_no].mFluctuation = plight_info[i].fluctuation;
dKy_plight_set(&g_env_light.mLightInfluence[plight_no]);
plight_no++;
} else {
// "\nToo many Point Lights set!!!"
OS_WARNING("\nポイントライトマップ配置が多すぎます!!!");
}
}
}
}
static void bgparts_activelight_init() {
int i;
for (i = 0; i < 2; i++) {
g_env_light.bgparts_active_light[0].mIndex = 0;
}
}
#if DEBUG
static void hostio_init() {
g_kankyoHIO.time_change = 0;
g_kankyoHIO.navy.field_0x6 = 0;
g_kankyoHIO.light.field_0x5 = 0;
g_kankyoHIO.light.field_0x8 = 320;
g_kankyoHIO.light.m_fogtype = 0;
g_kankyoHIO.wether_effect = 0;
g_kankyoHIO.wether_palette = 0;
g_kankyoHIO.display_env_tag_debug = 0;
g_kankyoHIO.display_wether_debug = 0;
g_kankyoHIO.field_0x9 = 0;
g_kankyoHIO.field_0xa = 1;
g_kankyoHIO.display_schedule_bit = 0;
g_kankyoHIO.field_0xc = 1.0f;
g_kankyoHIO.field_0x10 = 0;
g_kankyoHIO.start_rain = 0;
g_kankyoHIO.effect_light_monitor = 0;
g_kankyoHIO.point_light_monitor = 0;
g_kankyoHIO.field_0x14 = 0;
g_kankyoHIO.field_0x15 = 0;
g_kankyoHIO.field_0x16 = 0;
g_kankyoHIO.field_0x17 = 1;
g_kankyoHIO.no_setting_tevstr = 0;
g_kankyoHIO.no_color_type = 0;
}
#endif
static void dungeonlight_init() {
static Vec test_pos_tbl[] = {
{0.0f, -99999.0f, 0.0f}, {0.0f, -99999.0f, 0.0f}, {0.0f, -99999.0f, 0.0f},
{0.0f, -99999.0f, 0.0f}, {0.0f, -99999.0f, 0.0f}, {0.0f, -99999.0f, 0.0f},
{0.0f, -99999.0f, 0.0f}, {0.0f, -99999.0f, 0.0f},
};
static color_RGB_class test_color_tbl[] = {
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
};
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
for (int i = 0; i < 8; i++) {
kankyo->dungeonlight[i].mPosition = cXyz(test_pos_tbl[i]);
kankyo->dungeonlight[i].mRefDistance = 1.0f;
kankyo->dungeonlight[i].field_0x14 = 0.99f;
kankyo->dungeonlight[i].mColor.r = test_color_tbl[i].r;
kankyo->dungeonlight[i].mColor.g = test_color_tbl[i].g;
kankyo->dungeonlight[i].mColor.b = test_color_tbl[i].b;
kankyo->dungeonlight[i].mColor.a = 255;
kankyo->dungeonlight[i].mInfluence.mPosition = kankyo->dungeonlight[i].mPosition;
kankyo->dungeonlight[i].mInfluence.mColor.r = kankyo->dungeonlight[i].mColor.r;
kankyo->dungeonlight[i].mInfluence.mColor.g = kankyo->dungeonlight[i].mColor.g;
kankyo->dungeonlight[i].mInfluence.mColor.b = kankyo->dungeonlight[i].mColor.b;
kankyo->dungeonlight[i].mInfluence.mPow = kankyo->dungeonlight[i].mRefDistance * 100.0f;
kankyo->dungeonlight[i].mInfluence.mFluctuation = 0.0f;
kankyo->dungeonlight[i].mCutoffAngle = 90.0f;
kankyo->dungeonlight[i].mAngleX = -90.0f;
kankyo->dungeonlight[i].mAngleY = 0.0f;
kankyo->dungeonlight[i].mAngleAttenuation = GX_SP_OFF;
kankyo->dungeonlight[i].mDistAttenuation = GX_DA_MEDIUM;
kankyo->field_0x0c18[i].mPos = cXyz(test_pos_tbl[i]);
kankyo->field_0x0c18[i].mColor.r = test_color_tbl[i].r;
kankyo->field_0x0c18[i].mColor.g = test_color_tbl[i].g;
kankyo->field_0x0c18[i].mColor.b = test_color_tbl[i].b;
kankyo->field_0x0c18[i].mColor.a = 255;
kankyo->field_0x0c18[i].mRefDistance = 0.001f;
kankyo->field_0x0c18[i].field_0x14 = 0.99f;
kankyo->field_0x0c18[i].field_0x26 = 0;
kankyo->field_0x0c18[i].mCutoffAngle = 90.0f;
kankyo->field_0x0c18[i].mAngleX = -90.0f;
kankyo->field_0x0c18[i].mAngleY = 0.0f;
kankyo->field_0x0c18[i].mAngleAttenuation = GX_SP_OFF;
kankyo->field_0x0c18[i].mDistAttenuation = GX_DA_MEDIUM;
if (i < 6) {
kankyo->field_0x0d58[i] = kankyo->field_0x0c18[i];
}
}
}
static void undwater_init() {
J3DModelData* modelData2 = (J3DModelData*)dComIfG_getObjectRes("Always", 0x1D);
JUT_ASSERT(1867, modelData2 != NULL);
g_env_light.undwater_ef_heap = mDoExt_createSolidHeapFromGameToCurrent(0x600, 0x20);
if (g_env_light.undwater_ef_heap != NULL) {
g_env_light.undwater_ef_model = mDoExt_J3DModel__create(modelData2, 0x80000, 0x11020202);
if (g_env_light.undwater_ef_model != NULL) {
g_env_light.undwater_btk = new mDoExt_btkAnm();
if (g_env_light.undwater_btk != NULL) {
if (!g_env_light.undwater_btk->init(modelData2, (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", 0x3C), TRUE,
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1))
{
JUT_ASSERT(1898, FALSE);
}
} else {
JUT_ASSERT(1902, FALSE);
}
}
mDoExt_restoreCurrentHeap();
u32 var_r28 = mDoExt_adjustSolidHeap(g_env_light.undwater_ef_heap);
} else {
JUT_ASSERT(1917, FALSE);
}
}
void dKy_light_size_get(char const* stageName) {
dKydata_lightsizeInfo_c* size_tbl = dKyd_light_size_tbl_getp();
dKydata_lightsizeInfo_c* tw_size_tbl = dKyd_light_tw_size_tbl_getp();
if (!dKy_darkworld_check()) {
for (int i = 0; i < 36; i++) {
if (!strcmp(stageName, size_tbl->stageName)) {
g_env_light.light_size = size_tbl->size;
break;
}
size_tbl++;
}
} else {
for (int i = 0; i < 9; i++) {
if (!strcmp(stageName, tw_size_tbl->stageName)) {
g_env_light.light_size = tw_size_tbl->size;
return;
}
tw_size_tbl++;
}
}
}
static void envcolor_init() {
stage_palette_info_class* stage_palette_p = dComIfGp_getStagePaletteInfo();
stage_pselect_info_class* stage_psel_p = dComIfGp_getStagePselectInfo();
stage_envr_info_class* stage_envr_p = dComIfGp_getStageEnvrInfo();
stage_vrboxcol_info_class* stage_vrboxcol_p = dComIfGp_getStageVrboxcolInfo();
dKy_actor_addcol_set(0, 0, 0, 0.0f);
dKy_fog_startendz_set(0.0f, 0.0f, 0.0f);
dKy_vrbox_addcol_set(0, 0, 0, 0.0f);
g_env_light.field_0x1280 = 0;
g_env_light.light_init_timer = 1;
g_env_light.schbit = 0;
g_env_light.schbit_timer = 0;
g_env_light.hide_vrbox = false;
g_env_light.mContrastFlag = 0;
g_env_light.mFogAdjEnable = true;
g_env_light.mFogAdjTableType = 0;
g_env_light.mFogAdjCenter = 0x140;
dKyd_xfog_table_set(g_env_light.mFogAdjTableType);
g_env_light.now_allcol_ratio = 1.0f;
g_env_light.now_actcol_ratio = 1.0f;
g_env_light.now_bgcol_ratio = 1.0f;
g_env_light.now_fogcol_ratio = 1.0f;
g_env_light.now_vrboxsoracol_ratio = 1.0f;
g_env_light.now_vrboxkumocol_ratio = 1.0f;
g_env_light.field_0x1210 = 1.0f;
g_env_light.allcol_ratio = 1.0f;
g_env_light.actcol_ratio = 1.0f;
g_env_light.bgcol_ratio = 1.0f;
g_env_light.fogcol_ratio = 1.0f;
g_env_light.vrboxsoracol_ratio = 1.0f;
g_env_light.vrboxkumocol_ratio = 1.0f;
g_env_light.field_0x122c = 1.0f;
g_env_light.Itemgetcol_chg = 0;
g_env_light.field_0x1240 = 0.0f;
g_env_light.field_0x1230 = 0.0f;
g_env_light.field_0x1234 = 0.0f;
g_env_light.mThunderEff.mState = 0;
g_env_light.field_0x1238 = 0.0f;
g_env_light.field_0x123c = 0.0f;
g_env_light.field_0x12d6 = 0;
g_env_light.shadow_mode = 0;
g_env_light.camera_water_in_status = 0;
g_env_light.field_0x1258 = 0.0f;
g_env_light.mActorLightEffect = 100;
g_env_light.bg_light_influence = 1.0f;
g_env_light.field_0x1064.x = 0.0f;
g_env_light.field_0x1064.y = -1.0f;
g_env_light.field_0x1064.z = -1.0f;
g_env_light.mDemoAttentionPoint = 0.0f;
if (!strcmp(dComIfGp_getStartStageName(), "R_SP127")) {
g_env_light.mDemoAttentionPoint = 0.11f;
}
#if DEBUG
if (g_env_light.light_mask_type & 0xF0) {
g_env_light.light_mask_type = g_env_light.light_mask_type & 0xF;
} else {
g_env_light.light_mask_type = 0;
}
#else
g_env_light.light_mask_type = 0;
#endif
g_env_light.field_0x130b = 0;
g_env_light.light_size = LIGHT_SIZE_M;
dKy_light_size_get(dComIfGp_getStartStageName());
g_env_light.grass_light_inf_rate = 1.0f;
g_env_light.field_0x12fc = -1;
g_env_light.field_0x1278 = 0.0f;
g_env_light.field_0x1264 = -255.0f;
g_env_light.field_0x1268 = 999999.9f;
g_env_light.field_0x126c = 999999.9f;
g_env_light.field_0x127c = 200.0f;
stage_stag_info_class* stageinfo = dComIfGp_getStage()->getStagInfo();
if (dStage_stagInfo_GetSTType(stageinfo) == ST_BOSS_ROOM) {
g_env_light.light_schedule = dKyd_schejule_boss_getp();
} else {
g_env_light.light_schedule = dKyd_schejule_getp();
}
g_env_light.PrevCol = dComIfGp_roomControl_getStayNo();
g_env_light.UseCol = dComIfGp_roomControl_getStayNo();
g_env_light.pat_ratio = 1.0f;
g_env_light.field_0x12b0 = 0;
g_env_light.mColpatWeather = 0;
g_env_light.mVrkumoStrength = 0.0f;
if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP127"))
{
if (g_env_light.wether >= 7) {
g_env_light.mColpatWeather = 2;
} else if (g_env_light.wether != 0) {
g_env_light.mColpatWeather = 1;
}
} else if (!strcmp(dComIfGp_getStartStageName(), "D_MN07A")) {
if (g_env_light.wether == 1) {
g_env_light.mColpatWeather = 1;
} else if (g_env_light.wether == 2) {
g_env_light.mColpatWeather = 2;
}
} else {
g_env_light.wether = 0;
}
g_env_light.base_raincnt = 0;
g_env_light.field_0x12a0 = 0;
g_env_light.dice_wether_mode = 0;
g_env_light.dice_wether_change_time = dComIfGs_getTime() + (cM_rndF(g_Counter.mCounter0 & 31) * 15.0f);
if (g_env_light.dice_wether_change_time >= 360.0f) {
g_env_light.dice_wether_change_time -= 360.0f;
}
g_env_light.dice_wether_state = 0;
g_env_light.dice_wether_pat = 0;
g_env_light.dice_wether_counter = 0;
g_env_light.dice_wether_time = 0.0f;
g_env_light.wether_pat0 = g_env_light.mColpatWeather;
g_env_light.wether_pat1 = g_env_light.mColpatWeather;
g_env_light.mColpatPrevGather = 0xFF;
g_env_light.mColpatCurrGather = 0xFF;
g_env_light.mColPatBlendGather = -1.0f;
g_env_light.mColPatMode = 0;
g_env_light.mColPatModeGather = 0;
if (stage_envr_p != NULL) {
g_env_light.stage_envr_info = stage_envr_p;
} else {
g_env_light.stage_envr_info = (stage_envr_info_class*)dKyd_dmenvr_getp();
}
if (stage_palette_p != NULL) {
g_env_light.stage_palette_info = stage_palette_p;
} else {
g_env_light.stage_palette_info = (stage_palette_info_class*)dKyd_dmpalet_getp();
}
if (stage_psel_p != NULL) {
g_env_light.stage_pselect_info = stage_psel_p;
} else {
g_env_light.stage_pselect_info = (stage_pselect_info_class*)dKyd_dmpselect_getp();
}
if (stage_vrboxcol_p != NULL) {
g_env_light.stage_vrboxcol_info = stage_vrboxcol_p;
} else {
g_env_light.stage_vrboxcol_info = (stage_vrboxcol_info_class*)dKyd_dmvrbox_getp();
}
plight_init();
plight_set();
darkmist_init();
bgparts_activelight_init();
g_env_light.unk_0x11c8 = 1.0f;
g_env_light.unk_0x11cc = 1.0f;
g_env_light.unk_0x11d0 = 1.0f;
g_env_light.field_0xf2c = 0;
g_env_light.undwater_ef_model = NULL;
g_env_light.field_0xf34 = 0.0f;
g_env_light.undwater_ef_heap = NULL;
undwater_init();
dComIfGs_PolyDamageOff_Set(0);
g_env_light.player_room_no = dComIfGp_roomControl_getStayNo();
g_env_light.is_blure = 0;
g_env_light.using_time_control_tag = 0;
g_env_light.field_0x1300 = -1;
g_env_light.field_0x1302 = -1;
g_env_light.mWaterSurfaceShineRate = 1.0f;
#if DEBUG
g_kankyoHIO.navy.camera_light_col.r = 25;
g_kankyoHIO.navy.camera_light_col.g = 90;
g_kankyoHIO.navy.camera_light_col.b = 183;
g_kankyoHIO.navy.camera_light_alpha = 0xFF;
g_kankyoHIO.navy.camera_light_y_shift = 1500.0f;
g_kankyoHIO.navy.camera_light_power = 1.25f;
g_kankyoHIO.navy.camera_light_cutoff = 90.0f;
g_kankyoHIO.navy.camera_light_sp = 2;
g_kankyoHIO.navy.camera_light_da = 3;
g_kankyoHIO.navy.room_light_type = 0;
g_kankyoHIO.navy.use_debug = 0;
g_kankyoHIO.navy.field_0x312 = 0;
g_kankyoHIO.navy.field_0x314 = 0.0f;
g_kankyoHIO.navy.terrain_height_crr = 200.0f;
g_kankyoHIO.navy.influence_multiplier = 1.0f;
g_kankyoHIO.navy.cutoff_multiplier = 1.0f;
if (dKy_darkworld_check()) {
g_kankyoHIO.navy.cloud_sunny_wind_influence_rate = 80.0f;
g_kankyoHIO.navy.cloud_sunny_bottom_height = 0.0f;
g_kankyoHIO.navy.cloud_sunny_top_height = 0.0f;
g_kankyoHIO.navy.cloud_sunny_size = 0.8f;
g_kankyoHIO.navy.cloud_sunny_height_shrink_rate = 0.98f;
g_kankyoHIO.navy.cloud_sunny_alpha = 0.75f;
g_kankyoHIO.navy.cloud_cloudy_wind_influence_rate = g_kankyoHIO.navy.cloud_sunny_wind_influence_rate;
g_kankyoHIO.navy.cloud_cloudy_bottom_height = g_kankyoHIO.navy.cloud_sunny_bottom_height;
g_kankyoHIO.navy.cloud_cloudy_top_height = g_kankyoHIO.navy.cloud_sunny_top_height;
g_kankyoHIO.navy.cloud_cloudy_size = g_kankyoHIO.navy.cloud_sunny_size;
g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = g_kankyoHIO.navy.cloud_sunny_height_shrink_rate;
g_kankyoHIO.navy.cloud_cloudy_alpha = g_kankyoHIO.navy.cloud_sunny_alpha;
} else {
g_kankyoHIO.navy.cloud_sunny_wind_influence_rate = 10.0f;
g_kankyoHIO.navy.cloud_sunny_bottom_height = 2500.0f;
g_kankyoHIO.navy.cloud_sunny_top_height = 2500.0f;
g_kankyoHIO.navy.cloud_sunny_size = 0.6f;
g_kankyoHIO.navy.cloud_sunny_height_shrink_rate = 0.9999f;
g_kankyoHIO.navy.cloud_sunny_alpha = 1.0f;
g_kankyoHIO.navy.cloud_cloudy_wind_influence_rate = 25.0f;
g_kankyoHIO.navy.cloud_cloudy_bottom_height = 1200.0f;
g_kankyoHIO.navy.cloud_cloudy_top_height = 1200.0f;
g_kankyoHIO.navy.cloud_cloudy_size = 0.84f;
g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = 0.96f;
g_kankyoHIO.navy.cloud_cloudy_alpha = 1.0f;
g_kankyoHIO.navy.cloud_cloudy_bottom_height = 1200.0f;
g_kankyoHIO.navy.cloud_cloudy_top_height = 1200.0f;
g_kankyoHIO.navy.cloud_cloudy_size = 0.84f;
g_kankyoHIO.navy.cloud_cloudy_height_shrink_rate = 0.96f;
g_kankyoHIO.navy.cloud_cloudy_alpha = 1.0f;
}
#endif
if (!DEBUG || g_env_light.time_change_rate < 1000.0f) {
stage_stag_info_class* stageinfo = dComIfGp_getStage()->getStagInfo();
int stage_time = dStage_stagInfo_GetTimeH(stageinfo);
if ((s8)stage_time >= 0) {
dComIfGs_setTime((s8)stage_time * 15.0f);
}
}
if (DEBUG && g_env_light.time_change_rate >= 2000.0f) {
g_env_light.time_change_rate = 0.03f;
} else if (DEBUG && g_env_light.time_change_rate >= 1000.0f) {
g_env_light.time_change_rate = 0.0f;
} else {
g_env_light.time_change_rate = 0.012f;
}
memset(&g_env_light.moya_se, 0, 0x10);
#if DEBUG
hostio_init();
#endif
}
void dKy_clear_game_init() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
dKy_actor_addcol_set(0, 0, 0, 0.0f);
kankyo->sun_pos.x = 1.0f;
kankyo->sun_pos.y = 0.0f;
kankyo->sun_pos.z = 0.0f;
kankyo->moon_pos.x = -1.0f;
kankyo->moon_pos.y = 0.0f;
kankyo->moon_pos.z = 0.0f;
kankyo->nexttime = -1.0f;
kankyo->old_time = -1.0f;
kankyo->dark_daytime = 120.0f;
kankyo->darktime_week = 0;
kankyo->fishing_hole_season = 0;
kankyo->field_0x130a = 0;
kankyo->wether = 0;
kankyo->staffroll_next_timer = 0;
}
dScnKy_env_light_c::dScnKy_env_light_c() {
dKy_clear_game_init();
}
void dScnKy_env_light_c::setDaytime() {
mDate = dComIfGs_getDate();
daytime = dComIfGs_getTime();
#if DEBUG
switch (g_kankyoHIO.time_change) {
case 0:
#endif
if (using_time_control_tag == 0) {
if (!dKy_darkworld_check()) {
if (dComIfGp_event_runCheck() == FALSE) {
msg_class* msg = dMsgObject_c::getActor();
u8 temp_r29 = true;
if (msg != NULL && msg->mode >= 2) {
temp_r29 = false;
}
if (dComIfGp_roomControl_getTimePass() && !field_0x130a && temp_r29) {
daytime += time_change_rate;
// Stage is Fishing Pond or Hena's Hut
if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") ||
!strcmp(dComIfGp_getStartStageName(), "R_SP127"))
{
if (daytime >= 300.0f || daytime <= 60.0f) {
daytime += time_change_rate;
daytime += time_change_rate;
} else if (daytime >= 150.0f && daytime <= 195.0f) {
daytime = daytime + time_change_rate;
}
}
if ((u32)daytime >= 360.0f) {
daytime = 0.0f;
mDate++;
dKankyo_DayProc();
}
} else {
#if DEBUG
if (fapGmHIO_get2Ddraw()) {
dDbVw_Report(190, 65, "TS");
}
#endif
}
} else {
#if DEBUG
if (fapGmHIO_get2Ddraw()) {
dDbVw_Report(190, 65, "EVENT_PROC!");
}
#endif
}
} else {
dark_daytime += time_change_rate;
if ((u32)dark_daytime >= 360.0f) {
darktime_week++;
dark_daytime = 0.0f;
}
daytime = 0.0f;
}
}
#if DEBUG
break;
case 1:
daytime = 90.0f;
break;
case 2:
daytime = 105.0f;
break;
case 3:
daytime = 165.0f;
break;
case 4:
daytime = 255.0f;
break;
case 5:
daytime = 285.0f;
break;
case 6:
daytime = 345.0f;
break;
case 7:
daytime += time_change_rate;
if ((u32)daytime >= 360.0f) {
daytime = 0.0f;
mDate++;
dKankyo_DayProc();
}
break;
}
#endif
#if DEBUG
static u8 data_8074c978;
static u8 data_80745860 = 99;
if (g_kankyoHIO.time_change != data_80745860) {
if (data_8074c978 >= 2) {
data_8074c978 = 0;
data_80745860 = g_kankyoHIO.time_change;
g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF();
} else {
data_8074c978++;
}
}
#endif
if (daytime >= 360.0f) {
daytime = 0.0f;
}
dComIfGs_setTime(daytime);
#if DEBUG
if (fapGmHIO_get2Ddraw()) {
dKydb_timedisp();
}
#endif
mDoAud_setHour(dKy_getdaytime_hour());
mDoAud_setMinute(dKy_getdaytime_minute());
mDoAud_setWeekday(dKy_get_dayofweek());
dComIfGs_setDate(mDate);
g_env_light.using_time_control_tag = 0;
}
void dScnKy_env_light_c::setSunpos() {
camera_class* camera_p = dComIfGp_getCamera(0);
cXyz pos;
f32 parcent;
f32 sun_angle;
f32 moon_angle;
f32 moon_time;
if (camera_p != NULL && strcmp(dComIfGp_getStartStageName(), "F_SP200") != 0) {
if (g_env_light.daytime >= 90.0f && g_env_light.daytime <= 270.0f) {
parcent = get_parcent(270.0f, 90.0f, g_env_light.daytime);
sun_angle = (parcent * 150.0f) + 105.0f;
} else {
sun_angle = g_env_light.daytime;
if (sun_angle < 90.0f) {
sun_angle += 360.0f;
}
parcent = get_parcent(450.0f, 270.0f, sun_angle);
sun_angle = (parcent * 210.0f) + 255.0f;
if (sun_angle > 360.0f) {
sun_angle -= 360.0f;
}
}
moon_time = 180.0f + g_env_light.daytime;
if (moon_time >= 360.0f) {
moon_time -= 360.0f;
}
if (moon_time >= 90.0f && moon_time <= 270.0f) {
parcent = get_parcent(270.0f, 90.0f, moon_time);
moon_angle = (parcent * 150.0f) + 105.0f;
} else {
moon_angle = moon_time;
if (moon_angle < 90.0f) {
moon_angle += 360.0f;
}
parcent = get_parcent(450.0f, 270.0f, moon_angle);
moon_angle = (parcent * 210.0f) + 255.0f;
if (moon_angle > 360.0f) {
moon_angle -= 360.0f;
}
}
pos.x = sinf(DEG_TO_RAD(sun_angle)) * 80000.0f;
pos.y = cosf(DEG_TO_RAD(sun_angle)) * 80000.0f;
pos.z = cosf(DEG_TO_RAD(sun_angle)) * -48000.0f;
sun_pos.x = camera_p->lookat.eye.x + pos.x;
sun_pos.y = camera_p->lookat.eye.y - pos.y;
sun_pos.z = camera_p->lookat.eye.z + pos.z;
pos.x = sinf(DEG_TO_RAD(moon_angle)) * 80000.0f;
pos.y = cosf(DEG_TO_RAD(moon_angle)) * 80000.0f;
pos.z = cosf(DEG_TO_RAD(moon_angle)) * -48000.0f;
moon_pos.x = pos.x;
moon_pos.y = -pos.y;
moon_pos.z = pos.z;
}
}
f32 dScnKy_env_light_c::getDaytime() {
return daytime;
}
int dKy_getdaytime_hour() {
f32 time = dComIfGs_getTime();
return time / 15.0f;
}
int dKy_getdaytime_minute() {
f32 time = dComIfGs_getTime();
f32 var_f30 = ((int)(time * 1000000.0f) % 15000000) / 1000000.0f;
return var_f30 / 15.0f * 60.0f;
}
BOOL dKy_daynight_check() {
int hour = dKy_getdaytime_hour();
if (hour >= 6 && hour < 19) {
return FALSE; // day time
} else {
return TRUE; // night time
}
}
int dKy_getDarktime_hour() {
f32 time = g_env_light.getDarkDaytime();
return time / 15.0f;
}
int dKy_getDarktime_minute() {
f32 time = g_env_light.getDarkDaytime();
f32 temp_f30 = ((int)(time * 1000000.0f) % 15000000) / 1000000.0f;
return 60.0f * (temp_f30 / 15.0f);
}
u8 dKy_getDarktime_week() {
return g_env_light.darktime_week;
}
f32 dScnKy_env_light_c::getDarkDaytime() {
return dark_daytime;
}
/**
* Gets stage environment color palette information based on given IDs.
* This gets both previous and next palette information so that blending between
* palettes can occur. Both previous and next palette's also get a start and ending palette
* used to blend color based on time of day.
*
* @param prev_envr_id_p Index into stage ENVR info for previous palette
* @param next_envr_id_p Index into stage ENVR info for next (target) palette
* @param prev_pat_p Index of stage Pselect (Palette Select) to use for previous palette
* @param next_pat_p Index of stage Pselect (Palette Select) to use for next (target) palette
* @param prev_pal_start_id_p Start Palette ID for previous palette color
* @param prev_pal_end_id_p Ending Palette ID for previous palette color
* @param next_pal_start_id_p Start Palette ID for next (target) palette color
* @param next_pal_end_id_p Ending Palette ID for next (target) palette color
* @param color_ratio_p Ratio in-between start and ending palette to use
* @param start_pat_pal_id_p Index into stage Pselect for starting palette
* @param end_pat_pal_id_p Index into stage Pselect for ending palette
* @param pattern_ratio_p Ratio in-between previous pattern to the next
* @param init_timer_p
*/
void dScnKy_env_light_c::setLight_palno_get(u8* prev_envr_id_p, u8* next_envr_id_p, u8* prev_pat_p,
u8* next_pat_p, u8* prev_pal_start_id_p,
u8* prev_pal_end_id_p, u8* next_pal_start_id_p,
u8* next_pal_end_id_p, f32* color_ratio_p,
int* start_pat_pal_id_p, int* end_pat_pal_id_p,
f32* pattern_ratio_p, u8* init_timer_p) {
stage_envr_info_class* envr_p;
u8 psel_idx = 0;
int i;
int sp14 = 0;
if (*init_timer_p != 0) {
(*init_timer_p)++;
if (*init_timer_p > 20) {
*init_timer_p = 0;
}
if (g_env_light.mColPatMode == 0 && g_env_light.mColPatModeGather == 0) {
*pattern_ratio_p = g_env_light.pat_ratio;
// previous has reached next, so set previous to next
if (*pattern_ratio_p >= 1.0f) {
*prev_envr_id_p = *next_envr_id_p;
*prev_pat_p = *next_pat_p;
}
}
}
for (i = 0; i < 11; i++) {
// if time of day is not within light schedule range, then don't calculate light color
if (!(daytime >= light_schedule[i].startTime && daytime <= light_schedule[i].endTime)) {
continue;
}
*start_pat_pal_id_p = light_schedule[i].startTimeLight;
*end_pat_pal_id_p = light_schedule[i].endTimeLight;
*color_ratio_p = get_parcent(light_schedule[i].endTime, light_schedule[i].startTime, daytime);
#if DEBUG
if (dComIfGp_getStageEnvrNumInfo() - 1 < g_env_light.PrevCol) {
sp14 = TRUE;
JUT_WARN(2920, "color error 1:[%d]", g_env_light.PrevCol);
}
#endif
envr_p = &g_env_light.stage_envr_info[*prev_envr_id_p];
switch (*prev_pat_p) {
case 0:
psel_idx = envr_p->pselect_id[0];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[0]) {
sp14 = TRUE;
JUT_WARN(2936, "color error 2:pat0:[%d]", envr_p->pselect_id[0]);
}
#endif
break;
case 1:
psel_idx = envr_p->pselect_id[1];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[1]) {
sp14 = TRUE;
JUT_WARN(2947, "color error 3:pat1:[%d]", envr_p->pselect_id[1]);
}
#endif
break;
case 2:
psel_idx = envr_p->pselect_id[2];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[2]) {
sp14 = TRUE;
JUT_WARN(2958, "color error 4:pat2:[%d]", envr_p->pselect_id[2]);
}
#endif
break;
case 3:
psel_idx = envr_p->pselect_id[3];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[3]) {
sp14 = TRUE;
JUT_WARN(2969, "color error 5:pat3:[%d]", envr_p->pselect_id[3]);
}
#endif
break;
case 4:
psel_idx = envr_p->pselect_id[4];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[4]) {
sp14 = TRUE;
JUT_WARN(2980, "color error 6:pat4:[%d]", envr_p->pselect_id[4]);
}
#endif
break;
case 5:
psel_idx = envr_p->pselect_id[5];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[5]) {
sp14 = TRUE;
JUT_WARN(2991, "color error 7:pat5:[%d]", envr_p->pselect_id[5]);
}
#endif
break;
case 6:
psel_idx = envr_p->pselect_id[6];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[6]) {
sp14 = TRUE;
JUT_WARN(3002, "color error 8:pat6:[%d]", envr_p->pselect_id[6]);
}
#endif
break;
case 7:
psel_idx = envr_p->pselect_id[7];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[7]) {
sp14 = TRUE;
JUT_WARN(3013, "color error 9:pat7:[%d]", envr_p->pselect_id[7]);
}
#endif
break;
default:
if (*prev_pat_p > 7 && *prev_pat_p < 64) {
psel_idx = envr_p->pselect_id[*prev_pat_p];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*prev_pat_p] &&
dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*prev_pat_p] &&
g_kankyoHIO.light.m_displayColorPaletteCheckInfo == TRUE)
{
sp14 = TRUE;
JUT_WARN(3030, "color error 10:pat8-:[%d]", envr_p->pselect_id[*prev_pat_p]);
}
#endif
}
break;
}
// use a specific palette for underwater (except during morpheel and zant fight)
if (g_env_light.camera_water_in_status &&
strcmp(dComIfGp_getStartStageName(), "D_MN08D") != 0 &&
strcmp(dComIfGp_getStartStageName(), "D_MN01A") != 0)
{
if (g_env_light.wether_pat1 == 0) {
psel_idx = envr_p->pselect_id[8];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[8]) {
sp14 = TRUE;
}
#endif
} else {
psel_idx = envr_p->pselect_id[9];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[9]) {
sp14 = TRUE;
}
#endif
}
}
// use a specific palette for rollgoal (camera eye gets set below 0.0)
else if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0)
{
camera_class* camera_p = dComIfGp_getCamera(0);
if (camera_p != NULL && camera_p->lookat.eye.y < 0.0f) {
psel_idx = envr_p->pselect_id[10];
}
}
if (psel_idx > 250) {
psel_idx = 0;
}
stage_pselect_info_class* pselect_p = &g_env_light.stage_pselect_info[psel_idx];
switch (*start_pat_pal_id_p) {
case 0:
*prev_pal_start_id_p = pselect_p->palette_id[0];
break;
case 1:
*prev_pal_start_id_p = pselect_p->palette_id[1];
break;
case 2:
*prev_pal_start_id_p = pselect_p->palette_id[2];
break;
case 3:
*prev_pal_start_id_p = pselect_p->palette_id[3];
break;
case 4:
*prev_pal_start_id_p = pselect_p->palette_id[4];
break;
case 5:
*prev_pal_start_id_p = pselect_p->palette_id[5];
break;
}
switch (*end_pat_pal_id_p) {
case 0:
*prev_pal_end_id_p = pselect_p->palette_id[0];
break;
case 1:
*prev_pal_end_id_p = pselect_p->palette_id[1];
break;
case 2:
*prev_pal_end_id_p = pselect_p->palette_id[2];
break;
case 3:
*prev_pal_end_id_p = pselect_p->palette_id[3];
break;
case 4:
*prev_pal_end_id_p = pselect_p->palette_id[4];
break;
case 5:
*prev_pal_end_id_p = pselect_p->palette_id[5];
break;
}
#if DEBUG
if (dComIfGp_getStageEnvrNumInfo() - 1 < g_env_light.UseCol) {
sp14 = TRUE;
JUT_WARN(3107, "color error 11:[%d]", g_env_light.UseCol);
}
#endif
envr_p = &g_env_light.stage_envr_info[*next_envr_id_p];
switch (*next_pat_p) {
case 0:
psel_idx = envr_p->pselect_id[0];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[0]) {
sp14 = TRUE;
JUT_WARN(3122, "color error 12:pat0:[%d]", envr_p->pselect_id[0]);
}
#endif
break;
case 1:
psel_idx = envr_p->pselect_id[1];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[1]) {
sp14 = TRUE;
JUT_WARN(3133, "color error 13:pat1:[%d]", envr_p->pselect_id[1]);
}
#endif
break;
case 2:
psel_idx = envr_p->pselect_id[2];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[2]) {
sp14 = TRUE;
JUT_WARN(3144, "color error 14:pat2:[%d]", envr_p->pselect_id[2]);
}
#endif
break;
case 3:
psel_idx = envr_p->pselect_id[3];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[3]) {
sp14 = TRUE;
JUT_WARN(3155, "color error 15:pat3:[%d]", envr_p->pselect_id[3]);
}
#endif
break;
case 4:
psel_idx = envr_p->pselect_id[4];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[4]) {
sp14 = TRUE;
JUT_WARN(3166, "color error 16:pat4:[%d]", envr_p->pselect_id[4]);
}
#endif
break;
case 5:
psel_idx = envr_p->pselect_id[5];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[5]) {
sp14 = TRUE;
JUT_WARN(3177, "color error 17:pat5:[%d]", envr_p->pselect_id[5]);
}
#endif
break;
case 6:
psel_idx = envr_p->pselect_id[6];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[6]) {
sp14 = TRUE;
JUT_WARN(3188, "color error 18:pat6:[%d]", envr_p->pselect_id[6]);
}
#endif
break;
case 7:
psel_idx = envr_p->pselect_id[7];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[7]) {
sp14 = TRUE;
JUT_WARN(3199, "color error 19:pat7:[%d]", envr_p->pselect_id[7]);
}
#endif
break;
default:
if (*next_pat_p > 7 && *next_pat_p < 64) {
psel_idx = envr_p->pselect_id[*next_pat_p];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*next_pat_p] &&
dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[*next_pat_p] &&
g_kankyoHIO.light.m_displayColorPaletteCheckInfo == TRUE)
{
sp14 = TRUE;
JUT_WARN(3218, "color error 20:pat8-:[%d]", envr_p->pselect_id[*next_pat_p]);
}
#endif
}
break;
}
if (psel_idx > 250) {
psel_idx = 0;
}
pselect_p = &g_env_light.stage_pselect_info[psel_idx];
if (*prev_envr_id_p != *next_envr_id_p || *prev_pat_p != *next_pat_p) {
if (pselect_p->change_rate < (1.0f / 30)) {
pselect_p->change_rate = (1.0f / 30);
}
if (g_env_light.mColPatMode == 0) {
if (pselect_p->change_rate > 0.0f) {
*pattern_ratio_p += (1.0f / 30) / pselect_p->change_rate;
}
// pattern change rate is faster in hyrule field
if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0 &&
*prev_pat_p == *next_pat_p)
{
*pattern_ratio_p += (1.0f / 15);
}
if (*pattern_ratio_p >= 1.0f) {
*prev_envr_id_p = *next_envr_id_p;
*prev_pat_p = *next_pat_p;
*pattern_ratio_p = 1.0f;
}
}
}
// use a specific palette for underwater (except during morpheel and zant fight)
if (g_env_light.camera_water_in_status &&
strcmp(dComIfGp_getStartStageName(), "D_MN08D") != 0 &&
strcmp(dComIfGp_getStartStageName(), "D_MN01A") != 0)
{
if (g_env_light.wether_pat1 == 0) {
pselect_p = &g_env_light.stage_pselect_info[envr_p->pselect_id[8]];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[8]) {
sp14 = TRUE;
}
#endif
} else {
pselect_p = &g_env_light.stage_pselect_info[envr_p->pselect_id[9]];
#if DEBUG
if (dComIfGp_getStagePselectNumInfo() - 1 < envr_p->pselect_id[9]) {
sp14 = TRUE;
}
#endif
}
}
// use a specific palette for rollgoal (camera eye gets set below 0.0)
else if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0)
{
camera_class* camera_p = dComIfGp_getCamera(0);
if (camera_p != NULL && camera_p->lookat.eye.y < 0.0f) {
pselect_p = &g_env_light.stage_pselect_info[envr_p->pselect_id[10]];
}
}
switch (*start_pat_pal_id_p) {
case 0:
*next_pal_start_id_p = pselect_p->palette_id[0];
break;
case 1:
*next_pal_start_id_p = pselect_p->palette_id[1];
break;
case 2:
*next_pal_start_id_p = pselect_p->palette_id[2];
break;
case 3:
*next_pal_start_id_p = pselect_p->palette_id[3];
break;
case 4:
*next_pal_start_id_p = pselect_p->palette_id[4];
break;
case 5:
*next_pal_start_id_p = pselect_p->palette_id[5];
break;
}
switch (*end_pat_pal_id_p) {
case 0:
*next_pal_end_id_p = pselect_p->palette_id[0];
break;
case 1:
*next_pal_end_id_p = pselect_p->palette_id[1];
break;
case 2:
*next_pal_end_id_p = pselect_p->palette_id[2];
break;
case 3:
*next_pal_end_id_p = pselect_p->palette_id[3];
break;
case 4:
*next_pal_end_id_p = pselect_p->palette_id[4];
break;
case 5:
*next_pal_end_id_p = pselect_p->palette_id[5];
break;
}
break;
}
#if DEBUG
dKydb_HIO_kcolor_debug(prev_pal_start_id_p, next_pal_start_id_p, prev_pal_end_id_p, next_pal_end_id_p);
if (sp14) {
*prev_pal_start_id_p = 255;
*next_pal_start_id_p = 255;
*prev_pal_end_id_p = 255;
*next_pal_end_id_p = 255;
}
#else
if (*prev_pal_start_id_p > 250) {
*prev_pal_start_id_p = 0;
}
if (*next_pal_start_id_p > 250) {
*next_pal_start_id_p = 0;
}
if (*prev_pal_end_id_p > 250) {
*prev_pal_end_id_p = 0;
}
if (*next_pal_end_id_p > 250) {
*next_pal_end_id_p = 0;
}
#endif
}
/* 801A0340-801A040C 19AC80 00CC+00 3/3 0/0 0/0 .text
* dKy_calc_color_set__FP11_GXColorS10P15color_RGB_classP15color_RGB_classP15color_RGB_classP15color_RGB_classff11_GXColorS10f
*/
void dKy_calc_color_set(GXColorS10* out_color_p, color_RGB_class* color_a_start_p,
color_RGB_class* color_b_start_p, color_RGB_class* color_a_end_p,
color_RGB_class* color_b_end_p, f32 color_ratio, f32 blend_ratio,
GXColorS10 add_col, f32 scale) {
out_color_p->r =
kankyo_color_ratio_set(color_a_start_p->r, color_a_end_p->r, color_ratio,
color_b_start_p->r, color_b_end_p->r, blend_ratio, add_col.r, scale);
out_color_p->g =
kankyo_color_ratio_set(color_a_start_p->g, color_a_end_p->g, color_ratio,
color_b_start_p->g, color_b_end_p->g, blend_ratio, add_col.g, scale);
out_color_p->b =
kankyo_color_ratio_set(color_a_start_p->b, color_a_end_p->b, color_ratio,
color_b_start_p->b, color_b_end_p->b, blend_ratio, add_col.b, scale);
}
void dScnKy_env_light_c::setLight() {
f32 color_ratio;
stage_palette_info_class* prev_pal_start_p;
stage_palette_info_class* prev_pal_end_p;
stage_palette_info_class* next_pal_start_p;
stage_palette_info_class* next_pal_end_p;
stage_vrboxcol_info_class* prev_vrboxcol_start_p;
stage_vrboxcol_info_class* prev_vrboxcol_end_p;
stage_vrboxcol_info_class* next_vrboxcol_start_p;
stage_vrboxcol_info_class* next_vrboxcol_end_p;
int start_pat_pal_id;
int end_pat_pal_id;
u8* init_timer = &g_env_light.light_init_timer;
int i;
f32 sp8C;
camera_class* camera_p = dComIfGp_getCamera(0);
GXColorS10 add_col;
add_col.r = 0;
add_col.g = 0;
add_col.b = 0;
add_col.a = 0;
if (camera_p != NULL) {
if (g_env_light.camera_water_in_status) {
dBgS_CamGndChk_Wtr camchk;
cXyz chkpos;
f32 sp84;
f32 sp80 = 1.0f;
if (daPy_py_c::checkZoraWearFlg() && !daPy_py_c::checkNowWolf()) {
dKy_WaterIn_Light_set();
}
chkpos = camera_p->lookat.eye;
chkpos.y += 100000.0f;
camchk.SetPos(&chkpos);
sp84 = dComIfG_Bgsp().GroundCross(&camchk);
if (sp84 > camera_p->lookat.eye.y) {
sp84 -= camera_p->lookat.eye.y;
sp80 = 1.0f - sp84 / 2250.0f;
if (sp80 < 0.0f) {
sp80 = 0.0f;
}
sp80 = ((sp80 * 0.7f) * 0.5f) + 0.5f;
}
cLib_addCalc(&g_env_light.field_0x1258, 1.0f, 0.25f, 0.01f, 0.0000000000001f);
} else {
g_env_light.field_0x1258 = 0.0f;
}
u8 prev_pal_start_id;
u8 next_pal_start_id;
u8 prev_pal_end_id;
u8 next_pal_end_id;
setLight_palno_get(&g_env_light.PrevCol, &g_env_light.UseCol, &g_env_light.wether_pat0,
&g_env_light.wether_pat1, &prev_pal_start_id, &prev_pal_end_id,
&next_pal_start_id, &next_pal_end_id, &color_ratio, &start_pat_pal_id,
&end_pat_pal_id, &g_env_light.pat_ratio, init_timer);
if (prev_pal_start_id == 0xFF) {
actor_amb_col.r = 255;
actor_amb_col.g = 0;
actor_amb_col.b = 0;
for (i = 0; i < 4; i++) {
bg_amb_col[i].r = 255;
bg_amb_col[i].g = 0;
bg_amb_col[i].b = 0;
bg_amb_col[i].a = 0;
}
} else {
prev_pal_start_p = &g_env_light.stage_palette_info[prev_pal_start_id];
prev_pal_end_p = &g_env_light.stage_palette_info[prev_pal_end_id];
next_pal_start_p = &g_env_light.stage_palette_info[next_pal_start_id];
next_pal_end_p = &g_env_light.stage_palette_info[next_pal_end_id];
#if DEBUG
if (!g_kankyoHIO.light.m_HOSTIO_setting && !g_kankyoHIO.vrbox.m_VrboxSetting)
#endif
{
dKy_calc_color_set(&actor_amb_col, &prev_pal_start_p->actor_amb_col,
&next_pal_start_p->actor_amb_col, &prev_pal_end_p->actor_amb_col,
&next_pal_end_p->actor_amb_col, color_ratio, g_env_light.pat_ratio,
add_col,
g_env_light.field_0x1210 * (g_env_light.now_actcol_ratio * g_env_light.now_actcol_ratio));
for (i = 0; i < 4; i++) {
if (i != 3 || (strcmp(dComIfGp_getStartStageName(), "R_SP127") != 0 &&
strcmp(dComIfGp_getStartStageName(), "F_SP127") != 0))
{
dKy_calc_color_set(&bg_amb_col[i], &prev_pal_start_p->bg_amb_col[i],
&next_pal_start_p->bg_amb_col[i],
&prev_pal_end_p->bg_amb_col[i],
&next_pal_end_p->bg_amb_col[i], color_ratio,
g_env_light.pat_ratio, add_col, g_env_light.now_bgcol_ratio);
}
}
if (daPy_py_c::checkNowWolfPowerUp()) {
dKy_WolfPowerup_AmbCol(&actor_amb_col);
dKy_WolfPowerup_BgAmbCol(&bg_amb_col[0]);
}
bg_amb_col[1].a = (u8)kankyo_color_ratio_set(
prev_pal_start_p->BG1_amb_alpha, prev_pal_end_p->BG1_amb_alpha, color_ratio,
next_pal_start_p->BG1_amb_alpha, next_pal_end_p->BG1_amb_alpha,
g_env_light.pat_ratio, 0, 1.0f);
bg_amb_col[2].a = (u8)kankyo_color_ratio_set(
prev_pal_start_p->BG2_amb_alpha, prev_pal_end_p->BG2_amb_alpha, color_ratio,
next_pal_start_p->BG2_amb_alpha, next_pal_end_p->BG2_amb_alpha,
g_env_light.pat_ratio, 0, 1.0f);
bg_amb_col[3].a = (u8)kankyo_color_ratio_set(
prev_pal_start_p->BG3_amb_alpha, prev_pal_end_p->BG3_amb_alpha, color_ratio,
next_pal_start_p->BG3_amb_alpha, next_pal_end_p->BG3_amb_alpha,
g_env_light.pat_ratio, 0, 1.0f);
s16 bg_light_inf = kankyo_color_ratio_set(
prev_pal_start_p->bg_light_influence, prev_pal_end_p->bg_light_influence,
color_ratio, next_pal_start_p->bg_light_influence,
next_pal_end_p->bg_light_influence, g_env_light.pat_ratio, 0, 1.0f);
bg_light_influence = bg_light_inf * 0.01f;
if (bg_light_influence > 2.0f) {
bg_light_influence = 1.0f;
}
mFogDensity = kankyo_color_ratio_set(
prev_pal_start_p->cloud_shadow_density, prev_pal_end_p->cloud_shadow_density,
color_ratio, next_pal_start_p->cloud_shadow_density,
next_pal_end_p->cloud_shadow_density, g_env_light.pat_ratio, 0, 1.0f);
if (daPy_py_c::checkNowWolfPowerUp()) {
mFogDensity = -1;
}
for (i = 0; i < 6; i++) {
dKy_calc_color_set(&dungeonlight_col[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i], &prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio,
g_env_light.pat_ratio, add_col, g_env_light.now_bgcol_ratio);
if (daPy_py_c::checkNowWolfPowerUp()) {
dungeonlight_col[i].r = 0;
dungeonlight_col[i].g = 0;
dungeonlight_col[i].b = 0;
}
g_env_light.dungeonlight[i].mColor.r = dungeonlight_col[i].r;
g_env_light.dungeonlight[i].mColor.g = dungeonlight_col[i].g;
g_env_light.dungeonlight[i].mColor.b = dungeonlight_col[i].b;
}
dKy_calc_color_set(&fog_col, &prev_pal_start_p->fog_col, &next_pal_start_p->fog_col,
&prev_pal_end_p->fog_col, &next_pal_end_p->fog_col, color_ratio,
g_env_light.pat_ratio, addcol_fog, g_env_light.now_fogcol_ratio);
mFogNear = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_start_z, prev_pal_end_p->fog_start_z, color_ratio,
next_pal_start_p->fog_start_z, next_pal_end_p->fog_start_z, g_env_light.pat_ratio,
g_env_light.field_0x11ec, g_env_light.field_0x11f4);
mFogFar = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_end_z, prev_pal_end_p->fog_end_z, color_ratio,
next_pal_start_p->fog_end_z, next_pal_end_p->fog_end_z, g_env_light.pat_ratio,
g_env_light.field_0x11f0, g_env_light.field_0x11f4);
if (daPy_py_c::checkNowWolfPowerUp()) {
fog_col.r = 0;
fog_col.g = 0;
fog_col.b = 0;
dKy_WolfPowerup_FogNearFar(&mFogNear, &mFogFar);
}
}
u8 sp2B;
u8 sp2A;
u8 sp29;
u8 sp28;
u8 prev_bloom_start_id = prev_pal_start_p->bloom_tbl_id;
u8 next_bloom_start_id = next_pal_start_p->bloom_tbl_id;
u8 prev_bloom_end_id = prev_pal_end_p->bloom_tbl_id;
u8 next_bloom_end_id = next_pal_end_p->bloom_tbl_id;
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = g_kankyoHIO.bloom.m_saturationPattern;
} else {
g_kankyoHIO.bloom.m_saturationPattern = prev_pal_end_p->bloom_tbl_id;
}
if (g_kankyoHIO.navy.twilight_sense_saturation_mode && daPy_py_c::checkNowWolfPowerUp()) {
prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = g_kankyoHIO.navy.twilight_sense_saturation_mode;
}
#endif
if (daPy_py_c::checkNowWolfPowerUp()) {
prev_bloom_start_id = next_bloom_start_id = prev_bloom_end_id = next_bloom_end_id = 3;
}
if (g_env_light.field_0x12fc >= 0) {
prev_bloom_end_id = g_env_light.field_0x12fc;
next_bloom_end_id = g_env_light.field_0x12fc;
sp8C = color_ratio;
color_ratio = g_env_light.field_0x1278;
}
GXColor bloom_blend_col;
dKydata_BloomInfo_c* bloomInf0_p;
dKydata_BloomInfo_c* bloomInf2_p;
dKydata_BloomInfo_c* bloomInf1_p;
dKydata_BloomInfo_c* bloomInf3_p;
bloomInf0_p = dKyd_BloomInf_tbl_getp(prev_bloom_start_id);
bloomInf2_p = dKyd_BloomInf_tbl_getp(next_bloom_start_id);
bloomInf1_p = dKyd_BloomInf_tbl_getp(prev_bloom_end_id);
bloomInf3_p = dKyd_BloomInf_tbl_getp(next_bloom_end_id);
#if DEBUG
if (bloomInf0_p == NULL || bloomInf2_p == NULL || bloomInf1_p == NULL || bloomInf3_p == NULL) {
JUT_ASSERT(3839, FALSE);
}
#endif
u8 bloom_point = kankyo_color_ratio_set(
bloomInf0_p->info.mThreshold, bloomInf1_p->info.mThreshold, color_ratio,
bloomInf2_p->info.mThreshold, bloomInf3_p->info.mThreshold, g_env_light.pat_ratio, 0, 1.0f);
mDoGph_gInf_c::getBloom()->setPoint(bloom_point);
u8 blure_size = (u8)kankyo_color_ratio_set(
bloomInf0_p->info.mBlurAmount, bloomInf1_p->info.mBlurAmount, color_ratio,
bloomInf2_p->info.mBlurAmount, bloomInf3_p->info.mBlurAmount, g_env_light.pat_ratio, 0, 1.0f);
GXColor bloom_mono_col;
if (dKy_darkworld_check()) {
static s16 S_fuwan_sin;
f32 sin = cM_ssin(S_fuwan_sin);
S_fuwan_sin += (s16)cM_rndF(2000.0f) + 500;
blure_size += (u8)(sin * (0.2f * blure_size));
}
mDoGph_gInf_c::getBloom()->setBlureSize(blure_size);
u8 sp21 = kankyo_color_ratio_set(
bloomInf0_p->info.mDensity, bloomInf1_p->info.mDensity, color_ratio, bloomInf2_p->info.mDensity,
bloomInf3_p->info.mDensity, g_env_light.pat_ratio, 0, 1.0f);
mDoGph_gInf_c::getBloom()->setBlureRatio(sp21);
bloom_blend_col.r = kankyo_color_ratio_set(
bloomInf0_p->info.mColorR, bloomInf1_p->info.mColorR, color_ratio, bloomInf2_p->info.mColorR,
bloomInf3_p->info.mColorR, g_env_light.pat_ratio, 0, 1.0f);
bloom_blend_col.g = kankyo_color_ratio_set(
bloomInf0_p->info.mColorG, bloomInf1_p->info.mColorG, color_ratio, bloomInf2_p->info.mColorG,
bloomInf3_p->info.mColorG, g_env_light.pat_ratio, 0, 1.0f);
bloom_blend_col.b = kankyo_color_ratio_set(
bloomInf0_p->info.mColorB, bloomInf1_p->info.mColorB, color_ratio, bloomInf2_p->info.mColorB,
bloomInf3_p->info.mColorB, g_env_light.pat_ratio, 0, 1.0f);
bloom_blend_col.a =
kankyo_color_ratio_set(bloomInf0_p->info.mOrigDensity, bloomInf1_p->info.mOrigDensity,
color_ratio, bloomInf2_p->info.mOrigDensity,
bloomInf3_p->info.mOrigDensity, g_env_light.pat_ratio, 0, 1.0f);
mDoGph_gInf_c::getBloom()->setBlendColor(bloom_blend_col);
if (g_env_light.field_0x12fc >= 0) {
color_ratio = sp8C;
}
bloom_mono_col.r = kankyo_color_ratio_set(
bloomInf0_p->info.mSaturateSubtractR, bloomInf1_p->info.mSaturateSubtractR, color_ratio,
bloomInf2_p->info.mSaturateSubtractR, bloomInf3_p->info.mSaturateSubtractR,
g_env_light.pat_ratio, 0, 1.0f);
bloom_mono_col.g = kankyo_color_ratio_set(
bloomInf0_p->info.mSaturateSubtractG, bloomInf1_p->info.mSaturateSubtractG, color_ratio,
bloomInf2_p->info.mSaturateSubtractG, bloomInf3_p->info.mSaturateSubtractG,
g_env_light.pat_ratio, 0, 1.0f);
bloom_mono_col.b = kankyo_color_ratio_set(
bloomInf0_p->info.mSaturateSubtractB, bloomInf1_p->info.mSaturateSubtractB, color_ratio,
bloomInf2_p->info.mSaturateSubtractB, bloomInf3_p->info.mSaturateSubtractB,
g_env_light.pat_ratio, 0, 1.0f);
bloom_mono_col.a = kankyo_color_ratio_set(
bloomInf0_p->info.mSaturateSubtractA, bloomInf1_p->info.mSaturateSubtractA, color_ratio,
bloomInf2_p->info.mSaturateSubtractA, bloomInf3_p->info.mSaturateSubtractA,
g_env_light.pat_ratio, 0, 1.0f);
mDoGph_gInf_c::getBloom()->setMonoColor(bloom_mono_col);
if (bloom_point >= 0xFF) {
mDoGph_gInf_c::getBloom()->setEnable(0);
} else {
u8 mode = 0;
mDoGph_gInf_c::getBloom()->setEnable(1);
if (prev_bloom_start_id != 0 && bloomInf0_p->info.mType != 0) {
mode = 1;
} else if (next_bloom_start_id != 0 && bloomInf2_p->info.mType != 0) {
mode = 1;
} else if (prev_bloom_end_id != 0 && bloomInf1_p->info.mType != 0) {
mode = 1;
} else if (next_bloom_end_id != 0 && bloomInf3_p->info.mType != 0) {
mode = 1;
}
mDoGph_gInf_c::getBloom()->setMode(mode);
}
f32 var_f30;
if (dKy_Outdoor_check() == true) {
static f32 now_shadow_alpha[] = {0.25f, 0.35f, 0.6f, 0.6f, 0.25f, 0.35f};
f32 var_f1;
f32 var_f2;
f32 var_f4;
f32 var_f5;
if (start_pat_pal_id < 6) {
var_f1 = now_shadow_alpha[start_pat_pal_id];
} else {
var_f1 = 0.25f;
}
if (end_pat_pal_id < 6) {
var_f2 = now_shadow_alpha[end_pat_pal_id];
} else {
var_f2 = 0.25f;
}
var_f4 = 0.25f;
var_f5 = 0.25f;
if (prev_pal_start_p == next_pal_start_p) {
var_f4 = var_f1;
var_f5 = var_f2;
}
var_f30 = float_kankyo_color_ratio_set(var_f1, var_f2, color_ratio, var_f4, var_f5,
g_env_light.pat_ratio, 0.0f, 0.0f);
field_0x123c = 0.8f;
if (mColpatWeather != 0) {
var_f30 *= 0.4f;
}
} else {
var_f30 = 0.4f;
field_0x123c = 0.65f;
}
if (dKy_darkworld_check()) {
var_f30 = 0.55f;
field_0x123c = 0.55f;
}
#if DEBUG
if (g_kankyoHIO.navy.shadow_adjust_ON) {
var_f30 = g_kankyoHIO.navy.shadow_normal_alpha;
field_0x123c = g_kankyoHIO.navy.shadow_max_alpha;
}
#endif
if (g_env_light.light_init_timer != 0) {
field_0x1238 = var_f30;
} else {
cLib_addCalc(&field_0x1238, var_f30, 0.05f, 0.005f, 0.000001f);
}
#if DEBUG
if (!g_kankyoHIO.light.m_HOSTIO_setting && !g_kankyoHIO.vrbox.m_VrboxSetting)
#endif
{
sp2B = prev_pal_start_p->vrboxcol_id;
sp2A = prev_pal_end_p->vrboxcol_id;
sp29 = next_pal_start_p->vrboxcol_id;
sp28 = next_pal_end_p->vrboxcol_id;
#if DEBUG
dKydb_HIO_vrbox_debug(&sp2B, &sp2A, &sp29, &sp28);
#endif
prev_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[sp2B];
prev_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[sp2A];
next_vrboxcol_start_p = &g_env_light.stage_vrboxcol_info[sp29];
next_vrboxcol_end_p = &g_env_light.stage_vrboxcol_info[sp28];
vrbox_sky_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->sky_col.r, prev_vrboxcol_end_p->sky_col.r, color_ratio,
next_vrboxcol_start_p->sky_col.r, next_vrboxcol_end_p->sky_col.r,
g_env_light.pat_ratio, vrbox_addcol_sky0.r,
g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11c8);
vrbox_sky_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->sky_col.g, prev_vrboxcol_end_p->sky_col.g, color_ratio,
next_vrboxcol_start_p->sky_col.g, next_vrboxcol_end_p->sky_col.g,
g_env_light.pat_ratio, vrbox_addcol_sky0.g,
g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11cc);
vrbox_sky_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->sky_col.b, prev_vrboxcol_end_p->sky_col.b, color_ratio,
next_vrboxcol_start_p->sky_col.b, next_vrboxcol_end_p->sky_col.b,
g_env_light.pat_ratio, vrbox_addcol_sky0.b,
g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11d0);
vrbox_sky_col.a = 255;
vrbox_kumo_top_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_top_col.r, prev_vrboxcol_end_p->kumo_top_col.r,
color_ratio, next_vrboxcol_start_p->kumo_top_col.r,
next_vrboxcol_end_p->kumo_top_col.r, g_env_light.pat_ratio, vrbox_addcol_sky0.r,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11c8);
vrbox_kumo_top_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_top_col.g, prev_vrboxcol_end_p->kumo_top_col.g,
color_ratio, next_vrboxcol_start_p->kumo_top_col.g,
next_vrboxcol_end_p->kumo_top_col.g, g_env_light.pat_ratio, vrbox_addcol_sky0.g,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11cc);
vrbox_kumo_top_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_top_col.b, prev_vrboxcol_end_p->kumo_top_col.b,
color_ratio, next_vrboxcol_start_p->kumo_top_col.b,
next_vrboxcol_end_p->kumo_top_col.b, g_env_light.pat_ratio, vrbox_addcol_sky0.b,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11d0);
vrbox_kumo_top_col.a = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_shadow_col.a, prev_vrboxcol_end_p->kumo_shadow_col.a,
color_ratio, next_vrboxcol_start_p->kumo_shadow_col.a,
next_vrboxcol_end_p->kumo_shadow_col.a, g_env_light.pat_ratio, 0, 1.0f);
vrbox_kumo_bottom_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_bottom_col.r, prev_vrboxcol_end_p->kumo_bottom_col.r,
color_ratio, next_vrboxcol_start_p->kumo_bottom_col.r,
next_vrboxcol_end_p->kumo_bottom_col.r, g_env_light.pat_ratio, vrbox_addcol_sky0.r,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11c8);
vrbox_kumo_bottom_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_bottom_col.g, prev_vrboxcol_end_p->kumo_bottom_col.g,
color_ratio, next_vrboxcol_start_p->kumo_bottom_col.g,
next_vrboxcol_end_p->kumo_bottom_col.g, g_env_light.pat_ratio, vrbox_addcol_sky0.g,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11cc);
vrbox_kumo_bottom_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_bottom_col.b, prev_vrboxcol_end_p->kumo_bottom_col.b,
color_ratio, next_vrboxcol_start_p->kumo_bottom_col.b,
next_vrboxcol_end_p->kumo_bottom_col.b, g_env_light.pat_ratio, vrbox_addcol_sky0.b,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11d0);
vrbox_kumo_shadow_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_shadow_col.r, prev_vrboxcol_end_p->kumo_shadow_col.r,
color_ratio, next_vrboxcol_start_p->kumo_shadow_col.r,
next_vrboxcol_end_p->kumo_shadow_col.r, g_env_light.pat_ratio, vrbox_addcol_sky0.r,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11c8);
vrbox_kumo_shadow_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_shadow_col.g, prev_vrboxcol_end_p->kumo_shadow_col.g,
color_ratio, next_vrboxcol_start_p->kumo_shadow_col.g,
next_vrboxcol_end_p->kumo_shadow_col.g, g_env_light.pat_ratio, vrbox_addcol_sky0.g,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11cc);
vrbox_kumo_shadow_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kumo_shadow_col.b, prev_vrboxcol_end_p->kumo_shadow_col.b,
color_ratio, next_vrboxcol_start_p->kumo_shadow_col.b,
next_vrboxcol_end_p->kumo_shadow_col.b, g_env_light.pat_ratio, vrbox_addcol_sky0.b,
g_env_light.now_vrboxkumocol_ratio * g_env_light.unk_0x11d0);
vrbox_kasumi_outer_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_outer_col.r, prev_vrboxcol_end_p->kasumi_outer_col.r,
color_ratio, next_vrboxcol_start_p->kasumi_outer_col.r,
next_vrboxcol_end_p->kasumi_outer_col.r, g_env_light.pat_ratio,
vrbox_addcol_kasumi.r, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11c8);
vrbox_kasumi_outer_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_outer_col.g, prev_vrboxcol_end_p->kasumi_outer_col.g,
color_ratio, next_vrboxcol_start_p->kasumi_outer_col.g,
next_vrboxcol_end_p->kasumi_outer_col.g, g_env_light.pat_ratio,
vrbox_addcol_kasumi.g, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11cc);
vrbox_kasumi_outer_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_outer_col.b, prev_vrboxcol_end_p->kasumi_outer_col.b,
color_ratio, next_vrboxcol_start_p->kasumi_outer_col.b,
next_vrboxcol_end_p->kasumi_outer_col.b, g_env_light.pat_ratio,
vrbox_addcol_kasumi.b, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11d0);
vrbox_kasumi_outer_col.a = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_outer_col.a, prev_vrboxcol_end_p->kasumi_outer_col.a,
color_ratio, next_vrboxcol_start_p->kasumi_outer_col.a,
next_vrboxcol_end_p->kasumi_outer_col.a, g_env_light.pat_ratio, 0, 1.0f);
vrbox_kasumi_inner_col.r = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_inner_col.r, prev_vrboxcol_end_p->kasumi_inner_col.r,
color_ratio, next_vrboxcol_start_p->kasumi_inner_col.r,
next_vrboxcol_end_p->kasumi_inner_col.r, g_env_light.pat_ratio,
vrbox_addcol_kasumi.r, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11c8);
vrbox_kasumi_inner_col.g = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_inner_col.g, prev_vrboxcol_end_p->kasumi_inner_col.g,
color_ratio, next_vrboxcol_start_p->kasumi_inner_col.g,
next_vrboxcol_end_p->kasumi_inner_col.g, g_env_light.pat_ratio,
vrbox_addcol_kasumi.g, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11cc);
vrbox_kasumi_inner_col.b = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_inner_col.b, prev_vrboxcol_end_p->kasumi_inner_col.b,
color_ratio, next_vrboxcol_start_p->kasumi_inner_col.b,
next_vrboxcol_end_p->kasumi_inner_col.b, g_env_light.pat_ratio,
vrbox_addcol_kasumi.b, g_env_light.now_vrboxsoracol_ratio * g_env_light.unk_0x11d0);
vrbox_kasumi_inner_col.a = kankyo_color_ratio_set(
prev_vrboxcol_start_p->kasumi_inner_col.a, prev_vrboxcol_end_p->kasumi_inner_col.a,
color_ratio, next_vrboxcol_start_p->kasumi_inner_col.a,
next_vrboxcol_end_p->kasumi_inner_col.a, g_env_light.pat_ratio, 0, 1.0f);
if (daPy_py_c::checkNowWolfPowerUp()) {
vrbox_sky_col.r = 0;
vrbox_sky_col.g = 0;
vrbox_sky_col.b = 0;
vrbox_kumo_top_col.r = 0;
vrbox_kumo_top_col.g = 0;
vrbox_kumo_top_col.b = 0;
vrbox_kumo_bottom_col.r = 0;
vrbox_kumo_bottom_col.g = 0;
vrbox_kumo_bottom_col.b = 0;
vrbox_kumo_shadow_col.r = 0;
vrbox_kumo_shadow_col.g = 0;
vrbox_kumo_shadow_col.b = 0;
vrbox_kasumi_outer_col.r = 0;
vrbox_kasumi_outer_col.g = 0;
vrbox_kasumi_outer_col.b = 0;
vrbox_kasumi_inner_col.r = 0;
vrbox_kasumi_inner_col.g = 0;
vrbox_kasumi_inner_col.b = 0;
}
}
#if DEBUG
dKydb_HIO_debug_TVdsp(color_ratio, g_env_light.pat_ratio, start_pat_pal_id, end_pat_pal_id, lightMask);
#endif
}
}
}
void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* tevstr_p, GXColorS10* bg_col_p,
GXColorS10* fog_col_p, f32* fog_near_p, f32* fog_far_p) {
tevstr_p->wether_pat0 = g_env_light.wether_pat0;
tevstr_p->wether_pat1 = g_env_light.wether_pat1;
if (tevstr_p->wether_pat0 != tevstr_p->wether_pat1) {
tevstr_p->pat_ratio = g_env_light.pat_ratio;
}
u8 prev_pal_start_id;
u8 next_pal_start_id;
u8 prev_pal_end_id;
u8 next_pal_end_id;
f32 color_ratio;
int start_pat_pal_id;
int end_pat_pal_id;
int i;
setLight_palno_get(&tevstr_p->PrevCol, &tevstr_p->UseCol, &tevstr_p->wether_pat0,
&tevstr_p->wether_pat1, &prev_pal_start_id, &prev_pal_end_id,
&next_pal_start_id, &next_pal_end_id, &color_ratio, &start_pat_pal_id,
&end_pat_pal_id, &tevstr_p->pat_ratio, &tevstr_p->mInitTimer);
if (prev_pal_start_id == 0xFF) {
for (i = 0; i < 4; i++) {
bg_col_p[i].r = 255;
bg_col_p[i].g = 0;
bg_col_p[i].b = 0;
}
} else {
stage_palette_info_class* prev_pal_start_p = &g_env_light.stage_palette_info[prev_pal_start_id];
stage_palette_info_class* prev_pal_end_p = &g_env_light.stage_palette_info[prev_pal_end_id];
stage_palette_info_class* next_pal_start_p = &g_env_light.stage_palette_info[next_pal_start_id];
stage_palette_info_class* next_pal_end_p = &g_env_light.stage_palette_info[next_pal_end_id];
for (i = 0; i < 4; i++) {
dKy_calc_color_set(&bg_col_p[i], &prev_pal_start_p->bg_amb_col[i],
&next_pal_start_p->bg_amb_col[i], &prev_pal_end_p->bg_amb_col[i],
&next_pal_end_p->bg_amb_col[i], color_ratio, tevstr_p->pat_ratio,
bg_addcol_amb, g_env_light.now_bgcol_ratio);
}
if (daPy_py_c::checkNowWolfPowerUp()) {
dKy_WolfPowerup_BgAmbCol(bg_col_p);
}
bg_col_p[0].a =
bg_col_p[1].a =
bg_col_p[2].a =
bg_col_p[3].a = 255;
GXColorS10 sp68;
sp68.r = 0;
sp68.g = 0;
sp68.b = 0;
sp68.a = 0;
GXColorS10 plight_colors[6];
for (i = 0; i < 6; i++) {
dKy_calc_color_set(&plight_colors[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i], &prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio, tevstr_p->pat_ratio,
bg_addcol_amb, g_env_light.now_bgcol_ratio);
if (daPy_py_c::checkNowWolfPowerUp()) {
plight_colors[i].r = 0;
plight_colors[i].g = 0;
plight_colors[i].b = 0;
}
J3DLightInfo& light_info = *tevstr_p->mLights[i].getLightInfo();
GXColor light_color;
light_color.r = plight_colors[i].r;
light_color.g = plight_colors[i].g;
light_color.b = plight_colors[i].b;
light_color.a = plight_colors[i].a;
light_info.mColor = dKy_light_influence_col(&light_color, tevstr_p->field_0x374);
}
dKy_calc_color_set(fog_col_p, &prev_pal_start_p->fog_col, &next_pal_start_p->fog_col,
&prev_pal_end_p->fog_col, &next_pal_end_p->fog_col, color_ratio,
tevstr_p->pat_ratio, addcol_fog, g_env_light.now_fogcol_ratio);
*fog_near_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_start_z, prev_pal_end_p->fog_start_z, color_ratio,
next_pal_start_p->fog_start_z, next_pal_end_p->fog_start_z, tevstr_p->pat_ratio,
g_env_light.field_0x11ec, g_env_light.field_0x11f4);
*fog_far_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_end_z, prev_pal_end_p->fog_end_z, color_ratio,
next_pal_start_p->fog_end_z, next_pal_end_p->fog_end_z, tevstr_p->pat_ratio,
g_env_light.field_0x11f0, g_env_light.field_0x11f4);
if (daPy_py_c::checkNowWolfPowerUp()) {
fog_col_p->r = 0;
fog_col_p->g = 0;
fog_col_p->b = 0;
dKy_WolfPowerup_FogNearFar(fog_near_p, fog_far_p);
}
}
}
void dScnKy_env_light_c::setLight_actor(dKy_tevstr_c* tevstr_p, GXColorS10* fog_col_p,
f32* fog_near_p, f32* fog_far_p) {
u8 prev_pal_start_id;
u8 next_pal_start_id;
u8 prev_pal_end_id;
u8 next_pal_end_id;
f32 color_ratio;
int start_pat_pal_id;
int end_pat_pal_id;
int i;
tevstr_p->wether_pat0 = g_env_light.wether_pat0;
tevstr_p->wether_pat1 = g_env_light.wether_pat1;
if (tevstr_p->wether_pat0 != tevstr_p->wether_pat1) {
tevstr_p->pat_ratio = g_env_light.pat_ratio;
} else if (tevstr_p->PrevCol == tevstr_p->UseCol) {
tevstr_p->pat_ratio = 0.0f;
}
setLight_palno_get(&tevstr_p->PrevCol, &tevstr_p->UseCol, &tevstr_p->wether_pat0,
&tevstr_p->wether_pat1, &prev_pal_start_id, &prev_pal_end_id,
&next_pal_start_id, &next_pal_end_id, &color_ratio, &start_pat_pal_id,
&end_pat_pal_id, &tevstr_p->pat_ratio, &tevstr_p->mInitTimer);
if (prev_pal_start_id == 0xFF) {
for (i = 0; i < 4; i++) {
tevstr_p->AmbCol.r = 255;
tevstr_p->AmbCol.g = 0;
tevstr_p->AmbCol.b = 0;
}
} else {
stage_palette_info_class* prev_pal_start_p = &g_env_light.stage_palette_info[prev_pal_start_id];
stage_palette_info_class* prev_pal_end_p = &g_env_light.stage_palette_info[prev_pal_end_id];
stage_palette_info_class* next_pal_start_p = &g_env_light.stage_palette_info[next_pal_start_id];
stage_palette_info_class* next_pal_end_p = &g_env_light.stage_palette_info[next_pal_end_id];
if (tevstr_p->Type == 10 || tevstr_p->Type == 9 || tevstr_p->Material_id != 0) {
dKy_calc_color_set(&tevstr_p->AmbCol, &prev_pal_start_p->actor_amb_col,
&next_pal_start_p->actor_amb_col, &prev_pal_end_p->actor_amb_col,
&next_pal_end_p->actor_amb_col, color_ratio, tevstr_p->pat_ratio,
actor_addcol_amb,
tevstr_p->field_0x374 *
(g_env_light.now_actcol_ratio * g_env_light.now_actcol_ratio));
} else {
dKy_calc_color_set(&tevstr_p->AmbCol, &prev_pal_start_p->actor_amb_col,
&next_pal_start_p->actor_amb_col, &prev_pal_end_p->actor_amb_col,
&next_pal_end_p->actor_amb_col, color_ratio, tevstr_p->pat_ratio,
actor_addcol_amb,
tevstr_p->field_0x374 *
(g_env_light.field_0x1210 * (g_env_light.now_actcol_ratio * g_env_light.now_actcol_ratio)));
}
if (daPy_py_c::checkNowWolfPowerUp()) {
dKy_WolfPowerup_AmbCol(&tevstr_p->AmbCol);
}
GXColorS10 spC0;
spC0.r = 0;
spC0.g = 0;
spC0.b = 0;
spC0.a = 0;
GXColorS10 plight_col[6];
for (i = 0; i < 6; i++) {
J3DLightInfo* light_info = tevstr_p->mLights[i].getLightInfo();
if (i == 0) {
if (tevstr_p->Type == 10 || tevstr_p->Type == 9 || tevstr_p->Material_id != 0) {
dKy_calc_color_set(&plight_col[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i],
&prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio,
tevstr_p->pat_ratio, actor_addcol_amb, 1.0f);
if (daPy_py_c::checkNowWolfPowerUp()) {
plight_col[i].r = 0;
plight_col[i].g = 0;
plight_col[i].b = 0;
}
light_info = tevstr_p->mLights[i].getLightInfo();
GXColor light_col;
light_col.r = plight_col[i].r;
light_col.g = plight_col[i].g;
light_col.b = plight_col[i].b;
light_col.a = plight_col[i].a;
light_info->mColor = dKy_light_influence_col(&light_col, tevstr_p->field_0x374);
} else {
dKy_calc_color_set(
&plight_col[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i], &prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio, tevstr_p->pat_ratio,
actor_addcol_amb, g_env_light.field_0x1210);
if (daPy_py_c::checkNowWolfPowerUp()) {
plight_col[i].r = 0;
plight_col[i].g = 0;
plight_col[i].b = 0;
}
kankyo_color_ratio_calc(&light_info->mColor, plight_col[i],
field_0x1210 * tevstr_p->field_0x374);
}
} else if (tevstr_p->Type == 10 || tevstr_p->Type == 9 || tevstr_p->Material_id != 0) {
dKy_calc_color_set(&plight_col[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i], &prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio, tevstr_p->pat_ratio,
actor_addcol_amb,
g_env_light.now_actcol_ratio * g_env_light.now_actcol_ratio);
if (daPy_py_c::checkNowWolfPowerUp()) {
plight_col[i].r = 0;
plight_col[i].g = 0;
plight_col[i].b = 0;
}
GXColor light_col;
light_col.r = plight_col[i].r;
light_col.g = plight_col[i].g;
light_col.b = plight_col[i].b;
light_col.a = plight_col[i].a;
light_info->mColor = dKy_light_influence_col(&light_col, tevstr_p->field_0x374);
} else {
dKy_calc_color_set(&plight_col[i], &prev_pal_start_p->plight_col[i],
&next_pal_start_p->plight_col[i], &prev_pal_end_p->plight_col[i],
&next_pal_end_p->plight_col[i], color_ratio, tevstr_p->pat_ratio,
actor_addcol_amb,
g_env_light.field_0x1210 * (g_env_light.now_actcol_ratio *
g_env_light.now_actcol_ratio));
if (daPy_py_c::checkNowWolfPowerUp()) {
plight_col[i].r = 0;
plight_col[i].g = 0;
plight_col[i].b = 0;
}
kankyo_color_ratio_calc(&light_info->mColor, plight_col[i],
field_0x1210 * tevstr_p->field_0x374);
}
}
dKy_calc_color_set(fog_col_p, &prev_pal_start_p->fog_col, &next_pal_start_p->fog_col,
&prev_pal_end_p->fog_col, &next_pal_end_p->fog_col, color_ratio,
tevstr_p->pat_ratio, addcol_fog, g_env_light.now_fogcol_ratio);
if ((tevstr_p->Type != 10 && tevstr_p->Type != 9) || g_env_light.field_0x1210 == 1.0f) {
*fog_near_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_start_z, prev_pal_end_p->fog_start_z, color_ratio,
next_pal_start_p->fog_start_z, next_pal_end_p->fog_start_z, tevstr_p->pat_ratio,
g_env_light.field_0x11ec, g_env_light.field_0x11f4);
*fog_far_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_end_z, prev_pal_end_p->fog_end_z, color_ratio,
next_pal_start_p->fog_end_z, next_pal_end_p->fog_end_z, tevstr_p->pat_ratio,
g_env_light.field_0x11f0, g_env_light.field_0x11f4);
} else {
*fog_near_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_start_z, prev_pal_end_p->fog_start_z, color_ratio,
next_pal_start_p->fog_start_z, next_pal_end_p->fog_start_z, tevstr_p->pat_ratio,
g_env_light.field_0x11ec, 0.0f);
*fog_far_p = float_kankyo_color_ratio_set(
prev_pal_start_p->fog_end_z, prev_pal_end_p->fog_end_z, color_ratio,
next_pal_start_p->fog_end_z, next_pal_end_p->fog_end_z, tevstr_p->pat_ratio,
g_env_light.field_0x11f0, 0.0f);
}
if (daPy_py_c::checkNowWolfPowerUp()) {
int sp58 = 0;
fog_col_p->r = 0;
fog_col_p->g = 0;
fog_col_p->b = 0;
dKy_WolfPowerup_FogNearFar(fog_near_p, fog_far_p);
}
}
}
/* 801A1D64-801A1F58 19C6A4 01F4+00 1/1 0/0 0/0 .text
* settingTevStruct_colget_actor__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10PfPf
*/
void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz* unused, dKy_tevstr_c* tevstr_p,
GXColorS10* out_color_p,
GXColorS10* fog_col_p, f32* fog_near_p,
f32* fog_far_p) {
#if DEBUG
if (tevstr_p->room_no >= 0x80) {
dDbVw_Report(20, 80, "ObjActor RoomNo ga futei.jyoutyuu?[%d]", tevstr_p->room_no);
dDbVw_Report(20, 100, "Tevstr wo jimae de kitte init ha arimasuka?[%d]", tevstr_p->room_no);
}
#endif
if (tevstr_p->YukaCol != 0xFF) {
f32 target = tevstr_p->YukaCol / 100.0f;
if (g_env_light.mActorLightEffect == 100) {
cLib_addCalc(&tevstr_p->field_0x374, target, 0.25f, 0.05f, 0.000001f);
}
} else if (tevstr_p->room_no >= 0) {
tevstr_p->UseCol = tevstr_p->room_no;
if (g_env_light.mActorLightEffect == 100) {
cLib_addCalc(&tevstr_p->field_0x374, 1.0f, 0.25f, 0.05f, 0.000001f);
}
} else {
#if DEBUG
dDbVw_Report(10, 40, "Non tevstr->room_no x[%d]y[%d]z[%d]", (int)unused->x, (int)unused->y, (int)unused->z);
#endif
tevstr_p->UseCol = 0;
}
if ((tevstr_p->Type >= 1 && tevstr_p->Type <= 7) ||
(tevstr_p->Type == 9 && dKy_darkworld_check()))
{
if ((tevstr_p->Type != 2 && tevstr_p->Type != 3) || dKy_darkworld_check()) {
tevstr_p->field_0x374 = 0.0f;
}
}
if (tevstr_p->PrevCol != tevstr_p->UseCol &&
(tevstr_p->pat_ratio >= 1.0f || tevstr_p->pat_ratio <= 0.0f))
{
tevstr_p->pat_ratio = 0.0f;
}
if (tevstr_p->Type != 8) {
setLight_actor(tevstr_p, fog_col_p, fog_near_p, fog_far_p);
*out_color_p = tevstr_p->AmbCol;
} else {
GXColorS10 BG_col[4];
setLight_bg(tevstr_p, BG_col, fog_col_p, fog_near_p, fog_far_p);
*out_color_p = BG_col[0];
}
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) {
if (tevstr_p->Type != 8) {
*out_color_p = actor_amb_col;
} else {
*out_color_p = g_env_light.bg_amb_col[0];
}
}
}
#endif
}
void dScnKy_env_light_c::settingTevStruct_colget_player(dKy_tevstr_c* tevstr_p) {
if (tevstr_p->YukaCol != 0xFF) {
f32 target = tevstr_p->YukaCol / 100.0f;
if (g_env_light.mActorLightEffect == 100) {
cLib_addCalc(&tevstr_p->field_0x374, target, 0.25f, 0.05f, 0.000001f);
}
} else if (tevstr_p->room_no >= 0) {
tevstr_p->UseCol = tevstr_p->room_no;
if (g_env_light.mActorLightEffect == 100) {
cLib_addCalc(&tevstr_p->field_0x374, 1.0f, 0.25f, 0.05f, 0.000001f);
}
}
#if DEBUG
if (g_kankyoHIO.light.m_displayTVColorSettings == TRUE) {
dDbVw_Report(228, 80, "RoomColSel");
dDbVw_Report(228, 95, "YukaCol[%d]", tevstr_p->YukaCol);
dDbVw_Report(228, 110, "HeyaCol[%d]", tevstr_p->room_no);
dDbVw_Report(228, 125, "UseCol [%d]", tevstr_p->UseCol);
dDbVw_Report(228, 140, "wether_pat0 [%d]", g_env_light.wether_pat0);
dDbVw_Report(228, 155, "wether_pat1 [%d]", g_env_light.wether_pat1);
dDbVw_Report(228, 170, "pat_ratio [%f]", g_env_light.pat_ratio);
}
#endif
if (g_env_light.UseCol != tevstr_p->UseCol) {
if (tevstr_p->UseCol == g_env_light.PrevCol) {
g_env_light.PrevCol = g_env_light.UseCol;
g_env_light.UseCol = tevstr_p->UseCol;
g_env_light.pat_ratio = 1.0f - g_env_light.pat_ratio;
tevstr_p->pat_ratio = 1.0f - g_env_light.pat_ratio;
} else if (g_env_light.pat_ratio >= 1.0f || g_env_light.pat_ratio <= 0.0f) {
g_env_light.UseCol = tevstr_p->UseCol;
g_env_light.pat_ratio = 0.0f;
tevstr_p->pat_ratio = 0.0f;
}
}
}
static void cLib_addCalcU8(u8* i_value, u8 i_target, s16 i_scale, s16 i_maxStep) {
s16 step, value;
value = *i_value;
step = i_target - value;
if (abs(step) >= i_scale) {
step /= i_scale;
}
if (step > i_maxStep) {
value += i_maxStep;
} else if (step < -i_maxStep) {
value -= i_maxStep;
} else {
value += step;
}
*i_value = value;
}
/* 801A2128-801A37C4 19CA68 169C+00 2/1 0/0 0/0 .text
* settingTevStruct_plightcol_plus__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_c11_GXColorS1011_GXColorS10Uc
*/
void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* pos_p, dKy_tevstr_c* tevstr_p,
GXColorS10 param_2, GXColorS10 param_3,
u8 init_timer) {
(void)param_3;
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
cXyz light_pos;
Vec spDC;
MtxP view_mtx = j3dSys.getViewMtx();
f32 light_dist;
f32 light_power;
f32 light_yuragi;
BOOL sp44;
int sp40 = 0;
int sp3C = 0;
int light_inf_id;
u8 sp9 = 0;
f32 sp34 = 1.0f;
daPy_py_c* player = daPy_getPlayerActorClass();
if (pos_p != NULL) {
J3DLightInfo* light_info = tevstr_p->mLightObj.getLightInfo();
light_info->mColor.a = 0xFF;
light_inf_id = dKy_light_influence_id(*pos_p, 0);
sp44 = 0;
if (tevstr_p->Type == 7 || tevstr_p->Type == 1 ||
((tevstr_p->Type == 2 || tevstr_p->Type == 6 || tevstr_p->Type == 3) &&
dKy_darkworld_check()) ||
tevstr_p->Type == 4 || tevstr_p->Type == 5)
{
light_inf_id = -2;
} else if (tevstr_p->Type == 9 && dKy_darkworld_check()) {
light_inf_id = -2;
}
if (light_inf_id >= 0) {
light_dist = dKy_light_influence_distance(*pos_p, light_inf_id);
light_power = dKy_light_influence_power(light_inf_id);
if (light_power < 0.001f) {
light_power = 0.001f;
}
if (light_dist < 1000.0f + light_power) {
sp44 = 1;
}
}
if (sp44 == 0) {
light_pos = kankyo->base_light.mPosition;
light_dist = kankyo->base_light.mPosition.abs(*pos_p);
light_power = kankyo->base_light.mPow;
light_yuragi = kankyo->base_light.mFluctuation;
field_0x10f8.r = 0;
field_0x10f8.g = 0;
field_0x10f8.b = 0;
#if DEBUG
if (g_kankyoHIO.navy.adjust_light_mode != 0)
#endif
{
if ((light_inf_id <= -2 || (light_inf_id == -1 && dKy_Outdoor_check() == TRUE) ||
strcmp(dComIfGp_getStartStageName(), "D_MN09A") == 0))
{
cXyz camfwd;
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
J3DLightInfo* light0_info = tevstr_p->mLights[0].getLightInfo();
sp9 = 1;
dKyr_get_vectle_calc(&camera->lookat.center, &camera->lookat.eye, &camfwd);
light_pos = *pos_p + (camfwd * 500.0f);
light_pos.y += 40.0f;
#if DEBUG
light_pos.y += g_kankyoHIO.navy.adjust_height;
#endif
if (tevstr_p->Type >= 1 && tevstr_p->Type <= 9) {
dKyr_get_vectle_calc(&camera->lookat.center, &camera->lookat.eye, &camfwd);
light_pos = camera->lookat.eye + (camfwd * 180.0f);
}
field_0x10f8.r = light0_info->mColor.r;
field_0x10f8.g = light0_info->mColor.g;
field_0x10f8.b = light0_info->mColor.b;
light_yuragi = 0.0f;
light_power = 120.0f;
light_dist = 100.0f;
sp40 = 1;
sp3C = 1;
if (strcmp(dComIfGp_getStartStageName(), "D_MN09A") == 0) {
if (dComIfG_play_c::getLayerNo(0) == 0) {
if (tevstr_p->Type == 0) {
field_0x10f8.r = 0x1E;
field_0x10f8.g = 0x37;
field_0x10f8.b = 0x6E;
light_pos.y += -800.0f;
light_power = 250.0f;
#if DEBUG
field_0x10f8.r = g_kankyoHIO.navy.possessed_zelda_light_col.r;
field_0x10f8.g = g_kankyoHIO.navy.possessed_zelda_light_col.g;
field_0x10f8.b = g_kankyoHIO.navy.possessed_zelda_light_col.b;
light_pos.y += g_kankyoHIO.navy.possessed_zelda_light_height;
light_power = g_kankyoHIO.navy.possessed_zelda_light_power;
#endif
}
} else if (dComIfG_play_c::getLayerNo(0) == 1 && tevstr_p->Type == 0) {
field_0x10f8.r = 60;
field_0x10f8.g = 95;
field_0x10f8.b = 100;
light_pos.y += -800.0f;
light_power = 150.0f;
#if DEBUG
field_0x10f8.r = g_kankyoHIO.navy.beast_ganon_light_col.r;
field_0x10f8.g = g_kankyoHIO.navy.beast_ganon_light_col.g;
field_0x10f8.b = g_kankyoHIO.navy.beast_ganon_light_col.b;
light_pos.y += g_kankyoHIO.navy.beast_ganon_light_height;
light_power = g_kankyoHIO.navy.beast_ganon_light_power;
#endif
}
}
#if DEBUG
if (g_kankyoHIO.navy.adjust_light_mode == 2) {
field_0x10f8.r = g_kankyoHIO.navy.adjust_custom_R;
field_0x10f8.g = g_kankyoHIO.navy.adjust_custom_G;
field_0x10f8.b = g_kankyoHIO.navy.adjust_custom_B;
}
#endif
if (tevstr_p != NULL && tevstr_p->mLightInf.a != 0) {
field_0x10f8.r = tevstr_p->mLightInf.r * 4;
field_0x10f8.g = tevstr_p->mLightInf.g * 4;
field_0x10f8.b = tevstr_p->mLightInf.b * 4;
}
switch (tevstr_p->Type) {
case 1:
field_0x10f8.r = 500;
field_0x10f8.g = 500;
field_0x10f8.b = 500;
light_dist = 90.0f;
light_power = 5000.0f;
break;
case 4:
field_0x10f8.r = 500;
field_0x10f8.g = 500;
field_0x10f8.b = 500;
light_dist = 90.0f;
light_power = 5000.0f;
break;
case 5:
field_0x10f8.r = 170;
field_0x10f8.g = 170;
field_0x10f8.b = 170;
light_dist = 90.0f;
light_power = 5000.0f;
break;
case 2:
if (dKy_darkworld_check()) {
field_0x10f8.r = 103;
field_0x10f8.g = 129;
field_0x10f8.b = 199;
light_dist = 90.0f;
light_power = 5000.0f;
}
break;
case 3:
if (dKy_darkworld_check()) {
field_0x10f8.r = 53;
field_0x10f8.g = 53;
field_0x10f8.b = 80;
light_dist = 90.0f;
light_power = 5000.0f;
}
break;
case 9:
if (dKy_darkworld_check()) {
field_0x10f8.r = 110;
field_0x10f8.g = 110;
field_0x10f8.b = 140;
light_dist = 90.0f;
light_power = 5000.0f;
}
break;
case 7: {
sp34 = tevstr_p->TevColor.a / 255.0f;
field_0x10f8.r = 180;
field_0x10f8.g = 180;
field_0x10f8.b = 180;
light_dist = 90.0f;
light_pos.y += -120.0f;
f32 sp24 = cM_ssin(g_Counter.mCounter0 * 325);
f32 sp20 = cM_scos(g_Counter.mCounter0 * 285);
cLib_addCalcU8(&light_info->mColor.a, fabsf(sp24 * 255.0f), 2, 255);
light_info->mColor.a *= sp34;
light_pos.y += sp20 * 500.0f;
light_pos.y -= 80.0f;
light_power = 300.0f;
#if DEBUG
light_pos.y += g_kankyoHIO.navy.adjust_height;
#endif
break;
}
case 6:
if (dKy_darkworld_check()) {
field_0x10f8.r = 255;
field_0x10f8.g = 255;
field_0x10f8.b = 255;
light_dist = 90.0f;
light_power = 5000.0f;
}
break;
}
#if DEBUG
if (tevstr_p->Type >= 1 && tevstr_p->Type <= 9 && g_kankyoHIO.navy.adjust_light_mode == 2) {
field_0x10f8.r = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_R;
field_0x10f8.g = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_G;
field_0x10f8.b = (s16)g_kankyoHIO.navy.adjust_light_dif0_col_B;
}
#endif
}
}
} else {
light_pos = dKy_light_influence_pos(light_inf_id);
field_0x10f8 = dKy_light_influence_col(light_inf_id);
light_yuragi = dKy_light_influence_yuragi(light_inf_id);
}
f32 var_f31;
if (light_power <= 0.0f && sp3C == 0) {
var_f31 = 1.0f;
} else {
var_f31 = light_dist / light_power;
}
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
var_f31 = (1.0f - var_f31);
var_f31 *= g_env_light.now_actcol_ratio;
if ((tevstr_p->Type != 10 && tevstr_p->Type != 9) || tevstr_p->Material_id != 0) {
field_0x10f0.r = field_0x10f8.r * (var_f31 * kankyo->field_0x1210);
field_0x10f0.g = field_0x10f8.g * (var_f31 * kankyo->field_0x1210);
field_0x10f0.b = field_0x10f8.b * (var_f31 * kankyo->field_0x1210);
} else {
field_0x10f0.r = field_0x10f8.r * var_f31;
field_0x10f0.g = field_0x10f8.g * var_f31;
field_0x10f0.b = field_0x10f8.b * var_f31;
}
if (field_0x10f0.r > 0xFF) {
field_0x10f0.r = 0xFF;
}
if (field_0x10f0.g > 0xFF) {
field_0x10f0.g = 0xFF;
}
if (field_0x10f0.b > 0xFF) {
field_0x10f0.b = 0xFF;
}
if (init_timer != 0 || var_f31 <= 0.0f || sp9 == 0) {
light_info->mColor.r = field_0x10f0.r;
light_info->mColor.g = field_0x10f0.g;
light_info->mColor.b = field_0x10f0.b;
} else {
cLib_addCalcU8(&light_info->mColor.r, field_0x10f0.r, 10, 0x80);
cLib_addCalcU8(&light_info->mColor.g, field_0x10f0.g, 10, 0x80);
cLib_addCalcU8(&light_info->mColor.b, field_0x10f0.b, 10, 0x80);
}
field_0x10f0.r = param_2.r + (int)(light_info->mColor.r * (0.1f * var_f31));
field_0x10f0.g = param_2.g + (int)(light_info->mColor.g * (0.1f * var_f31));
field_0x10f0.b = param_2.b + (int)(light_info->mColor.b * (0.1f * var_f31));
if (field_0x10f0.r > 0xFF) {
field_0x10f0.r = 0xFF;
}
if (field_0x10f0.g > 0xFF) {
field_0x10f0.g = 0xFF;
}
if (field_0x10f0.b > 0xFF) {
field_0x10f0.b = 0xFF;
}
if (init_timer != 0 || sp40 != 0 || tevstr_p->field_0x384 != 0) {
tevstr_p->field_0x32c = light_pos;
} else {
f32 sp1C;
f32 sp18 = pos_p->abs(tevstr_p->field_0x32c);
f32 sp14 = sp18 / 10000.0f;
if (sp14 > 1.0f) {
sp14 = 1.0f;
}
sp14 *= sp14;
sp18 = pos_p->abs(light_pos);
f32 var_f28 = sp18 / 5000.0f;
if (var_f28 > 1.0f) {
var_f28 = 1.0f;
}
var_f28 = 1.0f - var_f28;
var_f28 *= var_f28 * var_f28;
sp1C = 10.0f + (10000.0f * sp14) + (100.0f * var_f28);
cLib_addCalc(&tevstr_p->field_0x32c.x, light_pos.x, 0.5f, sp1C, 0.001f);
cLib_addCalc(&tevstr_p->field_0x32c.y, light_pos.y, 0.5f, sp1C, 0.001f);
cLib_addCalc(&tevstr_p->field_0x32c.z, light_pos.z, 0.5f, sp1C, 0.001f);
}
cXyz spC4;
cXyz spB8;
spB8 = tevstr_p->field_0x32c;
cMtx_multVec(view_mtx, &spB8, &spDC);
if (dKy_shadow_mode_check(4) == 0) {
if ((tevstr_p->Type == 9 || tevstr_p->Type == 10) &&
(player->getSinkShapeOffset() < -20.0f || player->checkSinkDead() || dKy_camera_water_in_status_check() || !player->checkSwimUp()))
{
cLib_addCalc(&tevstr_p->mLightPosWorld.x, pos_p->x, 0.5f, 5000.0f, 0.1f);
cLib_addCalc(&tevstr_p->mLightPosWorld.y, 1000.0f + pos_p->y, 0.5f, 5000.0f, 0.1f);
cLib_addCalc(&tevstr_p->mLightPosWorld.z, pos_p->z, 0.5f, 5000.0f, 0.1f);
} else if ((kankyo->shadow_mode & 1) || (kankyo->shadow_mode & 2)) {
cLib_addCalc(&tevstr_p->mLightPosWorld.x, g_env_light.field_0x10a0.x, 0.5f, 5000.0f,
0.1f);
cLib_addCalc(&tevstr_p->mLightPosWorld.y, g_env_light.field_0x10a0.y, 0.5f, 5000.0f,
0.1f);
cLib_addCalc(&tevstr_p->mLightPosWorld.z, g_env_light.field_0x10a0.z, 0.5f, 5000.0f,
0.1f);
} else if (sp9 != 0) {
if (init_timer != 0 || tevstr_p->field_0x384 != 0) {
tevstr_p->mLightPosWorld = kankyo->base_light.mPosition;
} else {
cLib_addCalc(&tevstr_p->mLightPosWorld.x, kankyo->base_light.mPosition.x, 0.25f,
1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.y, kankyo->base_light.mPosition.y, 0.25f,
1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.z, kankyo->base_light.mPosition.z, 0.25f,
1000.0f, 0.0001f);
}
} else {
cXyz spAC;
u8 sp8 = 0;
spAC = tevstr_p->field_0x32c;
for (int i = 0; i < 6; i++) {
if (kankyo->field_0x0c18[i].field_0x26 == 1) {
if (kankyo->field_0x0c18[i].mPos.abs(*pos_p) < spAC.abs(*pos_p) &&
kankyo->field_0x0c18[i].mPos.abs(*pos_p) < 1000.0f)
{
spAC = kankyo->field_0x0c18[i].mPos;
sp8 = i + 1;
}
}
}
if (sp8 == 0) {
if (init_timer != 0 || tevstr_p->field_0x384 != 0) {
tevstr_p->mLightPosWorld = tevstr_p->field_0x32c;
} else {
cLib_addCalc(&tevstr_p->mLightPosWorld.x, tevstr_p->field_0x32c.x, 0.25f,
1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.y, tevstr_p->field_0x32c.y, 0.25f,
1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.z, tevstr_p->field_0x32c.z, 0.25f,
1000.0f, 0.0001f);
}
} else {
if (init_timer != 0 || tevstr_p->field_0x384 != 0) {
tevstr_p->mLightPosWorld = kankyo->field_0x0c18[sp8 - 1].mPos;
} else {
cLib_addCalc(&tevstr_p->mLightPosWorld.x,
kankyo->field_0x0c18[sp8 - 1].mPos.x, 0.25f, 1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.y,
kankyo->field_0x0c18[sp8 - 1].mPos.y, 0.25f, 1000.0f, 0.0001f);
cLib_addCalc(&tevstr_p->mLightPosWorld.z,
kankyo->field_0x0c18[sp8 - 1].mPos.z, 0.25f, 1000.0f, 0.0001f);
}
var_f31 = kankyo->field_0x0c18[sp8 - 1].mPos.abs(*pos_p) / 500.0f;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
var_f31 = 1.0f - var_f31;
}
}
if ((tevstr_p->Type == 9 || tevstr_p->Type == 10) &&
(player->checkSinkDead() || dComIfGp_checkPlayerStatus0(0, 0x02000308) ||
dComIfGp_checkPlayerStatus1(0, 0x02000000) || player->checkMagneBootsOn()))
{
cLib_addCalc(&tevstr_p->field_0x344, 0.0f, 0.75f, 0.21f, 0.0001f);
} else if (tevstr_p->Type == 9 && player->getSinkShapeOffset() < -35.0f) {
cLib_addCalc(&tevstr_p->field_0x344, 0.0f, 0.1f, 0.01f, 0.00001f);
} else if (tevstr_p->Type == 10 && player->getSinkShapeOffset() < -100.0f) {
cLib_addCalc(&tevstr_p->field_0x344, 0.0f, 0.1f, 0.01f, 0.00001f);
} else if (init_timer != 0) {
tevstr_p->field_0x344 = kankyo->field_0x1238 +
(var_f31 * (kankyo->field_0x123c - kankyo->field_0x1238));
} else {
cLib_addCalc(&tevstr_p->field_0x344,
kankyo->field_0x1238 +
(var_f31 * (kankyo->field_0x123c - kankyo->field_0x1238)),
0.75f, 0.04f, 0.000001f);
}
if (tevstr_p->field_0x344 > 1.0f) {
tevstr_p->field_0x344 = 1.0f;
}
}
light_info->mLightPosition = spDC;
light_info->mLightDirection = g_env_light.field_0x1064;
light_info->mCosAtten.x = 1.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 1.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
}
}
void dScnKy_env_light_c::settingTevStruct(int tevstrType, cXyz* pos_p, dKy_tevstr_c* tevstr_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
fopAc_ac_c* player = dComIfGp_getPlayer(0);
f32 fog_near;
f32 fog_far;
int sp58 = 0;
int sp54 = -1;
u8 init_timer = tevstr_p->mInitTimer;
u8 spA = 0;
GXColorS10 amb_col;
GXColorS10 fog_tev_col;
cXyz pos;
if (tevstr_p->room_no < 0) {
tevstr_p->room_no = dComIfGp_roomControl_getStayNo();
}
if (pos_p != NULL) {
pos = *pos_p;
} else {
pos.set(0.0f, 0.0f, 0.0f);
}
#if DEBUG
if (g_kankyoHIO.no_setting_tevstr) {
return;
}
#endif
if (tevstr_p != NULL && g_env_light.mActorLightEffect != 100) {
tevstr_p->field_0x374 = g_env_light.mActorLightEffect / 100.0f;
}
tevstr_p->Type = tevstrType;
if (tevstr_p->Material_use_fg != 123 && tevstr_p->Material_use_fg != 124) {
dKy_tevstr_init(tevstr_p, dComIfGp_roomControl_getStayNo(), 0xFF);
OS_REPORT_ERROR("\n\ntevstr init Non. Material_use_fg[%d] setroom=[%d]\n",
tevstr_p->Material_use_fg, (s8)dComIfGp_roomControl_getStayNo());
}
tevstr_p->Material_use_fg = 124;
actor_amb_col.a = 255;
if (tevstrType == 14) {
MtxPtr sp50 = j3dSys.getViewMtx();
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
cXyz calc_pos;
tevstr_p->mLightMode = 0;
// @bug room_no is a signed char, so this will always evaluate to false
if (tevstr_p->room_no >= 128) {
tevstr_p->UseCol = 0;
} else {
tevstr_p->UseCol = tevstr_p->room_no;
}
if (!dKy_darkworld_check()) {
field_0x10f0.r = 24;
field_0x10f0.g = 24;
field_0x10f0.b = 24;
field_0x10f0.a = 255;
} else {
field_0x10f0.r = 55;
field_0x10f0.g = 55;
field_0x10f0.b = 77;
}
#if DEBUG
if (g_kankyoHIO.navy.adjust_light_mode == 2) {
field_0x10f0.r = g_kankyoHIO.navy.adjust_light_ambcol.r;
field_0x10f0.g = g_kankyoHIO.navy.adjust_light_ambcol.g;
field_0x10f0.b = g_kankyoHIO.navy.adjust_light_ambcol.b;
field_0x10f0.a = 255;
}
#endif
fog_tev_col.r = 255;
fog_tev_col.g = 255;
fog_tev_col.b = 255;
fog_near = 30000.0f;
fog_far = 30000.0f;
dKyr_get_vectle_calc(&pos, &camera_p->lookat.eye, &calc_pos);
for (int i = 0; i < 6; i++) {
J3DLightInfo& light_info = *tevstr_p->mLights[i].getLightInfo();
if (i == 0) {
if (!dKy_darkworld_check()) {
light_info.mColor.r = 126;
light_info.mColor.g = 110;
light_info.mColor.b = 89;
} else {
light_info.mColor.r = 0;
light_info.mColor.g = 0;
light_info.mColor.b = 0;
}
#if DEBUG
if (g_kankyoHIO.navy.adjust_light_mode == 2) {
light_info.mColor.r = g_kankyoHIO.navy.adjust_light_dif0_col_R;
light_info.mColor.g = g_kankyoHIO.navy.adjust_light_dif0_col_G;
light_info.mColor.b = g_kankyoHIO.navy.adjust_light_dif0_col_B;
}
#endif
} else if (i == 1) {
if (!dKy_darkworld_check()) {
light_info.mColor.r = 24;
light_info.mColor.g = 41;
light_info.mColor.b = 50;
} else {
light_info.mColor.r = 0;
light_info.mColor.g = 0;
light_info.mColor.b = 0;
}
#if DEBUG
if (g_kankyoHIO.navy.adjust_light_mode == 2) {
light_info.mColor.r = g_kankyoHIO.navy.adjust_light_dif1_col.r;
light_info.mColor.g = g_kankyoHIO.navy.adjust_light_dif1_col.g;
light_info.mColor.b = g_kankyoHIO.navy.adjust_light_dif1_col.b;
}
#endif
} else {
light_info.mColor.r = 0;
light_info.mColor.g = 0;
light_info.mColor.b = 0;
}
dKy_GXInitLightSpot(&light_info, 90.0f, GX_SP_OFF);
f32 var_f31 = 100000.0f;
dKy_GXInitLightDistAttn(&light_info, var_f31, 0.99999f, GX_DA_STEEP);
light_info.mLightPosition.x = 0.0f;
light_info.mLightPosition.y = 0.0f;
light_info.mLightPosition.z = 0.0f;
if (i == 0) {
light_info.mLightPosition.x = 500.0f;
light_info.mLightPosition.y = 500.0f;
light_info.mLightPosition.z = 500.0f;
#if DEBUG
light_info.mLightPosition.x = g_kankyoHIO.navy.adjust_light_main_pos.x;
light_info.mLightPosition.y = g_kankyoHIO.navy.adjust_light_main_pos.y;
light_info.mLightPosition.z = g_kankyoHIO.navy.adjust_light_main_pos.z;
#endif
} else {
light_info.mLightPosition.x = -500.0f;
light_info.mLightPosition.y = -500.0f;
light_info.mLightPosition.z = -500.0f;
#if DEBUG
light_info.mLightPosition.x = -g_kankyoHIO.navy.adjust_light_main_pos.x;
light_info.mLightPosition.y = -g_kankyoHIO.navy.adjust_light_main_pos.y;
light_info.mLightPosition.z = -g_kankyoHIO.navy.adjust_light_main_pos.z;
#endif
}
dKy_lightdir_set(0.0f, 0.0f, &light_info.mLightDirection);
light_info.mLightDirection.x = -light_info.mLightDirection.x;
light_info.mLightDirection.y = -light_info.mLightDirection.y;
light_info.mLightDirection.z = -light_info.mLightDirection.z;
}
J3DLightInfo* light_info;
MtxP view_mtx = j3dSys.getViewMtx();
Vec sp8C;
Vec sp80;
sp80.x = camera_p->lookat.eye.x;
sp80.y = camera_p->lookat.eye.y;
sp80.z = camera_p->lookat.eye.z;
light_info = tevstr_p->mLightObj.getLightInfo();
cMtx_multVec(view_mtx, &sp80, &sp8C);
light_info->mLightPosition = sp8C;
tevstr_p->field_0x32c = sp80;
tevstr_p->mLightPosWorld = sp80;
light_info->mLightDirection = g_env_light.field_0x1064;
light_info->mColor.r = 0;
light_info->mColor.g = 0;
light_info->mColor.b = 0;
light_info->mCosAtten.x = 1.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 1.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
} else if (tevstrType == 12 || tevstrType == 13) {
MtxP sp3C = j3dSys.getViewMtx();
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
cXyz spD8;
tevstr_p->TevColor.r = 0;
tevstr_p->TevColor.g = 0;
tevstr_p->TevColor.b = 0;
tevstr_p->TevColor.a = 0;
tevstr_p->TevKColor.r = 0;
tevstr_p->TevKColor.g = 0;
tevstr_p->TevKColor.b = 0;
tevstr_p->TevKColor.a = 0;
tevstr_p->mLightMode = 0;
if (tevstr_p->room_no >= 128) {
tevstr_p->UseCol = 0;
} else {
tevstr_p->UseCol = tevstr_p->room_no;
}
if (tevstrType == 12) {
field_0x10f0.r = 25;
field_0x10f0.g = 20;
field_0x10f0.b = 25;
} else {
field_0x10f0.r = 40;
field_0x10f0.g = 35;
field_0x10f0.b = 30;
}
field_0x10f0.a = 0xFF;
#if DEBUG
if (g_kankyoHIO.navy.light_adjust_ON) {
field_0x10f0.r = g_kankyoHIO.navy.adjust_light_ambcol.r;
field_0x10f0.g = g_kankyoHIO.navy.adjust_light_ambcol.g;
field_0x10f0.b = g_kankyoHIO.navy.adjust_light_ambcol.b;
field_0x10f0.a = 255;
}
#endif
fog_tev_col.r = 255;
fog_tev_col.g = 255;
fog_tev_col.b = 255;
fog_near = 30000.0f;
fog_far = 30000.0f;
for (int i = 0; i < 6; i++) {
camera_class* sp30 = dComIfGp_getCamera(0);
J3DLightInfo& temp_r31 = *tevstr_p->mLights[i].getLightInfo();
if (i == 0) {
if (tevstrType == 12) {
temp_r31.mLightPosition.x = -30000.0f;
temp_r31.mLightPosition.y = 18800.0f;
temp_r31.mLightPosition.z = 29000.0f;
temp_r31.mColor.r = 120;
temp_r31.mColor.g = 110;
temp_r31.mColor.b = 100;
} else {
temp_r31.mLightPosition.x = -37000.0f;
temp_r31.mLightPosition.y = 18800.0f;
temp_r31.mLightPosition.z = 500.0f;
temp_r31.mColor.r = 85;
temp_r31.mColor.g = 90;
temp_r31.mColor.b = 100;
}
#if DEBUG
if (g_kankyoHIO.navy.light_adjust_ON) {
temp_r31.mColor.r = g_kankyoHIO.navy.adjust_light_dif0_col_R;
temp_r31.mColor.g = g_kankyoHIO.navy.adjust_light_dif0_col_G;
temp_r31.mColor.b = g_kankyoHIO.navy.adjust_light_dif0_col_B;
temp_r31.mLightPosition.x = g_kankyoHIO.navy.adjust_light_main_pos.x;
temp_r31.mLightPosition.y = g_kankyoHIO.navy.adjust_light_main_pos.y;
temp_r31.mLightPosition.z = g_kankyoHIO.navy.adjust_light_main_pos.z;
}
#endif
} else if (i == 1) {
if (tevstrType == 12) {
temp_r31.mLightPosition.x = 14400.0f;
temp_r31.mLightPosition.y = 7500.0f;
temp_r31.mLightPosition.z = 3900.0f;
temp_r31.mColor.r = 30;
temp_r31.mColor.g = 45;
temp_r31.mColor.b = 30;
} else {
temp_r31.mLightPosition.x = 18000.0f;
temp_r31.mLightPosition.y = -6500.0f;
temp_r31.mLightPosition.z = -10000.0f;
temp_r31.mColor.r = 100;
temp_r31.mColor.g = 65;
temp_r31.mColor.b = 40;
}
#if DEBUG
if (g_kankyoHIO.navy.light_adjust_ON) {
temp_r31.mColor.r = g_kankyoHIO.navy.adjust_light_dif1_col.r & 0xFF;
temp_r31.mColor.g = g_kankyoHIO.navy.adjust_light_dif1_col.g & 0xFF;
temp_r31.mColor.b = g_kankyoHIO.navy.adjust_light_dif1_col.b & 0xFF;
temp_r31.mLightPosition.x = g_kankyoHIO.navy.collect_light_reflect_pos.x;
temp_r31.mLightPosition.y = g_kankyoHIO.navy.collect_light_reflect_pos.y;
temp_r31.mLightPosition.z = g_kankyoHIO.navy.collect_light_reflect_pos.z;
}
#endif
} else {
temp_r31.mColor.r = 0;
temp_r31.mColor.g = 0;
temp_r31.mColor.b = 0;
}
dKy_GXInitLightSpot(&temp_r31, 90.0f, 0);
f32 var_f30 = 100000.0f;
dKy_GXInitLightDistAttn(&temp_r31, var_f30, 0.99999f, 3);
dKy_lightdir_set(0.0f, 0.0f, &temp_r31.mLightDirection);
temp_r31.mLightDirection.x = -temp_r31.mLightDirection.x;
temp_r31.mLightDirection.y = -temp_r31.mLightDirection.y;
temp_r31.mLightDirection.z = -temp_r31.mLightDirection.z;
}
J3DLightInfo* light_info;
MtxP view_mtx = j3dSys.getViewMtx();
Vec sp74;
Vec sp68;
sp68.x = camera_p->lookat.eye.x;
sp68.y = camera_p->lookat.eye.y;
sp68.z = camera_p->lookat.eye.z;
light_info = tevstr_p->mLightObj.getLightInfo();
cMtx_multVec(view_mtx, &sp68, &sp74);
light_info->mLightPosition = sp74;
if (tevstrType == 13) {
tevstr_p->field_0x32c = sp68;
tevstr_p->mLightPosWorld = sp68;
}
light_info->mLightDirection = g_env_light.field_0x1064;
light_info->mColor.r = 0;
light_info->mColor.g = 0;
light_info->mColor.b = 0;
light_info->mCosAtten.x = 1.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 1.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
} else if (!(tevstrType & 0xF0)) {
tevstr_p->mLightMode = 1;
amb_col = actor_amb_col;
fog_tev_col = fog_col;
fog_near = mFogNear;
fog_far = mFogFar;
if (tevstrType == 0 || tevstrType == 0 || tevstrType == 8 || tevstrType == 7 ||
tevstrType == 1 || tevstrType == 2 || tevstrType == 3 || tevstrType == 5 ||
tevstrType == 4 || tevstrType == 11)
{
settingTevStruct_colget_actor(pos_p, tevstr_p, &amb_col, &fog_tev_col, &fog_near,
&fog_far);
} else if (tevstrType == 10 || tevstrType == 9) {
if (g_env_light.player_room_no != (u8)dComIfGp_roomControl_getStayNo()) {
g_env_light.player_room_no = dComIfGp_roomControl_getStayNo();
mDoAud_setSceneName(
dComIfGp_getStartStageName(), dComIfGp_roomControl_getStayNo(),
dComIfG_play_c::getLayerNo_common(dComIfGp_getStartStageName(),
dComIfGp_roomControl_getStayNo(),
dComIfGp_getStartStageLayer()));
if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) {
mDoAud_load2ndDynamicWave();
}
}
init_timer = g_env_light.light_init_timer;
settingTevStruct_colget_player(tevstr_p);
settingTevStruct_colget_actor(pos_p, tevstr_p, &amb_col, &fog_tev_col, &fog_near,
&fog_far);
}
field_0x10f0.r = (s16)amb_col.r;
field_0x10f0.g = (s16)amb_col.g;
field_0x10f0.b = (s16)amb_col.b;
field_0x10f0.a = 255;
if (tevstrType != 11) {
settingTevStruct_plightcol_plus(pos_p, tevstr_p, amb_col, amb_col, init_timer);
}
if (tevstrType == 10 || tevstrType == 9) {
g_env_light.plight_near_pos = tevstr_p->mLightPosWorld;
}
} else {
tevstr_p->mLightMode = 0;
#if DEBUG
if (tevstr_p->room_no >= 128) {
dDbVw_Report(20, 90, "BgActor RoomNo ga futei.jyoutyuu?[%d]", tevstr_p->room_no);
dDbVw_Report(20, 100, "Tevstr wo jimae de kitte init ha arimasuka?[%d]", tevstr_p->room_no);
}
#endif
if (tevstr_p->Type != 20) {
tevstr_p->field_0x374 = g_env_light.bg_light_influence;
} else {
u8 sp9 = tevstr_p->mLightInf.r;
#if DEBUG
if (g_kankyoHIO.navy.door_light_influence_ratio != 0xFF) {
sp9 = g_kankyoHIO.navy.door_light_influence_ratio;
}
#endif
switch (sp9) {
case 0:
tevstr_p->field_0x374 = 0.2f;
break;
case 1:
tevstr_p->field_0x374 = 0.3f;
break;
case 2:
tevstr_p->field_0x374 = 0.4f;
break;
case 3:
tevstr_p->field_0x374 = 0.6f;
break;
case 4:
tevstr_p->field_0x374 = 0.8f;
break;
case 5:
tevstr_p->field_0x374 = 0.9f;
break;
case 6:
tevstr_p->field_0x374 = 1.0f;
break;
case 7:
tevstr_p->field_0x374 = 1.2f;
break;
#if DEBUG
case 0x99:
tevstr_p->field_0x374 = g_kankyoHIO.navy.unk_light_influence_ratio / 100.0f;
break;
#endif
default:
tevstr_p->field_0x374 = 1.0f;
break;
}
}
// @bug room_no is a signed char, so this will always evaluate to false
if (tevstr_p->room_no >= 128) {
tevstr_p->UseCol = 0;
} else {
tevstr_p->UseCol = tevstr_p->room_no;
}
GXColorS10 BG_col[4];
setLight_bg(tevstr_p, BG_col, &fog_tev_col, &fog_near, &fog_far);
sp54 = tevstrType & 3;
field_0x10f0 = BG_col[sp54];
J3DLightInfo* light_info;
MtxP view_mtx = j3dSys.getViewMtx();
Vec sp5C;
cXyz pos;
bool var_r25_3 = 0;
pos.x = pos.y = pos.z = 0.0f;
int light_inf_id = dKy_light_influence_id(pos, 0);
if (light_inf_id >= 0 && g_env_light.pointlight[light_inf_id]->mIndex < 0) {
var_r25_3 = 1;
}
if (var_r25_3 == 1) {
pos = g_env_light.pointlight[light_inf_id]->mPosition;
light_info = tevstr_p->mLightObj.getLightInfo();
cMtx_multVec(view_mtx, &pos, &sp5C);
light_info->mLightPosition = sp5C;
tevstr_p->field_0x32c = pos;
light_info->mLightDirection = g_env_light.field_0x1064;
light_info->mColor.a = g_env_light.pointlight[light_inf_id]->mColor.a;
light_info->mColor.r = g_env_light.pointlight[light_inf_id]->mColor.r;
light_info->mColor.g = g_env_light.pointlight[light_inf_id]->mColor.g;
light_info->mColor.b = g_env_light.pointlight[light_inf_id]->mColor.b;
dKy_GXInitLightSpot(light_info, 90.0f, GX_SP_OFF);
dKy_GXInitLightDistAttn(light_info,
g_env_light.pointlight[light_inf_id]->mPow * 0.001f, 0.99999f,
GX_DA_STEEP);
} else {
J3DLightInfo* light_info;
MtxP view_mtx = j3dSys.getViewMtx();
light_info = tevstr_p->mLightObj.getLightInfo();
Vec sp44;
cMtx_multVec(view_mtx, &lightStatusData[0].position, &sp44);
light_info->mLightPosition = sp44;
tevstr_p->field_0x32c = lightStatusData[0].position;
light_info->mLightDirection = g_env_light.field_0x1064;
light_info->mColor.r = 0;
light_info->mColor.g = 0;
light_info->mColor.b = 0;
light_info->mCosAtten.x = 0.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 0.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
}
tevstr_p->mLightPosWorld = kankyo->base_light.mPosition;
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) {
field_0x10f0 = bg_amb_col[sp54];
}
}
#endif
}
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
if (tevstr_p->UseCol == g_env_light.UseCol && tevstr_p->PrevCol == g_env_light.PrevCol) {
fog_tev_col = fog_col;
fog_near = mFogNear;
fog_far = mFogFar;
}
}
#endif
field_0x10f0.a = 255;
tevstr_p->AmbCol = field_0x10f0;
tevstr_p->FogCol = fog_tev_col;
tevstr_p->mFogStartZ = fog_near;
tevstr_p->mFogEndZ = fog_far;
}
void dScnKy_env_light_c::setLightTevColorType(J3DModelData*, dKy_tevstr_c*) {}
static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* tevstr_p,
int lightType) {
int i;
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
J3DLightInfo* sp20;
MtxP view_mtx = j3dSys.getViewMtx();
GXColor amb_col;
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
if (tevstr_p != NULL) {
amb_col.r = tevstr_p->AmbCol.r;
amb_col.g = tevstr_p->AmbCol.g;
amb_col.b = tevstr_p->AmbCol.b;
amb_col.a = tevstr_p->AmbCol.a;
if (((tevstr_p->Type >= 1 && tevstr_p->Type <= 7) || tevstr_p->Type == 5 ||
tevstr_p->Type == 15 || (tevstr_p->Type == 9 && dKy_darkworld_check())) &&
((tevstr_p->Type != 2 && tevstr_p->Type != 3) || dKy_darkworld_check()))
{
amb_col.r = 0;
amb_col.g = 0;
amb_col.b = 0;
amb_col.a = 0;
if (tevstr_p->Type == 7) {
amb_col.a = 4;
}
if (tevstr_p->Type == 3) {
amb_col.r = 12;
amb_col.g = 12;
amb_col.b = 12;
} else if (tevstr_p->Type == 6) {
f32 var_r30 = fabsf(cM_ssin(g_Counter.mCounter0 * 662));
amb_col.r = 255.0f - (185.0f * var_r30);
amb_col.g = 255.0f - (185.0f * var_r30);
amb_col.b = 255.0f - (185.0f * var_r30);
} else if (tevstr_p->Type == 2) {
amb_col.r = 0x12;
amb_col.g = 0x12;
amb_col.b = 0x12;
} else if (tevstr_p->Type == 4) {
amb_col.r = 0xFF;
amb_col.g = 0x33;
amb_col.b = 0xB;
} else if (tevstr_p->Type == 5) {
amb_col.r = 0xA;
amb_col.g = 0xA;
amb_col.b = 8;
} else if (tevstr_p->Type == 15) {
amb_col.r = 0x19;
amb_col.g = 0x1E;
amb_col.b = 0x23;
}
#if DEBUG
if ((tevstr_p->Type == 4 || tevstr_p->Type == 2 || tevstr_p->Type == 1 || tevstr_p->Type == 7 ||
tevstr_p->Type == 6 || tevstr_p->Type == 5 || tevstr_p->Type == 15 || (tevstr_p->Type == 9 && dKy_darkworld_check())))
{
if (g_kankyoHIO.navy.adjust_light_mode == 2) {
amb_col.r = g_kankyoHIO.navy.adjust_light_ambcol.r & 0xFF;
amb_col.g = g_kankyoHIO.navy.adjust_light_ambcol.g & 0xFF;
amb_col.b = g_kankyoHIO.navy.adjust_light_ambcol.b & 0xFF;
amb_col.a = 0;
}
}
#endif
}
material_p->setAmbColor(0, (J3DGXColor*)&amb_col);
if (lightType != 0) {
material_p->setTevColor(0, (J3DGXColorS10*)&tevstr_p->TevColor);
material_p->setTevKColor(0, (J3DGXColor*)&tevstr_p->TevKColor);
}
MtxP sp10 = j3dSys.getViewMtx();
if (sp10 != NULL) {
Vec sp28;
sp20 = tevstr_p->mLightObj.getLightInfo();
cMtx_multVec(sp10, &tevstr_p->field_0x32c, &sp28);
sp20->mLightPosition = sp28;
}
material_p->setLight(0, &tevstr_p->mLightObj);
if (view_mtx != NULL) {
if (lightType != 2) {
for (i = 0; i < 6; i++) {
material_p->setLight(i + 2, &tevstr_p->mLights[i]);
}
} else if (g_env_light.fishing_hole_season >= 1 && g_env_light.fishing_hole_season <= 4)
{
color_RGB_class maple_color;
maple_color.r = dKyd_maple_col_getp()[g_env_light.fishing_hole_season + 7].r;
maple_color.g = dKyd_maple_col_getp()[g_env_light.fishing_hole_season + 7].g;
maple_color.b = dKyd_maple_col_getp()[g_env_light.fishing_hole_season + 7].b;
#if DEBUG
if (g_kankyoHIO.navy.fish_pond_tree_adjust_ON) {
maple_color.r = g_kankyoHIO.navy.fish_pond_tree_ambcol.r;
maple_color.g = g_kankyoHIO.navy.fish_pond_tree_ambcol.g;
maple_color.b = g_kankyoHIO.navy.fish_pond_tree_ambcol.b;
}
#endif
amb_col.r = 0xA;
amb_col.g = 0xA;
amb_col.b = 0xA;
f32 var_f31;
var_f31 = (amb_col.r * g_env_light.now_bgcol_ratio) / 10.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
amb_col.r = g_env_light.now_bgcol_ratio * (maple_color.r * var_f31);
var_f31 = (amb_col.g * g_env_light.now_bgcol_ratio) / 10.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
amb_col.g = g_env_light.now_bgcol_ratio * (maple_color.g * var_f31);
var_f31 = (amb_col.b * g_env_light.now_bgcol_ratio) / 10.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
amb_col.b = g_env_light.now_bgcol_ratio * (maple_color.b * var_f31);
material_p->setAmbColor(0, (J3DGXColor*)&amb_col);
for (i = 0; i < 6; i++) {
if (i <= 1) {
J3DLightInfo* var_r28;
if (i == 0) {
kankyo->global_maple_col_change[i].light_obj = tevstr_p->mLights[i];
J3DLightInfo* sp8 =
kankyo->global_maple_col_change[1].light_obj.getLightInfo();
var_r28 = kankyo->global_maple_col_change[i].light_obj.getLightInfo();
sp8->mColor = var_r28->mColor;
} else {
var_r28 = kankyo->global_maple_col_change[i].light_obj.getLightInfo();
}
maple_color.r =
dKyd_maple_col_getp()[(g_env_light.fishing_hole_season - 1 + (i * 4))].r;
maple_color.g =
dKyd_maple_col_getp()[(g_env_light.fishing_hole_season - 1 + (i * 4))].g;
maple_color.b =
dKyd_maple_col_getp()[(g_env_light.fishing_hole_season - 1 + (i * 4))].b;
#if DEBUG
if (g_kankyoHIO.navy.fish_pond_tree_adjust_ON) {
if (i == 0) {
maple_color.r = g_kankyoHIO.navy.fish_pond_tree_dif0_col.r;
maple_color.g = g_kankyoHIO.navy.fish_pond_tree_dif0_col.g;
maple_color.b = g_kankyoHIO.navy.fish_pond_tree_dif0_col.b;
} else {
maple_color.r = g_kankyoHIO.navy.fish_pond_tree_dif1_col.r;
maple_color.g = g_kankyoHIO.navy.fish_pond_tree_dif1_col.g;
maple_color.b = g_kankyoHIO.navy.fish_pond_tree_dif1_col.b;
}
}
#endif
var_f31 = var_r28->mColor.r / 95.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
var_r28->mColor.r = maple_color.r;
var_r28->mColor.r *= var_f31;
var_f31 = var_r28->mColor.g / 95.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
var_r28->mColor.g = maple_color.g;
var_r28->mColor.g *= var_f31;
var_f31 = var_r28->mColor.b / 95.0f;
var_f31 *= var_f31;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
var_r28->mColor.b = maple_color.b;
var_r28->mColor.b *= var_f31;
material_p->setLight(i + 2, &kankyo->global_maple_col_change[i].light_obj);
} else {
material_p->setLight(i + 2, &tevstr_p->mLights[i]);
}
}
}
}
if (material_p->getFog() != NULL) {
J3DFogInfo* fog_info = material_p->getFog()->getFogInfo();
if (fog_info->mType != 0) {
#if DEBUG
switch (g_kankyoHIO.light.m_fogtype) {
case 1:
fog_info->mType = 0;
break;
case 2:
fog_info->mType = 2;
break;
case 3:
fog_info->mType = 4;
break;
case 4:
fog_info->mType = 5;
break;
case 5:
fog_info->mType = 6;
break;
case 6:
fog_info->mType = 7;
break;
}
#endif
fog_info->mStartZ = tevstr_p->mFogStartZ;
fog_info->mEndZ = tevstr_p->mFogEndZ;
if (dComIfGd_getView() != NULL) {
fog_info->mNearZ = dComIfGd_getView()->near;
fog_info->mFarZ = dComIfGd_getView()->far;
}
if (fog_info->mType == 7) {
fog_info->mType = 2;
fog_info->mColor.r = 0;
fog_info->mColor.g = 0;
fog_info->mColor.b = 0;
} else if (fog_info->mType == 6) {
fog_info->mColor.r = 0xFF;
fog_info->mColor.g = 0xFF;
fog_info->mColor.b = 0xFF;
} else {
fog_info->mColor.r = tevstr_p->FogCol.r;
fog_info->mColor.g = tevstr_p->FogCol.g;
fog_info->mColor.b = tevstr_p->FogCol.b;
}
fog_info->mAdjEnable = g_env_light.mFogAdjEnable;
if (fog_info->mAdjEnable == 1) {
fog_info->mCenter = g_env_light.mFogAdjCenter;
memcpy(&fog_info->mFogAdjTable, &g_env_light.mXFogTbl, sizeof(GXFogAdjTable));
}
}
}
}
}
void dKy_cloudshadow_scroll(J3DModelData* modelData_p, dKy_tevstr_c* tevstr_p, int param_2) {
JUTNameTab* mat_nametbl = modelData_p->getMaterialName();
for (int i = modelData_p->getMaterialNum() - 1; i >= 0; i--) {
J3DMaterial* mat_p = modelData_p->getMaterialNodePointer(i);
int lightType = param_2;
if (tevstr_p->Material_id != 0 && tevstr_p->Material_id == i) {
lightType = 2;
}
setLightTevColorType_MAJI_sub(mat_p, tevstr_p, lightType);
const char* mat_name = mat_nametbl->getName(i);
if ((mat_name[3] == 'M' && mat_name[4] == 'A' && mat_name[5] == '0' &&
(mat_name[6] == '0' || mat_name[6] == '1')) ||
(mat_name[5] == '1' && mat_name[6] == '6'))
{
if (mat_name[6] == '0') {
GXColor k_color;
k_color.r = g_env_light.mFogDensity & 0xFF;
k_color.g = 0;
k_color.b = 0;
k_color.a = 0;
mat_p->setTevKColor(1, (J3DGXColor*)&k_color);
}
if (mat_p->getTexGenBlock()->getTexMtx(1) != NULL) {
J3DTexMtxInfo* tex_mtx_inf =
&mat_p->getTexGenBlock()->getTexMtx(1)->getTexMtxInfo();
if (tex_mtx_inf != NULL && g_env_light.mpVrkumoPacket != NULL) {
tex_mtx_inf->mSRT.mTranslationX = g_env_light.mpVrkumoPacket->field_0x1150;
tex_mtx_inf->mSRT.mTranslationY = g_env_light.mpVrkumoPacket->field_0x1154;
}
}
}
}
}
void dScnKy_env_light_c::setLightTevColorType_MAJI(J3DModelData* modelData_p,
dKy_tevstr_c* tevstr_p) {
#if DEBUG
if (g_kankyoHIO.no_color_type) {
return;
}
#endif
if (tevstr_p->Material_use_fg != 124) {
#if DEBUG
if (!g_kankyoHIO.no_setting_tevstr) {
OS_REPORT_ERROR("\ncoltype tevstr init Non. Material_use_fg[%d]\n",
tevstr_p->Material_use_fg);
}
#endif
if (tevstr_p->Material_use_fg != 123) {
dKy_tevstr_init(tevstr_p, dComIfGp_roomControl_getStayNo(), 0xFF);
}
settingTevStruct(11, NULL, tevstr_p);
}
dKy_setLight_nowroom_actor(tevstr_p);
int lightType;
if (tevstr_p->Type > 10 && tevstr_p->Type != 12 && tevstr_p->Type != 13) {
lightType = 0;
} else {
lightType = 1;
}
if (tevstr_p->Type & 0x20) {
dKy_cloudshadow_scroll(modelData_p, tevstr_p, lightType);
} else {
for (int i = modelData_p->getMaterialNum() - 1; i >= 0; i--) {
J3DMaterial* material = modelData_p->getMaterialNodePointer(i);
setLightTevColorType_MAJI_sub(material, tevstr_p, lightType);
}
}
}
void dScnKy_env_light_c::CalcTevColor() {
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
if (player_p != NULL) {
mPlayerEfLightIdx = dKy_eflight_influence_id(player_p->current.pos, 0);
mPlayerPLightIdx = dKy_light_influence_id(player_p->current.pos, 0);
}
}
void dScnKy_env_light_c::Sndpos() {
if (sound_influence.timer != 0) {
sound_influence.timer--;
if (sound_influence.timer == 0) {
dKy_Sound_init();
}
}
}
void dScnKy_env_light_c::Eflight_flush_proc() {
f32 power;
f32 fluctuation;
dKy_flush_info* info;
if (eflight.mLightType == 0) {
static dKy_flush_info flush_col[] = {
{1, 0x00, 0x00, 0x00},
{4, 0x43, 0x73, 0x58},
{10, 0x25, 0x3E, 0x2D},
{20, 0x00, 0x00, 0x00},
};
info = flush_col;
fluctuation = 100.0f;
power = 120.0f;
} else if (eflight.mLightType == 1) {
static dKy_flush_info flush_col2[] = {
{1, 0x00, 0x00, 0x00},
{4, 0x6E, 0x5A, 0x00},
{8, 0x4B, 0x22, 0x00},
{15, 0x00, 0x00, 0x00},
};
info = flush_col2;
fluctuation = 0.0f;
power = 120.0f;
} else {
static dKy_flush_info flush_col3[] = {
{1, 0x00, 0x00, 0x00},
{4, 0x46, 0x4D, 0x43},
{15, 0x22, 0x1E, 0x00},
{20, 0x00, 0x00, 0x00},
};
info = flush_col3;
fluctuation = 100.0f;
power = 80.0f;
}
#if DEBUG
if (g_kankyoHIO.effLight.adjust_ON) {
info = &g_kankyoHIO.effLight.step1;
power = g_kankyoHIO.effLight.power;
fluctuation = g_kankyoHIO.effLight.fluctuation;
}
#endif
switch (eflight.mState) {
case 0:
break;
case 1:
eflight.mFrame = 0;
eflight.field_0x8.mColor.r = info[0].r;
eflight.field_0x8.mColor.g = info[0].g;
eflight.field_0x8.mColor.b = info[0].b;
eflight.field_0x8.mPow = power;
eflight.field_0x8.mFluctuation = fluctuation;
dKy_efplight_set(&eflight.field_0x8);
eflight.mState++;
break;
case 2:
for (int i = 0; i < 3; i++) {
if (eflight.mFrame >= info[i].start_frame && eflight.mFrame <= info[i + 1].start_frame)
{
f32 ratio = 1.0f - (f32)(info[i + 1].start_frame - eflight.mFrame) /
(f32)(info[i + 1].start_frame - info[i].start_frame);
eflight.field_0x8.mColor.r = u8_data_ratio_set(info[i].r, info[i + 1].r, ratio);
eflight.field_0x8.mColor.g = u8_data_ratio_set(info[i].g, info[i + 1].g, ratio);
eflight.field_0x8.mColor.b = u8_data_ratio_set(info[i].b, info[i + 1].b, ratio);
break;
}
}
if (eflight.mFrame > info[3].start_frame) {
eflight.mState++;
}
eflight.mFrame++;
break;
case 3:
dKy_efplight_cut(&eflight.field_0x8);
eflight.mState = 0;
break;
case 4:
dKy_efplight_cut(&eflight.field_0x8);
eflight.mState = 1;
break;
}
}
void dScnKy_env_light_c::SetBaseLight() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
f32 daytime;
if (dKy_SunMoon_Light_Check() == TRUE) {
daytime = g_env_light.getDaytime();
if (daytime > 67.5f && daytime < 292.5f) {
base_light.mPosition = kankyo->sun_light_pos;
} else if (camera != NULL) {
base_light.mPosition = camera->lookat.eye + kankyo->moon_pos;
} else {
base_light.mPosition = kankyo->moon_pos;
}
} else {
base_light.mPosition = lightStatusPt[2].position;
}
base_light.mColor.r = 0xFF;
base_light.mColor.g = 0xFF;
base_light.mColor.b = 0xFF;
base_light.mColor.a = 0xFF;
base_light.mPow = 0.0f;
base_light.mFluctuation = 0.0f;
}
void dScnKy_env_light_c::exeKankyo() {
int sp18 = 0;
for (int i = 0; i < 6; i++) {
field_0x0c18[i].field_0x26 = 0;
if (field_0x0d58[i].field_0x26 != 0) {
field_0x0d58[i].field_0x26 = 0;
dKy_BossLight_set(&field_0x0d58[i].mPos, &field_0x0d58[i].mColor,
field_0x0d58[i].mRefDistance, 0);
}
}
g_env_light.mColPatMode = g_env_light.mColPatModeGather;
if (dComIfGp_event_runCheck() == false && g_env_light.mColPatModeGather != 0) {
if (g_env_light.mColPatModeGather >= 3) {
g_env_light.mColPatModeGather = 0;
} else {
g_env_light.mColPatModeGather++;
}
}
if (g_env_light.mColPatMode != 0) {
if (g_env_light.mColpatPrevGather != 0xFF) {
g_env_light.wether_pat0 = g_env_light.mColpatPrevGather;
if (g_env_light.mColPatModeGather == 0) {
g_env_light.mColpatPrevGather = 0xFF;
}
}
if (g_env_light.mColpatCurrGather != 0xFF) {
g_env_light.wether_pat1 = g_env_light.mColpatCurrGather;
if (g_env_light.mColPatModeGather == 0) {
g_env_light.mColpatCurrGather = 0xFF;
}
}
if (g_env_light.mColPatBlendGather >= 0.0f) {
g_env_light.pat_ratio = g_env_light.mColPatBlendGather;
if (g_env_light.mColPatModeGather == 0) {
g_env_light.mColPatBlendGather = -1.0f;
}
}
} else if (g_env_light.wether_pat0 == g_env_light.wether_pat1) {
if (g_env_light.mColpatPrevGather != 0xFF) {
g_env_light.wether_pat0 = g_env_light.mColpatPrevGather;
g_env_light.mColpatPrevGather = 0xFF;
}
if (g_env_light.mColpatCurrGather != 0xFF) {
g_env_light.wether_pat1 = g_env_light.mColpatCurrGather;
g_env_light.mColpatCurrGather = 0xFF;
g_env_light.mColpatWeather = g_env_light.wether_pat1;
}
if (g_env_light.mColPatBlendGather >= 0.0f) {
g_env_light.pat_ratio = g_env_light.mColPatBlendGather;
g_env_light.mColPatBlendGather = -1.0f;
}
}
g_env_light.field_0x1210 = g_env_light.field_0x122c;
cLib_addCalc(&g_env_light.now_allcol_ratio, g_env_light.allcol_ratio, 0.5f, 0.25f, 0.01f);
cLib_addCalc(&g_env_light.now_actcol_ratio, g_env_light.actcol_ratio, 0.5f, 0.25f, 0.01f);
cLib_addCalc(&g_env_light.now_bgcol_ratio, g_env_light.bgcol_ratio * g_env_light.field_0x1210,
0.5f, 0.25f, 0.01f);
cLib_addCalc(&g_env_light.now_fogcol_ratio, g_env_light.fogcol_ratio * g_env_light.field_0x1210,
0.5f, 0.25f, 0.01f);
cLib_addCalc(&g_env_light.now_vrboxsoracol_ratio,
g_env_light.vrboxsoracol_ratio * g_env_light.field_0x1210, 0.5f, 0.25f, 0.01f);
cLib_addCalc(&g_env_light.now_vrboxkumocol_ratio,
g_env_light.vrboxkumocol_ratio * g_env_light.field_0x1210, 0.5f, 0.25f, 0.01f);
g_env_light.allcol_ratio = 1.0f;
g_env_light.actcol_ratio = 1.0f;
g_env_light.bgcol_ratio = 1.0f;
g_env_light.fogcol_ratio = 1.0f;
g_env_light.vrboxsoracol_ratio = 1.0f;
g_env_light.vrboxkumocol_ratio = 1.0f;
g_env_light.field_0x122c = 1.0f;
g_env_light.field_0x126c = g_env_light.field_0x1268;
g_env_light.field_0x1268 = 999999.9f;
for (int i = 50; i < 100; i++) {
g_env_light.pointlight[i] = NULL;
}
g_env_light.field_0x130b = 0;
setDaytime();
dKyw_wether_proc();
CalcTevColor();
Sndpos();
Eflight_flush_proc();
daPy_py_c* player_p = (daPy_py_c*)dComIfGp_getPlayer(0);
if (player_p != NULL) {
cXyz* flame_pos_p = player_p->getKandelaarFlamePos();
if (flame_pos_p != NULL) {
g_env_light.field_0x10a0 = *flame_pos_p;
dKy_shadow_mode_set(2);
} else if (dKy_shadow_mode_check(2)) {
dKy_shadow_mode_reset(2);
}
}
if (strcmp(dComIfGp_getStartStageName(), "R_SP127") == 0) {
if ((dCam_getBody()->Mode() == 4 || dCam_getBody()->Mode() == 7) && dComIfGp_event_runCheck())
{
cLib_addCalc(&g_env_light.mDemoAttentionPoint, 0.0f, 0.5f, 0.1f, 1E-05f);
} else {
cLib_addCalc(&g_env_light.mDemoAttentionPoint, 0.11f, 0.5f, 0.1f, 1E-05f);
}
}
#if DEBUG
if (!g_kankyoHIO.light.field_0x5) {
g_kankyoHIO.light.field_0x8 = g_env_light.mFogAdjCenter;
for (int i = 0; i < 10; i++) {
g_kankyoHIO.light.field_0xc[i] = g_env_light.mXFogTbl.r[i];
}
} else {
g_env_light.mFogAdjCenter = g_kankyoHIO.light.field_0x8;
for (int i = 0; i < 10; i++) {
g_env_light.mXFogTbl.r[i] = g_kankyoHIO.light.field_0xc[i];
}
}
dKydb_color_HIO_update();
dKydb_vrbox_HIO_update();
if (mDoCPd_c::getHoldR(PAD_2) && mDoCPd_c::getHoldL(PAD_2) && mDoCPd_c::getTrigL(PAD_2)) {
static u8 data_8074c97c;
if (!data_8074c97c) {
fapGmHIO_set2Ddraw(0);
fapGmHIO_offPrint();
g_HIO.mDisplayMeter = 0;
data_8074c97c = TRUE;
} else {
fapGmHIO_set2Ddraw(1);
fapGmHIO_onPrint();
g_HIO.mDisplayMeter = 1;
data_8074c97c = FALSE;
}
}
cXyz particle_pos;
fopAc_ac_c* player = dComIfGp_getPlayer(0);
if (player != NULL) {
particle_pos = player->current.pos;
particle_pos.y += 10.0f;
GXColor prim, env;
prim = g_kankyoHIO.particleLight.prim_col;
env = g_kankyoHIO.particleLight.env_col;
if (g_kankyoHIO.particleLight.field_0x14) {
g_kankyoHIO.particleLight.field_0x14 = 0;
switch (g_kankyoHIO.particleLight.type) {
case 0:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_A01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 1:
dComIfGp_particle_setColor(ID_ZI_J_DASHSMOKE_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 2:
dComIfGp_particle_setColor(ID_ZI_J_DOWNSMOKE_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 3:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_A02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 4:
dComIfGp_particle_setColor(dPa_RM(ID_ZI_S_SCREENKAGEROU01), &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
case 5:
dComIfGp_particle_setColor(ID_ZI_J_ZENKAISCREEN2_A, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 6:
dComIfGp_particle_setColor(ID_ZI_J_ZENKAISCREEN2_B, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 7:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_B01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 8:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_B02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 9:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_c01, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
case 10:
dComIfGp_particle_setColor(ID_ZI_J_TESTSMOKE_c02, &particle_pos, &player->tevStr, &prim, &env, g_kankyoHIO.particleLight.blend_ratio, g_kankyoHIO.particleLight.prim_col.a);
break;
}
}
}
#endif
}
#if DEBUG
dKankyo_lightHIO_c::dKankyo_lightHIO_c() {
m_HOSTIO_setting = FALSE;
field_0x52 = 0;
m_forcedPalette = FALSE;
m_displayColorPaletteCheckInfo = TRUE;
field_0x58 = 0.0f;
field_0x60 = 0;
field_0x61 = 0;
field_0x62 = 0;
field_0x63 = 0;
field_0x64 = 0;
field_0x65 = 0;
field_0x66 = 0;
field_0x67 = 0;
field_0x68 = 0;
field_0x69 = 0;
field_0x6a = 0;
field_0x6b = 0;
m_BG_fakelight_R = 0;
m_BG_fakelight_G = 0;
m_BG_fakelight_B = 0;
m_BG_fakelight_power = 0.0f;
field_0x80 = 0;
}
void dKankyo_lightHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("「カラーパレット&ライト位置情報の設定」", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->startComboBox("■ HOSTIO設定", &m_HOSTIO_setting, 0, NULL, 0xFFFF, 0xFFFF, 0x100,
0x1a);
mctx->genComboBoxItem("未使用", 0);
mctx->genComboBoxItem("HOSTIO設定!", 1);
mctx->endComboBox();
mctx->genLabel("HOSTIO設定にすると、ゲーム内の現在データが入ります!", 0x80000001, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("これをしないとカラー変更が利きません!", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
// ● Adjustment of kantera, wolf lights, and underwater lights.
mctx->genLabel("●カンテラ・狼ライト・水中ライトの調整", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.use_debug, 1, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genSlider("地形のみ高さ補正", &g_kankyoHIO.navy.terrain_height_crr, -5000.0f,
5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("影響力 倍率", &g_kankyoHIO.navy.influence_multiplier, 0.0f,
100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("cutoff 倍率", &g_kankyoHIO.navy.cutoff_multiplier, 0.01f,
10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● 部屋ライトタイプのSmLLL切り替え(調整用)", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->startComboBox("選択", &g_kankyoHIO.navy.room_light_type, 0, NULL, 0xFFFF,
0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("ゲームまかせ", 0);
mctx->genComboBoxItem(" ", 1);
mctx->genComboBoxItem(" ", 2);
mctx->genComboBoxItem(" ", 3);
mctx->genComboBoxItem("(LL)", 4);
mctx->endComboBox();
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● ポリゴンコードによる設定(ファイル出力無し)", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("ここで取り決めた数値を該当のポリゴンコードのカラーに設定してください",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("「アクタへの生ライトの影響率」", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genSlider("影響率(0%-200%)", &g_env_light.mActorLightEffect, 0, 200, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
//● TEV_TYPE_DOOR attribute set to the actor's argument (no file output)
mctx->genLabel("● TEV_TYPE_DOOR属性アクタの引数へ設定する(ファイル出力無し)", 0x80000001, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("「ドアなど引数へ設定する物への生ライトの影響率」", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->startComboBox("選択", &g_kankyoHIO.navy.door_light_influence_ratio, 0, NULL,
0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("ゲームまかせ", 0xff);
mctx->genComboBoxItem("0-20%", 0);
mctx->genComboBoxItem("1-30%", 1);
mctx->genComboBoxItem("2-40%", 2);
mctx->genComboBoxItem("3-60%", 3);
mctx->genComboBoxItem("4-80%", 4);
mctx->genComboBoxItem("5-90%", 5);
mctx->genComboBoxItem("6-100%", 6);
mctx->genComboBoxItem("7-120%", 7);
mctx->genComboBoxItem("↓で新設", 0x99);
mctx->endComboBox();
mctx->genLabel("新たな%を試したい場合はコチラ、プログラム対応必要です。ささきまで", 0x80000001,
0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("影響率(0%-200%)", &g_kankyoHIO.navy.unk_light_influence_ratio, 0,
200, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● カラーパレットごとに入っている設定値", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genSlider("地形ライト影響率 ", &g_env_light.bg_light_influence, 0.0f,
2.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("雲影の濃さ ", &g_env_light.mFogDensity, 0, 0xff, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("●草ライト影響率 「部屋情報」にてセット", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.grass_light_debug, 1, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("影響率 ", &g_kankyoHIO.navy.grass_light_influence_ratio, 0, 200,
0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● 草Amb 草を配置時に引数にセット", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genCheckBox("調整開始", &g_kankyoHIO.navy.grass_adjust_ON, 1, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("引数1 r", &g_kankyoHIO.navy.grass_ambcol.r, 0, 30, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("引数2 g", &g_kankyoHIO.navy.grass_ambcol.g, 0, 30, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("引数3 b", &g_kankyoHIO.navy.grass_ambcol.b, 0, 30, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->startComboBox("■飽和パターン", &g_kankyoHIO.bloom.m_saturationPattern, 0,
NULL, 0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("使用しない", 0);
mctx->genComboBoxItem("1 トワイライト(く)", 1);
mctx->genComboBoxItem("2 トワイライト_弱(く)", 2);
mctx->genComboBoxItem("3 センス", 3);
mctx->genComboBoxItem("4 フィールド基準(朝0)", 4);
mctx->genComboBoxItem("5 フィールド基準(朝1)", 5);
mctx->genComboBoxItem("6 フィールド基準(昼)", 6);
mctx->genComboBoxItem("7 フィールド基準(夕0)", 7);
mctx->genComboBoxItem("8 フィールド基準(夕1)", 8);
mctx->genComboBoxItem("9 フィールド基準(夜)", 9);
mctx->genComboBoxItem("10 キャラバン火事", 10);
mctx->genComboBoxItem("11 LV8闇の宮殿", 11);
mctx->genComboBoxItem("12 demo28_03", 12);
mctx->genComboBoxItem("13 虫が光る", 13);
mctx->genComboBoxItem("14 雲海(勇者の間)」", 14);
mctx->genComboBoxItem("15 ゾーラの里 滝TW", 15);
mctx->genComboBoxItem("16 ゾーラの里 玉座TW", 16);
mctx->genComboBoxItem("17 センスもどき", 17);
mctx->genComboBoxItem("18 現在過去切替", 18);
mctx->genComboBoxItem("19 宮城さん下水道", 19);
mctx->genComboBoxItem("20 回想シーン", 20);
mctx->genComboBoxItem("21 トワイライトゲート", 21);
mctx->genComboBoxItem("22 水中(基本)", 22);
mctx->genComboBoxItem("25 ダンジョン基準_弱", 25);
mctx->genComboBoxItem("26 ダンジョン基準_強", 26);
mctx->genComboBoxItem("27 溶岩(く)", 27);
mctx->genComboBoxItem("28 溶岩以外_Lv2(く)", 28);
mctx->genComboBoxItem("29 過去", 29);
mctx->genComboBoxItem("30 城壁", 30);
mctx->genComboBoxItem("40 デモ:回想シーン", 40);
mctx->genComboBoxItem("41 デモ:にせTW", 41);
mctx->genComboBoxItem("42 デモ:demo32_03用", 42);
mctx->genComboBoxItem("43 デモ:TW回想シーン", 43);
mctx->genComboBoxItem("44 デモ:demo31_20用", 44);
mctx->genComboBoxItem("45 デモ:溶岩W", 45);
mctx->endComboBox();
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● CSV情報のファイル書き出し", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(カラーパレット情報のファイル書き出し)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("パレットWRITE", 0x40000002, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(生ライト位置情報リストファイル書き出し)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("位置情報WRITE", 0x40000003, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● CSV情報のファイル読み込み(確認用)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("(カラーパレット情報のファイル読み込み)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("FILEREAD", 0x40000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(生ライト位置情報リストファイル読み込み)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("位置情報READ", 0x41000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● アンビエント", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(アクタ)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("■ ACTOR_Amb ", &g_env_light.actor_amb_col.r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.actor_amb_col.g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.actor_amb_col.b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x40000010, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000011, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000012, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000013, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000014, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x40000015, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(地形)", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("■ BG0_Amb ", &g_env_light.bg_amb_col[0].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.bg_amb_col[0].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[0].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x40000016, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000017, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000018, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000019, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x4000001a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x4000001b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("■ BG1_Amb ", &g_env_light.bg_amb_col[1].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[1].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[1].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x4000001c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x4000001d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x4000001e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x4000001f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000020, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x40000021, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("水面α ", &g_env_light.bg_amb_col[1].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("補佐α A2", &g_env_light.bg_amb_col[2].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("■ BG2_Amb ", &g_env_light.bg_amb_col[2].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[2].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[2].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x40000022, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000023, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000024, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000025, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000026, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x40000027, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("■ BG3_Amb ", &g_env_light.bg_amb_col[3].r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[3].g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("    ", &g_env_light.bg_amb_col[3].b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x40000028, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000029, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x4000002a, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x4000002b, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x4000002c, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x4000002d, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("ウソFog ", &g_env_light.bg_amb_col[3].a, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● フォグ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->startComboBox("fog type", &m_fogtype, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("STAN-BY", 2);
mctx->genComboBoxItem("GX_FOG_NONE", 0);
mctx->genComboBoxItem("GX_FOG_LIN", 2);
mctx->genComboBoxItem("GX_FOG_EXP", 4);
mctx->genComboBoxItem("GX_FOG_EXP2", 5);
mctx->genComboBoxItem("GX_FOG_REVEXP", 6);
mctx->genComboBoxItem("GX_FOG_REVEXP2", 7);
mctx->endComboBox();
mctx->genSlider("■ FOG ", &g_env_light.fog_col.r, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.fog_col.g, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.fog_col.b, 0, 0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 +100", 0x4000002e, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x4000002f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000030, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000031, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000032, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x40000033, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" near", &g_env_light.mFogNear, -2500000.0f, 2500000.0f, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" far", &g_env_light.mFogFar, -2500000.0f, 2500000.0f, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("● 生ライト", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genCheckBox("デバッグ球の表示",
&g_kankyoHIO.dungeonLight.displayDebugSphere, 1, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->startComboBox("■ 使用ライト", &g_kankyoHIO.dungeonLight.usedLights, 0, NULL,
0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("なし", 0);
mctx->genComboBoxItem("", 1);
mctx->genComboBoxItem(" ", 2);
mctx->genComboBoxItem(" ", 3);
mctx->genComboBoxItem(" ", 4);
mctx->genComboBoxItem(" ", 5);
mctx->genComboBoxItem(" ", 6);
mctx->endComboBox();
for (int i = 0; i < 6; i++) {
switch (i) {
case 0:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("(ライト0)―えせポイントライト", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("(ライト1)―エフェクトライト", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 2 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("※太陽が存在する場合、設定は上書きされます", 0x80000001, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("プレイヤー位置にライト2を移動", 0x40000004, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト2を移動", 0x400000a0, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト2位置へワープ!!)))", 0x4000000a, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
case 1:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 3 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("※月が存在する場合、設定が上書きされます", 0x80000001, 0, NULL,
0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("プレイヤー位置にライト3を移動!", 0x40000005, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト3を移動", 0x400000a1, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト3位置へワープ!!)))", 0x4000000b, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
case 2:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 4 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("プレイヤー位置にライト4を移動!", 0x40000006, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト4を移動", 0x400000a2, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト4位置へワープ!!)))", 0x4000000c, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
case 3:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 5 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("プレイヤー位置にライト5を移動!", 0x40000007, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト5を移動", 0x400000a3, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト5位置へワープ!!)))", 0x4000000d, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
case 4:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 6 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("プレイヤー位置にライト6を移動!", 0x40000008, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト6を移動", 0x400000a4, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト6位置へワープ!!)))", 0x4000000e, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
case 5:
mctx->genLabel("-----------------------------------------------------------------------------------------",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● ラ イ ト 7 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("↓↓↓ 誤押注意 ↓↓↓", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("プレイヤー位置にライト7を移動!", 0x40000009, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("カメラCTR 位置にライト7を移動", 0x400000a5, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genButton("(((ライト7位置へワープ!!)))", 0x4000000f, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
break;
}
mctx->genLabel("※色を変える場合はカラーパレットのファイル作成も忘れずに!", 0x80000001, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("", &g_env_light.dungeonlight[i].mColor.r, 0,
0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.dungeonlight[i].mColor.g, 0,
0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.dungeonlight[i].mColor.b, 0,
0xff, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
switch (i) {
case 0:
mctx->genButton("RGB同時加算 +100", 0x40000034, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000035, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000036, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000037, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000038, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
mctx->genButton("RGB同時加算 -100", 0x40000039, 0, NULL, 0xFFFF, 0xFFFF,
0x200, 0x18);
break;
case 1:
mctx->genButton("RGB同時加算 +100", 0x4000003a, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 10", 0x4000003b, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 1", 0x4000003c, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 1", 0x4000003d, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 10", 0x4000003e, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 -100", 0x4000003f, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
break;
case 2:
mctx->genButton("RGB同時加算 +100", 0x40000040, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000041, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000042, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000043, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000044, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 -100", 0x40000045, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
break;
case 3:
mctx->genButton("RGB同時加算 +100", 0x40000046, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000047, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000048, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000049, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 10", 0x4000004a, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 -100", 0x4000004b, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
break;
case 4:
mctx->genButton("RGB同時加算 +100", 0x4000004c, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 10", 0x4000004d, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 1", 0x4000004e, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 1", 0x4000004f, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000050, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 -100", 0x40000051, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
break;
case 5:
mctx->genButton("RGB同時加算 +100", 0x40000052, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 10", 0x40000053, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 + 1", 0x40000054, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 1", 0x40000055, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 - 10", 0x40000056, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
mctx->genButton("RGB同時加算 -100", 0x40000057, 0, NULL, 0xFFFF, 0xFFFF, 0x200,
0x18);
break;
}
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("位置X", &g_env_light.dungeonlight[i].mPosition.x,
-300000.0f, 300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.dungeonlight[i].mPosition.y,
-300000.0f, 300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.dungeonlight[i].mPosition.z,
-300000.0f, 300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("ref_distance",
&g_env_light.dungeonlight[i].mRefDistance, 0.01, 10000.0f,
0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->startComboBox("距離減衰 ○推奨",
&g_env_light.dungeonlight[i].mDistAttenuation, 0, NULL,
0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("※減衰なし [GX_DA_OFF]", 0);
mctx->genComboBoxItem("おだやか [GX_DA_GENTLE]", 1);
mctx->genComboBoxItem("中間 [GX_DA_MEDIUM]", 2);
mctx->genComboBoxItem("○険しい [GX_DA_STEEP]", 3);
mctx->endComboBox();
mctx->startComboBox("角度減衰 ○推奨",
&g_env_light.dungeonlight[i].mAngleAttenuation, 0, NULL,
0xFFFF, 0xFFFF, 0x100, 0x1a);
mctx->genComboBoxItem("○ポイント [GX_SP_OFF]", 0);
mctx->genComboBoxItem("※直角 [GX_SP_FLAT]", 1);
mctx->genComboBoxItem("○COS曲線 [GX_SP_COS]", 2);
mctx->genComboBoxItem("COS2曲線 [GX_SP_COS2]", 3);
mctx->genComboBoxItem("シャープ [GX_SP_SHARP]", 4);
mctx->genComboBoxItem("リング状 [GX_SP_RING1]", 5);
mctx->genComboBoxItem("リング状2[GX_SP_RING2]", 6);
mctx->endComboBox();
mctx->genLabel("角度減衰をポイント以外に設定したらスポットライトなので以下も設定を!",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("カットオフ角度",
&g_env_light.dungeonlight[i].mCutoffAngle, 0.001, 90.0f,
0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("X角度(紫軸)", &g_env_light.dungeonlight[i].mAngleX,
-360.0f, 360.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("Y角度(緑軸)", &g_env_light.dungeonlight[i].mAngleY,
-360.0f, 360.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
}
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("● ● ● えせライト地形反映特別版  ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("「地形反映えせライト」を配置した部屋で有効です。", 0x80000001, 0, NULL, 0xFFFF,
0xFFFF, 0x200, 0x18);
mctx->genLabel("調整した値をマップツールで「地形反映えせライト」のパラメータへ指定して下さい",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("位置X", &g_kankyoHIO.light.m_BG_fakelight_pos.x, -300000.0f,
300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_kankyoHIO.light.m_BG_fakelight_pos.y, -300000.0f,
300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" ", &g_kankyoHIO.light.m_BG_fakelight_pos.z, -300000.0f,
300000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("Color R", &g_kankyoHIO.light.m_BG_fakelight_R, 0, 0xff, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" G", &g_kankyoHIO.light.m_BG_fakelight_G, 0, 0xff, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider(" B", &g_kankyoHIO.light.m_BG_fakelight_B, 0, 0xff, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genSlider("Power ", &g_kankyoHIO.light.m_BG_fakelight_power, 0.0f, 1000.0f,
0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("=========================================================================================",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genCheckBox("カラー設定TV画面確認表示", &m_displayTVColorSettings, 1, 0,
NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genCheckBox("カラーパレットチェック画面表示", &m_displayColorPaletteCheckInfo,
1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genCheckBox("カラーパレットチェック画面表示詳細", &m_displayColorPaletteCheckInfo,
2, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->genLabel("=========================================================================================",
0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
mctx->startComboBox("強制パレット指定", &m_forcedPalette, 0, NULL, 0xFFFF, 0xFFFF, 0x100,
0x1a);
mctx->genComboBoxItem("しない", 0);
mctx->genComboBoxItem("パレット0使用", 1);
mctx->genComboBoxItem("パレット1使用", 2);
mctx->genComboBoxItem("パレット2使用", 3);
mctx->genComboBoxItem("パレット3使用", 4);
mctx->genComboBoxItem("パレット4使用", 5);
mctx->genComboBoxItem("パレット5使用", 6);
mctx->genComboBoxItem("パレット6使用", 7);
mctx->genComboBoxItem("パレット7使用", 8);
mctx->genComboBoxItem("パレット8使用", 9);
mctx->genComboBoxItem("パレット9使用", 10);
mctx->genComboBoxItem("パレット10使用", 11);
mctx->genComboBoxItem("パレット11使用", 12);
mctx->genComboBoxItem("パレット12使用", 13);
mctx->genComboBoxItem("パレット13使用", 14);
mctx->genComboBoxItem("パレット14使用", 15);
mctx->genComboBoxItem("パレット15使用", 16);
mctx->endComboBox();
mctx->genLabel("=========================================================================================", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
}
void dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF() {
JORMContext* mctx = attachJORMContext(8);
mctx->startUpdateNode(&g_kankyoHIO.light);
mctx->updateSlider(2, &g_env_light.actor_amb_col.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.actor_amb_col.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.actor_amb_col.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[0].r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[0].g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[0].b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[1].r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[1].g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[1].b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[2].r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[2].g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[2].b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[3].r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[3].g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.bg_amb_col[3].b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mColor.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.x, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.y, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mPosition.z, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.fog_col.r, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.fog_col.g, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.fog_col.b, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.mFogNear, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.mFogFar, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.bg_light_influence, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.mFogDensity, 0, 0, 0);
mctx->updateSlider(2, &g_env_light.field_0x12f9, 0, 0, 0);
mctx->updateComboBox(2, &g_kankyoHIO.bloom.m_saturationPattern, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[0].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[1].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[2].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[3].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[4].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[5].mAngleAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[0].mDistAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[1].mDistAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[2].mDistAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[3].mDistAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[4].mDistAttenuation, 0);
mctx->updateComboBox(2, &g_env_light.dungeonlight[5].mDistAttenuation, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mCutoffAngle, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mAngleX, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mAngleY, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[0].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[1].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[2].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[3].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[4].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_env_light.dungeonlight[5].mRefDistance, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_kankyoHIO.navy.terrain_height_crr, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_kankyoHIO.navy.influence_multiplier, 0.0f, 0.0f, 0);
mctx->updateSlider(2, &g_kankyoHIO.navy.cutoff_multiplier, 0.0f, 0.0f, 0);
releaseJORMContext(mctx);
}
void dKankyo_lightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {
char colorPaletteInBuf[1000];
char lightDirInBuf[5000];
char colorPaletteOutBuf[5000];
char lightDirOutBuf[5000];
char colorPaletteScratchBuf[100];
char lightDirScratchBuf[100];
JORReflexible::listenPropertyEvent(property);
JORFile file;
int i;
switch ((uintptr_t)property->id) {
case 0x40000001: {
if (file.open(1, "カラーパレット(*.csv)\0*.csv\0", "csv", "NULL", "_P.csv")) {
int cursor = 0;
memset(colorPaletteInBuf, 0x20, 1000);
file.readData(colorPaletteInBuf, 0);
cursor += 243;
cursor -= 1;
cursor += 5;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_kankyoHIO.bloom.m_saturationPattern = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.actor_amb_col.r = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.actor_amb_col.g = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.actor_amb_col.b = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
for (i = 0; i < 4; i++) {
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[i].r = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[i].g = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[i].b = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
if (i == 1) {
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[1].a = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[2].a = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
} else if (i == 3) {
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.bg_amb_col[3].a = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
}
}
for (i = 0; i < 6; i++) {
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.dungeonlight[i].mColor.r = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.dungeonlight[i].mColor.g = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.dungeonlight[i].mColor.b = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
}
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.fog_col.r = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.fog_col.g = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.fog_col.b = (u8)atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 0x10);
g_env_light.mFogNear = (f64)atof(colorPaletteScratchBuf);
cursor += 17;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 0x10);
g_env_light.mFogFar = (f64)atof(colorPaletteScratchBuf);
cursor += 17;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.mFogDensity = atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 3);
g_env_light.field_0x12f9 = atoi(colorPaletteScratchBuf);
cursor += 4;
memset(colorPaletteScratchBuf, 0, 100);
memcpy(colorPaletteScratchBuf, colorPaletteInBuf + cursor, 4);
g_env_light.bg_light_influence = (f64)atof(colorPaletteScratchBuf);
cursor += 4;
file.close();
g_kankyoHIO.light.field_0x52 = 0;
} else {
OS_REPORT("!!!!!!! read error\n");
}
break;
}
case 0x41000001: {
// "Light direction file"
if (file.open(1, "ライト方向ファイル(*.csv)\0*.csv\0", "csv", "NULL", "_L.csv")) {
int cursor = 0;
memset(lightDirInBuf, 0x20, 5000);
file.readData(lightDirInBuf, 0);
cursor += 136;
cursor -= 1;
g_kankyoHIO.dungeonLight.usedLights = 6;
int i;
for (i = 0; i < 7; i++) {
cursor += 7;
OS_REPORT("\n[%s]", lightDirInBuf + cursor);
if (memcmp(lightDirInBuf + cursor, ",,部屋毎のライト,", 0x11)) {
g_kankyoHIO.dungeonLight.usedLights = i;
break;
}
cursor += 18;
cursor -= 1;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mPosition.x = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mPosition.y = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mPosition.z = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mRefDistance = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mAngleX = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mAngleY = (f64)atof(lightDirScratchBuf);
cursor += 17;
memset(lightDirScratchBuf, 0, 100);
memcpy(lightDirScratchBuf, lightDirInBuf + cursor, 0x10);
g_env_light.dungeonlight[i].mCutoffAngle = (f64)atof(lightDirScratchBuf);
cursor += 17;
if (memcmp(lightDirInBuf + cursor, "ポイント,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mAngleAttenuation = 0;
} else if (memcmp(lightDirInBuf + cursor, "直角,", 5) == 0) {
cursor += 5;
g_env_light.dungeonlight[i].mAngleAttenuation = 1;
} else if (memcmp(lightDirInBuf + cursor, "COS曲線,", 8) == 0) {
cursor += 8;
g_env_light.dungeonlight[i].mAngleAttenuation = 2;
} else if (memcmp(lightDirInBuf + cursor, "COS2曲線,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mAngleAttenuation = 3;
} else if (memcmp(lightDirInBuf + cursor, "シャープ,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mAngleAttenuation = 4;
} else if (memcmp(lightDirInBuf + cursor, "リング状,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mAngleAttenuation = 5;
} else if (memcmp(lightDirInBuf + cursor, "リング状2,", 10) == 0) {
cursor += 10;
g_env_light.dungeonlight[i].mAngleAttenuation = 6;
}
if (memcmp(lightDirInBuf + cursor, "減衰なし,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mDistAttenuation = 0;
} else if (memcmp(lightDirInBuf + cursor, "おだやか,", 9) == 0) {
cursor += 9;
g_env_light.dungeonlight[i].mDistAttenuation = 1;
} else if (memcmp(lightDirInBuf + cursor, "中間,", 5) == 0) {
cursor += 5;
g_env_light.dungeonlight[i].mDistAttenuation = 2;
} else if (memcmp(lightDirInBuf + cursor, "険しい,", 7) == 0) {
cursor += 7;
g_env_light.dungeonlight[i].mDistAttenuation = 3;
}
cursor += 6;
cursor -= 1;
}
file.close();
g_kankyoHIO.light.field_0x52 = 0;
} else {
OS_REPORT("read2 error\n");
}
break;
}
case 0x40000002: {
// "Color palette"
if (file.open(6, "カラーパレット(*.csv)\0*.csv\0", "csv", "NULL", "_P.csv")) {
int cursor = 0;
memset(colorPaletteOutBuf, 0x20, 5000);
memcpy(colorPaletteOutBuf,
"no,l_no,LayerName,comment,VRBOXNO,SAF_NUM,A_AMCOL,"
"BG0_AMCOL,BG1_AMCOL,BG1_AM_A,BG1_AM_A2,BG2_AMCOL,BG3_AMCOL,BG3_AM_A,"
"LIGHT0_COL,LIGHT1_COL,LIGHT2_COL,LIGHT3_COL,LIGHT4_COL,LIGHT5_COL,"
"FOG_COL,FOGNEAR,FOGFAR,CLOUD_SHADOW,MONO_FILTER,LIGHT_INF\n",
243);
cursor += 243;
cursor -= 1;
memcpy(colorPaletteOutBuf + cursor, ",,,,,", 5);
cursor += 5;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_kankyoHIO.bloom.m_saturationPattern);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.actor_amb_col.r);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.actor_amb_col.g);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.actor_amb_col.b);
cursor += 4;
for (i = 0; i < 4; i++) {
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.bg_amb_col[i].r);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.bg_amb_col[i].g);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.bg_amb_col[i].b);
cursor += 4;
if (i == 1) {
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.bg_amb_col[1].a);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.bg_amb_col[2].a);
cursor += 4;
} else if (i == 3) {
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.bg_amb_col[3].a);
cursor += 4;
}
}
for (i = 0; i < 6; i++) {
sprintf(colorPaletteOutBuf + cursor, "%03d/",
g_env_light.dungeonlight[i].mColor.r);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d/",
g_env_light.dungeonlight[i].mColor.g);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,",
g_env_light.dungeonlight[i].mColor.b);
cursor += 4;
}
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.fog_col.r);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d/", g_env_light.fog_col.g);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.fog_col.b);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%16f,", g_env_light.mFogNear);
cursor += 17;
sprintf(colorPaletteOutBuf + cursor, "%16f,", g_env_light.mFogFar);
cursor += 17;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.mFogDensity);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%03d,", g_env_light.field_0x12f9);
cursor += 4;
sprintf(colorPaletteOutBuf + cursor, "%-1.2f", g_env_light.bg_light_influence);
cursor += 4;
file.writeData(colorPaletteOutBuf, cursor);
file.close();
OS_REPORT("write append success %d\n", 0x1330);
} else {
OS_REPORT("write append error\n");
}
break;
}
case 0x40000004:
g_kankyoHIO.dungeonLight.field_0x8 = 0x1;
break;
case 0x40000005:
g_kankyoHIO.dungeonLight.field_0x8 = 0x2;
break;
case 0x40000006:
g_kankyoHIO.dungeonLight.field_0x8 = 0x3;
break;
case 0x40000007:
g_kankyoHIO.dungeonLight.field_0x8 = 0x4;
break;
case 0x40000008:
g_kankyoHIO.dungeonLight.field_0x8 = 0x5;
break;
case 0x40000009:
g_kankyoHIO.dungeonLight.field_0x8 = 0x6;
break;
case 0x400000a0:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa0;
break;
case 0x400000a1:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa1;
break;
case 0x400000a2:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa2;
break;
case 0x400000a3:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa3;
break;
case 0x400000a4:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa4;
break;
case 0x400000a5:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa5;
break;
case 0x4000000a:
g_kankyoHIO.dungeonLight.field_0x8 = 0xa;
break;
case 0x4000000b:
g_kankyoHIO.dungeonLight.field_0x8 = 0xb;
break;
case 0x4000000c:
g_kankyoHIO.dungeonLight.field_0x8 = 0xc;
break;
case 0x4000000d:
g_kankyoHIO.dungeonLight.field_0x8 = 0xd;
break;
case 0x4000000e:
g_kankyoHIO.dungeonLight.field_0x8 = 0xe;
break;
case 0x4000000f:
g_kankyoHIO.dungeonLight.field_0x8 = 0xf;
break;
case 0x40000010:
case 0x40000011:
case 0x40000012:
case 0x40000013:
case 0x40000014:
case 0x40000015:
field_0x60 = (uintptr_t)property->id - 0x4000000f;
break;
case 0x40000016:
case 0x40000017:
case 0x40000018:
case 0x40000019:
case 0x4000001a:
case 0x4000001b:
field_0x61 = (uintptr_t)property->id - 0x40000015;
break;
case 0x4000001c:
case 0x4000001d:
case 0x4000001e:
case 0x4000001f:
case 0x40000020:
case 0x40000021:
field_0x62 = (uintptr_t)property->id - 0x4000001b;
break;
case 0x40000022:
case 0x40000023:
case 0x40000024:
case 0x40000025:
case 0x40000026:
case 0x40000027:
field_0x63 = (uintptr_t)property->id - 0x40000021;
break;
case 0x40000028:
case 0x40000029:
case 0x4000002a:
case 0x4000002b:
case 0x4000002c:
case 0x4000002d:
field_0x64 = (uintptr_t)property->id - 0x40000027;
break;
case 0x4000002e:
case 0x4000002f:
case 0x40000030:
case 0x40000031:
case 0x40000032:
case 0x40000033:
field_0x65 = (uintptr_t)property->id - 0x4000002d;
break;
case 0x40000034:
case 0x40000035:
case 0x40000036:
case 0x40000037:
case 0x40000038:
case 0x40000039:
field_0x66 = (uintptr_t)property->id - 0x40000033;
break;
case 0x4000003a:
case 0x4000003b:
case 0x4000003c:
case 0x4000003d:
case 0x4000003e:
case 0x4000003f:
field_0x67 = (uintptr_t)property->id - 0x40000039;
break;
case 0x40000040:
case 0x40000041:
case 0x40000042:
case 0x40000043:
case 0x40000044:
case 0x40000045:
field_0x68 = (uintptr_t)property->id - 0x4000003f;
break;
case 0x40000046:
case 0x40000047:
case 0x40000048:
case 0x40000049:
case 0x4000004a:
case 0x4000004b:
field_0x69 = (uintptr_t)property->id - 0x40000045;
break;
case 0x4000004c:
case 0x4000004d:
case 0x4000004e:
case 0x4000004f:
case 0x40000050:
case 0x40000051:
field_0x6a = (uintptr_t)property->id - 0x4000004b;
break;
case 0x40000052:
case 0x40000053:
case 0x40000054:
case 0x40000055:
case 0x40000056:
case 0x40000057:
field_0x6b = (uintptr_t)property->id - 0x40000051;
break;
case 0x40000003: {
// "light direction file"
if (file.open(6, "ライト方向ファイル(*.csv)\0*.csv\0", "csv", "NULL", "_L.csv")) {
int cursor = 0;
memset(lightDirOutBuf, 0x20, 5000);
memcpy(lightDirOutBuf,
"no,MultiFileName,LayerName,name,pos_x,pos_y,pos_z,ref_distance,angX,angY,"
"cutoff,spot_func,dist_func,action_type,SW_KIND,BitSW,SW_LIGHT\n",
0x88);
cursor += 0x88;
cursor -= 1;
for (int i = 0; i < g_kankyoHIO.dungeonLight.usedLights; i++)
{
sprintf(lightDirOutBuf + cursor, " %01x,", i);
cursor += 7;
// "lights per room"
memcpy(lightDirOutBuf + cursor, ",,部屋毎のライト,", 0x12);
cursor += 18;
cursor -= 1;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mPosition.x);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mPosition.y);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mPosition.z);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mRefDistance);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mAngleX);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,", g_env_light.dungeonlight[i].mAngleY);
cursor += 17;
sprintf(lightDirOutBuf + cursor, "%16f,",
g_env_light.dungeonlight[i].mCutoffAngle);
cursor += 17;
switch (g_env_light.dungeonlight[i].mAngleAttenuation) {
case 0:
memcpy(lightDirOutBuf + cursor, "ポイント,", 10);
cursor += 9;
break;
case 1:
memcpy(lightDirOutBuf + cursor, "直角,", 6);
cursor += 5;
break;
case 2:
memcpy(lightDirOutBuf + cursor, "COS曲線,", 9);
cursor += 8;
break;
case 3:
memcpy(lightDirOutBuf + cursor, "COS2曲線,", 10);
cursor += 9;
break;
case 4:
memcpy(lightDirOutBuf + cursor, "シャープ,", 10);
cursor += 9;
break;
case 5:
memcpy(lightDirOutBuf + cursor, "リング状,", 10);
cursor += 9;
break;
case 6:
memcpy(lightDirOutBuf + cursor, "リング状2,", 11);
cursor += 10;
}
switch (g_env_light.dungeonlight[i].mDistAttenuation) {
case GX_DA_OFF:
memcpy(lightDirOutBuf + cursor, "減衰なし,", 10);
cursor += 9;
break;
case GX_DA_GENTLE:
memcpy(lightDirOutBuf + cursor, "おだやか,", 10);
cursor += 9;
break;
case GX_DA_MEDIUM:
memcpy(lightDirOutBuf + cursor, "中間,", 6);
cursor += 5;
break;
case GX_DA_STEEP:
memcpy(lightDirOutBuf + cursor, "険しい,", 8);
cursor += 7;
break;
}
memcpy(lightDirOutBuf + cursor, "0,,,\n", 6);
cursor += 6;
cursor -= 1;
}
file.writeData(lightDirOutBuf, cursor);
file.close();
} else {
OS_REPORT("write append error\n");
}
break;
}
}
}
dKankyo_vrboxHIO_c::dKankyo_vrboxHIO_c() {
m_VrboxSetting = 0;
field_0x5 = 0;
field_0x7 = 0;
field_0x8 = 0;
field_0x9 = 0;
field_0xa = 0;
field_0xb = 0;
field_0xc = 0;
field_0xd = 0;
field_0xe = -1;
field_0xf = -1;
field_0x10 = -1;
field_0x11 = -1;
field_0x12 = -1;
field_0x13 = -1;
field_0x14 = 0;
m_horizonHeight = 0.0f;
}
void dKankyo_vrboxHIO_c::genMessage(JORMContext* mctx) {
// "VR-BOX color setting TV screen confirmation display"
mctx->genCheckBox("VR-BOXカラー設定TV画面確認表示", &m_displayVrboxTVColorSettings, 1, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
// “Set the elevation (horizon) *Entered in the room settings in the map tool”
mctx->genCheckBox("海抜(地平線)の設定 ※マップツールの部屋設定に入力", &field_0x14, 1, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
// "Height above sea level"
mctx->genSlider("海抜の高さ", &m_horizonHeight, -100000.0f, 100000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
// "VRBOX settings"
mctx->startComboBox("■VRBOX設定", &m_VrboxSetting, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
// "Do not"
mctx->genComboBoxItem("しない", 0);
// HOSTIO settings
mctx->genComboBoxItem("HOSTIO設定!", 1);
mctx->endComboBox();
// "The moment you select the HOSTIO setting, the current data will be entered!"
mctx->genLabel("HOSTIO設定を選択した瞬間、現在データが入ります!", 0x80000001, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
// "●Export VR-BOX information to a CSV file"
mctx->genLabel("●VR-BOX情報のCSVファイル書き出し", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genButton("FILE WRITE", 0x40000002, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "●Loading CSV file of VR-BOX information (for confirmation)"
mctx->genLabel("●VR-BOX情報のCSVファイル読み込み(確認用)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genButton("FILE READ", 0x40000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("------------------------------------------------------", 0x80000001, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
// "Forced VRBOX specification"
mctx->startComboBox("強制VRBOX指定", &field_0x7, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
// "Do not"
mctx->genComboBoxItem("しない", 0);
// "Using pattern 0"
mctx->genComboBoxItem("パターン0使用", 1);
// "Using pattern 1"
mctx->genComboBoxItem("パターン1使用", 2);
// "Using pattern 2"
mctx->genComboBoxItem("パターン2使用", 3);
// "Using pattern 3"
mctx->genComboBoxItem("パターン3使用", 4);
// "Using pattern 4"
mctx->genComboBoxItem("パターン4使用", 5);
// "Using pattern 5"
mctx->genComboBoxItem("パターン5使用", 6);
// "Using pattern 6"
mctx->genComboBoxItem("パターン6使用", 7);
// "Using pattern 7"
mctx->genComboBoxItem("パターン7使用", 8);
// "Using pattern 8"
mctx->genComboBoxItem("パターン8使用", 9);
// "Using pattern 9"
mctx->genComboBoxItem("パターン9使用", 10);
// "Using pattern 10"
mctx->genComboBoxItem("パターン10使用", 11);
// "Using pattern 11"
mctx->genComboBoxItem("パターン11使用", 12);
// "Using pattern 12"
mctx->genComboBoxItem("パターン12使用", 13);
// "Using pattern 13"
mctx->genComboBoxItem("パターン13使用", 14);
// "Using pattern 14"
mctx->genComboBoxItem("パターン14使用", 15);
// "Using pattern 15"
mctx->genComboBoxItem("パターン15使用", 16);
mctx->endComboBox();
mctx->genLabel("------------------------------------------------------", 0x80000001, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
// "● Sky color"
mctx->genLabel("● 空の色", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x40000004, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_sky_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" ", &g_env_light.vrbox_sky_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" ", &g_env_light.vrbox_sky_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x40000005, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x40000006, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x40000007, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x40000008, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x40000009, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x4000000a, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "● Upper cloud color"
mctx->genLabel("● 上雲カラー", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x4000000b, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_kumo_top_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_top_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_top_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x4000000c, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x4000000d, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x4000000e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x4000000f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x40000010, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x40000011, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "Lower cloud color"
mctx->genLabel("● 下雲カラー", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x40000012, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_kumo_bottom_col.r, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_bottom_col.g, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_bottom_col.b, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x40000013, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x40000014, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x40000015, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x40000016, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x40000017, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x40000018, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "● Lower cloud shadow color"
mctx->genLabel("● 下雲影カラー", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x40000019, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_kumo_shadow_col.r, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_shadow_col.g, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kumo_shadow_col.b, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" α", &g_env_light.vrbox_kumo_top_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x4000001a, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x4000001b, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x4000001c, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x4000001d, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x4000001e, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x4000001f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "● Near kasumi"
mctx->genLabel("● 前かすみ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x40000020, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_kasumi_outer_col.r, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kasumi_outer_col.g, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kasumi_outer_col.b, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" α", &g_env_light.vrbox_kasumi_outer_col.a, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x40000021, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x40000022, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x40000023, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x40000024, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x40000025, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x40000026, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "● Inner kasumi"
mctx->genLabel("● 奥かすみ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Set fog color"
mctx->genButton("fog色をセット", 0x40000027, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Color R"
mctx->genSlider("", &g_env_light.vrbox_kasumi_inner_col.r, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kasumi_inner_col.g, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" ", &g_env_light.vrbox_kasumi_inner_col.b, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" α", &g_env_light.vrbox_kasumi_inner_col.a, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "RGB simultaneous addition +100"
mctx->genButton("RGB同時加算 +100", 0x40000028, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 10"
mctx->genButton("RGB同時加算 + 10", 0x40000029, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition + 1"
mctx->genButton("RGB同時加算 + 1", 0x4000002a, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 1"
mctx->genButton("RGB同時加算 - 1", 0x4000002b, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition - 10"
mctx->genButton("RGB同時加算 - 10", 0x4000002c, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "RGB simultaneous addition -100"
mctx->genButton("RGB同時加算 -100", 0x4000002d, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
}
void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() {
JORMContext* ctx = attachJORMContext(8);
ctx->startUpdateNode(&g_kankyoHIO.vrbox);
ctx->updateSlider(2, &g_env_light.vrbox_sky_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_sky_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_sky_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_top_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_top_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_top_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_top_col.a, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_bottom_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_bottom_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_bottom_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_bottom_col.a, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_shadow_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_shadow_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_shadow_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kumo_shadow_col.a, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_outer_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_outer_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_outer_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_outer_col.a, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_inner_col.r, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_inner_col.g, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_inner_col.b, 0, 0, 0);
ctx->updateSlider(2, &g_env_light.vrbox_kasumi_inner_col.a, 0, 0, 0);
releaseJORMContext(ctx);
}
void dKankyo_vrboxHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {
char inBuf[1000];
char outBuf[1000];
JORReflexible::listenPropertyEvent(property);
JORFile file;
char scratchBuf[0x68];
switch ((uintptr_t)property->id) {
case 0x40000001: {
if (file.open(1, "VRBOXファイル(*.csv)\0*.csv\0", "csv", "NULL", "_V.csv")) {
int off = 0;
memset(inBuf, 0x20, 1000);
file.readData(inBuf, 0);
file.close();
off += 91;
off += 2;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_sky_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_sky_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_sky_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_top_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_top_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_top_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_bottom_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_bottom_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_bottom_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_shadow_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_shadow_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_shadow_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kumo_top_col.a = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_outer_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_outer_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_outer_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_outer_col.a = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_inner_col.r = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_inner_col.g = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_inner_col.b = (u8)atoi(scratchBuf);
off += 4;
memset(scratchBuf, 0, 100);
memcpy(scratchBuf, inBuf + off, 3);
g_env_light.vrbox_kasumi_inner_col.a = (u8)atoi(scratchBuf);
off += 5;
g_kankyoHIO.vrbox.field_0x5 = 0;
OS_REPORT("read append success %d\n", 0x1330);
} else {
OS_REPORT("write append error\n");
}
break;
case 0x40000002: {
// "VRBOX file"
if (file.open(6, "VRBOXファイル(*.csv)\0*.csv\0", "csv", "NULL", "_V.csv")) {
int off = 0;
memset(outBuf, 0x20, 1000);
memcpy(outBuf,
"*dummy,No,空色,上雲色,下雲色,下雲影色,下雲α,霞手前色,霞手前α,霞奥色,"
"霞奥α,備考,レイヤー\n\n",
93);
off += 91;
memcpy(outBuf + off, ",,", 2);
off += 2;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_sky_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_sky_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_sky_col.b);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_top_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_top_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kumo_top_col.b);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_bottom_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_bottom_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kumo_bottom_col.b);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_shadow_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kumo_shadow_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kumo_shadow_col.b);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kumo_top_col.a);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kasumi_outer_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kasumi_outer_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kasumi_outer_col.b);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kasumi_outer_col.a);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kasumi_inner_col.r);
off += 4;
sprintf(outBuf + off, "%03d/", g_env_light.vrbox_kasumi_inner_col.g);
off += 4;
sprintf(outBuf + off, "%03d,", g_env_light.vrbox_kasumi_inner_col.b);
off += 4;
sprintf(outBuf + off, "%03d,,", g_env_light.vrbox_kasumi_inner_col.a);
off += 5;
file.writeData(outBuf, off);
file.close();
OS_REPORT("write append success %d\n", 0x1330);
} else {
OS_REPORT("write append error\n");
}
break;
}
case 0x40000004:
case 0x40000005:
case 0x40000006:
case 0x40000007:
case 0x40000008:
case 0x40000009:
case 0x4000000a:
field_0xe = (uintptr_t)property->id - 0x40000004;
break;
break;
case 0x4000000b:
case 0x4000000c:
case 0x4000000d:
case 0x4000000e:
case 0x4000000f:
case 0x40000010:
case 0x40000011:
field_0xf = (uintptr_t)property->id - 0x4000000b;
break;
case 0x40000012:
case 0x40000013:
case 0x40000014:
case 0x40000015:
case 0x40000016:
case 0x40000017:
case 0x40000018:
field_0x10 = (uintptr_t)property->id - 0x40000012;
break;
case 0x40000019:
case 0x4000001a:
case 0x4000001b:
case 0x4000001c:
case 0x4000001d:
case 0x4000001e:
case 0x4000001f:
field_0x11 = (uintptr_t)property->id - 0x40000019;
break;
case 0x40000020:
case 0x40000021:
case 0x40000022:
case 0x40000023:
case 0x40000024:
case 0x40000025:
case 0x40000026:
field_0x12 = (uintptr_t)property->id - 0x40000020;
break;
case 0x40000027:
case 0x40000028:
case 0x40000029:
case 0x4000002a:
case 0x4000002b:
case 0x4000002c:
case 0x4000002d:
field_0x13 = (uintptr_t)property->id - 0x40000027;
break;
}
}
}
dKankyo_bloomHIO_c::dKankyo_bloomHIO_c() {
field_0x4 = 0;
m_saturationPattern = 0;
field_0x5 = 0;
for (int i = 0; i < 64; i++) {
dKydata_BloomInfo_c* bloominf = dKyd_BloomInf_tbl_getp(i);
bloom_info[i] = bloominf->info;
}
}
void dKankyo_bloomHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {
char outBuf[0x1390];
JORReflexible::listenPropertyEvent(property);
JORFile file;
switch ((uintptr_t)property->id) {
case 0x40000002: {
// "Bloom file"
if (file.open(6, "飽和加算ファイル(*.csv)\0*.csv\0", "csv", "NULL", "_bloom.csv")) {
int off = 0;
memset(outBuf, 0x20, 5000);
memcpy(outBuf,
"/*======================================================================*/\n",
76);
off += 76;
off -= 1;
memcpy(outBuf + off,
"static dKydata_BloomInfo_c l_kydata_BloomInf_tbl[BLOOMINFO_MAX] ={\n", 0x44);
off += 68;
off -= 1;
for (int i = 0; i < ARRAY_SIZE(bloom_info); i++) {
sprintf(
outBuf + off,
"{ %01d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d, %3d }, /* %02d */\n",
bloom_info[i].mType, bloom_info[i].mThreshold, bloom_info[i].mBlurAmount,
bloom_info[i].mDensity, bloom_info[i].mColorR, bloom_info[i].mColorG,
bloom_info[i].mColorB, bloom_info[i].mOrigDensity,
bloom_info[i].mSaturateSubtractR, bloom_info[i].mSaturateSubtractG,
bloom_info[i].mSaturateSubtractB, bloom_info[i].mSaturateSubtractA, i);
off += 71;
}
memcpy(outBuf + off, "};\n", 4);
off += 4;
off -= 1;
file.writeData(outBuf, off);
file.close();
} else {
OS_REPORT("write append error\n");
}
}
}
}
void dKankyo_bloomHIO_c::genMessage(JORMContext* mctx) {
int i;
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "Bloom settings"
mctx->genLabel(" 飽 和 加 算 設 定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "Options that seem useful for adjustment"
mctx->genLabel("□調整用に便利そうな項目", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Screen display"
mctx->genCheckBox("画面表示", &field_0x5, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Time speed"
mctx->genSlider("■時刻速度", &g_env_light.time_change_rate, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Time change"
mctx->startComboBox("■時刻切替", &g_kankyoHIO.time_change, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
// "Normal time"
mctx->genComboBoxItem("通常時間", 0);
// "Fixed at midnight"
mctx->genComboBoxItem("朝0時間に固定", 1);
// "Fixed at 1 AM"
mctx->genComboBoxItem("朝1時間に固定", 2);
// "Fixed at daytime"
mctx->genComboBoxItem("昼時間に固定", 3);
// "Fixed at noon"
mctx->genComboBoxItem("夕0時間に固定", 4);
// "Fixed at 1 PM"
mctx->genComboBoxItem("夕1時間に固定", 5);
// "Fixed at nighttime"
mctx->genComboBoxItem("夜時間に固定", 6);
// "Map settings ignored"
mctx->genComboBoxItem("マップ設定無視経過", 7);
mctx->endComboBox();
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "Bloom adjustment"
mctx->startComboBox("■飽和値調整を", &field_0x4, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
// "Do not"
mctx->genComboBoxItem("しない", 0);
// "Set with HOSTIO!"
mctx->genComboBoxItem("HOSTIOで設定!", 1);
mctx->endComboBox();
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "File output"
mctx->genButton("ファイル出力", 0x40000002, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "If you make any changes, please send this file to Sasaki at SRD!"
mctx->genLabel("変更した場合はこのファイルをSRDささきまで!", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
// "Of course, it's okay to just tell me the values of the places you changed or added!"
mctx->genLabel("※もちろん、変更・追加した場所の数値のみ伝えてもらってもOKです!", 0x80000001,
0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
for (int i = 1; i < ARRAY_SIZE(bloom_info); i++) {
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
if (true) {
switch (i) {
case 1:
// "○ 1 Twilight (ku)"
mctx->genLabel(" トワイライト(く)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 2:
// "○ 2 Twilight_weak (ku)"
mctx->genLabel(" トワイライト_弱(く)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 3:
// "○ 3 Sense"
mctx->genLabel(" センス", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 4:
// "○ 4 Field standard (morning 0)"
mctx->genLabel(" フィールド基準(朝0)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 5:
// "○ 5 Field standard (morning 1)"
mctx->genLabel(" フィールド基準(朝1)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 6:
// "○ 6 Field standard (noon)"
mctx->genLabel(" フィールド基準(昼)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 7:
// "○ 7 Field standard (evening 0)"
mctx->genLabel(" フィールド基準(夕0)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 8:
// "○ 8 Field standard (evening 1)"
mctx->genLabel(" フィールド基準(夕1)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 9:
// "○ 9 Field standard (night)"
mctx->genLabel(" フィールド基準(夜)", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
break;
case 10:
// "○ 10 Caravan fire"
mctx->genLabel("○ 10 キャラバン火事", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 11:
// "○ 11 LV8 Dark Palace"
mctx->genLabel("○ 11 LV8闇の宮殿", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 12:
// "○ 12 demo28_03"
mctx->genLabel("○ 12 demo28_03", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 13:
// "○ 13 Insect glow"
mctx->genLabel("○ 13 虫が光る", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 14:
// "○ 14 Sea of Clouds (hero's chamber)"
mctx->genLabel("○ 14 雲海(勇者の間)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 15:
// "○ 15 Zora's Domain waterfall TW"
mctx->genLabel("○ 15 ゾーラの里 滝TW", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 16:
// "○ 16 Zora's Domain throne TW"
mctx->genLabel("○ 16 ゾーラの里 玉座TW", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 17:
// "○ 17 Pseudo-sense"
mctx->genLabel("○ 17 センスもどき", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 18:
// "○ 18 Switch between present and past"
mctx->genLabel("○ 18 現在過去切替", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 19:
// "○ 19 Miyagi's sewer" (E3 demo?)
mctx->genLabel("○ 19 宮城さん下水道", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x14:
// "○ 20 Flashback scene"
mctx->genLabel("○ 20 回想シーン", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x15:
// "○ 21 Twilight gate"
mctx->genLabel("○ 21 トワイライトゲート", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x16:
// "○ 22 Underwater (standard)"
mctx->genLabel("○ 22 水中(基準)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x17:
// "● 23 Vacant"
mctx->genLabel("● 23 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x18:
// "○ 24 Vacant"
mctx->genLabel("● 24 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x19:
// "○ 25 Dungeon standard_weak"
mctx->genLabel("○ 25 ダンジョン基準_弱", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x1a:
// "○ 26 Dungeon standard_strong"
mctx->genLabel("○ 26 ダンジョン基準_強", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x1b:
// "○ 27 Lava (ku)"
mctx->genLabel("○ 27 溶岩(く)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x1c:
// "○ Other than Lava_Lv2 (ku)"
mctx->genLabel("○ 28 ダ溶岩以外_Lv2(く)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x1d:
// "○ 29 Past"
mctx->genLabel("○ 29 過去", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x1e:
// "○ 30 City walls"
mctx->genLabel("○ 30 城壁", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x1f:
// "● 31 Vacant"
mctx->genLabel("● 31 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x20:
// "● 32 Vacant"
mctx->genLabel("● 32 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x21:
// "● 33 Vacant"
mctx->genLabel("● 33 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x22:
// "● 34 Vacant"
mctx->genLabel("● 34 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x23:
// "● 35 Vacant"
mctx->genLabel("● 35 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x24:
// "● 36 Vacant"
mctx->genLabel("● 36 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x25:
// "● 37 Vacant"
mctx->genLabel("● 37 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x26:
// "● 38 Vacant"
mctx->genLabel("● 38 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x27:
// "● 39 Vacant"
mctx->genLabel("● 39 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x28:
// "○ 40 Demo: Flashback"
mctx->genLabel("○ 40 デモ:回想シーン", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x29:
// "○ 41 Demo: Fake TW"
mctx->genLabel("○ 41 デモ:にせTW", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x2a:
// "○ 42 Demo: for demo32_03"
mctx->genLabel("○ 42 デモ:demo32_03用", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x2b:
// "○ 43 Demo: TW flashback scene"
mctx->genLabel("○ 43 デモ:TW回想シーン", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x2c:
// "○ 44 Demo: for demo31_20"
mctx->genLabel("○ 44 デモ:demo31_20用", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
break;
case 0x2d:
// "○ 45 Demo: Lava W"
mctx->genLabel("○ 45 デモ:溶岩W", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x2e:
// "● 46 Vacant"
mctx->genLabel("● 46 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x2f:
// "● 47 Vacant"
mctx->genLabel("● 47 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x30:
// "● 48 Vacant"
mctx->genLabel("● 48 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x31:
// "● 49 Vacant"
mctx->genLabel("● 49 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x32:
// "● 50 Vacant"
mctx->genLabel("● 50 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x33:
// "● 51 Vacant"
mctx->genLabel("● 51 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x34:
// "● 52 Vacant"
mctx->genLabel("● 52 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x35:
// "● 53 Vacant"
mctx->genLabel("● 53 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x36:
// "● 54 Vacant"
mctx->genLabel("● 54 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x37:
// "● 55 Vacant"
mctx->genLabel("● 55 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x38:
// "● 56 Vacant"
mctx->genLabel("● 56 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x39:
// "● 57 Vacant"
mctx->genLabel("● 57 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3a:
// "● 58 Vacant"
mctx->genLabel("● 58 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3b:
// "● 59 Vacant"
mctx->genLabel("● 59 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3c:
// "● 60 Vacant"
mctx->genLabel("● 60 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3d:
// "● 61 Vacant"
mctx->genLabel("● 61 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3e:
// "● 62 Vacant"
mctx->genLabel("● 62 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
break;
case 0x3f:
// "● 63 Vacant"
mctx->genLabel("● 63 空き", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
}
}
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->startComboBox("タイプ", &bloom_info[i].mType, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("くっきり(0)", 0);
mctx->genComboBoxItem("やわらか(1)", 1);
mctx->endComboBox();
mctx->genSlider("しきい値", &bloom_info[i].mThreshold, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("ぼやけ幅", &bloom_info[i].mBlurAmount, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("ぼやけ濃さ", &bloom_info[i].mDensity, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("濃さ R", &bloom_info[i].mColorR, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &bloom_info[i].mColorG, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider(" B", &bloom_info[i].mColorB, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("元濃さ", &bloom_info[i].mOrigDensity, 0, 0xff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("彩度減算 R", &bloom_info[i].mSaturateSubtractR, 0, 0xff, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" G", &bloom_info[i].mSaturateSubtractG, 0, 0xff, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &bloom_info[i].mSaturateSubtractB, 0, 0xff, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" A", &bloom_info[i].mSaturateSubtractA, 0, 0xff, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
}
}
void dKankyo_dungeonlightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {
// empty function
}
dKankyo_navyHIO_c::dKankyo_navyHIO_c() {
field_0x5 = 0;
field_0x6 = 0;
field_0x8 = 12;
cloud_sunny_wind_influence_rate = 10.0f;
cloud_sunny_bottom_height = 2500.0f;
cloud_sunny_top_height = 2500.0f;
cloud_sunny_size = 0.6f;
cloud_sunny_height_shrink_rate = 0.9999f;
cloud_sunny_alpha = 1.0f;
cloud_cloudy_wind_influence_rate = 25.0f;
cloud_cloudy_bottom_height = 1200.0f;
cloud_cloudy_top_height = 1200.0f;
cloud_cloudy_size = 0.84f;
cloud_cloudy_height_shrink_rate = 0.96f;
cloud_cloudy_alpha = 1.0f;
field_0x3c = 4000.0f;
field_0x40 = 2000.0f;
field_0x44 = 2500.0f;
field_0x48 = 80.0f;
field_0x4c = 0.18f;
field_0x68 = 1;
field_0x69 = 3;
field_0x50 = 255.0f;
field_0x58 = 800.0f;
field_0x5c = 250.0f;
field_0x54 = 1.0f;
field_0x60 = 1000.0f;
field_0x64 = 0.2f;
housi_max_number = 300;
housi_max_alpha = 120.0f;
housi_max_scale = 9.0f;
field_0x74 = 45;
field_0x75 = 136;
field_0x76 = 170;
field_0x78 = 109;
field_0x79 = 60;
field_0x7a = 205;
field_0x7c = 120.0f;
field_0x80 = 100.0f;
field_0x84 = 0.2f;
field_0x8a = 0;
field_0x88 = 0;
field_0x80 = 0.0f;
moon_col.r = 0;
moon_col.g = 0;
moon_col.b = 0;
moon_col.a = 255;
moon_scale = 8000.0f;
field_0xb0.x = 16.5f;
field_0xb0.y = -2.0f;
field_0xb0.z = 30.0f;
field_0xbc = 160.0f;
field_0xc0 = 0.06f;
field_0xc4 = 200;
field_0xc8 = 3.0f;
field_0xcc = 60.0f;
field_0xd0 = 69;
field_0xd1 = 60;
field_0xd2 = 39;
field_0xd4 = 124;
field_0xd5 = 124;
field_0xd6 = 104;
field_0xd3 = 255;
field_0xd8 = 255;
field_0xd9 = 0;
field_0xda = 0;
field_0xdc = 255;
field_0xdd = 255;
field_0xde = 0;
field_0xe0 = 500;
field_0xe4 = 0.4f;
sun_col.r = 255;
sun_col.g = 255;
sun_col.b = 241;
sun_col2.r = 255;
sun_col2.g = 145;
sun_col2.b = 73;
sun_adjust_ON = 0;
smell_adjust_ON = 0;
smell_col.r = 255;
smell_col.g = 255;
smell_col.b = 115;
smell_col2.r = 80;
smell_col2.g = 50;
smell_col2.b = 0;
smell_alpha = 1.0f;
field_0xf0 = 190;
field_0xf1 = 120;
field_0xf2 = 120;
field_0x108 = 60;
field_0x109 = 0;
field_0x10a = 0;
field_0xf4 = 60;
field_0xf5 = 150;
field_0xf6 = 230;
field_0x10c = 50;
field_0x10d = 65;
field_0x10e = 80;
field_0xf8 = 80;
field_0xf9 = 80;
field_0xfa = 20;
field_0x110 = 30;
field_0x111 = 30;
field_0x112 = 10;
field_0xfc = 33;
field_0xfd = 255;
field_0xfe = 125;
field_0x114 = 33;
field_0x115 = 255;
field_0x116 = 125;
field_0x120 = 0.1f;
field_0x124 = 1.0f;
constellation_maker_ON = 0;
constellation_maker_pos[0].x = 5900.0f;
constellation_maker_pos[0].y = 14000.0f;
constellation_maker_pos[0].z = -16000.0f;
constellation_maker_pos[1].x = 7500.0f;
constellation_maker_pos[1].y = 14000.0f;
constellation_maker_pos[1].z = -14700.0f;
constellation_maker_pos[2].x = 8700.0f;
constellation_maker_pos[2].y = 13920.0f;
constellation_maker_pos[2].z = -14700.0f;
constellation_maker_pos[3].x = 10200.0f;
constellation_maker_pos[3].y = 14320.0f;
constellation_maker_pos[3].z = -15000.0f;
constellation_maker_pos[4].x = 12300.0f;
constellation_maker_pos[4].y = 15400.0f;
constellation_maker_pos[4].z = -18400.0f;
constellation_maker_pos[5].x = 13000.0f;
constellation_maker_pos[5].y = 13500.0f;
constellation_maker_pos[5].z = -15000.0f;
constellation_maker_pos[6].x = 13000.0f;
constellation_maker_pos[6].y = 15400.0f;
constellation_maker_pos[6].z = -14500.0f;
constellation_maker_pos[7].x = 13000.0f;
constellation_maker_pos[7].y = 15400.0f;
constellation_maker_pos[7].z = -14500.0f;
constellation_maker_pos[8].x = 13000.0f;
constellation_maker_pos[8].y = 15400.0f;
constellation_maker_pos[8].z = -14500.0f;
constellation_maker_pos[9].x = 13000.0f;
constellation_maker_pos[9].y = 15400.0f;
constellation_maker_pos[9].z = -14500.0f;
lightning_scale_x_min = 14.0f;
lightning_scale_x_max = 20.0f;
lightning_scale_y_min = 14.0f;
lightning_scale_y_max = 20.0f;
lightning_tilt_angle = 2000;
field_0x1b6 = 3;
lightning_debug_mode = 0;
collect_light_reflect_pos.x = 60000.0f;
collect_light_reflect_pos.y = -5000.0f;
collect_light_reflect_pos.z = 0.0f;
moya_alpha = 0.12f;
field_0x1c5 = 0;
thunder_col.r = 75;
thunder_col.g = 130;
thunder_col.b = 150;
thunder_height = 2000.0f;
thunder_blacken_rate = 0.75f;
water_in_col_ratio_R = 0.0f;
water_in_col_ratio_G = 0.4f;
water_in_col_ratio_B = 0.5f;
field_0x1e8 = -10.0f;
field_0x1ec = 40.0f;
field_0x1f0 = 50.0f;
field_0x1f4 = 200.0f;
field_0x1f8 = 0.0f;
field_0x1e4 = 80;
field_0x1e5 = 80;
field_0x1e6 = 80;
field_0x1fd = 2;
field_0x1fe = 3;
field_0x1ff = 0;
field_0x200 = 0;
mist_tag_fog_near = -2000.0f;
mist_tag_fog_far = 200.0f;
wipe_test_ON = 0xff;
field_0x210 = 0.0f;
fade_test_speed = 0;
field_0x215 = 1;
smell_railtag_space = 0.0f;
field_0x22a = 0;
field_0x22c = 0;
field_0x22d = 0;
light_adjust_ON = 0;
adjust_light_ambcol.r = 24;
adjust_light_ambcol.g = 24;
adjust_light_ambcol.b = 24;
adjust_light_dif0_col_R = 126;
adjust_light_dif0_col_G = 110;
adjust_light_dif0_col_B = 89;
adjust_light_dif1_col.r = 24;
adjust_light_dif1_col.g = 41;
adjust_light_dif1_col.b = 50;
adjust_light_main_pos.x = 500.0f;
adjust_light_main_pos.y = 500.0f;
adjust_light_main_pos.z = 500.0f;
mist_twilight_c1_col.r = 182;
mist_twilight_c1_col.g = 88;
mist_twilight_c1_col.b = 50;
mist_twilight_c1_col.a = 150;
mist_twilight_c2_col.r = 117;
mist_twilight_c2_col.g = 69;
mist_twilight_c2_col.b = 50;
mist_twilight_c2_col.a = 255;
field_0x264.r = 124;
field_0x264.g = 60;
field_0x264.b = 50;
field_0x267 = 255;
field_0x268 = 150;
adjust_custom_R = 70;
adjust_custom_G = 70;
adjust_custom_B = 70;
adjust_light_mode = 1;
adjust_height = 0.0f;
field_0x278 = 120.0f;
shadow_adjust_ON = 0;
shadow_normal_alpha = 0.4f;
shadow_max_alpha = 0.65f;
field_0x29c = 0;
field_0x27c = 70.0f;
field_0x280 = 0.05f;
field_0x284 = 1.5f;
field_0x288 = 0.00025f;
field_0x28c = 0.001f;
unk_color_1.r = 255;
unk_color_1.g = 255;
unk_color_1.b = 255;
unk_alpha_1 = 255;
unk_color_2.r = 0;
unk_color_2.g = 0;
unk_color_2.b = 0;
unk_alpha_2 = 255;
unk_color_3.r = 60;
unk_color_3.g = 30;
unk_color_3.b = 0;
unk_alpha_3 = 255;
field_0x29d = 1;
camera_light_col.r = 25;
camera_light_col.g = 90;
camera_light_col.b = 183;
camera_light_alpha = 255;
camera_light_y_shift = 1500.0f;
camera_light_power = 1.25f;
camera_light_cutoff = 90.0f;
camera_light_sp = 2;
camera_light_da = 3;
demo_adjust_SW = 0;
demo_focus_pos = 30;
demo_focus_offset_x = 0.0025f;
demo_focus_offset_y = 0.0025f;
grass_ambcol.r = 0;
grass_ambcol.g = 0;
grass_ambcol.b = 0;
grass_adjust_ON = 0;
grass_shine_value = 0.0f;
stars_max_number = 0xffff;
display_save_location = 0;
unk_light_influence_ratio = 100;
door_light_influence_ratio = 255;
fish_pond_colreg_adjust_ON = 0;
fish_pond_colreg_c0.r = 0;
fish_pond_colreg_c0.g = 0;
fish_pond_colreg_c0.b = 0;
water_mud_adjust_ON = 0;
field_0x2ea = 0;
field_0x2ec = 0;
fish_pond_tree_adjust_ON = 0;
fish_pond_tree_ambcol.r = 0;
fish_pond_tree_ambcol.g = 0;
fish_pond_tree_ambcol.b = 0;
fish_pond_tree_dif0_col.r = 0;
fish_pond_tree_dif0_col.g = 0;
fish_pond_tree_dif0_col.b = 0;
fish_pond_tree_dif1_col.r = 0;
fish_pond_tree_dif1_col.g = 0;
fish_pond_tree_dif1_col.b = 0;
rainbow_adjust_ON = 0;
rainbow_separation_dist = 4500;
rainbow_max_alpha = 175;
field_0x2ff = 0;
grass_light_influence_ratio = 100;
grass_light_debug = 0;
field_0x302 = 2000;
field_0x304 = 0.6f;
field_0x308 = 0;
moya_col.r = 255;
moya_col.g = 255;
moya_col.b = 255;
field_0x30d = 0;
twilight_sense_saturation_mode = 0;
twilight_sense_pat = 0;
twilight_sense_pat_tv_display_ON = 0;
camera_light_adjust_ON = 0;
possessed_zelda_light_col.r = 30;
possessed_zelda_light_col.g = 55;
possessed_zelda_light_col.b = 110;
possessed_zelda_light_alpha = 255;
possessed_zelda_light_height = -800.0f;
possessed_zelda_light_power = 250.0f;
beast_ganon_light_col.r = 60;
beast_ganon_light_col.g = 95;
beast_ganon_light_col.b = 100;
beast_ganon_light_alpha = 255;
beast_ganon_light_height = -800.0f;
beast_ganon_light_power = 150.0f;
water_in_light_col.r = 138;
water_in_light_col.g = 192;
water_in_light_col.b = 188;
}
void dKankyo_navyHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 水中ライト 色", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("col R", &water_in_light_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &water_in_light_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &water_in_light_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ カメライトの設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("現在の設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" S Y:1500.0f power:1.25f cutoff 90.0f", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel(" M Y:500.0f power:2.0f cutoff 70.0f", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel(" L Y:2000.0f power:3.0f cutoff 70.0f", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("LL Y:1500.0f power:4.0f cutoff 65.0f", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &camera_light_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Yずらし", &camera_light_y_shift, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("色 R", &camera_light_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &camera_light_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &camera_light_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("power", &camera_light_power, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("cutoff", &camera_light_cutoff, 0.001f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->startComboBox("距離減衰", &camera_light_da, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("減衰なし [GX_DA_OFF]", 0);
mctx->genComboBoxItem("おだやか [GX_DA_GENTLE]", 1);
mctx->genComboBoxItem("中間 [GX_DA_MEDIUM]", 2);
mctx->genComboBoxItem("険しい [GX_DA_STEEP]", 3);
mctx->endComboBox();
mctx->startComboBox("角度減衰", &camera_light_sp, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("ポイント [GX_SP_OFF]", 0);
mctx->genComboBoxItem("直角 [GX_SP_FLAT]", 1);
mctx->genComboBoxItem("COS曲線 [GX_SP_COS]", 2);
mctx->genComboBoxItem("COS2曲線 [GX_SP_COS2]", 3);
mctx->genComboBoxItem("シャープ [GX_SP_SHARP]", 4);
mctx->genComboBoxItem("リング状 [GX_SP_RING1]", 5);
mctx->genComboBoxItem("リング状2[GX_SP_RING2]", 6);
mctx->endComboBox();
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ トワイライト センスパターン", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("TV画面に表示", &twilight_sense_pat_tv_display_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->startComboBox("パターン", &twilight_sense_pat, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("未使用", 0);
mctx->genComboBoxItem("1:フィールド基本", 1);
mctx->genComboBoxItem("2:ハイリア湖専用", 2);
mctx->genComboBoxItem("3:ゾーラ川専用", 3);
mctx->genComboBoxItem("4:雪山専用", 4);
mctx->genComboBoxItem("5:ダンジョン基本", 5);
mctx->genComboBoxItem("6:Lv4専用", 6);
mctx->genComboBoxItem("7:Lv5専用", 7);
mctx->genComboBoxItem("8:Lv6・7・9専用", 8);
mctx->genComboBoxItem("9:Lv8専用 D_MN08", 9);
mctx->genComboBoxItem("10:サブダンジョン系", 10);
mctx->genComboBoxItem("11:室内(広め)", 11);
mctx->genComboBoxItem("12:室内(狭め)", 12);
mctx->genComboBoxItem("13:デモなど広め", 13);
mctx->endComboBox();
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ トワイライト センス専用飽和実験", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("  ・センス仕様で飽和加算のパターンを変えてみる", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("モード", &twilight_sense_saturation_mode, 0, NULL, 0xffff, 0xffff, 0x100,
0x1a);
mctx->genComboBoxItem("ゲームまかせ", 0);
mctx->genComboBoxItem("トワイライト(暗)", 32);
mctx->genComboBoxItem("トワイライト(明)", 33);
mctx->genComboBoxItem("光世界(低彩度)", 34);
mctx->genComboBoxItem("影響なし", 35);
mctx->endComboBox();
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 憑依ゼルダ 女優ライト調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("col R", &possessed_zelda_light_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &possessed_zelda_light_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &possessed_zelda_light_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("takasa", &possessed_zelda_light_height, -5000.0f, 5000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider("power", &possessed_zelda_light_power, 0.0f, 2000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 豚ガノン 女優ライト調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("col R", &beast_ganon_light_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &beast_ganon_light_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &beast_ganon_light_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("takasa", &beast_ganon_light_height, -5000.0f, 5000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("power", &beast_ganon_light_power, 0.0f, 2000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ MA09水面てらてら具合", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("てらてら率", &g_env_light.mWaterSurfaceShineRate, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 虹の調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &rainbow_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("離れ距離", &rainbow_separation_dist, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("最大α", &rainbow_max_alpha, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 釣堀 木の色調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &fish_pond_tree_adjust_ON, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("amb R", &fish_pond_tree_ambcol.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &fish_pond_tree_ambcol.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &fish_pond_tree_ambcol.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("dif0 R", &fish_pond_tree_dif0_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &fish_pond_tree_dif0_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &fish_pond_tree_dif0_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("dif1 R", &fish_pond_tree_dif1_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &fish_pond_tree_dif1_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &fish_pond_tree_dif1_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("○現在設定値 はる amb (r 101) (g 94) (b 105)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" dif0 (r 86) (g 75) (b 57)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel(" dif1 (r 82) (g 65) (b 102)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel(" なつ amb (r 14) (g 35) (b 11)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" dif0 (r 55) (g 40) (b 30)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel(" dif1 (r 25) (g 15) (b 0)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel(" あき amb (r 40) (g 20) (b 5)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" dif0 (r 110) (g 50) (b 15)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel(" dif1 (r 70) (g 0) (b 15)", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 釣堀 colreg 色変化", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &this->fish_pond_colreg_adjust_ON, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("c0 R", &fish_pond_colreg_c0.r, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &fish_pond_colreg_c0.g, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &fish_pond_colreg_c0.b, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("○現在設定値 はる (r 0) (g 0) (b 0)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" なつ (r -3) (g 0) (b -4)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" あき (r 0) (g -10) (b -13)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel(" ふゆ (r 14) (g 15) (b 22)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 強引 水面にごり変更", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &water_mud_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("全体", &field_0x2ea, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("手前", &field_0x2ec, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ コレクト&装備 ライティング", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &light_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("AMB R", &adjust_light_ambcol.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &adjust_light_ambcol.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &adjust_light_ambcol.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("○メイン", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Pos X", &adjust_light_main_pos.x, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Y", &adjust_light_main_pos.y, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Z", &adjust_light_main_pos.z, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider("Dif0 R", &adjust_light_dif0_col_R, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_dif0_col_G, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_dif0_col_B, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("○反射", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Pos X", &collect_light_reflect_pos.x, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Y", &collect_light_reflect_pos.y, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Z", &collect_light_reflect_pos.z, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider("Dif1 R", &adjust_light_dif1_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_dif1_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_dif1_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 現在セーブ再開位置", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("常に表示", &this->display_save_location, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 星", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("最大数", &this->stars_max_number, -1, 2800, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 草てかり調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("てかり値", &this->grass_shine_value, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("草ライト影響率 ", &g_env_light.grass_light_inf_rate, 0.0, 2.0, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 霧沼 トワイライト時 色設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &light_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("c1 R", &mist_twilight_c1_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &mist_twilight_c1_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &mist_twilight_c1_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" a", &mist_twilight_c1_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("c2 R", &mist_twilight_c2_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &mist_twilight_c2_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &mist_twilight_c2_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" A", &mist_twilight_c2_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ トワイライトNPC ライト設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("■ 闇ライト一つ設定キャラ設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("モード", &adjust_light_mode, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("ゲームまかせ", 0);
mctx->genComboBoxItem("ゲームまかせ", 1);
mctx->genComboBoxItem("カスタム調整", 2);
mctx->endComboBox();
mctx->genSlider("AMB R", &adjust_light_ambcol.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &adjust_light_ambcol.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &adjust_light_ambcol.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("LIGHT0 R", &adjust_light_dif0_col_R, 0, 500, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_dif0_col_G, 0, 500, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_dif0_col_B, 0, 500, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ デモ用? 遠目対応 被写界深度", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("-1:奥にピント 1:手前にピント", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("注目点", &g_env_light.mDemoAttentionPoint, -1.0f, 1.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genCheckBox("調整SW", &demo_adjust_SW, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("ピント位置", &demo_focus_pos, -0xfe, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("ずらし幅X", &demo_focus_offset_x, -1.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("ずらし幅Y", &demo_focus_offset_y, -1.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 影の濃さ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &shadow_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("通常α", &shadow_normal_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("接近MAXα", &shadow_max_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ アイテムゲット ライト設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("モード", &adjust_light_mode, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("ゲームまかせ", 0);
mctx->genComboBoxItem("ゲームまかせ", 1);
mctx->genComboBoxItem("カスタム調整", 2);
mctx->endComboBox();
mctx->genSlider("AMB R", &adjust_light_ambcol.r, '\0', 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_ambcol.g, '\0', 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_ambcol.b, '\0', 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Dif0 R", &adjust_light_dif0_col_R, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_dif0_col_G, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_dif0_col_B, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Dif1 R", &adjust_light_dif1_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" G", &adjust_light_dif1_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_light_dif1_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Pos X", &adjust_light_main_pos.x, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Y", &adjust_light_main_pos.y, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider(" Z", &adjust_light_main_pos.z, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 女優さんライト", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("種類", &adjust_light_mode, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("ありのままで勝負", 0);
mctx->genComboBoxItem("レフ板", 1);
mctx->genComboBoxItem("カスタム調整", 2);
mctx->endComboBox();
mctx->genSlider("カスタム時 R", &adjust_custom_R, 0, 2000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &adjust_custom_G, 0, 2000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &adjust_custom_B, 0, 2000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("高さ調整", &adjust_height, -5000.0f, 5000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 沼", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("調整開始", &light_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("水面R", &mist_twilight_c1_col.r, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &mist_twilight_c1_col.g, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &mist_twilight_c1_col.b, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("補佐α", &mist_twilight_c1_col.a, -0xff, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Overall α" (alpha)
mctx->genSlider("全体α", &field_0x268, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("泥1R", &mist_twilight_c2_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &mist_twilight_c2_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" B", &mist_twilight_c2_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider(" a", &mist_twilight_c2_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
// "Mud 2 R"
mctx->genSlider("泥2R", &field_0x264.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &field_0x264.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &field_0x264.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ においもやの調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("色設定開始", &smell_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &smell_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &smell_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &smell_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &smell_col2.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &smell_col2.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &smell_col2.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("アルファ", &smell_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("■ においレールタグ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("間隔", &smell_railtag_space, -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 太陽フレア 加算に切替", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
// "Change to addition!!"
mctx->genCheckBox("加算にチェンジ!!", &field_0x215, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ ワイプタイプをテスト", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("ワイプテスト", &wipe_test_ON, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("フェード黒", 0);
mctx->genComboBoxItem("フェード白", 1);
mctx->genComboBoxItem("回転", 2);
mctx->genComboBoxItem("時間ごまかし実験", 3);
mctx->genComboBoxItem("ぼモザイク", 4);
mctx->genComboBoxItem("無し", 5);
mctx->genComboBoxItem("無し-無し", 6);
mctx->genComboBoxItem("無し-ホワイト", 7);
mctx->genComboBoxItem("フェード2黒", 8);
mctx->genComboBoxItem("フェード2白", 9);
mctx->genComboBoxItem("無し-fade黒", 10);
mctx->genComboBoxItem("無し-fade白", 11);
mctx->genComboBoxItem("表裏", 12);
mctx->genComboBoxItem("13", 13);
mctx->genComboBoxItem("霧色フェード", 14);
mctx->genComboBoxItem("15", 15);
mctx->genComboBoxItem("ポ切 黒→黒", 16);
mctx->genComboBoxItem("ポ切 白→白", 17);
mctx->genComboBoxItem("ポ切 黒→黒n", 18);
mctx->genComboBoxItem("ポ切 白→白n", 19);
mctx->genComboBoxItem("ポ切 霧色", 20);
mctx->genComboBoxItem("白のまま", 21);
mctx->genComboBoxItem("黒のまま", 22);
mctx->genComboBoxItem("通常動作", 255);
mctx->endComboBox();
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("・フェード時間テスト用 0以外で有効になります", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("フェード速度指定", &fade_test_speed, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 霧壁タグ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("フォグ near", &mist_tag_fog_near, -100000.0f, 100000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("フォグ far", &mist_tag_fog_far, -100000.0f, 100000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 水中カラー割合 現在カラーに乗算します", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &water_in_col_ratio_R, 0.0f, 2.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &water_in_col_ratio_G, 0.0f, 2.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &water_in_col_ratio_B, 0.0f, 2.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ もや ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("基本色 R", &moya_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &moya_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &moya_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("アルファ", &moya_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 雷の調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &thunder_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &thunder_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &thunder_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("高さ", &thunder_height, -50000.0, 50000.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("黒くする率", &thunder_blacken_rate, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 稲妻", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("デバッグ常時出現", &lightning_debug_mode, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Xスケールmin", &lightning_scale_x_min, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Xスケールmax", &lightning_scale_x_max, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Yスケールmin", &lightning_scale_y_min, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Yスケールmax", &lightning_scale_y_max, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("最大傾き角度", &lightning_tilt_angle, -0x8000, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("表示d範囲幅 XZ", &collect_light_reflect_pos.x, 0.0f, 1000000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("表示範囲幅 Y", &collect_light_reflect_pos.y, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 月の調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("設定開始", &rainbow_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &moon_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &moon_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &moon_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  α", &moon_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("スケール", &moon_scale, 0.0f, 100000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 太陽の調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("色設定開始", &sun_adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &sun_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &sun_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &sun_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("色 ", &sun_col2.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("   ", &sun_col2.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  ", &sun_col2.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 胞子の調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("最大数", &housi_max_number, 0, 1000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("最大アルファ", &housi_max_alpha, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("最大スケール", &housi_max_scale, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 雲の調整パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("晴れ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("風の影響率", &cloud_sunny_wind_influence_rate, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("高さ 端", &cloud_sunny_bottom_height, 0.0f, 50000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("高さ てっぺん", &cloud_sunny_top_height, 0.0f, 50000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("大きさ", &cloud_sunny_size, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("高さ縮小率", &cloud_sunny_height_shrink_rate, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("アルファ", &cloud_sunny_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("曇り", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("風の影響率", &cloud_cloudy_wind_influence_rate, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("高さ 端", &cloud_cloudy_bottom_height, 0.0f, 50000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("高さ てっぺん", &cloud_cloudy_top_height, 0.0f, 50000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("大きさ", &cloud_cloudy_size, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("高さ縮小率", &cloud_cloudy_height_shrink_rate, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("アルファ", &cloud_cloudy_alpha, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("――――――――――――――――――――――――――――――――――――――――――", 0x80000001, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("■ 星座作成くん", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("設定開始!", &constellation_maker_ON, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
for (int i = 0; i < 10; i++) {
mctx->genSlider("X", &constellation_maker_pos[i].x, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider("y", &constellation_maker_pos[i].y, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genSlider("z", &constellation_maker_pos[i].z, -100000.0f, 100000.0f, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
}
}
dKankyo_efflightHIO_c::dKankyo_efflightHIO_c() {
adjust_ON = 0;
power = 80.0f;
fluctuation = 100.0f;
step1.start_frame = 1;
step1.r = 191;
step1.g = 150;
step1.b = 45;
step2.start_frame = 4;
step2.r = 180;
step2.g = 60;
step2.b = 0;
step3.start_frame = 8;
step3.r = 75;
step3.g = 15;
step3.b = 0;
step4.start_frame = 15;
step4.r = 0;
step4.g = 0;
step4.b = 0;
}
void dKankyo_efflightHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("エフェクトライトカラー", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("設定開始", &adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("第1段階", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("frame", &step1.start_frame, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &step1.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step1.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step1.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("第2段階", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("frame", &step2.start_frame, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &step2.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step2.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step2.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("第3段階", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("frame", &step3.start_frame, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &step3.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step3.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step3.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("第4段階", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("frame", &step4.start_frame, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("", &step4.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step4.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" ", &step4.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("影響範囲", &power, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("ゆらぎ", &fluctuation, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
}
dKankyo_windHIO_c::dKankyo_windHIO_c() {
display_wind_dir = 0;
use_HOSTIO_adjustment = 0;
field_0x8 = -1;
global_x_angle = 0;
global_y_angle = 0;
global_wind_power = 0.3f;
field_0x14 = 0.0;
field_0x18 = 35.0f;
field_0x1c = 6.0f;
display_wind_trajectory = 0;
lightsword_x_angle = 1800;
lightsword_init_scale = 500.0f;
lightsword_end_scale = 300.0f;
influence = 1.0f;
lightsword_move_speed = 150.0f;
influence_attenuation = 0.3f;
wind_change_speed = 0.05f;
minigame_no_wind_duration = 90;
minigame_low_wind_duration = 60;
minigame_high_wind_duration = 90;
}
dKankyo_demolightHIO_c::dKankyo_demolightHIO_c() {
adjust_ON = 0;
light.mPosition.x = 0.0f;
light.mPosition.y = 0.0f;
light.mPosition.z = 0.0f;
light.mColor.r = 255;
light.mColor.g = 255;
light.mColor.b = 255;
light.mPow = 1000.0f;
light.mFluctuation = 0.0f;
}
void dKankyo_demolightHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("デモ用ポイントライト", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("設定開始", &adjust_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("color R", &light.mColor.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &light.mColor.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" B", &light.mColor.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("影響範囲", &light.mPow, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("ゆらぎ", &light.mFluctuation, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
}
void dKankyo_windHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("○グローバル風の設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("風向き確認表示", &display_wind_dir, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("風変化補完速度", &wind_change_speed, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("===============================================================", 0x80000001, 0,
NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("HOSTIOでの調整", &use_HOSTIO_adjustment, 1, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("画面中心のバーが設定した向きで", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Xアングル", &global_x_angle, -0x8000, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Yアングル", &global_y_angle, -0x8000, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("風力", &global_wind_power, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("===============================================================", 0x80000001, 0,
NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("○光の剣実験パラメータ", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("実験風軌道表示", &display_wind_trajectory, 1, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("Xアングル", &lightsword_x_angle, -0x7fff, 0x7fff, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("開始スケール", &lightsword_init_scale, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("終了スケール", &lightsword_end_scale, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("影響力", &influence, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("影響力減衰値", &influence_attenuation, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("移動速度", &lightsword_move_speed, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("===============================================================", 0x80000001, 0,
NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("○風避けゲーム強風タイマー調整", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
mctx->genSlider("無風継続時間", &minigame_no_wind_duration, 0, 1000, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("弱風継続時間", &minigame_low_wind_duration, 0, 1000, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genSlider("強風継続時間", &minigame_high_wind_duration, 0, 1000, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
}
dKankyo_dungeonlightHIO_c::dKankyo_dungeonlightHIO_c() {
field_0x5 = 0;
usedLights = 0;
displayDebugSphere = 0;
field_0x8 = 0;
field_0x9 = 0;
}
void dKankyo_dungeonlightHIO_c::genMessage(JORMContext* mctx) {
// empty function
}
dKankyo_ParticlelightHIO_c::dKankyo_ParticlelightHIO_c() {
field_0x5 = 0;
prim_col.r = 255;
prim_col.g = 255;
prim_col.b = 255;
prim_col.a = 255;
env_col.r = 255;
env_col.g = 255;
env_col.b = 255;
env_col.a = 255;
blend_ratio = 0.5f;
field_0x14 = 0;
type = 0;
field_0x19 = 1;
field_0x1a = 0;
}
void dKankyo_ParticlelightHIO_c::genMessage(JORMContext* mctx) {
mctx->genLabel("パーティクル色 設定", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("五感発動時のみに見えるパーティクルの実験", 0x80000001, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("下をONにしてからテストパーティクルを出してみて下さい", 0x80000001, 0, NULL,
0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("←五感発動時にしか見えなくなります!", &field_0x1a, 1, 0, NULL, 0xffff,
0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("インダイレクトより後に移動!", &field_0x19, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->startComboBox("タイプ", &type, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("TESTSMOKE_A01", 0);
mctx->genComboBoxItem("DASHSMOKE_A", 1);
mctx->genComboBoxItem("DOWNSMOKE_A", 2);
mctx->genComboBoxItem("TESTSMOKE_A02", 3);
mctx->genComboBoxItem("SCREENKAGEROU01", 4);
mctx->genComboBoxItem("ZENKAISCREEN2_A", 5);
mctx->genComboBoxItem("ZENKAISCREEN2_B", 6);
mctx->genComboBoxItem("TESTSMOKE_B01", 7);
mctx->genComboBoxItem("TESTSMOKE_B02", 8);
mctx->genComboBoxItem("TESTSMOKE_C01", 9);
mctx->genComboBoxItem("TESTSMOKE_C02", 10);
mctx->endComboBox();
mctx->genSlider("Prim R", &prim_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &prim_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  B", &prim_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("Env  R", &env_col.r, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider(" G", &env_col.g, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("  B", &env_col.b, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("基本α", &prim_col.a, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genSlider("ブレンド率", &blend_ratio, 0.001f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genButton("プレイヤー位置に発生!", 0x40000004, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
}
void dKankyo_ParticlelightHIO_c::listenPropertyEvent(const JORPropertyEvent* property) {
JORReflexible::listenPropertyEvent(property);
switch ((uintptr_t)property->id) {
case 0x40000004:
field_0x14 = 1;
break;
}
}
dKankyo_HIO_c::dKankyo_HIO_c() {
light.m_displayTVColorSettings = FALSE;
vrbox.m_displayVrboxTVColorSettings = FALSE;
}
void dKankyo_HIO_c::genMessage(JORMContext* mctx) {
mctx->genSlider("時刻速度", &g_env_light.time_change_rate, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->startComboBox("時刻切替", &time_change, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("通常時間", 0);
mctx->genComboBoxItem("朝0時間に固定", 1);
mctx->genComboBoxItem("朝1時間に固定", 2);
mctx->genComboBoxItem("昼時間に固定", 3);
mctx->genComboBoxItem("夕0時間に固定", 4);
mctx->genComboBoxItem("夕1時間に固定", 5);
mctx->genComboBoxItem("夜時間に固定", 6);
mctx->genComboBoxItem("マップ設定無視経過", 7);
mctx->endComboBox();
mctx->startComboBox("天候エフェクト", &wether_effect, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("なし", 0);
mctx->genComboBoxItem("", 1);
mctx->genComboBoxItem("", 2);
mctx->genComboBoxItem("", 3);
mctx->genComboBoxItem("胞子", 4);
mctx->genComboBoxItem("もや", 0x10);
mctx->genComboBoxItem("匂い", 6);
mctx->genComboBoxItem("水泥", 7);
mctx->genComboBoxItem("海雪", 8);
mctx->genComboBoxItem("全消去", 0x99);
mctx->endComboBox();
mctx->startComboBox("天候パレット", &wether_palette, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("通常", 0);
mctx->genComboBoxItem("晴に変更", 0x40);
mctx->genComboBoxItem("雨に変更", 1);
mctx->genComboBoxItem("雪に変更", 2);
mctx->genComboBoxItem("他に変更", 3);
mctx->genComboBoxItem("松明0に変更", 4);
mctx->genComboBoxItem("松明1に変更", 5);
mctx->genComboBoxItem("松明2に変更", 6);
mctx->genComboBoxItem("宝箱に変更", 7);
mctx->genComboBoxItem("08に変更", 8);
mctx->genComboBoxItem("09に変更", 9);
mctx->genComboBoxItem("10に変更", 10);
mctx->genComboBoxItem("11に変更", 11);
mctx->genComboBoxItem("12に変更", 12);
mctx->genComboBoxItem("13に変更", 13);
mctx->genComboBoxItem("14に変更", 14);
mctx->genComboBoxItem("15に変更", 15);
mctx->genComboBoxItem("16に変更", 16);
mctx->genComboBoxItem("17に変更", 17);
mctx->genComboBoxItem("18に変更", 18);
mctx->genComboBoxItem("19に変更", 19);
mctx->genComboBoxItem("20に変更", 20);
mctx->genComboBoxItem("21に変更", 21);
mctx->genComboBoxItem("22に変更", 22);
mctx->genComboBoxItem("23に変更", 23);
mctx->genComboBoxItem("24に変更", 24);
mctx->genComboBoxItem("25に変更", 25);
mctx->genComboBoxItem("26に変更", 26);
mctx->genComboBoxItem("27に変更", 27);
mctx->genComboBoxItem("28に変更", 28);
mctx->genComboBoxItem("29に変更", 29);
mctx->genComboBoxItem("30に変更", 30);
mctx->genComboBoxItem("31に変更", 31);
mctx->genComboBoxItem("32に変更", 32);
mctx->genComboBoxItem("33に変更", 33);
mctx->genComboBoxItem("34に変更", 34);
mctx->genComboBoxItem("35に変更", 35);
mctx->genComboBoxItem("36に変更", 36);
mctx->genComboBoxItem("37に変更", 37);
mctx->genComboBoxItem("38に変更", 38);
mctx->genComboBoxItem("39に変更", 39);
mctx->genComboBoxItem("40に変更", 40);
mctx->genComboBoxItem("41に変更", 41);
mctx->genComboBoxItem("42に変更", 42);
mctx->genComboBoxItem("43に変更", 43);
mctx->genComboBoxItem("44に変更", 44);
mctx->genComboBoxItem("45に変更", 43); // possible bug?
mctx->genComboBoxItem("46に変更", 46);
mctx->genComboBoxItem("47に変更", 47);
mctx->genComboBoxItem("48に変更", 48);
mctx->genComboBoxItem("49に変更", 49);
mctx->genComboBoxItem("50に変更", 50);
mctx->genComboBoxItem("51に変更", 51);
mctx->genComboBoxItem("52に変更", 52);
mctx->genComboBoxItem("53に変更", 53);
mctx->genComboBoxItem("54に変更", 54);
mctx->genComboBoxItem("55に変更", 55);
mctx->genComboBoxItem("56に変更", 56);
mctx->genComboBoxItem("57に変更", 57);
mctx->genComboBoxItem("58に変更", 58);
mctx->genComboBoxItem("59に変更", 59);
mctx->genComboBoxItem("60に変更", 60);
mctx->genComboBoxItem("61に変更", 61);
mctx->genComboBoxItem("62に変更", 62);
mctx->genComboBoxItem("63に変更", 63);
mctx->endComboBox();
mctx->genCheckBox("環境タグデバッグ表示", &display_env_tag_debug, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genCheckBox("天気予報表デバッグ表示", &display_wether_debug, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genCheckBox("スケジュールビット表示", &display_schedule_bit, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->startComboBox("雨を降らせる", &start_rain, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
mctx->genComboBoxItem("無し", 0);
mctx->genComboBoxItem("小雨", 1);
mctx->genComboBoxItem("大雨", 2);
mctx->genComboBoxItem("曇る", 3);
mctx->genComboBoxItem("晴れに戻す", 4);
mctx->genComboBoxItem("カミナリ", 5);
mctx->genComboBoxItem("カミナリ&大雨", 6);
mctx->endComboBox();
mctx->genCheckBox("エフェクトライトモニタ", &effect_light_monitor, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->startComboBox("ポイントライトモニタ", &point_light_monitor, 0, NULL, 0xffff, 0xffff,
0x100, 0x1a);
mctx->genComboBoxItem("しない", 0);
mctx->genComboBoxItem("ID一覧", 1);
mctx->genComboBoxItem("位置も表示", 2);
mctx->endComboBox();
mctx->genLabel("", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genCheckBox("settingTevStructをしない", &no_setting_tevstr, 1, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
mctx->genCheckBox("colortypeをしない", &no_color_type, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
mctx->genNode("ライト設定", &light, 0, 0);
mctx->genNode("VRボックス", &vrbox, 0, 0);
mctx->genNode("飽和加算設定", &bloom, 0, 0);
mctx->genNode("環境エフェクト色々", &navy, 0, 0);
mctx->genNode("エフェクトライト", &effLight, 0, 0);
mctx->genNode("", &wind, 0, 0);
mctx->genNode("デモライト", &demoLight, 0, 0);
mctx->genNode("パーティクル設定", &particleLight, 0, 0);
}
#endif
void dScnKy_env_light_c::drawKankyo() {
setSunpos();
SetBaseLight();
setLight();
dKy_setLight_nowroom(g_env_light.PrevCol);
}
void dKy_undwater_filter_draw() {
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
cXyz size;
f32 var_f30 = 60.0f;
static cXyz S_old_cameye(0.0f, 0.0f, 0.0f);
static cXyz S_old_camctr(0.0f, 0.0f, 0.0f);
if (dKy_camera_water_in_status_check()) {
f32 dist_to_old = camera->lookat.eye.abs(S_old_cameye);
if (dist_to_old > 100.0f) {
dist_to_old = 100.0f;
}
if (g_env_light.field_0x1258 > 1.0f - (dist_to_old / 100.0f)) {
cLib_addCalc(&g_env_light.field_0x1258, 1.0f - (dist_to_old / 100.0f), 0.5f, 0.05f,
0.0001f);
}
dist_to_old = camera->lookat.center.abs(S_old_camctr);
if (dist_to_old > 100.0f) {
dist_to_old = 100.0f;
}
if (g_env_light.field_0x1258 > 1.0f - (dist_to_old / 100.0f)) {
cLib_addCalc(&g_env_light.field_0x1258, 1.0f - (dist_to_old / 100.0f), 0.5f, 0.05f,
0.0001f);
}
S_old_cameye = camera->lookat.eye;
S_old_camctr = camera->lookat.center;
mDoMtx_stack_c::transS(0.0f, 0.0f, 0.0f);
size.x = 0.00524f;
size.y = 0.00524f;
size.z = 0.00524f;
#if !PLATFORM_GCN
size.x *= mDoGph_gInf_c::getScale();
#endif
if (g_env_light.undwater_ef_model != NULL) {
J3DGXColor sp8;
g_env_light.undwater_ef_model->setBaseScale(size);
g_env_light.undwater_ef_model->setBaseTRMtx(mDoMtx_stack_c::get());
if (g_env_light.undwater_btk != NULL) {
g_env_light.undwater_btk->setPlaySpeed(2.0f + (35.0f * (1.0f - g_env_light.field_0x1258)));
g_env_light.undwater_btk->entry(g_env_light.undwater_ef_model->getModelData());
g_env_light.undwater_btk->play();
dComIfGd_setXluList2DScreen();
mDoExt_modelUpdateDL(g_env_light.undwater_ef_model);
dComIfGd_setList();
}
}
}
}
static int dKy_Draw(sub_kankyo__class* i_this) {
(void)i_this;
g_env_light.drawKankyo();
#if DEBUG
if ((dDebugPad.Enable(1) || g_kankyoHIO.field_0x15) && g_kankyoHIO.field_0x17) {
dKydb_HIO_debug_draw();
}
if (dDebugPad.Enable(2)) {
dKydb_HIO_winddebug_draw();
}
dKydb_winddisp_draw();
dKydb_dungeonlight_draw();
#endif
return 1;
}
static int dKy_Execute(sub_kankyo__class* i_this) {
(void)i_this;
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
g_env_light.exeKankyo();
dKyw_wind_set();
dKy_twilight_camelight_set();
#if DEBUG
if (g_kankyoHIO.display_schedule_bit) {
dDbVw_Report(40, 80, "schbit[0x%02x] timer[%d]", dKy_get_schbit(), dKy_get_schbit_timer());
}
if (!dDebugPad.Enable(1)) {
// NOTE: a g_kankyoHIO load is generated here but nothing is done with it
g_kankyoHIO.display_schedule_bit;
}
if (dDebugPad.Enable(2)) {
dKydb_HIO_debug_Wind();
}
if (g_kankyoHIO.effect_light_monitor) {
dKydb_efplight_monitor();
}
if (g_kankyoHIO.point_light_monitor) {
dKydb_plight_monitor();
}
debug_actor_create();
#endif
return 1;
}
static int dKy_IsDelete(sub_kankyo__class* i_this) {
return 1;
}
static int dKy_Delete(sub_kankyo__class* i_this) {
(void)i_this;
plight_init();
mDoAud_mEnvse_resetScene();
if (g_env_light.undwater_ef_heap != NULL) {
mDoExt_destroySolidHeap(g_env_light.undwater_ef_heap);
}
#if DEBUG
mDoHIO_DELETE_CHILD(g_kankyoHIO.field_0x1a);
#endif
return 1;
}
static int dKy_Create(void* i_this) {
kankyo_class* kankyo = (kankyo_class*)i_this;
BOOL next_time_set = false;
stage_envr_info_class* stage_envr_p = dComIfGp_getStageEnvrInfo();
if (stage_envr_p != NULL && dComIfGp_getStartStageRoomNo() != -1) {
stage_envr_p += dComIfGp_getStartStageRoomNo();
if (stage_envr_p->pselect_id[64] != 0) {
mDoGph_gInf_c::getBloom()->create();
#if DEBUG
OS_REPORT("\n-----------------------------------");
OS_REPORT("\n飽和加算用にRAMを確保しました! ");
OS_REPORT("\n-----------------------------------\n");
#endif
}
}
envcolor_init();
#if DEBUG
g_kankyoHIO.field_0x1a = mDoHIO_CREATE_CHILD("環境", &g_kankyoHIO);
#endif
g_env_light.field_0x12b0 = 0;
g_env_light.field_0x1254 = 1.0f;
g_env_light.plight_near_pos.x = 0.0f;
g_env_light.plight_near_pos.y = 0.0f;
g_env_light.plight_near_pos.z = 0.0f;
g_env_light.senses_mode = 0;
g_env_light.senses_effect_strength = 0.0f;
g_env_light.now_senses_effect = 0;
dKy_setLight_init();
dKy_Sound_init();
dKyw_wind_set();
dungeonlight_init();
dKy_setLight_nowroom(dComIfGp_roomControl_getStayNo());
#if DEBUG
g_kankyoHIO.navy.field_0x22a = 0;
#endif
g_env_light.pol_efftbl = (dKy_pol_efftbl_struct*)dComIfG_getStageRes("pol_efftbl.dat");
g_env_light.pol_effcol = (dKy_pol_effcol_struct*)dComIfG_getStageRes("pol_effcol.dat");
g_env_light.pol_efftbl2 = (dKy_pol_efftbl_struct*)dComIfG_getStageRes("pol_efftbl2.dat");
g_env_light.pol_effcol2 = (dKy_pol_effcol_struct*)dComIfG_getStageRes("pol_effcol2.dat");
g_env_light.pol_sound = (dKy_pol_sound_struct*)dComIfG_getStageRes("pol_sound.dat");
g_env_light.pol_arg = (dKy_pol_arg_struct*)dComIfG_getStageRes("pol_arg.dat");
g_env_light.colordata_tbl = (dKy_color_data_struct*)dComIfG_getStageRes("colordata_tbl.dat");
if (g_env_light.nexttime != -1.0f) {
next_time_set = true;
dComIfGs_setTime(g_env_light.nexttime);
}
if (dKy_darkworld_check()) {
if (g_env_light.old_time == -1.0f) {
g_env_light.old_time = dComIfGs_getTime();
}
} else if (g_env_light.old_time != -1.0f) {
if (!next_time_set) {
dComIfGs_setTime(g_env_light.old_time);
}
g_env_light.old_time = -1.0f;
}
g_env_light.nexttime = -1.0f;
#if DEBUG
if (strcmp(dComIfGp_getStartStageName(), "T_SASA0") == 0) {
dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[142]);
dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[167]);
}
#endif
return cPhs_COMPLEATE_e;
}
static leafdraw_method_class l_dKy_Method = {
(process_method_func)dKy_Create, (process_method_func)dKy_Delete,
(process_method_func)dKy_Execute, (process_method_func)dKy_IsDelete,
(process_method_func)dKy_Draw,
};
extern kankyo_process_profile_definition g_profile_KANKYO = {
fpcLy_CURRENT_e,
1,
fpcPi_CURRENT_e,
PROC_KANKYO,
&g_fpcLf_Method.base,
sizeof(sub_kankyo__class),
0,
0,
&g_fopKy_Method,
2,
&l_dKy_Method,
};
static void dummy_str_0x40a0() {
char* str1 = "ステージが変わったときかなぁ~???";
char* str2 = "POINTLIGHT RECALL![%f][%f][%f]";
}
void dKy_setLight_init() {
for (int i = 0; i < 8; i++) {
lightStatusData[i] = lightStatusBase;
}
}
void dKy_setLight() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->sun_light_pos = kankyo->sun_pos;
}
void dKy_GlobalLight_set() {
MtxP view_mtx = j3dSys.getViewMtx();
for (int i = 0; i < 8; i++) {
LightStatus* light_status = &lightStatusData[i];
Vec light_pos;
cMtx_multVec(view_mtx, &light_status->position, &light_pos);
GXLightObj light_obj;
GXInitLightPos(&light_obj, light_pos.x, light_pos.y, light_pos.z);
GXInitLightDir(&light_obj, light_status->mLightDir.x, light_status->mLightDir.y,
light_status->mLightDir.z);
GXInitLightColor(&light_obj, light_status->color);
if (light_status->mRefDist <= 0.0f) {
light_status->mRefDist = 0.000001f;
}
GXInitLightDistAttn(&light_obj, light_status->mRefDist, light_status->mRefBrightness,
light_status->mDistFn);
GXInitLightSpot(&light_obj, light_status->mCutoff, light_status->mSpotFn);
GXLoadLightObjImm(&light_obj, (GXLightID)lightMaskData[i]);
}
}
inline int dLVI_getSWLight(stage_pure_lightvec_info_class* i_info) {
return i_info->flags & 0x80;
}
BOOL dKy_lightswitch_check(stage_pure_lightvec_info_class* stage_light_info_p, char room_no) {
BOOL is_switch = TRUE;
if (stage_light_info_p->switch_no != 0xFF) {
if (!dLVI_getSWLight(stage_light_info_p)) {
if (dComIfGs_isSwitch(stage_light_info_p->switch_no, room_no)) {
is_switch = FALSE;
}
} else if (!dComIfGs_isSwitch(stage_light_info_p->switch_no, room_no)) {
is_switch = FALSE;
}
}
return is_switch;
}
void dKy_setLight_nowroom_common(char room_no, f32 light_ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
fopAc_ac_c* player = dComIfGp_getPlayer(0);
MtxP view_mtx = j3dSys.getViewMtx();
dKy_tevstr_c* room_tevstr = dComIfGp_roomControl_getTevStr(room_no);
if (dComIfGp_roomControl_getStatusRoomDt(room_no) != NULL) {
int room_light_info_num;
int eflight_id;
stage_pure_lightvec_info_class* room_light_info =
dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfo();
room_light_info_num = dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfoNum();
if (room_light_info_num > 6) {
room_light_info_num = 6;
}
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
room_light_info_num = g_kankyoHIO.dungeonLight.usedLights;
}
#endif
lightMask = 0;
for (int i = 0; i < room_light_info_num; i++) {
if (room_light_info != NULL) {
lightMask |= lightMaskData[i + 2];
}
room_light_info++;
}
room_light_info = dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfo();
if (dKy_SunMoon_Light_Check() == TRUE && room_light_info == NULL) {
lightMask |= lightMaskData[2];
lightMask |= lightMaskData[3];
room_light_info_num = 2;
}
if (g_env_light.bgparts_active_light[0].mIndex != 0) {
lightMask |= 1;
}
if (g_env_light.bgparts_active_light[1].mIndex != 0) {
lightMask |= 2;
}
if (camera != 0) {
eflight_id = dKy_eflight_influence_id(camera->lookat.eye, 0);
if (eflight_id >= 0) {
dKy_bgparts_activelight_set(g_env_light.efplight[eflight_id], 1);
if (dKy_Indoor_check() == TRUE) {
g_env_light.field_0x10a0 = g_env_light.efplight[eflight_id]->mPosition;
dKy_shadow_mode_set(1);
}
} else {
dKy_bgparts_activelight_cut(1);
if (dKy_shadow_mode_check(1)) {
dKy_shadow_mode_reset(1);
}
}
}
for (int i = 0; i < 2; i++) {
if (g_env_light.bgparts_active_light[i].mIndex != 0 &&
0.0f != g_env_light.bgparts_active_light[i].mPow &&
(i != 1 || dMeter2Info_getWindowStatus() != 3))
{
lightStatusPt[i].position = g_env_light.bgparts_active_light[i].mPosition;
if (i == 0) {
lightStatusPt[i].mRefDist = g_env_light.bgparts_active_light[i].mPow * 0.01f;
} else {
lightStatusPt[i].mRefDist = g_env_light.bgparts_active_light[i].mPow * 0.01f;
}
lightStatusPt[i].mRefBrightness = 0.99999f;
lightStatusPt[i].field_0x1c = 1;
lightStatusPt[i].mDistFn = GX_DA_STEEP;
lightStatusPt[i].mSpotFn = GX_SP_OFF;
lightStatusPt[i].color.r = g_env_light.bgparts_active_light[i].mColor.r;
lightStatusPt[i].color.g = g_env_light.bgparts_active_light[i].mColor.g;
lightStatusPt[i].color.b = g_env_light.bgparts_active_light[i].mColor.b;
} else {
lightStatusPt[i].color.r = 0;
lightStatusPt[i].color.g = 0;
lightStatusPt[i].color.b = 0;
}
}
for (int i = 0; i < 6; i++) {
#if DEBUG
if (!g_kankyoHIO.light.m_HOSTIO_setting)
#endif
{
#if DEBUG
if (dComIfGp_roomControl_getStayNo() == room_no) {
g_kankyoHIO.dungeonLight.usedLights = room_light_info_num;
}
#endif
if (room_light_info != 0) {
if (i < room_light_info_num) {
(lightStatusPt + 2)[i].position.x = room_light_info[i].position.x;
(lightStatusPt + 2)[i].position.y = room_light_info[i].position.y;
(lightStatusPt + 2)[i].position.z = room_light_info[i].position.z;
if (dKy_lightswitch_check(&room_light_info[i], room_no) == TRUE) {
(lightStatusPt + 2)[i].mRefDist = room_light_info[i].radius;
} else {
(lightStatusPt + 2)[i].mRefDist = 0.000001f;
}
(lightStatusPt + 2)[i].mRefBrightness = 0.99999f;
(lightStatusPt + 2)[i].field_0x1c = 0;
(lightStatusPt + 2)[i].mSpotFn = (GXSpotFn)room_light_info[i].spot_type;
(lightStatusPt + 2)[i].mDistFn = (GXDistAttnFn)room_light_info[i].dist_atten_type;
(lightStatusPt + 2)[i].mCutoff = room_light_info[i].spotCutoff;
dKy_lightdir_set(room_light_info[i].directionX, room_light_info[i].directionY,
&(lightStatusPt + 2)[i].mLightDir);
} else {
(lightStatusPt + 2)[i].mRefDist = 0.0f;
(lightStatusPt + 2)[i].mRefBrightness = 0.99999f;
(lightStatusPt + 2)[i].field_0x1c = 0;
(lightStatusPt + 2)[i].mDistFn = GX_DA_OFF;
(lightStatusPt + 2)[i].mSpotFn = GX_SP_OFF;
(lightStatusPt + 2)[i].mCutoff = 90.0f;
}
}
if (dKy_SunMoon_Light_Check() == TRUE && i <= 1) {
lightMask |= lightMaskData[2];
lightMask |= lightMaskData[3];
if (i == 0) {
(lightStatusPt + 2)[i].position = kankyo->sun_pos;
} else if (camera != 0) {
(lightStatusPt + 2)[i].position = camera->lookat.eye + kankyo->moon_pos;
} else {
(lightStatusPt + 2)[i].position = kankyo->moon_pos;
}
(lightStatusPt + 2)[i].mRefDist = 10000.0f;
(lightStatusPt + 2)[i].mRefBrightness = 0.99999f;
(lightStatusPt + 2)[i].field_0x1c = 1;
(lightStatusPt + 2)[i].mDistFn = GX_DA_STEEP;
(lightStatusPt + 2)[i].mSpotFn = GX_SP_OFF;
}
if (lightMask & lightMaskData[i + 2]) {
if (room_tevstr == NULL) {
JUT_ASSERT(12633, FALSE);
}
J3DLightInfo* room_light = room_tevstr->mLights[i].getLightInfo();
if (room_light != NULL) {
(lightStatusPt + 2)[i].color =
dKy_light_influence_col(&room_light->mColor, light_ratio);
} else {
(lightStatusPt + 2)[i].color =
dKy_light_influence_col(&g_env_light.dungeonlight[i].mColor, light_ratio);
}
#if DEBUG
if (!g_kankyoHIO.light.m_HOSTIO_setting)
#endif
{
if (room_no == dComIfGp_roomControl_getStayNo() && room_light_info != NULL &&
i < room_light_info_num)
{
g_env_light.dungeonlight[i].mPosition = (lightStatusPt + 2)[i].position;
g_env_light.dungeonlight[i].mRefDistance = (lightStatusPt + 2)[i].mRefDist;
g_env_light.dungeonlight[i].mCutoffAngle = (lightStatusPt + 2)[i].mCutoff;
g_env_light.dungeonlight[i].mAngleAttenuation = (lightStatusPt + 2)[i].mSpotFn;
g_env_light.dungeonlight[i].mDistAttenuation = (lightStatusPt + 2)[i].mDistFn;
g_env_light.dungeonlight[i].mAngleX = room_light_info[i].directionX;
g_env_light.dungeonlight[i].mAngleY = room_light_info[i].directionY;
}
}
} else {
(lightStatusPt + 2)[i].color.r = 0;
(lightStatusPt + 2)[i].color.g = 0;
(lightStatusPt + 2)[i].color.b = 0;
}
}
#if DEBUG
else {
(lightStatusPt + 2)[i].position = g_env_light.dungeonlight[i].mPosition;
(lightStatusPt + 2)[i].mRefDist = g_env_light.dungeonlight[i].mRefDistance;
#if DEBUG
(lightStatusPt + 2)[i].mRefBrightness = 0.99999f;
#else
(lightStatusPt + 2)[i].mRefBrightness = g_env_light.dungeonlight[i].mRefDistance;
#endif
(lightStatusPt + 2)[i].field_0x1c = 0;
(lightStatusPt + 2)[i].mSpotFn = (GXSpotFn)g_env_light.dungeonlight[i].mAngleAttenuation;
(lightStatusPt + 2)[i].mDistFn = (GXDistAttnFn)g_env_light.dungeonlight[i].mDistAttenuation;
(lightStatusPt + 2)[i].mCutoff = g_env_light.dungeonlight[i].mCutoffAngle;
dKy_lightdir_set(g_env_light.dungeonlight[i].mAngleX,
g_env_light.dungeonlight[i].mAngleY,
&(lightStatusPt + 2)[i].position);
if (g_kankyoHIO.dungeonLight.usedLights < i) {
lightMask |= lightMaskData[i + 2];
(lightStatusPt + 2)[i].color = dKy_light_influence_col(
&g_env_light.dungeonlight[i].mColor,
g_env_light.bg_light_influence * light_ratio);
} else {
(lightStatusPt + 2)[i].color.r = 0;
(lightStatusPt + 2)[i].color.g = 0;
(lightStatusPt + 2)[i].color.b = 0;
}
}
#endif
}
for (int i = 0; i < 6; i++) {
if (kankyo->field_0x0c18[i].field_0x26 == 1) {
for (int j = 0; j < 6; j++) {
if (!(lightMask & lightMaskData[j + 2])) {
lightMask |= lightMaskData[j + 2];
if (kankyo->field_0x0c18[i].mColor.a == 254 ||
kankyo->field_0x0c18[i].mColor.a == 253)
{
dKy_twi_wolflight_set(i);
}
if (room_tevstr->Type < 16) {
(lightStatusPt + 2)[j].position.x = kankyo->field_0x0c18[i].mPos.x;
(lightStatusPt + 2)[j].position.y = kankyo->field_0x0c18[i].mPos.y;
(lightStatusPt + 2)[j].position.z = kankyo->field_0x0c18[i].mPos.z;
} else {
(lightStatusPt + 2)[j].position.x = kankyo->field_0x0c18[i].mPos.x;
if (i == 0) {
(lightStatusPt + 2)[j].position.y =
kankyo->field_0x0c18[i].mPos.y + g_env_light.field_0x127c;
} else {
(lightStatusPt + 2)[j].position.y =
200.0f + kankyo->field_0x0c18[i].mPos.y;
}
(lightStatusPt + 2)[j].position.z = kankyo->field_0x0c18[i].mPos.z;
}
(lightStatusPt + 2)[j].color = dKy_light_influence_col(&kankyo->field_0x0c18[i].mColor, light_ratio);
(lightStatusPt + 2)[j].mRefDist = kankyo->field_0x0c18[i].mRefDistance;
(lightStatusPt + 2)[j].mRefBrightness = 0.99999f;
(lightStatusPt + 2)[j].field_0x1c = 1;
(lightStatusPt + 2)[j].mSpotFn = (GXSpotFn)kankyo->field_0x0c18[i].mAngleAttenuation;
(lightStatusPt + 2)[j].mDistFn = (GXDistAttnFn)kankyo->field_0x0c18[i].mDistAttenuation;
(lightStatusPt + 2)[j].mCutoff = kankyo->field_0x0c18[i].mCutoffAngle;
dKy_lightdir_set(kankyo->field_0x0c18[i].mAngleX,
kankyo->field_0x0c18[i].mAngleY,
&(lightStatusPt + 2)[j].mLightDir);
break;
}
}
}
}
dKy_GlobalLight_set();
}
}
void dKy_setLight_nowroom(char room_no) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = dComIfGp_getCamera(0);
fopAc_ac_c* player = dComIfGp_getPlayer(0);
MtxPtr var_r28 = j3dSys.getViewMtx();
if (camera != NULL) {
dKy_setLight_nowroom_common(room_no, 1.0f);
}
}
void dKy_setLight_nowroom_grass(char room_no, f32 light_ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0);
MtxP view_mtx = j3dSys.getViewMtx();
dStage_FileList_dt_c* filelist = NULL;
if (dComIfGp_roomControl_getStatusRoomDt(room_no) != NULL) {
filelist = dComIfGp_roomControl_getStatusRoomDt(room_no)->getFileListInfo();
if (filelist == NULL) {
return;
}
} else {
return;
}
int grass_light = dStage_FileList_dt_GRASSLIGHT(filelist);
#if DEBUG
if (g_kankyoHIO.navy.grass_light_debug) {
grass_light = g_kankyoHIO.navy.grass_light_influence_ratio;
} else if (room_no == dComIfGp_roomControl_getStayNo()) {
g_kankyoHIO.navy.grass_light_influence_ratio = grass_light;
}
#endif
f32 grass_light_ratio;
if (grass_light >= 0xFF) {
grass_light_ratio = 1.0f;
} else {
grass_light_ratio = grass_light / 100.0f;
}
if (light_ratio == 0.0f) {
dKy_setLight_nowroom_common(room_no, grass_light_ratio);
} else {
dKy_setLight_nowroom_common(room_no, light_ratio);
}
}
f32 dKy_move_room_ratio(dKy_tevstr_c* tevstr_p, s8* room_no_p) {
f32 ratio = 1.0f;
if (memcmp(dComIfGp_getStartStageName(), "D_MN", 4) == 0 && g_env_light.mColPatMode == 0 &&
g_env_light.mColPatModeGather == 0 && tevstr_p->pat_ratio > 0.0f &&
tevstr_p->pat_ratio < 1.0f)
{
if (tevstr_p->pat_ratio < 0.5f) {
if (tevstr_p->YukaCol == 0xFF) {
*room_no_p = tevstr_p->PrevCol;
ratio = fabsf(2.0f * (0.5f - tevstr_p->pat_ratio));
} else {
*room_no_p = tevstr_p->room_no;
ratio = fabsf(2.0f * (tevstr_p->pat_ratio - 0.5f));
}
} else {
*room_no_p = tevstr_p->room_no;
ratio = fabsf(2.0f * (tevstr_p->pat_ratio - 0.5f));
}
if (ratio <= 0.0f) {
ratio = 0.000001f;
}
}
return ratio;
}
void dKy_setLight_nowroom_actor(dKy_tevstr_c* tevstr_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
Vec light_pos;
Vec sp3C;
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
fopAc_ac_c* player = dComIfGp_getPlayer(0);
MtxP view_mtx = j3dSys.getViewMtx();
s8 room_no = tevstr_p->room_no;
f32 light_ratio = 1.0f;
if (tevstr_p->Type == 9 || tevstr_p->Type == 10) {
light_ratio = dKy_move_room_ratio(tevstr_p, &room_no);
}
if (tevstr_p->Type == 14 || tevstr_p->Type == 12 || tevstr_p->Type == 13) {
return;
}
if (dComIfGp_roomControl_getStatusRoomDt(room_no) != NULL) {
J3DLightInfo* light;
stage_pure_lightvec_info_class* room_lights =
dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfo();
int room_light_num = dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfoNum();
if (room_light_num > 6) {
room_light_num = 6;
}
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
room_light_num = g_kankyoHIO.dungeonLight.usedLights;
}
#endif
lightMask = 0;
for (int i = 0; i < room_light_num; i++) {
if (room_lights != NULL) {
lightMask |= lightMaskData[i + 2];
}
room_lights++;
}
room_lights = dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfo();
f32 var_f30;
f32 var_f29;
for (int i = 0; i < 6; i++) {
light = tevstr_p->mLights[i].getLightInfo();
if (
#if DEBUG
!g_kankyoHIO.light.m_HOSTIO_setting && !g_kankyoHIO.vrbox.m_VrboxSetting
#else
true
#endif
) {
if (view_mtx != NULL) {
if (room_lights != 0 && i < room_light_num) {
sp3C.x = room_lights[i].position.x;
sp3C.y = room_lights[i].position.y;
sp3C.z = room_lights[i].position.z;
dKy_GXInitLightSpot(light, room_lights[i].spotCutoff, room_lights[i].spot_type);
if (dKy_lightswitch_check(&room_lights[i], room_no) == TRUE) {
var_f29 = light_ratio * room_lights[i].radius;
} else {
var_f29 = 0.000001f;
}
dKy_GXInitLightDistAttn(light, var_f29, 0.99999f,
room_lights[i].dist_atten_type);
dKy_lightdir_set(room_lights[i].directionX, room_lights[i].directionY,
&light->mLightDirection);
light->mLightDirection.x = -light->mLightDirection.x;
light->mLightDirection.y = -light->mLightDirection.y;
light->mLightDirection.z = -light->mLightDirection.z;
}
if (dKy_SunMoon_Light_Check() == TRUE && i <= 1) {
lightMask |= lightMaskData[2];
lightMask |= lightMaskData[3];
if (i == 0) {
sp3C.x = kankyo->sun_pos.x;
sp3C.y = kankyo->sun_pos.y;
sp3C.z = kankyo->sun_pos.z;
} else if (camera != NULL) {
sp3C.x = camera->lookat.eye.x + kankyo->moon_pos.x;
sp3C.y = camera->lookat.eye.y + kankyo->moon_pos.y;
sp3C.z = camera->lookat.eye.z + kankyo->moon_pos.z;
} else {
sp3C.x = kankyo->moon_pos.x;
sp3C.y = kankyo->moon_pos.y;
sp3C.z = kankyo->moon_pos.z;
}
dKy_GXInitLightSpot(light, 90.0f, GX_SP_OFF);
var_f29 = 10000.0f;
dKy_GXInitLightDistAttn(light, var_f29, 0.99999f, GX_DA_STEEP);
}
cMtx_multVec(view_mtx, &sp3C, &light_pos);
light->mLightPosition = light_pos;
if (1.0f != light_ratio) {
light->mColor.r *= light_ratio;
light->mColor.g *= light_ratio;
light->mColor.b *= light_ratio;
}
}
if (!(lightMask & lightMaskData[i + 2])) {
light->mColor.r = 0;
light->mColor.g = 0;
light->mColor.b = 0;
}
#if DEBUG
if ((tevstr_p->Type == 10 || tevstr_p->Type == 9) &&
dComIfGp_roomControl_getStayNo() == room_no) {
if (room_lights != NULL) {
if (i < room_light_num) {
g_env_light.dungeonlight[i].mPosition = sp3C;
if (dKy_SunMoon_Light_Check() == TRUE) {
if (i <= 1) {
g_env_light.dungeonlight[i].mRefDistance = 10000.0f;
} else {
g_env_light.dungeonlight[i].mRefDistance =
room_lights[i].radius;
}
}
}
} else {
if (dKy_SunMoon_Light_Check() == TRUE) {
if (i <= 1) {
g_kankyoHIO.dungeonLight.usedLights = 2;
g_env_light.dungeonlight[i].mPosition = sp3C;
if (dKy_SunMoon_Light_Check() == TRUE) {
if (i <= 1) {
g_env_light.dungeonlight[i].mRefDistance = 10000.0f;
}
}
}
}
}
}
#endif
light = tevstr_p->mLightObj.getLightInfo();
if (1.0f != light_ratio) {
light->mColor.r *= light_ratio;
light->mColor.g *= light_ratio;
light->mColor.b *= light_ratio;
}
} else {
if (view_mtx != NULL) {
sp3C.x = g_env_light.dungeonlight[i].mPosition.x;
sp3C.y = g_env_light.dungeonlight[i].mPosition.y;
sp3C.z = g_env_light.dungeonlight[i].mPosition.z;
cMtx_multVec(view_mtx, &sp3C, &light_pos);
light->mLightPosition = light_pos;
light->mLightPosition.x = light_pos.x;
light->mLightPosition.y = light_pos.y;
light->mLightPosition.z = light_pos.z;
dKy_GXInitLightSpot(light, g_env_light.dungeonlight[i].mCutoffAngle,
g_env_light.dungeonlight[i].mAngleAttenuation);
var_f30 = g_env_light.dungeonlight[i].mRefDistance;
if (var_f30 <= 0.0f) {
var_f30 = 0.000001f;
}
dKy_GXInitLightDistAttn(light, var_f30, 0.99999f,
g_env_light.dungeonlight[i].mDistAttenuation);
dKy_lightdir_set(g_env_light.dungeonlight[i].mAngleX,
g_env_light.dungeonlight[i].mAngleY,
&light->mLightDirection);
light->mLightDirection.x = -light->mLightDirection.x;
light->mLightDirection.y = -light->mLightDirection.y;
light->mLightDirection.z = -light->mLightDirection.z;
}
if (i < g_kankyoHIO.dungeonLight.usedLights) {
lightMask |= lightMaskData[i + 2];
light->mColor = dKy_light_influence_col(
&g_env_light.dungeonlight[i].mColor, tevstr_p->field_0x374);
} else {
light->mColor.r = 0;
light->mColor.g = 0;
light->mColor.b = 0;
}
}
}
for (int i_sp30 = 0; i_sp30 < 6; i_sp30++) {
if (kankyo->field_0x0c18[i_sp30].field_0x26 == 1 && view_mtx != NULL) {
for (int j_sp14 = 0; j_sp14 < 6; j_sp14++) {
if (!(lightMask & lightMaskData[j_sp14 + 2])) {
lightMask |= lightMaskData[j_sp14 + 2];
light = tevstr_p->mLights[j_sp14].getLightInfo();
if (kankyo->field_0x0c18[i_sp30].mColor.a == 254 ||
kankyo->field_0x0c18[i_sp30].mColor.a == 253)
{
dKy_twi_wolflight_set(i_sp30);
}
light->mColor = dKy_light_influence_col(&kankyo->field_0x0c18[i_sp30].mColor,
tevstr_p->field_0x374);
if (tevstr_p->Type < 16) {
sp3C.x = kankyo->field_0x0c18[i_sp30].mPos.x;
sp3C.y = kankyo->field_0x0c18[i_sp30].mPos.y;
sp3C.z = kankyo->field_0x0c18[i_sp30].mPos.z;
if (kankyo->field_0x0c18[i_sp30].mColor.a == 253) {
light->mColor.r = light->mColor.r * 0.65f;
light->mColor.g = light->mColor.g * 0.65f;
light->mColor.b = light->mColor.b * 0.65f;
}
} else {
sp3C.x = kankyo->field_0x0c18[i_sp30].mPos.x;
if (i_sp30 == 0) {
sp3C.y = kankyo->field_0x0c18[i_sp30].mPos.y + g_env_light.field_0x127c;
} else {
sp3C.y = 200.0f + kankyo->field_0x0c18[i_sp30].mPos.y;
}
sp3C.z = kankyo->field_0x0c18[i_sp30].mPos.z;
}
dKy_GXInitLightSpot(light, kankyo->field_0x0c18[i_sp30].mCutoffAngle,
kankyo->field_0x0c18[i_sp30].mAngleAttenuation);
var_f30 = kankyo->field_0x0c18[i_sp30].mRefDistance * light_ratio;
if (var_f30 <= 0.0f) {
var_f30 = 0.000001f;
}
dKy_GXInitLightDistAttn(light, var_f30, 0.99999f,
kankyo->field_0x0c18[i_sp30].mDistAttenuation);
cMtx_multVec(view_mtx, &sp3C, &light_pos);
light->mLightPosition = light_pos;
dKy_lightdir_set(kankyo->field_0x0c18[i_sp30].mAngleX,
kankyo->field_0x0c18[i_sp30].mAngleY, &light->mLightDirection);
light->mLightDirection.x = -light->mLightDirection.x;
light->mLightDirection.y = -light->mLightDirection.y;
light->mLightDirection.z = -light->mLightDirection.z;
break;
}
}
}
}
}
}
void dKy_setLight_again() {
dKy_GlobalLight_set();
}
void dKy_Global_amb_set(dKy_tevstr_c* tevstr_p) {
GXColor color;
color.r = tevstr_p->AmbCol.r;
color.g = tevstr_p->AmbCol.g;
color.b = tevstr_p->AmbCol.b;
color.a = tevstr_p->AmbCol.a;
if (tevstr_p->Type == 2 || tevstr_p->Type == 3) {
if (dKy_darkworld_check()) {
if (tevstr_p->Type == 2) {
color.r = 18;
color.g = 18;
color.b = 18;
color.a = 0;
} else {
color.r = 12;
color.g = 12;
color.b = 12;
color.a = 0;
}
}
} else if ((tevstr_p->Type >= 1 && tevstr_p->Type <= 7) ||
(tevstr_p->Type == 9 && dKy_darkworld_check()))
{
color.r = 0;
color.g = 0;
color.b = 0;
color.a = 0;
}
GXSetChanAmbColor(GX_COLOR0A0, color);
}
cXyz dKy_light_influence_pos(int light_id) {
if (light_id < 0) {
light_id = 0;
}
return g_env_light.pointlight[light_id]->mPosition;
}
cXyz dKy_plight_near_pos() {
return g_env_light.plight_near_pos;
}
void dKy_mock_light_every_set(LIGHT_INFLUENCE* light_inf_p) {
int i;
BOOL var_r30 = 0;
for (i = 50; i < 100; i++) {
if (g_env_light.pointlight[i] == NULL) {
var_r30 = 1;
g_env_light.pointlight[i] = light_inf_p;
g_env_light.pointlight[i]->mIndex = i + 1;
break;
}
}
#if DEBUG
if (i >= 100 && !var_r30) {
OS_WARNING("\nPOINTLIGHT2 COUNT OVER!!!\n");
}
#endif
}
void dKy_plight_set(LIGHT_INFLUENCE* light_inf_p) {
int i;
BOOL var_r30 = 0;
for (i = 0; i < 100; i++) {
if (g_env_light.pointlight[i] == light_inf_p) {
return;
}
}
for (i = 0; i < 50; i++) {
if (g_env_light.pointlight[i] == NULL && !var_r30) {
var_r30 = 1;
g_env_light.pointlight[i] = light_inf_p;
g_env_light.pointlight[i]->mIndex = i + 1;
#if !DEBUG
break;
#endif
}
}
#if DEBUG
if (i >= 100 && !var_r30) {
OS_WARNING("\nPOINTLIGHT COUNT OVER!!!\n");
}
#endif
}
void dKy_dalkmist_inf_set(DALKMIST_INFLUENCE* dalkmist_inf_p) {
int i;
for (i = 0; i < 10; i++) {
if (g_env_light.dalkmist_influence[i] == NULL) {
g_env_light.dalkmist_influence[i] = dalkmist_inf_p;
g_env_light.dalkmist_influence[i]->mIndex = i;
break;
}
}
}
void dKy_dalkmist_inf_cut(DALKMIST_INFLUENCE* dalkmist_inf_p) {
if (dalkmist_inf_p != NULL) {
if (dalkmist_inf_p->mIndex < 10) {
g_env_light.dalkmist_influence[dalkmist_inf_p->mIndex] = NULL;
}
}
}
void dKy_plight_priority_set(LIGHT_INFLUENCE* light_inf_p) {
int i = 0;
for (; i < 50; i++) {
if (g_env_light.pointlight[i] == NULL) {
g_env_light.pointlight[i] = light_inf_p;
g_env_light.pointlight[i]->mIndex = -(i + 1);
break;
}
}
if (i >= 50) {
OSReport_Warning("\nPOINTLIGHT COUNT OVER!!!\n");
}
}
void dKy_plight_cut(LIGHT_INFLUENCE* light_inf_p) {
int idx;
if (light_inf_p == NULL) {
OS_REPORT("\nd_kankyo.cpp dKy_plight_cut NULL!!");
} else if (light_inf_p->mIndex == 0) {
OS_REPORT("\x1b[46m\nポイントライト空削除!\n\x1b[m");
} else {
if (light_inf_p->mIndex < 0) {
light_inf_p->mIndex *= -1;
}
idx = (light_inf_p->mIndex & 0xFFF) - 1;
if (idx < 50) {
g_env_light.pointlight[idx] = NULL;
}
}
}
void dKy_efplight_set(LIGHT_INFLUENCE* light_inf_p) {
int i;
for (i = 0; i < 5; i++) {
if (g_env_light.efplight[i] == light_inf_p) {
return;
}
}
for (i = 0; i < 5; i++) {
if (g_env_light.efplight[i] == NULL) {
g_env_light.efplight[i] = light_inf_p;
g_env_light.efplight[i]->mIndex = i + 1;
break;
}
}
#if DEBUG
if (i >= 5) {
OS_REPORT("\nEffectLIGHT COUNT OVER!!!");
}
#endif
}
void dKy_efplight_cut(LIGHT_INFLUENCE* light_inf_p) {
int idx;
if (light_inf_p == NULL) {
OS_REPORT("\nd_kankyo.cpp dKy_plight_cut NULL!!");
} else if (light_inf_p->mIndex == 0) {
OS_WARNING("\nEFLIGHT CUT nomi!\n");
} else {
idx = light_inf_p->mIndex - 1;
if (idx >= 0 && idx < 5) {
g_env_light.efplight[idx] = NULL;
}
}
}
void dKy_bgparts_activelight_set(LIGHT_INFLUENCE* light_inf_p, int bgpart_id) {
if (light_inf_p != NULL) {
memcpy(&g_env_light.bgparts_active_light[bgpart_id], light_inf_p, sizeof(LIGHT_INFLUENCE));
g_env_light.bgparts_active_light[bgpart_id].mIndex = bgpart_id + 1;
} else {
JUT_ASSERT(13758, FALSE);
}
}
void dKy_bgparts_activelight_cut(int bgpart_id) {
g_env_light.bgparts_active_light[bgpart_id].mIndex = 0;
}
void dKy_actor_addcol_amb_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.actor_addcol_amb.r = r * ratio;
g_env_light.actor_addcol_amb.g = g * ratio;
g_env_light.actor_addcol_amb.b = b * ratio;
}
void dKy_bg_addcol_amb_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.bg_addcol_amb.r = r * ratio;
g_env_light.bg_addcol_amb.g = g * ratio;
g_env_light.bg_addcol_amb.b = b * ratio;
}
void dKy_bg1_addcol_amb_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.bg1_addcol_amb.r = r * ratio;
g_env_light.bg1_addcol_amb.g = g * ratio;
g_env_light.bg1_addcol_amb.b = b * ratio;
}
void dKy_bg2_addcol_amb_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.bg2_addcol_amb.r = r * ratio;
g_env_light.bg2_addcol_amb.g = g * ratio;
g_env_light.bg2_addcol_amb.b = b * ratio;
}
void dKy_bg3_addcol_amb_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.bg3_addcol_amb.r = r * ratio;
g_env_light.bg3_addcol_amb.g = g * ratio;
g_env_light.bg3_addcol_amb.b = b * ratio;
}
void dKy_addcol_fog_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.addcol_fog.r = r * ratio;
g_env_light.addcol_fog.g = g * ratio;
g_env_light.addcol_fog.b = b * ratio;
}
void dKy_actor_addcol_set(s16 r, s16 g, s16 b, f32 ratio) {
dKy_actor_addcol_amb_set(r, g, b, ratio);
dKy_bg_addcol_amb_set(r, g, b, ratio);
dKy_bg1_addcol_amb_set(r, g, b, ratio);
dKy_bg2_addcol_amb_set(r, g, b, ratio);
dKy_bg3_addcol_amb_set(r, g, b, ratio);
}
void dKy_vrbox_addcol_sky0_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.vrbox_addcol_sky0.r = r * ratio;
g_env_light.vrbox_addcol_sky0.g = g * ratio;
g_env_light.vrbox_addcol_sky0.b = b * ratio;
}
void dKy_vrbox_addcol_kasumi_set(s16 r, s16 g, s16 b, f32 ratio) {
g_env_light.vrbox_addcol_kasumi.r = r * ratio;
g_env_light.vrbox_addcol_kasumi.g = g * ratio;
g_env_light.vrbox_addcol_kasumi.b = b * ratio;
}
void dKy_vrbox_addcol_set(s16 r, s16 g, s16 b, f32 ratio) {
dKy_vrbox_addcol_sky0_set(r, g, b, ratio);
dKy_vrbox_addcol_kasumi_set(r, g, b, ratio);
dKy_addcol_fog_set(r, g, b, ratio);
}
void dKy_fog_startendz_set(f32 param_0, f32 param_1, f32 ratio) {
if (ratio < 0.0f || ratio > 1.0f) {
OSReport_Warning("\ndKy_fog_startendz_set ratio error!\n");
ratio = 0.0f;
}
if (ratio < 0.0001f) {
ratio = 0.0f;
}
g_env_light.field_0x11ec = param_0;
g_env_light.field_0x11f0 = param_1;
g_env_light.field_0x11f4 = ratio;
}
void dKy_Itemgetcol_chg_on() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
OS_REPORT("\ndKy_Itemgetcol_chg_on[%d]", kankyo->Itemgetcol_chg);
if (kankyo->Itemgetcol_chg == 0 || kankyo->Itemgetcol_chg == 6) {
kankyo->Itemgetcol_chg = 1;
}
}
// unused and stripped, existence is inferred from string in .data
void dKy_Itemgetcol_chg_off() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
OS_REPORT("\ndKy_Itemgetcol_chg_off[%d]", kankyo->Itemgetcol_chg);
if (kankyo->Itemgetcol_chg == 1 || kankyo->Itemgetcol_chg == 6) {
kankyo->Itemgetcol_chg = 0;
}
}
void dKy_Sound_init() {
g_env_light.sound_influence.position.x = 999999.9f;
g_env_light.sound_influence.position.y = 999999.9f;
g_env_light.sound_influence.position.z = 999999.9f;
g_env_light.sound_influence.field_0xc = 0;
g_env_light.sound_influence.actor_id = fpcM_ERROR_PROCESS_ID_e;
g_env_light.sound_influence.timer = 0;
}
void dKy_Sound_set(cXyz pos, int param_1, fpc_ProcID actor_id, int timer) {
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
BOOL set_sound = FALSE;
f32 dist_pos_to_eye = pos.abs(camera_p->lookat.eye);
f32 dist_sndpos_to_eye = g_env_light.sound_influence.position.abs(camera_p->lookat.eye);
if (dist_pos_to_eye < dist_sndpos_to_eye) {
if (dist_sndpos_to_eye < 1500.0f) {
set_sound = TRUE;
} else if (g_env_light.sound_influence.field_0xc < param_1) {
set_sound = TRUE;
}
}
if (set_sound) {
g_env_light.sound_influence.position = pos;
g_env_light.sound_influence.field_0xc = param_1;
g_env_light.sound_influence.actor_id = actor_id;
g_env_light.sound_influence.timer = timer;
}
}
SND_INFLUENCE* dKy_Sound_get() {
return &g_env_light.sound_influence;
}
void dKy_SordFlush_set(cXyz light_pos, int light_type) {
dScnKy_env_light_c* light = dKy_getEnvlight();
EF_THUNDER* thunder = &light->mThunderEff;
if (!dKy_darkworld_check() && (thunder->mState >= 10 || thunder->mFlashTimer <= 0.0f)) {
if (g_env_light.eflight.mState == 0) {
g_env_light.eflight.mState = 1;
g_env_light.eflight.mLightType = light_type;
g_env_light.eflight.field_0x8.mPosition = light_pos;
} else if (g_env_light.eflight.mState == 2) {
g_env_light.eflight.mState = 4;
}
}
}
static void GxFogSet_Sub(GXColor* fog_col_p) {
f32 near_z = 1.0f;
f32 far_z = 160000.0f;
GXColor color;
color = *fog_col_p;
if (dComIfGd_getView() != NULL) {
if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) {
if (dComIfGd_getView()->near < dComIfGd_getView()->far) {
near_z = dComIfGd_getView()->near;
far_z = dComIfGd_getView()->far;
}
}
}
GXSetFog(GX_FOG_PERSP_LIN, g_env_light.mFogNear, g_env_light.mFogFar, near_z, far_z, color);
}
static void GxFog_set() {
GXColor color;
color.r = g_env_light.fog_col.r;
color.g = g_env_light.fog_col.g;
color.b = g_env_light.fog_col.b;
GxFogSet_Sub(&color);
}
void dKy_GxFog_set() {
GxFog_set();
GxXFog_set();
}
void dKy_GxFog_tevstr_set(dKy_tevstr_c* tevstr_p) {
f32 near_z = 1.0f;
f32 far_z = 160000.0f;
GXColor color;
color.r = tevstr_p->FogCol.r;
color.g = tevstr_p->FogCol.g;
color.b = tevstr_p->FogCol.b;
if (dComIfGd_getView() != NULL) {
if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) {
if (dComIfGd_getView()->near < dComIfGd_getView()->far) {
near_z = dComIfGd_getView()->near;
far_z = dComIfGd_getView()->far;
}
}
}
GXSetFog(GX_FOG_PERSP_LIN, tevstr_p->mFogStartZ, tevstr_p->mFogEndZ, near_z, far_z, color);
GxXFog_set();
}
void dKy_GfFog_tevstr_set(dKy_tevstr_c* tevstr_p) {
f32 near_z = 1.0f;
f32 far_z = 160000.0f;
GXColor color;
color.r = tevstr_p->FogCol.r;
color.g = tevstr_p->FogCol.g;
color.b = tevstr_p->FogCol.b;
if (dComIfGd_getView() != NULL) {
if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) {
if (dComIfGd_getView()->near < dComIfGd_getView()->far) {
near_z = dComIfGd_getView()->near;
far_z = dComIfGd_getView()->far;
}
}
}
GFSetFog(GX_FOG_PERSP_LIN, tevstr_p->mFogStartZ, tevstr_p->mFogEndZ, near_z, far_z, color);
GxXFog_set();
}
static void GxXFog_set() {
dKyd_xfog_table_set(g_env_light.mFogAdjTableType);
GXSetFogRangeAdj(g_env_light.mFogAdjEnable, (u16)g_env_light.mFogAdjCenter, &g_env_light.mXFogTbl);
}
void dKy_change_colpat(u8 colpat) {
g_env_light.mColpatCurrGather = colpat;
if (g_env_light.wether_pat1 != g_env_light.mColpatCurrGather) {
g_env_light.mColPatBlendGather = 0.0f;
}
}
void dKy_custom_colset(u8 prevGather, u8 curGather, f32 blend) {
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting) {
return;
}
#endif
if (g_env_light.light_init_timer != 1) {
if (blend < 1.0f) {
g_env_light.mColpatPrevGather = prevGather;
} else {
g_env_light.mColpatPrevGather = curGather;
}
g_env_light.mColpatCurrGather = curGather;
g_env_light.mColPatBlendGather = blend;
g_env_light.mColPatModeGather = 1;
}
}
void dKy_setLight_mine(dKy_tevstr_c* tevstr_p) {
GXLightObj light;
J3DLightInfo& info = *tevstr_p->mLightObj.getLightInfo();
GXInitLightPos(&light, info.mLightPosition.x, info.mLightPosition.y, info.mLightPosition.z);
GXInitLightDir(&light, info.mLightDirection.x, info.mLightDirection.y, info.mLightDirection.z);
GXInitLightColor(&light, info.mColor);
GXInitLightAttn(&light, info.mCosAtten.x,
info.mCosAtten.y, info.mCosAtten.z,
info.mDistAtten.x, info.mDistAtten.y,
info.mDistAtten.z);
GXLoadLightObjImm(&light, (GXLightID)*lightMaskData);
}
void dKy_tevstr_init(dKy_tevstr_c* tevstr_p, s8 room_no, u8 floorCol) {
J3DLightInfo* light_info;
memset(tevstr_p, 0, sizeof(dKy_tevstr_c));
if (room_no == -1) {
tevstr_p->room_no = dComIfGp_roomControl_getStayNo();
} else {
tevstr_p->room_no = room_no;
}
tevstr_p->UseCol = tevstr_p->room_no;
tevstr_p->PrevCol = tevstr_p->room_no;
tevstr_p->YukaCol = floorCol;
tevstr_p->mInitTimer = 1;
tevstr_p->Material_use_fg = 0x7B;
tevstr_p->AmbCol.a = 0;
tevstr_p->FogCol.a = 255;
tevstr_p->Material_id = 0;
tevstr_p->field_0x374 = 1.0f;
tevstr_p->field_0x384 = 0;
light_info = tevstr_p->mLightObj.getLightInfo();
light_info->mColor.g = 0;
light_info->mColor.b = 0;
light_info->mColor.a = 255;
light_info->mCosAtten.x = 1.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 1.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
int i;
for (i = 0; i < 6; i++) {
light_info = tevstr_p->mLights[i].getLightInfo();
light_info->mLightPosition = lightStatusData[i].position;
light_info->mColor = lightStatusData[i].color;
light_info->mCosAtten.x = 1.0f;
light_info->mCosAtten.y = 0.0f;
light_info->mCosAtten.z = 0.0f;
light_info->mDistAtten.x = 1.0f;
light_info->mDistAtten.y = 0.0f;
light_info->mDistAtten.z = 0.0f;
}
}
u8 dKy_get_schbit() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
return kankyo->schbit;
}
int dKy_get_schbit_timer() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
return kankyo->schbit_timer;
}
int dKy_rain_check() {
return g_env_light.raincnt;
}
void dKy_set_allcol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->allcol_ratio = ratio;
}
void dKy_set_actcol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->actcol_ratio = ratio;
}
void dKy_set_bgcol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->bgcol_ratio = ratio;
}
void dKy_set_fogcol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
g_env_light.fogcol_ratio = ratio;
}
void dKy_set_vrboxcol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
dKy_set_vrboxsoracol_ratio(ratio);
dKy_set_vrboxkumocol_ratio(ratio);
}
void dKy_set_vrboxsoracol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->vrboxsoracol_ratio = ratio;
}
void dKy_set_vrboxkumocol_ratio(f32 ratio) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
kankyo->vrboxkumocol_ratio = ratio;
}
void dKy_itudemo_se() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
int room_no = dComIfGp_roomControl_getStayNo();
if (kankyo->moya_se != 0) {
mDoAud_seStart(kankyo->moya_se, NULL, 0, 0);
}
}
int dKy_get_dayofweek() {
u16 date = dComIfGs_getDate();
int day_of_week = date % 7;
return day_of_week;
}
void dKy_set_nexttime(f32 next_time) {
OS_REPORT("\n\n\nnext_time=[%f]\n\n\n", next_time);
#if DEBUG
if (next_time > 360.0f) {
JUT_ASSERT(14615, FALSE);
}
#endif
g_env_light.nexttime = next_time;
}
void dKy_instant_timechg(f32 timechg) {
f32 time = g_env_light.getDaytime();
if (timechg < time) {
dComIfGs_setDate(dComIfGs_getDate() + 1);
dKankyo_DayProc();
}
dComIfGs_setTime(timechg);
}
void dKy_instant_rainchg() {
dKyw_rain_set(250);
g_env_light.mColpatWeather = 1;
g_env_light.wether_pat0 = 1;
g_env_light.wether_pat1 = 1;
}
static GXColor NewAmbColGet(GXColorS10* in_col_p) {
GXColorS10 sp18, sp10;
f32 temp_f31;
sp18 = *in_col_p;
sp10.r = sp18.r * 4;
sp10.g = sp18.g * 4;
sp10.b = sp18.b * 4;
if (sp10.r > 0xFF) {
temp_f31 = 255.0f / sp10.r;
sp10.r *= temp_f31;
sp10.g *= temp_f31;
sp10.b *= temp_f31;
}
if (sp10.g > 0xFF) {
temp_f31 = 255.0f / sp10.g;
sp10.r *= temp_f31;
sp10.g *= temp_f31;
sp10.b *= temp_f31;
}
if (sp10.b > 0xFF) {
temp_f31 = 255.0f / sp10.b;
sp10.r *= temp_f31;
sp10.g *= temp_f31;
sp10.b *= temp_f31;
}
GXColor amb_col;
amb_col.r = sp10.r;
amb_col.g = sp10.g;
amb_col.b = sp10.b;
amb_col.a = 0xFF;
return amb_col;
}
// fixes float literal order
static f32 dummy() {
return 50.0f;
}
void dKy_ParticleColor_get_base(cXyz* param_0, dKy_tevstr_c* param_1, GXColor* param_2,
GXColor* param_3, GXColor* param_4, GXColor* param_5, f32 param_6) {
GXColor sp70[3];
cXyz sp64;
f32 sp58[] = {100000000.0f, 100000000.0f, 100000000.0f};
int i;
u8 spD = 0;
s8 room_no;
GXColorS10 sp50;
GXColorS10 sp48;
J3DLightInfo* sp44;
GXColor sp40;
int sp3C;
int sp38;
stage_pure_lightvec_info_class* stage_light_info_p;
int sp30;
for (i = 0; i < 6; i++) {
if (param_1 != NULL) {
sp44 = param_1->mLights[i].getLightInfo();
sp40 = sp44->mColor;
} else {
sp38 = dComIfGp_roomControl_getStayNo();
if (dKy_SunMoon_Light_Check() == TRUE && i <= 1) {
sp40 = g_env_light.dungeonlight[i].mColor;
} else if (dComIfGp_roomControl_getStatusRoomDt(sp38) != NULL) {
stage_light_info_p =
dComIfGp_roomControl_getStatusRoomDt(sp38)->getLightVecInfo();
sp30 = dComIfGp_roomControl_getStatusRoomDt(sp38)->getLightVecInfoNum();
if (i < sp30) {
sp40 = g_env_light.dungeonlight[i].mColor;
} else {
sp40.r = 0;
sp40.g = 0;
sp40.b = 0;
}
}
}
#if DEBUG
if (g_kankyoHIO.light.m_HOSTIO_setting || g_kankyoHIO.vrbox.m_VrboxSetting) {
int stayNo = dComIfGp_roomControl_getStayNo();
if (dComIfGp_roomControl_getStatusRoomDt(stayNo) != NULL) {
stage_pure_lightvec_info_class* sp28 =
dComIfGp_roomControl_getStatusRoomDt(stayNo)->getLightVecInfo();
int sp24 = dComIfGp_roomControl_getStatusRoomDt(stayNo)->getLightVecInfoNum();
if (i < sp24) {
sp40 = g_env_light.dungeonlight[i].mColor;
} else {
sp40.r = 0;
sp40.g = 0;
sp40.b = 0;
}
}
}
#endif
f32 var_f31;
if (dKy_SunMoon_Light_Check() == TRUE && i <= 1) {
if (g_env_light.daytime >= 90.0f && g_env_light.daytime <= 285.0f) {
if (i == 0) {
var_f31 = 1.0f;
} else {
var_f31 = 2.0f;
}
} else if (i == 0) {
var_f31 = 2.0f;
} else {
var_f31 = 1.0f;
}
if (strcmp(dComIfGp_getStartStageName(), "F_SP114") == 0) {
if (sp40.r < 15.0f) {
sp40.r = 15;
}
if (sp40.g < 17.0f) {
sp40.g = 17;
}
if (sp40.b < 20.0f) {
sp40.b = 20;
}
}
} else if (sp40.r != 0 || sp40.g != 0 || sp40.b != 0) {
stage_pure_lightvec_info_class* stage_light_info_p;
if (param_1 != NULL && param_1->room_no >= 0) {
stage_light_info_p = dComIfGp_roomControl_getStatusRoomDt(param_1->room_no)
->getLightVecInfo();
sp3C = dComIfGp_roomControl_getStatusRoomDt(param_1->room_no)
->getLightVecInfoNum();
} else {
stage_light_info_p = dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->getLightVecInfo();
sp3C = dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->getLightVecInfoNum();
}
f32 var_f27;
f32 var_f26;
if (stage_light_info_p != 0) {
if (i < sp3C) {
sp64.x = stage_light_info_p[i].position.x;
sp64.y = stage_light_info_p[i].position.y;
sp64.z = stage_light_info_p[i].position.z;
if (param_1 != NULL && param_1->room_no >= 0) {
room_no = param_1->room_no;
} else {
room_no = dComIfGp_roomControl_getStayNo();
}
if (dKy_lightswitch_check(&stage_light_info_p[i], room_no) == TRUE) {
var_f27 = 190.0f * stage_light_info_p[i].radius;
} else {
var_f27 = 0.0f;
}
} else {
sp64.x = (lightStatusPt + 2)[i].position.x;
sp64.y = (lightStatusPt + 2)[i].position.y;
sp64.z = (lightStatusPt + 2)[i].position.z;
var_f27 = 190.0f * (lightStatusPt + 2)[i].mRefDist;
}
} else {
sp64.x = 100000000.0f;
sp64.y = 100000000.0f;
sp64.z = 100000000.0f;
var_f27 = 0.0f;
}
var_f31 = param_0->abs(sp64);
if (var_f31 <= 0.0f) {
var_f31 = 0.0000000000001f;
}
if (var_f27 > 0.0f) {
var_f26 = var_f27 / var_f31;
} else {
var_f26 = 0.0f;
}
if (var_f26 < 1.0f) {
sp40.r *= var_f26;
sp40.g *= var_f26;
sp40.b *= var_f26;
} else {
var_f31 = 5.0f;
}
}
if (sp58[0] > var_f31) {
sp58[2] = sp58[1];
sp58[1] = sp58[0];
sp58[0] = var_f31;
sp70[2] = sp70[1];
sp70[1] = sp70[0];
sp70[0] = sp40;
} else if (sp58[1] > var_f31) {
sp58[2] = sp58[1];
sp58[1] = var_f31;
sp70[2] = sp70[1];
sp70[1] = sp40;
} else if (sp58[2] > var_f31) {
sp58[2] = var_f31;
sp70[2] = sp40;
}
}
sp48.r = 0;
sp48.g = 0;
sp48.b = 0;
for (i = 0; i < 3; i++) {
if (sp58[i] < 100000000.0f) {
spD++;
}
}
static f32 parcent_tabel[][3] = {
{0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f},
{0.7f, 0.3f, 0.0f},
{0.6f, 0.3f, 0.1f},
};
f32 temp_f28;
if (sp58[0] < 100000000.0f) {
temp_f28 = parcent_tabel[spD][0];
sp48.r = sp70[0].r * temp_f28;
sp48.g = sp70[0].g * temp_f28;
sp48.b = sp70[0].b * temp_f28;
}
for (i = 1; i < 3; i++) {
if (sp58[i] < 100000000.0f) {
temp_f28 = parcent_tabel[spD][i];
sp48.r += (s16)(sp70[i].r * temp_f28);
sp48.g += (s16)(sp70[i].g * temp_f28);
sp48.b += (s16)(sp70[i].b * temp_f28);
}
}
*param_3 = NewAmbColGet(&sp48);
sp48.r = (0.8f * param_2->r) + (1.2f * param_3->r);
sp48.g = (0.8f * param_2->g) + (1.2f * param_3->g);
sp48.b = (0.8f * param_2->b) + (1.2f * param_3->b);
f32 temp_f30;
if (sp48.r > 0xFF) {
temp_f30 = 255.0f / sp48.r;
sp48.r *= temp_f30;
sp48.g *= temp_f30;
sp48.b *= temp_f30;
}
if (sp48.g > 0xFF) {
temp_f30 = 255.0f / sp48.g;
sp48.r *= temp_f30;
sp48.g *= temp_f30;
sp48.b *= temp_f30;
}
if (sp48.b > 0xFF) {
temp_f30 = 255.0f / sp48.b;
sp48.r *= temp_f30;
sp48.g *= temp_f30;
sp48.b *= temp_f30;
}
sp50.r = (u8)sp48.r;
sp50.g = (u8)sp48.g;
sp50.b = (u8)sp48.b;
f32 sp20 = param_4->r / 255.0f;
f32 sp1C = param_4->g / 255.0f;
f32 sp18 = param_4->b / 255.0f;
param_2->r = (sp20 * (sp50.r * (1.0f - param_6))) + (param_4->r * param_6);
param_2->g = (sp1C * (sp50.g * (1.0f - param_6))) + (param_4->g * param_6);
param_2->b = (sp18 * (sp50.b * (1.0f - param_6))) + (param_4->b * param_6);
sp20 = (param_5->r / 255.0f);
sp1C = (param_5->g / 255.0f);
sp18 = (param_5->b / 255.0f);
param_3->r = (sp20 * (sp50.r * (1.0f - param_6))) + (param_5->r * param_6);
param_3->g = (sp1C * (sp50.g * (1.0f - param_6))) + (param_5->g * param_6);
param_3->b = (sp18 * (sp50.b * (1.0f - param_6))) + (param_5->b * param_6);
}
// Dummy data to force 0x30 bytes of padding between parcent_table and dScnKy_env_light's vtable.
// This extra space is likely allocated for stripped vtables - debug indicates that dBgS_ObjGndChk
// is used somewhere which has a 0x30 byte vtable, but I can't find a way to generate it without
// also reserving space for cBgS_GrpPassChk and cBgS_PolyPassChk which ends up making .data too
// large.
static u8 dummy_padding_data_0x354[0x30] = {};
void dKy_ParticleColor_get_actor(cXyz* param_0, dKy_tevstr_c* tevstr_p, GXColor* param_2,
GXColor* param_3, GXColor* param_4, GXColor* param_5,
f32 param_6) {
if (tevstr_p != NULL) {
*param_2 = NewAmbColGet(&tevstr_p->AmbCol);
} else {
*param_2 = NewAmbColGet(&g_env_light.actor_amb_col);
}
dKy_ParticleColor_get_base(param_0, tevstr_p, param_2, param_3, param_4, param_5, param_6);
}
void dKy_ParticleColor_get_bg(cXyz* param_0, dKy_tevstr_c* tevstr_p, GXColor* param_2,
GXColor* param_3, GXColor* param_4, GXColor* param_5, f32 param_6) {
*param_2 = NewAmbColGet(&g_env_light.bg_amb_col[0]);
dKy_ParticleColor_get_base(param_0, tevstr_p, param_2, param_3, param_4, param_5, param_6);
}
int dKy_BossLight_set(cXyz* pos_p, GXColor* color_p, f32 ref_dist, u8 param_3) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
int sp10 = 0;
f32 var_f31 = 0.0f;
u8 spA = 0xFF;
int stage_light_info_num = 0;
int i;
if (strcmp(dComIfGp_getStartStageName(), "F_SP118") != 0) {
u8 room_no = dComIfGp_roomControl_getStayNo();
if (dComIfGp_roomControl_getStatusRoomDt(room_no) == NULL) {
return 0;
}
stage_light_info_num = dComIfGp_roomControl_getStatusRoomDt(room_no)->getLightVecInfoNum();
if (stage_light_info_num < 0 || stage_light_info_num > 6) {
stage_light_info_num = 6;
}
}
BOSS_LIGHT* boss_light_p;
if (param_3 == 0) {
boss_light_p = kankyo->field_0x0c18;
} else {
boss_light_p = kankyo->field_0x0d58;
}
for (i = 1; i < 6 - stage_light_info_num; i++) {
if (boss_light_p[i].field_0x26 == 1 && pos_p->x == boss_light_p[i].mPos.x &&
pos_p->y == boss_light_p[i].mPos.y && pos_p->z == boss_light_p[i].mPos.z)
{
return 0;
}
}
for (i = 1; i < 6 - stage_light_info_num; i++) {
if (boss_light_p[i].field_0x26 == 0) {
boss_light_p[i].mPos = *pos_p;
boss_light_p[i].mColor.r = color_p->r;
boss_light_p[i].mColor.g = color_p->g;
boss_light_p[i].mColor.b = color_p->b;
boss_light_p[i].mColor.a = 0xFF;
boss_light_p[i].mRefDistance = ref_dist;
if (boss_light_p[i].mRefDistance <= 0.0f && boss_light_p[i].mRefDistance < 0.000001f) {
// empty
}
boss_light_p[i].field_0x14 = 0.99f;
boss_light_p[i].mCutoffAngle = 90.0f;
boss_light_p[i].mAngleX = 0.0f;
boss_light_p[i].mAngleY = 0.0f;
boss_light_p[i].mAngleAttenuation = GX_SP_OFF;
boss_light_p[i].mDistAttenuation = GX_DA_STEEP;
boss_light_p[i].field_0x26 = 1;
sp10 = 1;
break;
}
}
for (i = 1; i < 6 - stage_light_info_num; i++) {
if (boss_light_p[i].field_0x26 != 0) {
cXyz sp1C(boss_light_p[i].mPos);
if (strcmp(dComIfGp_getStartStageName(), "D_SB03") == 0) {
sp1C.x = camera->lookat.eye.x;
sp1C.z = camera->lookat.eye.z;
if (sp1C.abs(camera->lookat.eye) > 2000.0f) {
var_f31 = 99999.9f;
spA = i;
break;
} else {
if (boss_light_p[i].mPos.abs(camera->lookat.eye) > var_f31) {
var_f31 = boss_light_p[i].mPos.abs(camera->lookat.eye);
spA = i;
}
}
} else {
if (boss_light_p[i].mPos.abs(camera->lookat.eye) > var_f31) {
var_f31 = boss_light_p[i].mPos.abs(camera->lookat.eye);
spA = i;
}
}
}
}
if (sp10 == 0 && spA != 0xFF) {
i = spA;
if (i < 6 && pos_p->abs(camera->lookat.eye) < var_f31) {
boss_light_p[i].mPos = *pos_p;
boss_light_p[i].mColor.r = color_p->r;
boss_light_p[i].mColor.g = color_p->g;
boss_light_p[i].mColor.b = color_p->b;
boss_light_p[i].mColor.a = 0xFF;
boss_light_p[i].mRefDistance = ref_dist;
if (boss_light_p[i].mRefDistance <= 0.0f && boss_light_p[i].mRefDistance < 0.000001f) {
// empty
}
boss_light_p[i].field_0x14 = 0.99f;
boss_light_p[i].mCutoffAngle = 90.0f;
boss_light_p[i].mAngleX = 0.0f;
boss_light_p[i].mAngleY = 0.0f;
boss_light_p[i].mAngleAttenuation = GX_SP_OFF;
boss_light_p[i].mDistAttenuation = GX_DA_STEEP;
boss_light_p[i].field_0x26 = 1;
sp10 = 1;
}
}
return sp10;
}
int dKy_BossSpotLight_set(cXyz* pos_p, f32 angle_x, f32 angle_y, f32 cutoff, GXColor* color_p,
f32 ref_dist, u8 spot_type, u8 distattn_type) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
int spC = 0;
f32 var_f31 = 0.0f;
u8 sp8 = 0xFF;
int i;
for (i = 1; i < 6; i++) {
if (kankyo->field_0x0c18[i].field_0x26 == 0) {
kankyo->field_0x0c18[i].mPos = *pos_p;
kankyo->field_0x0c18[i].mColor.r = color_p->r;
kankyo->field_0x0c18[i].mColor.g = color_p->g;
kankyo->field_0x0c18[i].mColor.b = color_p->b;
kankyo->field_0x0c18[i].mColor.a = 0xFF;
kankyo->field_0x0c18[i].mRefDistance = ref_dist;
if (kankyo->field_0x0c18[i].mRefDistance <= 0.0f &&
kankyo->field_0x0c18[i].mRefDistance < 0.000001f) {
// empty
}
kankyo->field_0x0c18[i].field_0x14 = 0.99f;
kankyo->field_0x0c18[i].mCutoffAngle = cutoff;
kankyo->field_0x0c18[i].mAngleX = angle_x;
kankyo->field_0x0c18[i].mAngleY = angle_y + 90.0f;
kankyo->field_0x0c18[i].mAngleAttenuation = spot_type;
kankyo->field_0x0c18[i].mDistAttenuation = distattn_type;
kankyo->field_0x0c18[i].field_0x26 = 1;
spC = 1;
break;
}
}
if (spC == 0) {
for (i = 1; i < 6; i++) {
if (kankyo->field_0x0c18[i].field_0x26 != 0 &&
kankyo->field_0x0c18[i].mPos.abs(camera->lookat.eye) > var_f31)
{
var_f31 = kankyo->field_0x0c18[i].mPos.abs(camera->lookat.eye);
sp8 = i;
}
}
if (sp8 != 0xFF) {
i = sp8;
if (i < 6 && pos_p->abs(camera->lookat.eye) <
kankyo->field_0x0c18[i].mPos.abs(camera->lookat.eye))
{
kankyo->field_0x0c18[i].mPos = *pos_p;
kankyo->field_0x0c18[i].mColor.r = color_p->r;
kankyo->field_0x0c18[i].mColor.g = color_p->g;
kankyo->field_0x0c18[i].mColor.b = color_p->b;
kankyo->field_0x0c18[i].mColor.a = 0xFF;
kankyo->field_0x0c18[i].mRefDistance = ref_dist;
if (kankyo->field_0x0c18[i].mRefDistance <= 0.0f &&
kankyo->field_0x0c18[i].mRefDistance < 0.000001f) {
// empty
}
kankyo->field_0x0c18[i].field_0x14 = 0.99f;
kankyo->field_0x0c18[i].mCutoffAngle = cutoff;
kankyo->field_0x0c18[i].mAngleX = angle_x;
kankyo->field_0x0c18[i].mAngleY = angle_y + 90.0f;
kankyo->field_0x0c18[i].mAngleAttenuation = spot_type;
kankyo->field_0x0c18[i].mDistAttenuation = distattn_type;
kankyo->field_0x0c18[i].field_0x26 = 1;
spC = 1;
}
}
}
return spC;
}
int dKy_WolfEyeLight_set(cXyz* pos_p, f32 angle_x, f32 angle_y, f32 cutoff, GXColor* color_p,
f32 ref_dist, u8 spot_type, u8 distattn_type) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0);
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
int sp28 = 0;
int sp24 = 0;
f32 var_f28 = -100000000.0f;
f32 var_f27 = 0.0f;
int var_r29 = 0;
kankyo->field_0x0c18[var_r29].mPos = *pos_p;
kankyo->field_0x0c18[var_r29].mColor.r = color_p->r;
kankyo->field_0x0c18[var_r29].mColor.g = color_p->g;
kankyo->field_0x0c18[var_r29].mColor.b = color_p->b;
kankyo->field_0x0c18[var_r29].mColor.a = 255;
kankyo->field_0x0c18[var_r29].mRefDistance = ref_dist;
if (kankyo->field_0x0c18[var_r29].mRefDistance <= 0 &&
kankyo->field_0x0c18[var_r29].mRefDistance < 0.000001f) {
// empty
}
kankyo->field_0x0c18[var_r29].field_0x14 = 0.99f;
kankyo->field_0x0c18[var_r29].mCutoffAngle = cutoff;
kankyo->field_0x0c18[var_r29].mAngleX = angle_x;
kankyo->field_0x0c18[var_r29].mAngleY = angle_y + 90.0f;
kankyo->field_0x0c18[var_r29].mAngleAttenuation = spot_type;
kankyo->field_0x0c18[var_r29].mDistAttenuation = distattn_type;
int light_size = g_env_light.light_size;
#if DEBUG
if (g_kankyoHIO.navy.room_light_type != 0) {
int dummy; /// dummy declaration to force debug to use r31 for stack pointer
light_size = g_kankyoHIO.navy.room_light_type - 1;
}
#endif
f32 var_f31;
f32 var_f30;
f32 var_f29;
switch (light_size) {
case LIGHT_SIZE_S:
var_f31 = 50.0f;
var_f30 = 1.0f;
var_f29 = 0.9f;
break;
case LIGHT_SIZE_M:
var_f31 = 200.0f;
var_f30 = 1.0f;
var_f29 = 1.0f;
break;
case LIGHT_SIZE_L:
var_f31 = 350.0f;
var_f30 = 1.5f;
var_f29 = 1.5f;
break;
case LIGHT_SIZE_LL:
default:
var_f31 = 1500.0f;
var_f30 = 4.0f;
var_f29 = 1.5f;
}
#if DEBUG
if (!g_kankyoHIO.navy.use_debug)
#endif
{
kankyo->field_0x127c = var_f31;
#if DEBUG
kankyo->field_0x0c18[var_r29].mRefDistance *= var_f30;
kankyo->field_0x0c18[var_r29].mCutoffAngle *= var_f29;
#endif
}
#if DEBUG
static int S_mLighSize_pat_old = 0x63;
if (S_mLighSize_pat_old != g_kankyoHIO.navy.room_light_type) {
S_mLighSize_pat_old = g_kankyoHIO.navy.room_light_type;
g_kankyoHIO.navy.terrain_height_crr = var_f31;
g_kankyoHIO.navy.influence_multiplier = var_f30;
g_kankyoHIO.navy.cutoff_multiplier = var_f29;
g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF();
}
if (g_kankyoHIO.navy.use_debug) {
kankyo->field_0x127c = g_kankyoHIO.navy.terrain_height_crr;
kankyo->field_0x0c18[var_r29].mRefDistance *= g_kankyoHIO.navy.influence_multiplier;
kankyo->field_0x0c18[var_r29].mCutoffAngle *= g_kankyoHIO.navy.cutoff_multiplier;
}
#else
kankyo->field_0x0c18[var_r29].mRefDistance *= var_f30;
kankyo->field_0x0c18[var_r29].mCutoffAngle *= var_f29;
#endif
kankyo->field_0x0c18[var_r29].field_0x26 = 1;
sp28 = 1;
return sp28;
}
void dKy_twilight_camelight_set() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
f32 var_f31;
f32 var_f30;
int i;
int sp8 = 0;
f32 var_f29 = -100000000.0f;
if (strcmp(dComIfGp_getStartStageName(), "R_SP107") != 0 ||
dComIfGp_roomControl_getStayNo() != 3 || dComIfGp_getStartStageLayer() != 12)
{
if (!dKy_darkworld_check() || memcmp(dComIfGp_getStartStageName(), "D_MN08", 6) == 0) {
return;
}
if (!daPy_py_c::checkNowWolfPowerUp()) {
for (i = 0; i < 6; i++) {
if (kankyo->field_0x0c18[i].field_0x26 != 1) {
dKy_twi_wolflight_set(i);
kankyo->field_0x0c18[i].field_0x14 = 0.99f;
kankyo->field_0x0c18[i].mColor.a = 254;
var_f31 = 0.0f;
if (player_p != NULL) {
var_f30 = camera_p->lookat.eye.y - player_p->current.pos.y;
if (var_f30 < 0.0f) {
var_f30 = 0.0f;
}
if (var_f30 > 600.0f) {
var_f30 = 600.0f;
}
var_f31 = var_f30 / 450.0f;
}
switch (g_env_light.light_size) {
case LIGHT_SIZE_S:
kankyo->field_0x0c18[i].mColor.r = 0x19;
kankyo->field_0x0c18[i].mColor.g = 0x5A;
kankyo->field_0x0c18[i].mColor.b = 0xB7;
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
1.0625f + (0.75f * var_f31), 0.2f, 10.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 90.0f;
break;
case LIGHT_SIZE_M:
kankyo->field_0x0c18[i].mColor.r = 0x48;
kankyo->field_0x0c18[i].mColor.g = 0x87;
kankyo->field_0x0c18[i].mColor.b = 0xCE;
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
1.7f + (0.75f * var_f31), 0.2f, 10.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 70.0f;
break;
case LIGHT_SIZE_L:
kankyo->field_0x0c18[i].mColor.r = 0x48;
kankyo->field_0x0c18[i].mColor.g = 0x87;
kankyo->field_0x0c18[i].mColor.b = 0xCE;
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
2.5500002f + (0.75f * var_f31), 0.2f, 10.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 70.0f;
break;
case LIGHT_SIZE_LL:
kankyo->field_0x0c18[i].mColor.r = 0x50;
kankyo->field_0x0c18[i].mColor.g = 0x87;
kankyo->field_0x0c18[i].mColor.b = 0xCE;
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
3.4f + (0.75f * var_f31), 0.2f, 10.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 65.0f;
break;
}
#if DEBUG
switch (g_kankyoHIO.navy.room_light_type) {
case 0:
break;
case 1:
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
0.75f * var_f31 + 1.0625f, 0.5f, 100.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 90.0f;
break;
case 2:
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
0.75f * var_f31 + 1.7f, 0.5f, 100.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 70.0f;
break;
case 3:
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
0.75f * var_f31 + 2.5500002f, 0.5f, 100.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 70.0f;
break;
case 4:
cLib_addCalc(&kankyo->field_0x0c18[i].mRefDistance,
0.75f * var_f31 + 3.4f, 0.5f, 100.0f, 0.0001f);
kankyo->field_0x0c18[i].mCutoffAngle = 65.0f;
break;
}
if (g_kankyoHIO.navy.camera_light_adjust_ON) {
kankyo->field_0x0c18[i].mColor.r = g_kankyoHIO.navy.camera_light_col.r;
kankyo->field_0x0c18[i].mColor.g = g_kankyoHIO.navy.camera_light_col.g;
kankyo->field_0x0c18[i].mColor.b = g_kankyoHIO.navy.camera_light_col.b;
kankyo->field_0x0c18[i].mRefDistance =
g_kankyoHIO.navy.camera_light_power * 0.85f + var_f31 * 0.75f;
kankyo->field_0x0c18[i].mCutoffAngle = g_kankyoHIO.navy.camera_light_cutoff;
}
if (kankyo->field_0x0c18[i].mRefDistance <= 0 &&
kankyo->field_0x0c18[i].mRefDistance < 0.000001f) {
// empty
}
kankyo->field_0x0c18[i].mAngleAttenuation = g_kankyoHIO.navy.camera_light_sp;
kankyo->field_0x0c18[i].mDistAttenuation = g_kankyoHIO.navy.camera_light_da;
kankyo->field_0x0c18[i].field_0x26 = 1;
#else
kankyo->field_0x0c18[i].mAngleAttenuation = GX_SP_COS;
kankyo->field_0x0c18[i].mDistAttenuation = GX_DA_STEEP;
kankyo->field_0x0c18[i].field_0x26 = 1;
#endif
break;
}
}
}
}
}
void dKy_WaterIn_Light_set() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
camera_class* camera = (camera_class*)dComIfGp_getCamera(0);
int sp10 = 0;
int spC = 0;
f32 var_f31, var_f30, var_f29, var_f28, var_f27, var_f26;
f32 var_f25 = -100000000.0f;
var_f29 = 200.0f;
int sp8 = 1;
if (strcmp(dComIfGp_getStartStageName(), "F_SP109") == 0 ||
strcmp(dComIfGp_getStartStageName(), "F_SP115") == 0 ||
strcmp(dComIfGp_getStartStageName(), "F_SP122") == 0)
{
sp8 = 3;
}
#if PLATFORM_GCN
#define WATERIN_LIGHT_SET_LOOP_MAX 1
#else
#define WATERIN_LIGHT_SET_LOOP_MAX 6
#endif
for (int i = 0; i < WATERIN_LIGHT_SET_LOOP_MAX; i++) {
if (kankyo->field_0x0c18[i].field_0x26 != 1) {
dKy_twi_wolflight_set(i);
kankyo->field_0x0c18[i].mColor.r = 0x8A;
kankyo->field_0x0c18[i].mColor.g = 0xC0;
kankyo->field_0x0c18[i].mColor.b = 0xBC;
kankyo->field_0x0c18[i].mColor.a = 0xFD;
var_f26 = 0.0f;
if (player_p != NULL) {
var_f31 = camera->lookat.eye.y - player_p->current.pos.y;
if (var_f31 < 0.0f) {
var_f31 = 0.0f;
}
if (var_f31 > 600.0f) {
var_f31 = 600.0f;
}
var_f26 = var_f31 / 450.0f;
}
kankyo->field_0x0c18[i].mRefDistance = 7.2250004f + (0.75f * var_f26);
kankyo->field_0x0c18[i].mCutoffAngle = 28.0f;
kankyo->field_0x0c18[i].mAngleAttenuation = 2;
kankyo->field_0x0c18[i].mDistAttenuation = 3;
if (strcmp(dComIfGp_getStartStageName(), "D_MN01A") == 0) {
dBgS_CamGndChk_Wtr sp28;
cXyz sp1C;
sp8 = 1;
kankyo->field_0x0c18[i].mCutoffAngle = 60.0f;
sp1C = camera->lookat.eye;
sp1C.y += 100000.0f;
sp28.SetPos(&sp1C);
var_f25 = dComIfG_Bgsp().GroundCross(&sp28);
var_f30 = (var_f25 - camera->lookat.eye.y) / 3000.0f;
if (var_f30 < 0.0f) {
var_f30 = 0.0f;
}
if (var_f30 > 1.0f) {
var_f30 = 1.0f;
}
kankyo->field_0x0c18[i].mRefDistance *= var_f30;
}
#if DEBUG
if (g_kankyoHIO.navy.room_light_type != 0) {
sp8 = g_kankyoHIO.navy.room_light_type - 1;
}
switch (sp8) {
case 0:
dDbVw_Report(0x176, 0x1c, "W-LS[S]");
break;
case 1:
dDbVw_Report(0x176, 0x1c, "W-LS[M]");
break;
case 2:
dDbVw_Report(0x176, 0x1c, "W-LS[L]");
break;
case 3:
dDbVw_Report(0x176, 0x1c, "W-LS[LL]");
break;
}
#endif
switch (sp8) {
case 0:
case 1:
var_f29 = 200.0f;
var_f28 = 1.0f;
var_f27 = 1.0f;
break;
case 2:
case 3:
default:
var_f29 = 200.0f;
var_f28 = 2.0f;
var_f27 = 1.25f;
break;
}
#if DEBUG
if (g_kankyoHIO.navy.use_debug == 0) {
#endif
kankyo->field_0x127c = var_f29;
kankyo->field_0x0c18[i].mRefDistance *= var_f28;
kankyo->field_0x0c18[i].mCutoffAngle *= var_f27;
#if DEBUG
}
static int S_mLighSize_pat_old = 0x63;
if (S_mLighSize_pat_old != g_kankyoHIO.navy.room_light_type) {
S_mLighSize_pat_old = g_kankyoHIO.navy.room_light_type;
g_kankyoHIO.navy.terrain_height_crr = var_f29;
g_kankyoHIO.navy.influence_multiplier = var_f28;
g_kankyoHIO.navy.cutoff_multiplier = var_f27;
g_kankyoHIO.light.dKankyo_lightHIOInfoUpDateF();
}
if (g_kankyoHIO.navy.use_debug != 0) {
kankyo->field_0x127c = g_kankyoHIO.navy.terrain_height_crr;
kankyo->field_0x0c18[i].mRefDistance *= g_kankyoHIO.navy.influence_multiplier;
kankyo->field_0x0c18[i].mCutoffAngle *= g_kankyoHIO.navy.cutoff_multiplier;
}
#endif
kankyo->field_0x0c18[i].field_0x26 = 1;
sp10 = 1;
break;
}
}
}
void dKy_camera_water_in_status_set(u8 status) {
dScnKy_env_light_c* envlight = dKy_getEnvlight();
envlight->camera_water_in_status = status;
}
BOOL dKy_camera_water_in_status_check() {
dScnKy_env_light_c* envlight = dKy_getEnvlight();
return envlight->camera_water_in_status;
}
u8 dKy_pol_efftype_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
u8 efftype;
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_efftbl != 0) {
efftype = kankyo->pol_efftbl[z0].data[z1];
} else {
efftype = 0xFF;
}
return efftype;
}
u8 dKy_pol_efftype2_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
u8 efftype;
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_efftbl2 != 0) {
efftype = kankyo->pol_efftbl2[z0].data[z1];
} else {
efftype = 0xFF;
}
return efftype;
}
u8 dKy_pol_sound_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") && g_env_light.fishing_hole_season == 4 &&
z0 == 4)
{
z0 = 13;
}
u8 sound;
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_sound != NULL) {
sound = kankyo->pol_sound[z0].data[z1];
} else {
sound = 0;
}
if (sound == 0xFF) {
#if DEBUG
dDbVw_Report(20, 100, "err code.csv sound z0[%d]z1[%d]", z0, z1);
#endif
sound = 0;
}
return sound;
}
u8 dKy_pol_argument_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") && g_env_light.fishing_hole_season == 4 &&
z0 == 4)
{
z0 = 13;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
u8 retval;
if (kankyo->pol_arg != NULL) {
retval = kankyo->pol_arg[z0].data[z1];
} else {
retval = 0;
}
return retval;
}
u8 dKy_pol_eff_prim_get(const cBgS_PolyInfo* polyinfo_p, GXColor* out_color_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 eff_id = 0;
if (polyinfo_p == NULL || out_color_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol != NULL) {
eff_id = kankyo->pol_effcol[z0].data[z1];
} else {
return 0xFF;
}
if (eff_id >= 100) {
return 0xFF;
}
out_color_p->r = kankyo->colordata_tbl[eff_id].data[0];
out_color_p->g = kankyo->colordata_tbl[eff_id].data[1];
out_color_p->b = kankyo->colordata_tbl[eff_id].data[2];
return eff_id;
}
u8 dKy_pol_eff_env_get(const cBgS_PolyInfo* polyinfo_p, GXColor* out_color_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 eff_id = 0;
if (polyinfo_p == NULL || out_color_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol != NULL) {
eff_id = kankyo->pol_effcol[z0].data[z1];
} else {
return 0xFF;
}
if (eff_id >= 100) {
return 0xFF;
}
out_color_p->r = kankyo->colordata_tbl[eff_id].data[3];
out_color_p->g = kankyo->colordata_tbl[eff_id].data[4];
out_color_p->b = kankyo->colordata_tbl[eff_id].data[5];
return eff_id;
}
u8 dKy_pol_eff2_prim_get(const cBgS_PolyInfo* polyinfo_p, GXColor* out_color_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 eff_id = 0;
if (polyinfo_p == NULL || out_color_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol2 != NULL) {
eff_id = kankyo->pol_effcol2[z0].data[z1];
} else {
return 0xFF;
}
if (eff_id >= 100) {
return 0xFF;
}
out_color_p->r = kankyo->colordata_tbl[eff_id].data[0];
out_color_p->g = kankyo->colordata_tbl[eff_id].data[1];
out_color_p->b = kankyo->colordata_tbl[eff_id].data[2];
return eff_id;
}
u8 dKy_pol_eff2_env_get(const cBgS_PolyInfo* polyinfo_p, GXColor* out_color_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 eff_id = 0;
if (polyinfo_p == NULL || out_color_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol2 != NULL) {
eff_id = kankyo->pol_effcol2[z0].data[z1];
} else {
return 0xFF;
}
if (eff_id >= 100) {
return 0xFF;
}
out_color_p->r = kankyo->colordata_tbl[eff_id].data[3];
out_color_p->g = kankyo->colordata_tbl[eff_id].data[4];
out_color_p->b = kankyo->colordata_tbl[eff_id].data[5];
return eff_id;
}
u8 dKy_pol_eff_alpha_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
int z0;
u8 eff_id = 0;
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol != NULL) {
eff_id = kankyo->pol_effcol[z0].data[z1];
} else {
return 0xFF;
}
if (eff_id >= 100) {
return 0xFF;
}
eff_id = kankyo->colordata_tbl[eff_id].data[6];
return eff_id;
}
f32 dKy_pol_eff_ratio_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 eff_id;
f32 ratio = 0.0f;
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0.0f;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol != NULL) {
eff_id = kankyo->pol_effcol[z0].data[z1];
} else {
return ratio;
}
if (eff_id >= 100) {
return ratio;
}
ratio = (f32)kankyo->colordata_tbl[eff_id].data[7];
ratio = 0.01f * ratio;
return ratio;
}
u8 dKy_pol_eff2_alpha_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
int z0;
u8 retval = 0;
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0xFF;
}
z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
if (kankyo->pol_effcol2 != NULL) {
retval = kankyo->pol_effcol2[z0].data[z1];
} else {
return 0xFF;
}
if (retval >= 100) {
return 0xFF;
}
retval = kankyo->colordata_tbl[retval].data[6];
return retval;
}
f32 dKy_pol_eff2_ratio_get(const cBgS_PolyInfo* polyinfo_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
f32 ratio = 0.0f;
if (polyinfo_p == NULL || &dComIfG_Bgsp() == NULL) {
return 0.0f;
}
int z0 = dComIfG_Bgsp().GetPolyAtt0(*polyinfo_p);
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 &&
g_env_light.fishing_hole_season == 4)
{
if (z0 == 4) {
z0 = 13;
}
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0 &&
dComIfGs_isStageBossEnemy() && z0 == 11)
{
z0 = 7;
}
int z1 = dComIfG_Bgsp().GetPolyAtt1(*polyinfo_p);
u8 eff_id;
if (kankyo->pol_effcol2 != NULL) {
eff_id = kankyo->pol_effcol2[z0].data[z1];
} else {
return ratio;
}
if (eff_id >= 100) {
return ratio;
}
ratio = (f32)kankyo->colordata_tbl[eff_id].data[7];
ratio = 0.01f * ratio;
return ratio;
}
BOOL dKy_TeachWind_existence_chk() {
dScnKy_env_light_c* envlight = dKy_getEnvlight();
if (envlight->TeachWind_existence == 0xFF) {
return -1;
}
if (envlight->TeachWind_existence) {
return TRUE;
} else {
return FALSE;
}
}
BOOL dKy_SunMoon_Light_Check() {
BOOL check = false;
if (g_env_light.mSunInitialized && !dKy_darkworld_check()) {
// stage is not City in the Sky, Hyrule Castle, or Hidden Skill area
if (memcmp(dComIfGp_getStartStageName(), "D_MN07", 6) &&
memcmp(dComIfGp_getStartStageName(), "D_MN09", 6) &&
strcmp(dComIfGp_getStartStageName(), "F_SP200"))
{
check = true;
}
}
return check;
}
BOOL dKy_Outdoor_check() {
BOOL outdoors = false;
u32 stage_type = ST_FIELD;
if (dComIfGp_getStage() != NULL) {
stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
}
if (stage_type == ST_FIELD) {
outdoors = true;
}
return outdoors;
}
BOOL dKy_Indoor_check() {
BOOL indoors = false;
int sttype = dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo());
if (sttype != ST_FIELD) {
indoors = true;
}
return indoors;
}
BOOL dKy_withwarp_capture_check() {
return false;
}
void dKy_depth_dist_set(void* process_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
cXyz sp30;
cXyz sp24;
fopAc_ac_c* actor_p = (fopAc_ac_c*)process_p;
sp24 = actor_p->eyePos;
if (dComIfGp_event_runCheck() && actor_p->tevStr.Type <= 10) {
if (fabsf(sp24.y - camera_p->lookat.eye.y) < 400.0f) {
sp24.y = camera_p->lookat.eye.y;
}
f32 var_f31 = sp24.abs(camera_p->lookat.eye);
if (var_f31 < 2000.0f && var_f31 < kankyo->field_0x1268) {
mDoLib_project(&actor_p->eyePos, &sp30);
if ((sp30.x >= 0.0f && sp30.x < FB_WIDTH) && (sp30.y >= 0.0f &&
#if DEBUG
sp30.y < 608.0f
#else
sp30.y < 600.0f
#endif
)) {
cXyz sp18;
cXyz spC;
dKyr_get_vectle_calc(&camera_p->lookat.eye, &camera_p->lookat.center, &sp18);
dKyr_get_vectle_calc(&camera_p->lookat.eye, &actor_p->eyePos, &spC);
s16 temp_r27 = cM_atan2s(sp18.x, sp18.z);
s16 temp_r26 = cM_atan2s(spC.x, spC.z);
temp_r27 = fabsf((f32)temp_r26 - (f32)temp_r27);
if (temp_r27 > 0) {
kankyo->field_0x1268 = var_f31;
}
}
}
}
}
u8 dKy_darkworld_check() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
u8 check = FALSE;
u8 var_r29 = 0;
if (dComIfGp_world_dark_get() == TRUE) {
check = TRUE;
}
return check;
}
/**
* @brief Returns the following info about a room: (1) if the room must not be in twilight and (2)
* which darkLv the room belongs to (Faron, Eldin, etc.).
*
* @param stageName stage name
* @param roomNo room number
* @param out_darkLv byte pointer to write darkLv to, or NULL
* @param tblIndex index in darkworld table for the stageName
* @return int Returns -1 if the given room must not be loaded in twilight, else returns 0 or 1. A
* return of 1 means darkLv should be read from out_darkLv and 0 means it should be read from the
* darkworld table.
*/
int dKy_F_SP121Check(char const* stageName, int roomNo, u8* out_darkLv, int tblIndex) {
dKydata_darkworldInfo_c* darkworldTbl = dKyd_darkworld_tbl_getp();
int result = 0;
if (out_darkLv != NULL) {
*out_darkLv = KY_DARKLV_UNCLEARABLE;
}
// Stage is Hyrule Field
if (!strcmp(stageName, "F_SP121")) {
// Room is one of:
// - Eldin Field (0)
// - Kakariko Gorge (3)
// - Eldin Field / Kakariko Gorge Path North (5) and South (4)
// - Faron Field / Kakariko Gorge Path North (2)
// - Outside Hidden Village (7)
if (roomNo == 0 || (2 <= roomNo && roomNo <= 5) || roomNo == 7) {
if (out_darkLv != NULL) {
*out_darkLv = KY_DARKLV_ELDIN;
}
result = 1;
}
// Room is one of:
// - Lanayru Field (10)
// - Great Bridge of Hylia (13)
// - Lanayru Field / Great Bridge of Hylia Path North (11) and South (12)
// - Faron Field / Great Bridge of Hylia Path North (14)
// - Lanayru Field / Outside Hidden Village Path (9)
else if (roomNo >= 9 && roomNo <= 14)
{
if (out_darkLv != NULL) {
*out_darkLv = KY_DARKLV_LANAYRU;
}
result = 1;
}
// Room is one of:
// - Faron Field (6)
// - Faron Field / Kakariko Gorge Path South (1)
// - Faron Field / Great Bridge of Hylia Path South (15)
else
{
result = -1;
}
}
// Faron Spring; No twilight during Rusl cutscene at very beginning of game.
else if (!strcmp(stageName, "F_SP108") && roomNo == 1 && dComIfGp_getStartStageLayer() == 13)
{
result = -1;
}
// Prevent twilight if stage depends on Faron Twilight cleared status (Faron Woods, Coro's
// Lantern Shop, Faron Woods Cave) but haven't finished Ordon Day 2.
if (darkworldTbl[tblIndex].darkLv == KY_DARKLV_FARON && !dComIfGs_isEventBit(0x4510)) {
result = -1;
}
return result;
}
/**
* @brief Returns TRUE if (1) the room is one which can be loaded in twilight, (2) there is nothing
* currently preventing it from being loaded in twilight, and (3) the player has not cleared the
* relevant dark level (Faron Twilight, etc.). Otherwise returns FALSE.
*
* @param stageName stage name
* @param roomNo room number
* @return BOOL Returns TRUE if the room can be loaded as twilight and the player has not already
* cleared it, else FALSE.
*/
u8 dKy_darkworld_stage_check(char const* stageName, int roomNo) {
dKydata_darkworldInfo_c* darkworldTbl = dKyd_darkworld_tbl_getp();
u8 result = FALSE;
u8 darkLv[1];
for (int i = 0; i < 34; i++) {
if (!strcmp(stageName, darkworldTbl[i].stageName)) {
if (darkworldTbl[i].darkLv != KY_DARKLV_ALWAYS) {
int fsp121CheckResult = dKy_F_SP121Check(stageName, roomNo, darkLv, i);
if (fsp121CheckResult < 0) {
continue;
}
if (fsp121CheckResult == 0) {
*darkLv = darkworldTbl[i].darkLv;
}
if (!dComIfGs_isDarkClearLV(*darkLv)) {
result = TRUE;
}
break;
} else {
// KY_DARKLV_ALWAYS is used to force twilight (likely for testing). This will
// never normally run since it is not present in l_darkworld_tbl.
result = TRUE;
break;
}
}
}
return result;
}
/**
* @brief Returns TRUE if a given room would be loaded in twilight. This function always behaves as
* if the player has not cleared any twilights.
*
* For example, Eldin Field will always return TRUE. Faron Woods on the other hand might return TRUE
* or FALSE depending on whether or not the player has completed Ordon Day 2.
*
* @param stageName stage name
* @param roomNo room number
* @return BOOL Returns TRUE if a given room would be loaded in twilight. This function always
* behaves as if the player has not cleared any twilights.
*/
BOOL dKy_darkworld_spot_check(char const* stageName, int roomNo) {
dKydata_darkworldInfo_c* darkworldTblPtr = dKyd_darkworld_tbl_getp();
BOOL result = FALSE;
for (int i = 0; i < 34; i++) {
if (!strcmp(stageName, darkworldTblPtr->stageName) &&
dKy_F_SP121Check(stageName, roomNo, NULL, i) >= 0)
{
result = TRUE;
break;
}
darkworldTblPtr++;
}
return result;
}
void dKy_darkworld_Area_set(char const* stageName, int roomNo) {
dKydata_darkworldInfo_c* darkworldTblPtr = dKyd_darkworld_tbl_getp();
u8 darkLv[1];
for (int i = 0; i < 34; i++) {
if (!strcmp(stageName, darkworldTblPtr[i].stageName)) {
int fsp121CheckResult = dKy_F_SP121Check(stageName, roomNo, darkLv, i);
if (fsp121CheckResult >= 0) {
if (fsp121CheckResult == 0) {
*darkLv = darkworldTblPtr[i].darkLv;
}
dComIfGp_setStartStageDarkArea(*darkLv);
break;
}
}
}
}
void dKy_murky_set(J3DMaterial* material_p) {
dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(0);
cXyz sp18;
J3DGXColorS10 tev_col;
J3DGXColor tev_kcol;
JUT_ASSERT(0x43DB, material_p != NULL);
tev_col.r = g_env_light.bg_amb_col[1].r;
tev_col.g = g_env_light.bg_amb_col[1].g;
tev_col.b = g_env_light.bg_amb_col[1].b;
tev_col.a = g_env_light.bg_amb_col[2].a;
tev_kcol.a = g_env_light.bg_amb_col[1].a;
f32 var_f29 = 1.0f;
if (g_env_light.field_0x1300 != -1) {
tev_kcol.a = g_env_light.field_0x1300 * var_f29;
}
if (g_env_light.field_0x1302 != -1) {
tev_col.a = (u8)(g_env_light.field_0x1302 * var_f29);
}
#if DEBUG
if (g_kankyoHIO.navy.water_mud_adjust_ON) {
tev_kcol.a = (u8)(f32)g_kankyoHIO.navy.field_0x2ea;
tev_col.a = (u8)(f32)g_kankyoHIO.navy.field_0x2ec;
}
#endif
if (lenz_packet != NULL && sun_packet->mVisibility > 0.000001f) {
tev_col.a = (u8)(tev_col.a *
(1.0f - (sun_packet->mVisibility *
(1.0f - (lenz_packet->mDistFalloff * lenz_packet->mDistFalloff * lenz_packet->mDistFalloff)))));
}
// Diababa room handling
if (strcmp(dComIfGp_getStartStageName(), "D_MN05A") == 0) {
dScnKy_env_light_c* var_r26 = dKy_getEnvlight();
u8* sp08 = &var_r26->mMudInitialized;
dKankyo_mud_Packet* var_r27 = g_env_light.mpMudPacket;
f32 var_f31;
if (var_r27 != NULL) {
var_f31 = 1.0f - var_r27->field_0x1c3c;
}
tev_col.r = 20;
tev_col.g = 6;
tev_col.b = 15;
tev_col.r = (u8)((s16)tev_col.r + (s16)(-(f32)tev_col.r * var_f31));
tev_col.g = (u8)((s16)tev_col.g + (s16)((36.0f - tev_col.g) * var_f31));
tev_col.b = (u8)((s16)tev_col.b + (s16)((29.0f - tev_col.b) * var_f31));
if (camera_p != NULL && camera_p->lookat.eye.z < 1800.0f) {
f32 var_f30 = 1.0f;
if (camera_p->lookat.eye.z < 1550.0f) {
var_f30 = 1.0f;
} else {
var_f30 = 1.0f - ((camera_p->lookat.eye.z - 1550.0f) / 250.0f);
}
tev_col.a = (u8)(255.0f * var_f30);
} else {
tev_col.a = 0;
}
tev_col.a = (u8)((s16)tev_col.a + (s16)(-(f32)tev_col.a * var_f31));
tev_kcol.a = 0xFF;
tev_kcol.a = (u8)((s16)tev_kcol.a + (s16)((140.0f - tev_kcol.a) * var_f31));
}
tev_kcol.r = 0;
tev_kcol.g = 0;
tev_kcol.b = 0;
material_p->setTevColor(1, &tev_col);
material_p->setTevKColor(3, &tev_kcol);
}
void dKy_shadow_mode_set(u8 mode) {
g_env_light.shadow_mode |= mode;
}
void dKy_shadow_mode_reset(u8 mode) {
g_env_light.shadow_mode &= ~mode;
}
u8 dKy_shadow_mode_check(u8 mode) {
return g_env_light.shadow_mode & mode;
}
static J3DZModeInfo l_zmodeUpEnable = {1, 3, 1};
static J3DZModeInfo l_zmodeUpDisable = {1, 3, 0};
static J3DAlphaCompInfo l_alphaCompInfoOPA = {
0x07, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00,
};
static J3DAlphaCompInfo l_alphaCompInfo = {
0x04, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
};
void dKy_bg_MAxx_proc(void* bg_model_p) {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
J3DModel* model_p = (J3DModel*)bg_model_p;
J3DModelData* modelData;
J3DTexMtxInfo* tex_mtx_inf;
GXColor sp5C;
dDlst_window_c* window = dComIfGp_getWindow(0);
camera_class* camera_p = (camera_class*)dComIfGp_getCamera(window->getCameraID());
fopAc_ac_c* player_p = dComIfGp_getPlayer(0);
if (model_p != NULL && player_p != NULL) {
modelData = model_p->getModelData();
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
J3DMaterial* mat_p = modelData->getMaterialNodePointer(i);
JUTNameTab* mat_nametbl = modelData->getMaterialName();
const char* mat_name = mat_nametbl->getName(i);
if (mat_name[3] == 'M' && mat_name[4] == 'A') {
if (memcmp(&mat_name[3], "MA06", 4) == 0) {
dKy_murky_set(mat_p);
}
if (memcmp(&mat_name[3], "MA03", 4) == 0 || memcmp(&mat_name[3], "MA09", 4) == 0 ||
memcmp(&mat_name[3], "MA17", 4) == 0 || memcmp(&mat_name[3], "MA19", 4) == 0)
{
if (mat_name[5] != '1') {
dComIfGd_setListDarkBG();
} else if (mat_name[6] == '9') {
dComIfGd_setListInvisisble();
}
if (mat_p->getFog() != NULL) {
J3DFogInfo* fog_info_p = mat_p->getFog()->getFogInfo();
if (fog_info_p != NULL) {
if (mat_name[5] == '0' && mat_name[6] == '9') {
fog_info_p->mType = 6;
J3DGXColor sp44;
sp44.r = 245.0f - g_env_light.mWaterSurfaceShineRate * 45.0f;
sp44.g = 245.0f - g_env_light.mWaterSurfaceShineRate * 45.0f;
sp44.b = 245.0f - g_env_light.mWaterSurfaceShineRate * 35.0f;
sp44.a = 255;
mat_p->setTevKColor(1, &sp44);
} else {
fog_info_p->mType = 7;
J3DGXColorS10 spA0;
J3DGXColor sp40;
spA0.r = g_env_light.bg_amb_col[2].r;
spA0.g = g_env_light.bg_amb_col[2].g;
spA0.b = g_env_light.bg_amb_col[2].b;
spA0.a = g_env_light.bg_amb_col[2].a;
sp40.a = g_env_light.bg_amb_col[1].a;
sp40.r = 0;
sp40.g = 0;
sp40.b = 0;
mat_p->setTevColor(1, &spA0);
mat_p->setTevKColor(3, &sp40);
}
}
}
}
if (memcmp(&mat_name[3], "MA07", 4) == 0) {
J3DGXColorS10 sp98;
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
EF_THUNDER* thunder_ef = &kankyo->mThunderEff;
sp98.r = (u8)(thunder_ef->mFlashTimer * 100.0f);
sp98.g = (u8)(thunder_ef->mFlashTimer * 100.0f);
sp98.b = (u8)(thunder_ef->mFlashTimer * 100.0f);
sp98.a = 255;
mat_p->setTevColor(0, &sp98);
}
if (memcmp(&mat_name[3], "MA10", 4) == 0 || memcmp(&mat_name[3], "MA02", 4) == 0) {
dComIfGd_setListInvisisble();
if (mat_p->getTexGenBlock()->getTexMtx(0) != NULL) {
tex_mtx_inf =
&mat_p->getTexGenBlock()->getTexMtx(0)->getTexMtxInfo();
if (tex_mtx_inf != NULL) {
cXyz* sp34 = dKyw_get_wind_vec();
cXyz sp108;
Mtx sp1D8;
if (mat_name[6] == '2') {
C_MTXLightPerspective(sp1D8, dComIfGd_getView()->fovy,
camera_p->aspect, 1.0f, 1.0f, -0.01f, 0.0f);
} else {
C_MTXLightPerspective(sp1D8, dComIfGd_getView()->fovy,
camera_p->aspect, 0.49f, -0.49f, 0.5f, 0.5f);
}
#if !PLATFORM_GCN
mDoGph_gInf_c::setWideZoomLightProjection(sp1D8);
#endif
tex_mtx_inf->setEffectMtx(sp1D8);
modelData->simpleCalcMaterial((MtxP)j3dDefaultMtx);
}
}
}
if (memcmp(&mat_name[3], "MA00", 4) == 0 || memcmp(&mat_name[3], "MA01", 4) == 0 ||
memcmp(&mat_name[3], "MA04", 4) == 0 || memcmp(&mat_name[3], "MA16", 4) == 0)
{
sp5C.r = (u8)g_env_light.mFogDensity;
sp5C.g = 0;
sp5C.b = 0;
if (mat_name[6] == '1') {
J3DPEBlock* peblock_p = mat_p->getPEBlock();
mat_p->change();
if (dKy_camera_water_in_status_check()) {
sp5C.a = 255;
peblock_p->getAlphaComp()->setAlphaCompInfo(l_alphaCompInfo);
peblock_p->getZMode()->setZModeInfo(l_zmodeUpEnable);
} else {
sp5C.a = 0;
peblock_p->getAlphaComp()->setAlphaCompInfo(l_alphaCompInfoOPA);
peblock_p->getZMode()->setZModeInfo(l_zmodeUpDisable);
}
} else {
sp5C.a = 0;
}
mat_p->setTevKColor(1, (J3DGXColor*)&sp5C);
}
if (memcmp(&mat_name[3], "MA11", 4) == 0) {
GXColorS10 sp90;
if (dKy_darkworld_check()) {
dComIfGd_setListDarkBG();
sp90.r = 170;
sp90.g = 160;
sp90.b = 255;
sp90.a = 255;
mat_p->setTevColor(1, (J3DGXColorS10*)&sp90);
sp90.r = 50;
sp90.g = 20;
sp90.b = 90;
sp90.a = 255;
mat_p->setTevColor(2, (J3DGXColorS10*)&sp90);
#if DEBUG
if (g_kankyoHIO.navy.light_adjust_ON) {
sp90.r = g_kankyoHIO.navy.mist_twilight_c1_col.r;
sp90.g = g_kankyoHIO.navy.mist_twilight_c1_col.g;
sp90.b = g_kankyoHIO.navy.mist_twilight_c1_col.b;
sp90.a = g_kankyoHIO.navy.mist_twilight_c1_col.a;
mat_p->setTevColor(1, (J3DGXColorS10*)&sp90);
sp90.r = g_kankyoHIO.navy.mist_twilight_c2_col.r;
sp90.g = g_kankyoHIO.navy.mist_twilight_c2_col.g;
sp90.b = g_kankyoHIO.navy.mist_twilight_c2_col.b;
sp90.a = g_kankyoHIO.navy.mist_twilight_c2_col.a;
mat_p->setTevColor(2, (J3DGXColorS10*)&sp90);
}
#endif
} else {
cXyz spFC;
cXyz spF0;
sp90.r = 120;
sp90.g = 90;
sp90.b = 180;
sp90.a = 255;
if (dComIfG_play_c::getLayerNo(0) == 1) {
sp90.a = 0;
}
mat_p->setTevColor(1, (J3DGXColorS10*)&sp90);
sp90.r = 40;
sp90.g = 30;
sp90.b = 65;
sp90.a = 255;
mat_p->setTevColor(2, (J3DGXColorS10*)&sp90);
#if DEBUG
if (g_kankyoHIO.navy.light_adjust_ON) {
sp90.r = g_kankyoHIO.navy.mist_twilight_c1_col.r;
sp90.g = g_kankyoHIO.navy.mist_twilight_c1_col.g;
sp90.b = g_kankyoHIO.navy.mist_twilight_c1_col.b;
sp90.a = g_kankyoHIO.navy.mist_twilight_c1_col.a;
mat_p->setTevColor(1, (J3DGXColorS10*)&sp90);
sp90.r = g_kankyoHIO.navy.mist_twilight_c2_col.r;
sp90.g = g_kankyoHIO.navy.mist_twilight_c2_col.g;
sp90.b = g_kankyoHIO.navy.mist_twilight_c2_col.b;
sp90.a = g_kankyoHIO.navy.mist_twilight_c2_col.a;
mat_p->setTevColor(2, (J3DGXColorS10*)&sp90);
}
#endif
if (kankyo->fog_avoid_tag != NULL) {
J3DTexMtxInfo* tex_mtx_inf;
kytag08_class* sp28 = kankyo->fog_avoid_tag;
spF0 = sp28->mAvoidPos;
f32 var_f28 =
sp28->mSize.x * sp28->mSizeScale;
if (var_f28 < 0.1f) {
var_f28 = 0.1f;
}
if (mat_p->getTexGenBlock()->getTexMtx(0) != NULL) {
tex_mtx_inf =
&mat_p->getTexGenBlock()->getTexMtx(0)->getTexMtxInfo();
if (tex_mtx_inf != NULL) {
Mtx sp1A8;
Mtx sp178;
C_MTXLightPerspective(sp1A8, var_f28 * 2.8f, 1.0f, 0.5f, 0.5f,
0.0f, 0.0f);
#if !PLATFORM_GCN
mDoGph_gInf_c::setWideZoomLightProjection(sp1A8);
#endif
spFC.x = spF0.x;
spFC.y = 100.0f;
spFC.z = spF0.z;
cXyz spE4(spFC.x, -1000.0f, spFC.z);
cMtx_lookAt(sp178, &spE4, &spFC, 0);
cMtx_concat(sp1A8, sp178, sp178);
tex_mtx_inf->setEffectMtx(sp178);
}
}
}
}
} else if (memcmp(&mat_name[3], "MA20", 4) == 0) {
cXyz spD8;
cXyz spCC;
if (mat_p->getFog() != NULL) {
J3DFogInfo* fog_inf = mat_p->getFog()->getFogInfo();
if (fog_inf != NULL) {
fog_inf->mType = 7;
}
GXColorS10 sp88;
sp88.r = g_env_light.bg_amb_col[3].r;
sp88.g = g_env_light.bg_amb_col[3].g;
sp88.b = g_env_light.bg_amb_col[3].b;
sp88.a = 255;
mat_p->setTevColor(1, (J3DGXColorS10*)&sp88);
if (mat_p->getTexGenBlock()->getTexMtx(2) != NULL) {
J3DTexMtxInfo* tex_mtx_inf =
&mat_p->getTexGenBlock()->getTexMtx(2)->getTexMtxInfo();
if (tex_mtx_inf != NULL) {
Mtx sp148;
Mtx sp118;
C_MTXLightPerspective(sp148, 170.0f, 1.0f, 1.5f, 1.5f, 0.0f, 0.0f);
#if !PLATFORM_GCN
mDoGph_gInf_c::setWideZoomLightProjection(sp148);
#endif
spD8.x = player_p->current.pos.x;
spD8.y = -14770.0f;
spD8.z = player_p->current.pos.z;
cXyz spC0(player_p->current.pos.x, -14570.0f,
player_p->current.pos.z);
cMtx_lookAt(sp118, &spC0, &spD8, 0);
cMtx_concat(sp148, sp118, sp118);
tex_mtx_inf->setEffectMtx(sp118);
}
}
}
} else if (memcmp(&mat_name[3], "MA13", 4) == 0) {
J3DGXColorS10 sp80;
sp80.r = g_env_light.bg_amb_col[3].r;
sp80.g = g_env_light.bg_amb_col[3].g;
sp80.b = g_env_light.bg_amb_col[3].b;
sp80.a = g_env_light.bg_amb_col[3].a;
mat_p->setTevColor(1, &sp80);
} else if (memcmp(&mat_name[3], "MA14", 4) == 0) {
J3DGXColorS10 sp78;
J3DGXColor sp1C;
sp78.r = g_env_light.fog_col.r;
sp78.g = g_env_light.fog_col.g;
sp78.b = g_env_light.fog_col.b;
sp78.a = g_env_light.fog_col.a;
mat_p->setTevColor(1, &sp78);
sp1C.r = sp1C.g = sp1C.b = 0;
sp1C.a = g_env_light.bg_amb_col[3].a;
mat_p->setTevKColor(3, &sp1C);
} else if (memcmp(&mat_name[3], "MA16", 4) == 0) {
J3DGXColorS10 sp70;
J3DGXColor sp18;
sp70.r = g_env_light.bg_amb_col[1].r;
sp70.g = g_env_light.bg_amb_col[1].g;
sp70.b = g_env_light.bg_amb_col[1].b;
sp70.a = g_env_light.bg_amb_col[1].a;
mat_p->setTevColor(1, &sp70);
sp18.r = sp18.g = sp18.b = 0;
sp18.a = g_env_light.bg_amb_col[3].a;
mat_p->setTevKColor(3, &sp18);
}
}
if (memcmp(&mat_name[3], "Rainbow", 7) == 0) {
f32 time = g_env_light.getDaytime();
f32 temp_f29;
f32 temp_f31;
cXyz spB4;
camera_class* camera_p = dComIfGp_getCamera(0);
J3DGXColor sp10;
cXyz spA8;
spA8.x = -5853.0f;
spA8.y = camera_p->lookat.eye.y;
spA8.z = -879.0f;
temp_f31 = spA8.abs(camera_p->lookat.eye);
temp_f31 = -0.2f + (temp_f31 / 4500.0f);
#if DEBUG
if (g_kankyoHIO.navy.rainbow_adjust_ON) {
temp_f31 = spA8.abs(camera_p->lookat.eye);
temp_f31 = temp_f31 / g_kankyoHIO.navy.rainbow_separation_dist + -0.2f;
}
#endif
if (temp_f31 > 1.0f) {
temp_f31 = 1.0f;
} else if (temp_f31 < 0.0f) {
temp_f31 = 0.0f;
}
sp10.r = 255;
sp10.g = 255;
sp10.b = 255;
sp10.a = 255;
temp_f29 = 0.0f;
if (time >= 270.0f) {
if (time < 285.0f) {
temp_f29 = (285.0f - time) / 15.0f;
}
} else if (time < 75.0f) {
if (time >= 60.0f) {
temp_f29 = 1.0f - ((75.0f - time) / 15.0f);
}
} else {
temp_f29 = 1.0f;
}
if (g_env_light.mColpatWeather != 0) {
temp_f29 = 0.0f;
}
sp10.r = sp10.g = sp10.b = 255;
f32 temp_f25 = 1.0f;
spA8 = camera_p->lookat.center;
spA8.y = camera_p->lookat.eye.y;
dKyr_get_vectle_calc(&camera_p->lookat.eye, &spA8, &spB4);
f32 temp_f27 = cM3d_VectorProduct2d(0.0f, 0.0f, -0.81f, 0.583f, spB4.x, spB4.z);
f32 temp_f26;
if (temp_f27 < 0.2f) {
sp10.a = 0;
} else {
if (temp_f27 > 0.6f) {
temp_f26 = 1.0f;
} else {
temp_f26 = (temp_f27 - 0.2f) / 0.4f;
}
sp10.a = temp_f25 * (temp_f31 * (115.0f * temp_f26 * temp_f29));
#if DEBUG
if (g_kankyoHIO.navy.rainbow_adjust_ON) {
sp10.a = temp_f25 * (temp_f31 * (g_kankyoHIO.navy.rainbow_max_alpha * temp_f26 * temp_f29));
}
#endif
}
mat_p->setTevKColor(3, &sp10);
}
}
}
}