504 lines
27 KiB
Lua
504 lines
27 KiB
Lua
-- Cheat Menu - Cheat menu for Grand Theft Auto SanAndreas
|
|
-- Copyright (C) 2019-2020 Grinch_
|
|
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- (at your option) any later version.
|
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
local module = {}
|
|
module.tvisual =
|
|
{
|
|
car_names = imgui.new.bool(true),
|
|
disable_motion_blur = imgui.new.bool(fconfig.Get('tvisual.disable_motion_blur',false)),
|
|
lock_weather = imgui.new.bool(fconfig.Get('tvisual.lock_weather',false)),
|
|
radio_channel_names = imgui.new.bool(fconfig.Get('tvisual.radio_channel_names',true)),
|
|
timecyc =
|
|
{ timecyc_24_plugin = getModuleHandle("timecycle24"),
|
|
ambient = imgui.new.float[3](),
|
|
ambient_obj = imgui.new.float[3](),
|
|
sky_top = imgui.new.float[3](),
|
|
sky_bottom = imgui.new.float[3](),
|
|
sun_core = imgui.new.float[3](),
|
|
sun_corona = imgui.new.float[3](),
|
|
sun_size = imgui.new.int(),
|
|
sprite_size = imgui.new.int(),
|
|
sprite_brightness = imgui.new.int(),
|
|
shadow_strength = imgui.new.int(),
|
|
light_shadow_strength = imgui.new.int(),
|
|
pole_shadow_strength = imgui.new.int(),
|
|
far_clip = imgui.new.int(),
|
|
fog_start = imgui.new.int(),
|
|
lights_on_ground_brightness = imgui.new.int(),
|
|
low_clouds = imgui.new.float[3](),
|
|
fluffy_clouds = imgui.new.float[3](),
|
|
water = imgui.new.float[4](),
|
|
postfx1 = imgui.new.float[4](),
|
|
postfx2 = imgui.new.float[4](),
|
|
cloud_alpha = imgui.new.int(),
|
|
waterfog_alpha = imgui.new.int(),
|
|
high_light_min_intensity= imgui.new.int(),
|
|
directional_mult = imgui.new.int(),
|
|
weather =
|
|
{
|
|
names =
|
|
{
|
|
"EXTRASUNNY LA",
|
|
"SUNNY LA",
|
|
"EXTRASUNNY SMOG LA",
|
|
"SUNNY SMOG LA",
|
|
"CLOUDY LA",
|
|
"SUNNY SF",
|
|
"EXTRASUNNY SF",
|
|
"CLOUDY SF",
|
|
"RAINY SF",
|
|
"FOGGY SF",
|
|
"SUNNY VEGAS",
|
|
"EXTRASUNNY VEGAS",
|
|
"CLOUDY VEGAS",
|
|
"EXTRASUNNY COUNTRYSIDE",
|
|
"SUNNY COUNTRYSIDE",
|
|
"CLOUDY COUNTRYSIDE",
|
|
"RAINY COUNTRYSIDE",
|
|
"EXTRASUNNY DESERT",
|
|
"SUNNY DESERT",
|
|
"SANDSTORM DESERT",
|
|
"UNDERWATER",
|
|
"EXTRACOLOURS 1",
|
|
"EXTRACOLOURS 2"
|
|
},
|
|
array = {},
|
|
},
|
|
},
|
|
zone_names = imgui.new.bool(true),
|
|
}
|
|
|
|
module.tvisual.timecyc.weather.array = imgui.new['const char*'][#module.tvisual.timecyc.weather.names](module.tvisual.timecyc.weather.names)
|
|
|
|
function module.LockWeather()
|
|
local weather = casts.CTimeCyc.curr_weather[0]
|
|
while module.tvisual.lock_weather[0] do
|
|
casts.CTimeCyc.curr_weather[0] = weather
|
|
casts.CTimeCyc.next_weather[0] = weather
|
|
wait(0)
|
|
end
|
|
end
|
|
|
|
function GetCurrentHourTimeId(hour)
|
|
|
|
local h = casts.CTimeCyc.hours[0]
|
|
|
|
if hour == 24 then
|
|
return h
|
|
end
|
|
|
|
if h < 5 then return 0 end
|
|
if h == 5 then return 1 end
|
|
if h == 6 then return 2 end
|
|
|
|
if 7 <= h and h < 12 then return 3 end
|
|
if 12 <= h and h < 19 then return 4 end
|
|
|
|
if h == 19 then return 5 end
|
|
if h == 20 or h == 21 then return 6 end
|
|
if h == 22 or h == 23 then return 7 end
|
|
end
|
|
|
|
function UpdateTimecycData(val)
|
|
|
|
module.tvisual.timecyc.ambient[0] = casts.CTimeCyc.ambient_red[val]/255
|
|
module.tvisual.timecyc.ambient[1] = casts.CTimeCyc.ambient_green[val]/255
|
|
module.tvisual.timecyc.ambient[2] = casts.CTimeCyc.ambient_blue[val]/255
|
|
|
|
module.tvisual.timecyc.ambient_obj[0] = casts.CTimeCyc.ambient_obj_red[val]/255
|
|
module.tvisual.timecyc.ambient_obj[1] = casts.CTimeCyc.ambient_obj_green[val]/255
|
|
module.tvisual.timecyc.ambient_obj[2] = casts.CTimeCyc.ambient_obj_blue[val]/255
|
|
|
|
module.tvisual.timecyc.sky_top[0] = casts.CTimeCyc.sky_top_red[val]/255
|
|
module.tvisual.timecyc.sky_top[1] = casts.CTimeCyc.sky_top_green[val]/255
|
|
module.tvisual.timecyc.sky_top[2] = casts.CTimeCyc.sky_top_blue[val]/255
|
|
|
|
module.tvisual.timecyc.sky_bottom[0] = casts.CTimeCyc.sky_bottom_red[val]/255
|
|
module.tvisual.timecyc.sky_bottom[1] = casts.CTimeCyc.sky_bottom_green[val]/255
|
|
module.tvisual.timecyc.sky_bottom[2] = casts.CTimeCyc.sky_bottom_blue[val]/255
|
|
|
|
module.tvisual.timecyc.sun_core[0] = casts.CTimeCyc.sun_core_red[val]/255
|
|
module.tvisual.timecyc.sun_core[1] = casts.CTimeCyc.sun_core_green[val]/255
|
|
module.tvisual.timecyc.sun_core[2] = casts.CTimeCyc.sun_core_blue[val]/255
|
|
|
|
module.tvisual.timecyc.sun_corona[0] = casts.CTimeCyc.sun_corona_red[val]/255
|
|
module.tvisual.timecyc.sun_corona[1] = casts.CTimeCyc.sun_corona_green[val]/255
|
|
module.tvisual.timecyc.sun_corona[2] = casts.CTimeCyc.sun_corona_blue[val]/255
|
|
|
|
module.tvisual.timecyc.sun_size[0] = casts.CTimeCyc.sun_size[val]
|
|
|
|
module.tvisual.timecyc.sprite_brightness[0] = casts.CTimeCyc.sprite_brightness[val]
|
|
module.tvisual.timecyc.sprite_size[0] = casts.CTimeCyc.sprite_size[val]
|
|
|
|
module.tvisual.timecyc.shadow_strength[0] = casts.CTimeCyc.shadow_strength[val]
|
|
module.tvisual.timecyc.light_shadow_strength[0] = casts.CTimeCyc.light_shadow_strength[val]
|
|
module.tvisual.timecyc.pole_shadow_strength[0] = casts.CTimeCyc.pole_shadow_strength[val]
|
|
|
|
module.tvisual.timecyc.fog_start[0] = casts.CTimeCyc.fog_start[val]
|
|
module.tvisual.timecyc.far_clip[0] = casts.CTimeCyc.far_clip[val]
|
|
module.tvisual.timecyc.lights_on_ground_brightness[0] = casts.CTimeCyc.lights_on_ground_brightness[val]
|
|
|
|
module.tvisual.timecyc.low_clouds[0] = casts.CTimeCyc.low_clouds_red[val]/255
|
|
module.tvisual.timecyc.low_clouds[1] = casts.CTimeCyc.low_clouds_green[val]/255
|
|
module.tvisual.timecyc.low_clouds[2] = casts.CTimeCyc.low_clouds_blue[val]/255
|
|
|
|
module.tvisual.timecyc.fluffy_clouds[0] = casts.CTimeCyc.fluffy_clouds_red[val]/255
|
|
module.tvisual.timecyc.fluffy_clouds[1] = casts.CTimeCyc.fluffy_clouds_green[val]/255
|
|
module.tvisual.timecyc.fluffy_clouds[2] = casts.CTimeCyc.fluffy_clouds_blue[val]/255
|
|
|
|
module.tvisual.timecyc.water[0] = casts.CTimeCyc.water_red[val]/255
|
|
module.tvisual.timecyc.water[1] = casts.CTimeCyc.water_green[val]/255
|
|
module.tvisual.timecyc.water[2] = casts.CTimeCyc.water_blue[val]/255
|
|
module.tvisual.timecyc.water[3] = casts.CTimeCyc.water_alpha[val]/255
|
|
|
|
module.tvisual.timecyc.postfx1[0] = casts.CTimeCyc.postfx1_red[val]/255
|
|
module.tvisual.timecyc.postfx1[1] = casts.CTimeCyc.postfx1_green[val]/255
|
|
module.tvisual.timecyc.postfx1[2] = casts.CTimeCyc.postfx1_blue[val]/255
|
|
module.tvisual.timecyc.postfx1[3] = casts.CTimeCyc.postfx1_alpha[val]/255
|
|
|
|
module.tvisual.timecyc.postfx2[0] = casts.CTimeCyc.postfx2_red[val]/255
|
|
module.tvisual.timecyc.postfx2[1] = casts.CTimeCyc.postfx2_green[val]/255
|
|
module.tvisual.timecyc.postfx2[2] = casts.CTimeCyc.postfx2_blue[val]/255
|
|
module.tvisual.timecyc.postfx2[3] = casts.CTimeCyc.postfx2_alpha[val]/255
|
|
|
|
module.tvisual.timecyc.cloud_alpha[0] = casts.CTimeCyc.cloud_alpha[val]
|
|
module.tvisual.timecyc.waterfog_alpha[0] = casts.CTimeCyc.waterfog_alpha[val]
|
|
module.tvisual.timecyc.high_light_min_intensity[0] = casts.CTimeCyc.high_light_min_intensity[val]
|
|
module.tvisual.timecyc.directional_mult[0] = casts.CTimeCyc.directional_mult[val]
|
|
end
|
|
|
|
function GenerateTimecycFile(hour)
|
|
|
|
local file = io.open(getGameDirectory().."/timecyc.dat", "w")
|
|
if hour == 24 then
|
|
file = io.open(getGameDirectory().."/timecyc_24h.dat", "w")
|
|
end
|
|
|
|
for i=0,(#module.tvisual.timecyc.weather.names-1),1 do
|
|
file:write("\n\n//////////// " .. module.tvisual.timecyc.weather.names[i+1].. "\n")
|
|
|
|
file:write("//\tAmb\t\t\t\t\tAmb Obj \t\t\t\tDir \t\t\t\t\tSky top\t\t\t\tSky bot\t\t\t\tSunCore\t\t\t\t\tSunCorona\t\t\tSunSz\tSprSz\tSprBght\t\tShdw\tLightShd\tPoleShd\t\tFarClp\t\tFogSt\tLightOnGround\tLowCloudsRGB\tBottomCloudRGB\t\tWaterRGBA\t\t\t\tARGB1\t\t\t\t\tARGB2\t\t\tCloudAlpha\t\tIntensityLimit\t\tWaterFogAlpha\tDirMult \n\n")
|
|
|
|
for j=0,(hour-1),1 do
|
|
|
|
if hour == 24 then
|
|
if (j >= 12) then
|
|
file:write(string.format("// %s PM\n",j))
|
|
else
|
|
file:write(string.format("// %s AM\n",j))
|
|
end
|
|
else
|
|
if j == 0 then file:write("// Midnight\n") end
|
|
if j == 1 then file:write("// 5 AM\n") end
|
|
if j == 2 then file:write("// 6 AM\n") end
|
|
if j == 3 then file:write("// 7 AM\n") end
|
|
if j == 4 then file:write("// Midday\n") end
|
|
if j == 5 then file:write("// 7 PM\n") end
|
|
if j == 6 then file:write("// 8 PM\n") end
|
|
if j == 7 then file:write("// 10 PM\n") end
|
|
end
|
|
|
|
local val = 23 * j + i
|
|
|
|
file:write(
|
|
string.format(
|
|
"\t%d %d %d \t\t" .. -- AmbRGB
|
|
"\t%d %d %d \t\t" .. -- AmbObjRGB
|
|
"\t%d %d %d \t\t" .. -- DirRGB (unused?)
|
|
"\t%d %d %d \t\t" .. -- SkyTopRGB
|
|
"\t%d %d %d \t\t" .. -- SkyBotRGB
|
|
"\t%d %d %d \t\t" .. -- SunCore RGB
|
|
"\t%d %d %d \t\t" .. -- SunCorona RGB
|
|
"\t%.1f\t\t%.1f\t\t%.1f\t\t" .. -- SunSz, SpriteSz, SpriteBrightness
|
|
"\t%d \t%d \t\t\t%d\t\t" .. -- ShadStrenght, LightShadStreght, PoleShadStrenght
|
|
"\t%.1f\t\t%.1f\t\t%.1f\t\t" .. -- fFarClip, fFogStart, fLightsOnGroundBrightness
|
|
"\t\t%d %d %d\t" .. -- LowCloudsRGB
|
|
"\t%d %d %d\t\t" .. -- FluffyCloudsRGB
|
|
"\t%d %d %d %d\t\t" .. -- WaterRGBA
|
|
"\t%d %d %d %d\t\t" .. -- PostFx1ARGB
|
|
"\t%d %d %d %d" .. -- PostFx2ARGB
|
|
"\t%d\t\t\t\t%d\t\t\t\t\t%d\t\t\t\t%.2f\t\t\n", -- CloudAlpha HiLiMinIntensity WaterFogAlpha DirectionalMult
|
|
casts.CTimeCyc.ambient_red[val], casts.CTimeCyc.ambient_green[val], casts.CTimeCyc.ambient_blue[val],
|
|
casts.CTimeCyc.ambient_obj_red[val], casts.CTimeCyc.ambient_obj_green[val], casts.CTimeCyc.ambient_obj_blue[val],
|
|
255, 255, 255,
|
|
casts.CTimeCyc.sky_top_red[val], casts.CTimeCyc.sky_top_green[val], casts.CTimeCyc.sky_top_blue[val],
|
|
casts.CTimeCyc.sky_bottom_red[val], casts.CTimeCyc.sky_bottom_green[val], casts.CTimeCyc.sky_bottom_blue[val],
|
|
casts.CTimeCyc.sun_core_red[val],casts.CTimeCyc.sun_core_green[val],casts.CTimeCyc.sun_core_blue[val],
|
|
casts.CTimeCyc.sun_corona_red[val], casts.CTimeCyc.sun_corona_green[val], casts.CTimeCyc.sun_corona_blue[val],
|
|
(casts.CTimeCyc.sprite_size[val] - 0.5) / 10.0,(casts.CTimeCyc.sprite_size[val] - 0.5) / 10.0,(casts.CTimeCyc.sprite_brightness[val] - 0.5) / 10.0,
|
|
casts.CTimeCyc.shadow_strength[val],casts.CTimeCyc.light_shadow_strength[val],casts.CTimeCyc.pole_shadow_strength[val],
|
|
casts.CTimeCyc.far_clip[val],casts.CTimeCyc.fog_start[val], (casts.CTimeCyc.lights_on_ground_brightness[val] - 0.5) / 10.0,
|
|
casts.CTimeCyc.low_clouds_red[val],casts.CTimeCyc.low_clouds_green[val],casts.CTimeCyc.low_clouds_blue[val],
|
|
casts.CTimeCyc.fluffy_clouds_red[val],casts.CTimeCyc.fluffy_clouds_green[val],casts.CTimeCyc.fluffy_clouds_blue[val],
|
|
casts.CTimeCyc.water_red[val],casts.CTimeCyc.water_blue[val],casts.CTimeCyc.water_blue[val],casts.CTimeCyc.water_alpha[val],
|
|
casts.CTimeCyc.postfx1_alpha[val],casts.CTimeCyc.postfx1_red[val],casts.CTimeCyc.postfx1_green[val],casts.CTimeCyc.postfx1_blue[val],
|
|
casts.CTimeCyc.postfx2_alpha[val],casts.CTimeCyc.postfx2_red[val],casts.CTimeCyc.postfx2_green[val],casts.CTimeCyc.postfx2_blue[val],
|
|
casts.CTimeCyc.cloud_alpha[val],casts.CTimeCyc.high_light_min_intensity[val], casts.CTimeCyc.waterfog_alpha[val], casts.CTimeCyc.directional_mult[val] / 100.0
|
|
)
|
|
)
|
|
end
|
|
end
|
|
io.close(file)
|
|
end
|
|
------------------------------------------------
|
|
|
|
-- Main function
|
|
function module.VisualMain()
|
|
if fcommon.BeginTabBar('VisualBar') then
|
|
if fcommon.BeginTabItem('Checkboxes') then
|
|
imgui.Columns(2,nil,false)
|
|
fcommon.CheckBoxValue('Armour border',0x589123)
|
|
fcommon.CheckBoxValue('Armour percentage',0x589125)
|
|
fcommon.CheckBoxValue('Breath border',0x589207)
|
|
fcommon.CheckBoxValue('Breath percentage',0x589209)
|
|
if fcommon.CheckBoxVar('Display car names',module.tvisual.car_names) then
|
|
displayCarNames(module.tvisual.car_names[0])
|
|
fconfig.Set(fconfig.tconfig.misc_data,"Display Car Names",module.tvisual.car_names[0])
|
|
end
|
|
if fcommon.CheckBoxVar('Disable motion blur',module.tvisual.disable_motion_blur) then
|
|
if module.tvisual.disable_motion_blur[0] then
|
|
writeMemory(0x7030A0,4,0xC3,false)
|
|
else
|
|
writeMemory(0x7030A0,4,0xF3CEC83,false)
|
|
end
|
|
end
|
|
if fcommon.CheckBoxVar('Display zone names',module.tvisual.zone_names) then
|
|
displayZoneNames(module.tvisual.zone_names[0])
|
|
fconfig.Set(fconfig.tconfig.misc_data,"Display Zone Names",module.tvisual.zone_names[0])
|
|
end
|
|
fcommon.CheckBoxValue('Enable hud',0xBA6769)
|
|
|
|
imgui.NextColumn()
|
|
|
|
fcommon.CheckBoxValue('Enable radar',0xBA676C,nil,0,2)
|
|
fcommon.CheckBoxValue('Gray radar',0xA444A4)
|
|
fcommon.CheckBoxValue('Health border',0x589353)
|
|
fcommon.CheckBoxValue('Health percentage',0x589355)
|
|
fcommon.CheckBoxValue('Hide wanted level',0x58DD1B,nil,0x90)
|
|
if fcommon.CheckBoxVar('Lock weather',module.tvisual.lock_weather) then
|
|
fcommon.CreateThread(fvisual.LockWeather)
|
|
end
|
|
if fcommon.CheckBoxVar('Radio channel names',module.tvisual.radio_channel_names) then
|
|
if module.tvisual.radio_channel_names[0] then
|
|
writeMemory(0x507035,5,-30533911,false)
|
|
else
|
|
writeMemory(0x507035,4,0x90,false)
|
|
end
|
|
end
|
|
imgui.Columns(1)
|
|
end
|
|
if fcommon.BeginTabItem('Menus') then
|
|
fcommon.CRGBAColorPicker("Health bar + debt color",0xBAB22C,{180,25,29})
|
|
fcommon.CRGBAColorPicker("Main menu title border color",0xBAB240,{0,0,0})
|
|
fcommon.CRGBAColorPicker("Money color",0xBAB230,{54,104,44})
|
|
fcommon.RadioButtonAddressEx("Money font outline",{"No outline","Thin outline","Default outline"},{0,1,2},0x58F58D)
|
|
fcommon.RadioButtonAddressEx("Money font style",{"Style 1","Style 2","Default style"},{1,2,3},0x58F57F)
|
|
fcommon.UpdateAddress({ name = 'Radar Height',address = 0x866B74,size = 4,min=0,default = 76,max = 999,is_float = true})
|
|
fcommon.UpdateAddress({ name = 'Radar Width',address = 0x866B78,size = 4,min=0,default = 94,max = 999,is_float = true})
|
|
fcommon.UpdateAddress({ name = 'Radar X position',address = 0x858A10,size = 4,min=-999,default = 40,max = 999,is_float = true,help_text = "Changes radar vertical position"})
|
|
fcommon.UpdateAddress({ name = 'Radar Y position',address = 0x866B70,size = 4,min=-999,default = 104,max = 999,is_float = true,help_text = "Changes radar horizantal position"})
|
|
fcommon.UpdateAddress({ name = 'Radar zoom',address = 0xA444A3,size = 1,min=0,default = 0,max = 170})
|
|
fcommon.CRGBAColorPicker("Radio station color",0xBAB24C,{150,150,150})
|
|
fcommon.CRGBAColorPicker("Styled text color",0xBAB258,{226,192,99})
|
|
fcommon.CRGBAColorPicker("Text color",0xBAB234,{50,60,127})
|
|
fcommon.RadioButtonAddressEx("Wanted star border",{"No border","Default","Bold border"},{0,1,2},0x58DD41)
|
|
fcommon.CRGBAColorPicker("Wanted star color + some text",0xBAB244,{144,98,16})
|
|
fcommon.UpdateAddress({ name = 'Wanted star Y position',address = 0x858CCC,size = 4,is_float = true,min=-500,default = 12,max = 500})
|
|
end
|
|
if fcommon.BeginTabItem('Timecyc editor') then
|
|
if module.tvisual.timecyc.timecyc_24_plugin ~= 0 then
|
|
HOUR = 24
|
|
else
|
|
HOUR = 8
|
|
end
|
|
|
|
local val = 23 * GetCurrentHourTimeId(HOUR) + casts.CTimeCyc.curr_weather[0]
|
|
UpdateTimecycData(val)
|
|
|
|
imgui.SetNextItemWidth(imgui.GetWindowContentRegionWidth()/1.7)
|
|
if imgui.Button("Generate timecyc file",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
GenerateTimecycFile(HOUR)
|
|
printHelpString("File generated")
|
|
end
|
|
imgui.SameLine()
|
|
if imgui.Button("Reset timecyc",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
casts.CTimeCyc.initialise()
|
|
printHelpString("Timecyc reset")
|
|
end
|
|
|
|
imgui.Spacing()
|
|
local weather = imgui.new.int(casts.CTimeCyc.curr_weather[0])
|
|
if imgui.Combo("Current weather", weather,module.tvisual.timecyc.weather.array,#module.tvisual.timecyc.weather.names) then
|
|
if module.tvisual.lock_weather[0] then
|
|
printHelpString("Weather locked")
|
|
else
|
|
casts.CTimeCyc.curr_weather[0] = weather[0]
|
|
printHelpString("Current weather set")
|
|
end
|
|
end
|
|
|
|
weather = imgui.new.int(casts.CTimeCyc.next_weather[0])
|
|
if imgui.Combo("Next weather", weather,module.tvisual.timecyc.weather.array,#module.tvisual.timecyc.weather.names) then
|
|
if module.tvisual.lock_weather[0] then
|
|
printHelpString("Weather locked")
|
|
else
|
|
casts.CTimeCyc.next_weather[0] = weather[0]
|
|
printHelpString("Next weather set")
|
|
end
|
|
end
|
|
imgui.Spacing()
|
|
|
|
if fcommon.BeginTabBar('Timecyc sub tab') then
|
|
if fcommon.BeginTabItem('Colors') then
|
|
if imgui.ColorEdit3("Ambient",module.tvisual.timecyc.ambient) then
|
|
casts.CTimeCyc.ambient_red[val] = module.tvisual.timecyc.ambient[0]*255
|
|
casts.CTimeCyc.ambient_green[val] = module.tvisual.timecyc.ambient[1]*255
|
|
casts.CTimeCyc.ambient_blue[val] = module.tvisual.timecyc.ambient[2]*255
|
|
end
|
|
fcommon.InformationTooltip("Ambient color on static map objects")
|
|
|
|
if imgui.ColorEdit3("Ambient obj",module.tvisual.timecyc.ambient_obj) then
|
|
casts.CTimeCyc.ambient_obj_red[val] = module.tvisual.timecyc.ambient_obj[0]*255
|
|
casts.CTimeCyc.ambient_obj_green[val] = module.tvisual.timecyc.ambient_obj[1]*255
|
|
casts.CTimeCyc.ambient_obj_blue[val] = module.tvisual.timecyc.ambient_obj[2]*255
|
|
end
|
|
fcommon.InformationTooltip("Ambient color on dynamic map objects")
|
|
|
|
if imgui.ColorEdit3("Fluffy clouds",module.tvisual.timecyc.fluffy_clouds) then
|
|
casts.CTimeCyc.fluffy_clouds_red[val] = module.tvisual.timecyc.fluffy_clouds[0]*255
|
|
casts.CTimeCyc.fluffy_clouds_green[val] = module.tvisual.timecyc.fluffy_clouds[1]*255
|
|
casts.CTimeCyc.fluffy_clouds_blue[val] = module.tvisual.timecyc.fluffy_clouds[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit3("Low clouds",module.tvisual.timecyc.low_clouds) then
|
|
casts.CTimeCyc.low_clouds_red[val] = module.tvisual.timecyc.low_clouds[0]*255
|
|
casts.CTimeCyc.low_clouds_green[val] = module.tvisual.timecyc.low_clouds[1]*255
|
|
casts.CTimeCyc.low_clouds_blue[val] = module.tvisual.timecyc.low_clouds[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit4("Postfx 1",module.tvisual.timecyc.postfx1) then
|
|
casts.CTimeCyc.postfx1_red[val] = module.tvisual.timecyc.postfx1[0]*255
|
|
casts.CTimeCyc.postfx1_green[val] = module.tvisual.timecyc.postfx1[1]*255
|
|
casts.CTimeCyc.postfx1_blue[val] = module.tvisual.timecyc.postfx1[2]*255
|
|
casts.CTimeCyc.postfx1_alpha[val] = module.tvisual.timecyc.postfx1[3]*255
|
|
end
|
|
fcommon.InformationTooltip("Color correction 1")
|
|
|
|
if imgui.ColorEdit4("Postfx 2",module.tvisual.timecyc.postfx2) then
|
|
casts.CTimeCyc.postfx2_red[val] = module.tvisual.timecyc.postfx2[0]*255
|
|
casts.CTimeCyc.postfx2_green[val] = module.tvisual.timecyc.postfx2[1]*255
|
|
casts.CTimeCyc.postfx2_blue[val] = module.tvisual.timecyc.postfx2[2]*255
|
|
casts.CTimeCyc.postfx2_alpha[val] = module.tvisual.timecyc.postfx2[3]*255
|
|
end
|
|
fcommon.InformationTooltip("Color correction 2")
|
|
|
|
if imgui.ColorEdit3("Sky bottom",module.tvisual.timecyc.sky_bottom) then
|
|
casts.CTimeCyc.sky_bottom_red[val] = module.tvisual.timecyc.sky_bottom[0]*255
|
|
casts.CTimeCyc.sky_bottom_green[val] = module.tvisual.timecyc.sky_bottom[1]*255
|
|
casts.CTimeCyc.sky_bottom_blue[val] = module.tvisual.timecyc.sky_bottom[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit3("Sun core",module.tvisual.timecyc.sun_core) then
|
|
casts.CTimeCyc.sun_core_red[val] = module.tvisual.timecyc.sun_core[0]*255
|
|
casts.CTimeCyc.sun_core_green[val] = module.tvisual.timecyc.sun_core[1]*255
|
|
casts.CTimeCyc.sun_core_blue[val] = module.tvisual.timecyc.sun_core[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit3("Sun corona",module.tvisual.timecyc.sun_corona) then
|
|
casts.CTimeCyc.sun_corona_red[val] = module.tvisual.timecyc.sun_corona[0]*255
|
|
casts.CTimeCyc.sun_corona_green[val] = module.tvisual.timecyc.sun_corona[1]*255
|
|
casts.CTimeCyc.sun_corona_blue[val] = module.tvisual.timecyc.sun_corona[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit3("Sky top",module.tvisual.timecyc.sky_top) then
|
|
casts.CTimeCyc.sky_top_red[val] = module.tvisual.timecyc.sky_top[0]*255
|
|
casts.CTimeCyc.sky_top_green[val] = module.tvisual.timecyc.sky_top[1]*255
|
|
casts.CTimeCyc.sky_top_blue[val] = module.tvisual.timecyc.sky_top[2]*255
|
|
end
|
|
|
|
if imgui.ColorEdit4("Water",module.tvisual.timecyc.water) then
|
|
casts.CTimeCyc.water_red[val] = module.tvisual.timecyc.water[0]*255
|
|
casts.CTimeCyc.water_green[val] = module.tvisual.timecyc.water[1]*255
|
|
casts.CTimeCyc.water_blue[val] = module.tvisual.timecyc.water[2]*255
|
|
casts.CTimeCyc.water_alpha[val] = module.tvisual.timecyc.water[3]*255
|
|
end
|
|
end
|
|
if fcommon.BeginTabItem('Misc') then
|
|
imgui.PushItemWidth(imgui.GetWindowContentRegionWidth()/2)
|
|
if imgui.SliderInt("Cloud alpha", module.tvisual.timecyc.cloud_alpha, 0, 255) then
|
|
casts.CTimeCyc.cloud_alpha[val] = module.tvisual.timecyc.cloud_alpha[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Directional mult", module.tvisual.timecyc.directional_mult, 0, 255) then
|
|
casts.CTimeCyc.directional_mult[val] = module.tvisual.timecyc.directional_mult[0]
|
|
end
|
|
fcommon.InformationTooltip("Direct light on peds & vehicles")
|
|
|
|
if imgui.SliderInt("Far clip", module.tvisual.timecyc.far_clip, 0, 2000) then
|
|
casts.CTimeCyc.far_clip[val] = module.tvisual.timecyc.far_clip[0]
|
|
end
|
|
fcommon.InformationTooltip("Visibility range")
|
|
|
|
if imgui.SliderInt("High light min intensity", module.tvisual.timecyc.high_light_min_intensity, 0, 255) then
|
|
casts.CTimeCyc.high_light_min_intensity[val] = module.tvisual.timecyc.high_light_min_intensity[0]
|
|
end
|
|
fcommon.InformationTooltip("Intensity limit for PS2 radiosity effect")
|
|
|
|
if imgui.SliderInt("Fog start", module.tvisual.timecyc.fog_start, 0, 2000) then
|
|
casts.CTimeCyc.fog_start[val] = module.tvisual.timecyc.fog_start[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Light on ground brightness", module.tvisual.timecyc.lights_on_ground_brightness, 0, 255) then
|
|
casts.CTimeCyc.lights_on_ground_brightness[val] = module.tvisual.timecyc.lights_on_ground_brightness[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Light shadow strength", module.tvisual.timecyc.light_shadow_strength, 0, 255) then
|
|
casts.CTimeCyc.light_shadow_strength[val] = module.tvisual.timecyc.light_shadow_strength[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Pole shadow strength", module.tvisual.timecyc.pole_shadow_strength, 0, 255) then
|
|
casts.CTimeCyc.pole_shadow_strength[val] = module.tvisual.timecyc.pole_shadow_strength[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Shadow strength", module.tvisual.timecyc.shadow_strength, 0, 255) then
|
|
casts.CTimeCyc.shadow_strength[val] = module.tvisual.timecyc.shadow_strength[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Sprite brightness", module.tvisual.timecyc.sprite_brightness, 0, 127) then
|
|
casts.CTimeCyc.sprite_brightness[val] = module.tvisual.timecyc.sprite_brightness[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Sprite size", module.tvisual.timecyc.sprite_size, 0, 127) then
|
|
casts.CTimeCyc.sprite_size[val] = module.tvisual.timecyc.sprite_size[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Sun size", module.tvisual.timecyc.sun_size, 0, 127) then
|
|
casts.CTimeCyc.sun_size[val] = module.tvisual.timecyc.sun_size[0]
|
|
end
|
|
|
|
if imgui.SliderInt("Water fog alpha", module.tvisual.timecyc.waterfog_alpha, 0, 255) then
|
|
casts.CTimeCyc.waterfog_alpha[val] = module.tvisual.timecyc.waterfog_alpha[0]
|
|
end
|
|
end
|
|
fcommon.EndTabBar()
|
|
end
|
|
end
|
|
fcommon.EndTabBar()
|
|
end
|
|
end
|
|
|
|
return module
|