Added New Mods and Profiles Folders

This is a complete rebuild of the modpack, with all new mods and updates for 1.5.3 of Anomaly.
This commit is contained in:
2025-01-14 05:07:53 -05:00
parent 85c665b107
commit 376b4b9689
21217 changed files with 546254 additions and 0 deletions
@@ -0,0 +1,8 @@
[rot_stain_1]
wallmarks = wm\wm_rot_2
[rot_stain_2]
wallmarks = wm\wm_rot_2
[rot_stain_3]
wallmarks = wm\wm_rot_2
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="ui_mcm_corpse_fauna_title">
<text>Corpse Fauna</text>
</string>
<string id="ui_mcm_menu_corpse_fauna">
<text>Corpse Fauna</text>
</string>
<string id="ui_mcm_corpse_fauna_decomp_interval">
<text>Decomposition Time (In Minutes)</text>
</string>
<string id="ui_mcm_corpse_fauna_decomp_interval_desc">
<text>Sets the amount of time it takes to start decomposing.</text>
</string>
<string id="ui_mcm_corpse_fauna_max_decals">
<text>Max Amount of Decals</text>
</string>
<string id="ui_mcm_corpse_fauna_max_decals_desc">
<text>Sets how many decals appear on decomposing bodies.</text>
</string>
<string id="ui_mcm_corpse_fauna_clear_cache">
<text>Clear Cache</text>
</string>
<string id="ui_mcm_corpse_fauna_clear_cache_desc">
<text>Tick this on if you are having issues. Disable after applying and loading your save.</text>
</string>
<string id="ui_mcm_corpse_fauna_debug_mode">
<text>Enable Debug Mode (Requires Reload)</text>
</string>
<string id="ui_mcm_corpse_fauna_debug_mode_desc">
<text>Enables debug mode to show print messages in console when ticked on.</text>
</string>
</string_table>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="ui_mcm_corpse_fauna_title">
<text>Corpse Fauna</text>
</string>
<string id="ui_mcm_menu_corpse_fauna">
<text>Corpse Fauna</text>
</string>
<string id="ui_mcm_corpse_fauna_decomp_interval">
<text>Âðåìÿ ðàçëîæåíèÿ (â ìèíóòàõ)</text>
</string>
<string id="ui_mcm_corpse_fauna_decomp_interval_desc">
<text>Óñòàíàâëèâàåò òàéìåð, ïî èñòå÷åíèè êîòîðîãî íà÷íåòñÿ ðàçëîæåíèå.</text>
</string>
<string id="ui_mcm_corpse_fauna_max_decals">
<text>Ìàêñèìàëüíîå êîëè÷åñòâî äåêàëåé</text>
</string>
<string id="ui_mcm_corpse_fauna_max_decals_desc">
<text>Óñòàíàâëèâàåò êîëè÷åñòâî äåêàëåé íà ðàçëàãàþùèõñÿ òåëàõ.</text>
</string>
<string id="ui_mcm_corpse_fauna_debug_mode">
<text>Âêëþ÷èòü ðåæèì îòëàäêè (òðåáóåòñÿ ïåðåçàãðóçêà)</text>
</string>
<string id="ui_mcm_corpse_fauna_debug_mode_desc">
<text>Âêëþ÷àåò ðåæèì îòëàäêè äëÿ îòîáðàæåíèÿ ñîîáùåíèé â êîíñîëè, åñëè ýòîò ôëàæîê óñòàíîâëåí.</text>
</string>
</string_table>
@@ -0,0 +1,129 @@
[_effect]
action_count = 8
flags = 5121
max_particles = 20
version = 1
[action_0000]
action_name = killold
action_type = 10
bool_0000 = off
flags = 1
flt_0000 = 2.000000
version = 1
[action_0001]
action_name = targetrotate
action_type = 25
flags = 1
flt_0000 = 0.030000
vec_0000 = 34.079620, 0.000000, 0.000000
version = 1
[action_0002]
action_name = orbitpoint
action_type = 14
bool_0000 = on
flags = 1
flt_0000 = 0.001000
flt_0001 = 1.000000
flt_0002 = 10000000272564224.000000
vec_0000 = 0.000000, 0.000000, 0.000000
version = 1
[action_0003]
action_name = orbitpoint
action_type = 14
bool_0000 = on
flags = 1
flt_0000 = 0.001000
flt_0001 = 1.000000
flt_0002 = 10000000272564224.000000
vec_0000 = 0.300000, 0.000000, 0.300000
version = 1
[action_0004]
action_name = randomdisplace
action_type = 16
bool_0000 = on
flags = 1
version = 1
[action_0005]
action_name = vortex
action_type = 29
bool_0000 = on
flags = 1
flt_0000 = 50.000000
flt_0001 = 70.000000
flt_0002 = 170.000000
vec_0000 = 0.000000, 37.000000, 0.000000
vec_0001 = 0.000000, 3.000000, 0.000000
version = 1
[action_0006]
action_name = source
action_type = 21
bool_0000 = on
bool_0001 = off
flags = 1
flt_0000 = 0.000000
flt_0001 = 1.000000
flt_0002 = 0.000000
flt_0003 = 17.000000
flt_0004 = 0.000000
version = 1
[action_0007]
action_name = move
action_type = 12
flags = 1
version = 1
[domain_action_0004_0000]
type = 5
v0 = 0.000000, 0.000000, 0.000000
v1 = 0.300000, 0.000000, 0.000000
v2 = 0.000000, 0.000000, 0.000000
[domain_action_0006_0000]
type = 0
v0 = 1.000000, 1.000000, 1.000000
v1 = 0.000000, 0.000000, 0.000000
v2 = 0.000000, 0.000000, 0.000000
[domain_action_0006_0001]
type = 5
v0 = 0.000000, -0.300000, 0.000000
v1 = 0.000000, 0.550000, 0.000000
v2 = 0.000000, 0.750000, 0.000000
[domain_action_0006_0002]
type = 1
v0 = -137.000000, -1.000000, -1.000000
v1 = 137.000000, 1.000000, 1.000000
v2 = 1.000000, 0.000000, 0.000000
[domain_action_0006_0003]
type = 0
v0 = 0.012000, 0.012000, 0.000000
v1 = 0.000000, 0.000000, 0.000000
v2 = 0.000000, 0.000000, 0.000000
[domain_action_0006_0004]
type = 7
v0 = 0.000000, 0.000000, 0.000000
v1 = 0.000000, 0.100000, 0.000000
v2 = 0.500000, 0.000000, 0.000000
[frame]
dim_x = 2
frame_count = 4
reserved = 64.000000, 64.000000
speed = 24.000000
tex_size = 0.500000, 0.500000
[sprite]
shader = particles\add
texture = pfx\pfx_leaves_01
@@ -0,0 +1,15 @@
[_group]
effects_count = 1
flags = 0
timelimit = 0.000000
version = 3
[effect_0000]
effect_name = environment_incest\effects\insect_light
flags = 4
on_birth_child =
on_death_child =
on_play_child =
time0 = 0.000000
time1 = 0.000000
@@ -0,0 +1,223 @@
local flies_t = {}
local snd_parts_t = {}
-- Specifying default variables
local decomp_stages_time = corpse_fauna_mcm.get_config("decomp_interval") * 360 -- flies and sound appear in this time
local max_decomp_stages = corpse_fauna_mcm.get_config("max_decals") -- max amount of wallmarks
local fly_dbg = corpse_fauna_mcm.get_config("debug_mode")
local clear_table = corpse_fauna_mcm.get_config("clear_cache")
local ctime_to_t = utils_data.CTime_to_table
local t_to_ctime = utils_data.CTime_from_table
-- default = "bip01_spine", in table = "spine"
local spine_pos_t = { [clsid.burer_s] = true, [clsid.chimera_s] = true, [clsid.gigant_s] = true, ["SM_LURKER"] = true }
function npc_on_death_callback(npc)
pr("start id: %s", npc:id())
flies_t[npc:id()] = {}
flies_t[npc:id()].start_time = ctime_to_t(game.get_game_time())
flies_t[npc:id()].stage = 0
flies_t[npc:id()].wms = 0
end
local tmr = 0
function actor_on_update()
local tg = time_global()
if tmr > tg then return end
tmr = tg + 2000
for npc_id, t in pairs(flies_t) do
local npc = level.object_by_id(npc_id)
local time_diff = game.get_game_time():diffSec(t_to_ctime(t.start_time))
pr("npc_id: %s || npc sec: %s || stage: %s || time: %s", npc_id, npc and npc:section(), t.stage, time_diff)
if npc and time_diff > decomp_stages_time then
play_move_snd_and_part(npc, npc_id)
-- wallmarks (first wallmark in 720, second in 720 + 360, third in 720 + 720 etc)
flies_t[npc_id].stage = math.floor( (time_diff - decomp_stages_time) / decomp_stages_time )
flies_t[npc_id].stage = flies_t[npc_id].stage < max_decomp_stages and flies_t[npc_id].stage or max_decomp_stages
if flies_t[npc_id].stage > flies_t[npc_id].wms then
local amount = flies_t[npc_id].stage - flies_t[npc_id].wms -- for loadings and redrawing
-- draw wm (can change function to not pick same bones later)
for i = 1, amount do
draw_rot_wm(npc)
flies_t[npc_id].wms = flies_t[npc_id].wms + 1
end
end
end
end
end
function server_entity_on_unregister(se_obj, typ) -- stop sound and particle and remove from table when npc is released
if flies_t[se_obj.id] then
pr("server stop sound/part/remove from table id: %s", se_obj.id)
stop_snd_and_part(se_obj.id)
flies_t[se_obj.id] = nil
end
end
function npc_on_net_destroy(npc) -- stop sound and particle when npc goes offline
if flies_t[npc:id()] then
pr("net_destroy stop sound/particles id: %s", npc:id())
stop_snd_and_part(npc:id())
end
end
function npc_on_net_spawn(npc) -- reset wallmarks when npc comes online
if flies_t[npc:id()] then
pr("net_spawn reset wallmarks id: %s", npc:id())
flies_t[npc:id()].wms = 0
end
end
function actor_on_first_update() -- reset wallmarks on loading
for npc_id, t in pairs(flies_t) do
pr("actor_first_update reset wallmarks id: %s", npc_id)
flies_t[npc_id].wms = 0
end
end
function play_move_snd_and_part(npc, id)
local bone_name = "bip01_spine"
-- special mutants
local kind = ini_sys:r_string_ex(npc:section(), "kind")
if (npc:clsid() and spine_pos_t[npc:clsid()]) or (kind and spine_pos_t[kind]) then
bone_name = "spine"
end
local bone_id = npc:get_bone_id(bone_name)
if (not bone_id) or (bone_id == 65535) then return end
local bone_pos = vector():set(npc:bone_position(bone_name))
local new_pos = vector():set(bone_pos.x, bone_pos.y + 0.5, bone_pos.z)
if not (snd_parts_t[id]) then -- play
pr("play id: %s", id)
snd_parts_t[id] = {}
snd_parts_t[id].snd = sound_object("corpse-fauna\\flies-buzzing-" .. math.random(1, 2))
snd_parts_t[id].snd:play_at_pos(npc, new_pos, 0, sound_object.s3d + sound_object.looped)
snd_parts_t[id].part = particles_object("flies_bzzz\\insect_light")
snd_parts_t[id].part:play_at_pos(new_pos)
else -- move
pr("move id: %s", id)
snd_parts_t[id].snd:set_position(new_pos)
snd_parts_t[id].part:move_to(new_pos, VEC_ZERO)
end
end
function stop_snd_and_part(id)
if not (snd_parts_t[id]) then return end
pr("stop id: %s", id)
if snd_parts_t[id].snd:playing() then
snd_parts_t[id].snd:stop()
end
if snd_parts_t[id].part:playing() then
snd_parts_t[id].part:stop()
end
snd_parts_t[id] = nil
end
function on_level_changing()
empty_table(flies_t)
end
function save_state(m_data)
m_data.body_flies_t = flies_t
end
function load_state(m_data)
flies_t = m_data.body_flies_t or {}
if clear_table == true then
empty_table(flies_t)
end
end
function pr(...)
if not fly_dbg then return end
printf(...)
end
-- for wallmarks
function find_wm_bone_pos(npc)
-- find damage sec
local damage_sec = ini_sys:r_string_ex(npc:section(), "damage") or ""
if (not damage_sec) or (damage_sec == "") then return end
-- collect bones from damage sec
local bones_t = utils_data.collect_section(ini_sys, damage_sec, true)
if not bones_t then return end
-- exclude some bones
local exclude_ar = { "finger", "toe", "hand", "foot" }
for bone_name, _ in pairs(bones_t) do
local bone_id = npc:get_bone_id(bone_name)
if (not bone_id) or (bone_id == 65535) or (str_find_in_ar(exclude_ar, bone_name)) then
bones_t[bone_name] = nil
end
end
-- get bone pos
local rnd_bone = random_key_table(bones_t)
local bone_pos = rnd_bone and vector():set( npc:bone_position(rnd_bone) )
return bone_pos, rnd_bone
end
function draw_rot_wm(npc)
local bone_pos, bone_name = find_wm_bone_pos(npc)
pr("draw wallmark, id: %s || bone: %s", npc:id(), bone_name)
if not bone_pos then return end
local y_offset = flies_t[npc:id()].stage % 2 == 0 and -0.2 or 0.2
local from_pos = vector():set(bone_pos.x, bone_pos.y + y_offset, bone_pos.z)
local from_dir = vec_sub(vector():set(bone_pos), vector():set(from_pos)):normalize()
local picked_wm = "rot_stain_" .. math.random(1, 3)
wallmarks_manager():place_skeleton(npc, picked_wm, vector():set(from_pos), vector():set(from_dir), 0.75, -1)
end
function str_find_in_ar(ar, str)
for i = 1, #ar do
if string.find(str, ar[i]) then
return true
end
end
end
function on_option_change()
decomp_stages_time = corpse_fauna_mcm.get_config("decomp_interval") * 360
max_decomp_stages = corpse_fauna_mcm.get_config("max_decals")
fly_dbg = corpse_fauna_mcm.get_config("debug_mode")
clear_table = corpse_fauna_mcm.get_config("clear_cache")
end
function on_game_start()
RegisterScriptCallback("npc_on_death_callback", npc_on_death_callback)
RegisterScriptCallback("monster_on_death_callback", npc_on_death_callback)
RegisterScriptCallback("actor_on_update", actor_on_update)
RegisterScriptCallback("server_entity_on_unregister", server_entity_on_unregister)
RegisterScriptCallback("npc_on_net_destroy", npc_on_net_destroy)
RegisterScriptCallback("monster_on_net_destroy", npc_on_net_destroy)
RegisterScriptCallback("npc_on_net_spawn", npc_on_net_spawn)
RegisterScriptCallback("monster_on_net_spawn", npc_on_net_spawn)
RegisterScriptCallback("actor_on_first_update", actor_on_first_update)
RegisterScriptCallback("save_state", save_state)
RegisterScriptCallback("load_state", load_state)
RegisterScriptCallback("on_option_change", on_option_change)
RegisterScriptCallback("on_level_changing", on_level_changing)
end
@@ -0,0 +1,24 @@
local defaults = {
["decomp_interval"] = 2,
["max_decals"] = 4,
["debug_mode"] = false,
["clear_cache"] = false,
}
function get_config(key)
if ui_mcm then return ui_mcm.get("corpse_fauna/"..key) else return defaults[key] end
end
function on_mcm_load()
op = {id= "corpse_fauna", sh=true , gr={
{id = "title", type="slide", link="ui_options_slider_player", text="ui_mcm_corpse_fauna_title", size={512,50}, spacing=20},
{id = "decomp_interval", type="track", val=2, min=1, max=10, step=1, def=2},
{id = "max_decals", type="track", val=2, min=2, max=4, step=1, def=4},
{id = "line", type="line"},
{id = "debug_mode", type = "check", val = 1, def = false},
{id = "clear_cache", type = "check", val = 1, def = false},
}
}
return op
end
Binary file not shown.
Binary file not shown.
+28
View File
@@ -0,0 +1,28 @@
[General]
gameName=stalkeranomaly
modid=0
version=d2024.12.3.0
newestVersion=
category="-1,"
nexusFileStatus=1
installationFile=Corpse_Fauna-1.1.2.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2024-12-03T23:44:25Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1