Removed EGUI in favor of UI Rework by Sota Added in GTR Optimized for higher res textures, over Zone Reality Remade and removed all files that conflicted from ZRR to save storage space.
323 lines
9.3 KiB
Plaintext
323 lines
9.3 KiB
Plaintext
--==============================================================================================
|
|
--Yet Another Winter Mod snowfall script
|
|
--Author: Daedalus-Prime
|
|
-- Edit by demonized:
|
|
-- Refactor of script for easier adding and toggling of particles
|
|
-- Check for playing particles depending on ray collision
|
|
-- Playing particles outside of covers depending on location where actor entered the cover for muh immersion
|
|
-- Saving entered cover position and restoring it on save/load
|
|
-- edit by FabioConte for Anomqly Season's Redux (05.02.2023)
|
|
-- edit by S.e.m.i.t.o.n.e. for 'The Arrival' mod
|
|
--==============================================================================================
|
|
function on_game_start()
|
|
RegisterScriptCallback("actor_on_update", actor_on_update)
|
|
RegisterScriptCallback("save_state", save_state)
|
|
RegisterScriptCallback("load_state", load_state)
|
|
end
|
|
|
|
local ray = function(pos, dir, args)
|
|
local pos = pos and vector():set(pos.x or pos[1], pos.y or pos[2], pos.z or pos[3]) or device().cam_pos
|
|
local dir = dir and vector():set(dir.x or dir[1], dir.y or dir[2], dir.z or dir[3]) or device().cam_dir
|
|
local args = args or {}
|
|
|
|
local pick = ray_pick()
|
|
pick:set_position(pos)
|
|
pick:set_direction(dir)
|
|
pick:set_flags(args.flags or 2)
|
|
pick:set_range(args.range or 200)
|
|
if args.ignore_object then
|
|
pick:set_ignore_object(args.ignore_object)
|
|
end
|
|
pick:query()
|
|
|
|
return pick
|
|
end
|
|
|
|
local snow_particle_foggy = particles_object("semitone\\environmental\\seed1") --set particles to variables
|
|
local snow_particle_foggy1 = particles_object("semitone\\environmental\\seed2")
|
|
local snow_particle_foggy2 = particles_object("semitone\\environmental\\tree_leaves_stormy")
|
|
local snow_particle_foggy3 = particles_object("lanforse\\fog_mist")
|
|
|
|
|
|
-- These particles wont play inside at all
|
|
dont_play_inside_particles = {
|
|
[snow_particle_foggy] = true,
|
|
[snow_particle_foggy1] = true,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
}
|
|
|
|
weather_to_particles = {
|
|
["default"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
|
|
},
|
|
["w_ccgim_fog"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
|
|
},
|
|
["w_clear_foggy"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_clear1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_clear2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_cloudy1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_cloudy2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_cloudy2_dark"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_cloudy3"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_cloudy4"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_deaspir_foggy"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_foggy1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_foggy2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_foggy3"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_indoor_agr_underground"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_indoor_ambient"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_indoor_default"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_indoor_jupiter_underground"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_indoor_sarcofag"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_partly1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_partly2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_partly3"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_partly4"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_rain1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_rain2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_rain3"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_storm1"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_storm2"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
["w_swtc_tuman"] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = true,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
[0] = {
|
|
[snow_particle_foggy] = false,
|
|
[snow_particle_foggy1] = false,
|
|
[snow_particle_foggy2] = false,
|
|
[snow_particle_foggy3] = false,
|
|
},
|
|
}
|
|
|
|
function switch_particles(particle_table, pos, is_inside)
|
|
local pos = pos or device().cam_pos
|
|
for k, v in pairs(particle_table) do
|
|
-- Disable particles that are in dont_play_inside_particles table if inside
|
|
if is_inside and dont_play_inside_particles[k] then
|
|
if k:playing() then
|
|
k:stop()
|
|
end
|
|
else
|
|
if v then
|
|
if k:playing() then
|
|
k:move_to(pos, VEC_ZERO)
|
|
else
|
|
k:play_at_pos(pos)
|
|
end
|
|
else
|
|
if k:playing() then
|
|
k:stop_deffered()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local ray_args = {
|
|
range = 30
|
|
}
|
|
local inside_pos
|
|
function actor_on_update()
|
|
-- Check current weather
|
|
local weather = level.get_weather()
|
|
|
|
-- Detection of cover by rain collision
|
|
local cam_pos = device().cam_pos
|
|
local r1 = ray(cam_pos, VEC_Y, ray_args)
|
|
local r2 = ray(cam_pos, vector():set(VEC_Y):add(vector():set(1.5, 0, 0)), ray_args)
|
|
local r3 = ray(cam_pos, vector():set(VEC_Y):add(vector():set(-1.5, 0, 0)), ray_args)
|
|
local r4 = ray(cam_pos, vector():set(VEC_Y):add(vector():set(0, 0, 1.5)), ray_args)
|
|
local r5 = ray(cam_pos, vector():set(VEC_Y):add(vector():set(0, 0, -1.5)), ray_args)
|
|
local r = r1:get_distance() > 0
|
|
and r2:get_distance() > 0
|
|
and r3:get_distance() > 0
|
|
and r4:get_distance() > 0
|
|
and r5:get_distance() > 0
|
|
|
|
-- Set variable for whether the player is in an emission safe zone or not
|
|
local is_inside = GetEvent("current_safe_cover") or r
|
|
|
|
-- Set variable for whether the player is in an underground level or not
|
|
local is_underground = GetEvent("underground")
|
|
|
|
-- If exists saved position where actor entered cover, apply it
|
|
local pos
|
|
if is_inside then
|
|
if inside_pos then
|
|
pos = vector():set(inside_pos.x, cam_pos.y, inside_pos.z)
|
|
else
|
|
inside_pos = cam_pos
|
|
pos = inside_pos
|
|
end
|
|
else
|
|
inside_pos = nil
|
|
end
|
|
snowfall(weather, is_inside, is_underground, pos)
|
|
end
|
|
|
|
function snowfall(weather, is_inside, is_underground, inside_pos)
|
|
if is_underground then
|
|
switch_particles(weather_to_particles[0], inside_pos, is_inside)
|
|
UnregisterScriptCallback("actor_on_update", actor_on_update)
|
|
return
|
|
end
|
|
|
|
if (is_inside and not inside_pos) or not weather_to_particles[weather] then
|
|
switch_particles(weather_to_particles[0], inside_pos, is_inside)
|
|
return
|
|
end
|
|
|
|
switch_particles(weather_to_particles[weather], inside_pos, is_inside)
|
|
end
|
|
|
|
function save_state(m_data)
|
|
m_data.snowfall_inside_pos = inside_pos and utils_data.vector_to_string(inside_pos)
|
|
end
|
|
|
|
function load_state(m_data)
|
|
inside_pos = m_data.snowfall_inside_pos and utils_data.string_to_vector(m_data.snowfall_inside_pos)
|
|
end
|