diff --git a/mods/Alternate Fake Start/meta.ini b/mods/Alternate Fake Start/meta.ini index 7ccd4423..d62c40bd 100644 --- a/mods/Alternate Fake Start/meta.ini +++ b/mods/Alternate Fake Start/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.3.19.0 newestVersion= -category="-1," +category="15," nexusFileStatus=1 installationFile=Alternate_Fake_Start.rar repository=Nexus diff --git a/mods/And Who To Shoot/PATCH Warfare ALife Overhaul/gamedata/scripts/tasks_assault.script b/mods/And Who To Shoot/PATCH Warfare ALife Overhaul/gamedata/scripts/tasks_assault.script deleted file mode 100644 index cacc61b3..00000000 --- a/mods/And Who To Shoot/PATCH Warfare ALife Overhaul/gamedata/scripts/tasks_assault.script +++ /dev/null @@ -1,524 +0,0 @@ ---[[ -- Remade by Tronex -- 2019/4/23 - - Edit Log: - 2020/5/29 - Vintar - added Warfare compatibility - -- Global functions for assault tasks, with support for pre-info before accepting - - Parameters for precondition - P[1] = (string) task_id - P[2] = (num) scan mode (1 to 5) - 1 = same level - 2 = same or nearby levels - 3 = neaby levels only - 4 = far levels - 5 = all levels - P[3] = (num) minimum squad members size - P[4] = (num) minumum stay time for squad - P[5] = (bool) if true, scan will includes scripted squads - P[6] = (bool) if true, the factions declared in "status_functor_params" are enemy factions to traget, otherwise script assume they are natural and will search for matual enemies to them. If first faction is "monster" it will be a mutant squad hunt - P[7] = (string) specific smart to target - - - Example of usage in configs: - precondition = validate_assault_task( mil_smart_terrain_7_7_freedom_leader_stalker_task_2 : 2 : 1 : nil : false : true : nil ) - target_functor = assault_task_target_functor - status_functor = assault_task_status_functor - status_functor_params = dolg - on_job_descr = %=setup_assault_task( mil_smart_terrain_7_7_freedom_leader_stalker_task_2 )% - - ---]] - --- Cache -local cache_assault = {} -local cache_assault_func = {} - -local sfind = string.find - -local factions_list = { -- List of allowed factions - ["stalker"] = true, - ["dolg"] = true, - ["freedom"] = true, - ["csky"] = true, - ["ecolog"] = true, - ["killer"] = true, - ["army"] = true, - ["bandit"] = true, - ["monolith"] = true, -} - -local blacklisted_maps = { -- List of maps to skip in scans - -- North - ["l13_generators"] = true, - ["l12_stancia_2"] = true, - ["l12_stancia"] = true, - ["l11_pripyat"] = true, - ["l10_radar"] = true, - ["l11_hospital"] = true, - - -- Underground - ["jupiter_underground"] = true, - ["labx8"] = true, - ["l03u_agr_underground"] = true, - ["l04u_labx18"] = true, - ["l08u_brainlab"] = true, - ["l10u_bunker"] = true, - ["l12u_control_monolith"] = true, - ["l12u_sarcofag"] = true, - ["l13u_warlab"] = true, - - ["fake_start"] = true -} - - ----------------------------< Utility >--------------------------- -function is_legit_mutant_squad(squad) - local section = squad and squad:section_name() - return squad and (not sfind(section,"tushkano")) and (not sfind(section,"rat")) and true or false -end - -function evaluate_smarts_squads(task_id, tbl, smart, squad_def, faction_def) - if (not smart) then - return - end - - local smrt_id = smart.id - local smrt_name = smart:name() - - if (simulation_objects.base_smarts[smrt_name] == true) then - return - end - - local smrt = smrt_id and SIMBOARD.smarts[smrt_id] - if (not smrt) then - return - end - --printf("~ %s | scanning smart: %s", task_id, smrt_name) - - for sq_id,_ in pairs(smrt.squads) do - --printf("# %s | found squad (%s) in smart: %s", task_id, sq_id, smrt_name) - - -- if warfare, override checks on stay time, default squad stuff - -- if smart's squad is on its level + they are targeting it - local squad = alife_object(sq_id) - if squad and simulation_objects.is_on_the_same_level(squad, smart) - and squad.current_target_id and (squad.current_target_id == smrt_id) - and (squad.current_action == 1) - and (((squad:npc_count() >= squad_def.num) - and squad.stay_time - and ((not squad_def.stay_time) or (squad_def.stay_time and (game.get_game_time():diffSec(squad.stay_time) <= tonumber(squad_def.stay_time)))) - and (squad_def.scripted or (not squad:get_script_target()))) - or (_G.WARFARE and not squad:get_script_target())) - then - --printf("# %s | smart (%s) [%s] w/ squad (%s) [%s] = Checking", task_id, smrt_id, smrt_name, sq_id, squad.player_id) - - for fac,_ in pairs(faction_def) do - - -- if squad is from enemies table - if (is_legit_mutant_squad(squad) and squad.player_id == fac) then - --squad.stay_time = game.get_game_time() - tbl[sq_id] = smrt_id - --printf("- %s | smart (%s) [%s] w/ squad (%s) [%s] = Added", task_id, smrt_id, smrt_name, sq_id, squad.player_id) - end - end - end - end -end - -function evaluate_squads_smarts(task_id, var, squad, smart) - if squad and simulation_objects.is_on_the_same_level(squad, smart) then - if not ( squad.first_update ) then - --printf("~ %s | not all squads are loaded yet!", task_id) - return true - end - - if (var.scripted or (not squad:get_script_target())) - and (squad.current_target_id and squad.current_target_id == smart.id and squad.current_action == 1) - then - --printf("- %s | squad (%s) [%s] is targeting smart (%s)", task_id, squad.id, squad.player_id, smart.id) - for i = 1, #cache_assault_func[task_id] do - local fac = cache_assault_func[task_id][i] - if (is_legit_mutant_squad(squad) and squad.player_id == fac) then - -- updating data - var.squad_id = squad.id - save_var( db.actor, task_id, var ) - - -- reset gametime so they don't leave - if not _G.WARFARE then - squad.stay_time = game.get_game_time() - end - squad.force_online = true - --printf("- %s | squad (%s) [%s] is saved", task_id, squad.id, squad.player_id) - return true - end - end - end - end - return false -end - -function postpone_for_next_frame(task_id, squad_id) - local is_hostage_task = (task_manager.task_ini:r_string_ex(task_id, "status_functor") == "hostage_task") and true or false - local squad = alife_object(squad_id) - if (squad) then - - -- Location - local location = alife():level_name(game_graph():vertex(squad.m_game_vertex_id):level_id()) - for k in squad:squad_members() do - local se_obj = k.object or alife_object(k.id) - if se_obj then - location = dynamic_news_helper.GetPointDescription(se_obj) - break - end - end - local str_location = game.translate_string("st_location") .. " " .. location - - -- Community - local str_comm = "" - local community = squad.player_id - if is_squad_monster[community] then - str_comm = game.translate_string("st_sq_type") .. " " .. game.translate_string(community) - else - str_comm = game.translate_string("st_mm_new_game_faction_2") .. " " .. game.translate_string(community) - end - - -- Build News - local news_caption = game.translate_string(task_manager.task_ini:r_string_ex(task_id, "title")) or "error" - - local news_text, news_ico - if is_hostage_task then - news_text = str_location - news_ico = task_manager.task_ini:r_string_ex(task_id, "icon") - else - news_text = str_comm .. "\\n " .. str_location - news_ico = news_manager.tips_icons[squad.player_id] - end - if (not news_ico) then - news_ico = task_manager.task_ini:r_string_ex(task_id, "icon") or "ui_iconsTotal_mutant" - end - - db.actor:give_talk_message2(news_caption, news_text, news_ico, "iconed_answer_item") - end - return true -end - - ----------------------------< Target functor >--------------------------- -task_functor.assault_task_target_functor = function (task_id,field,p,tsk) - if (field == "target") then - if (tsk and tsk.stage == 1 and tsk.task_giver_id) then - return tsk.task_giver_id - end - - local actor = db.actor - local var = actor and load_var(actor, task_id) - if (not var) then - printe("! %s | assault_task_target_functor - var is nil", task_id) - return - end - - local smart = var.smart_id and alife_object(var.smart_id) - if (not smart) then - printe("! %s | assault_task_target_functor - smart is nil", task_id) - return - end - - local squad = var.squad_id and alife_object(var.squad_id) - - -- If enemies are more then 50m from target location, then show red (?) near their location - if (squad) then - if (smart.position:distance_to_sqr(squad.position) > 2500) then - if (squad:clsid() == clsid.online_offline_group_s) then - if (squad.id and level.map_has_object_spot(squad.id,"red_location") == 0) then - level.map_add_object_spot(squad.id, "red_location", "st_ui_pda_task_unknown_enemy") - end - end - else - if (squad:clsid() == clsid.online_offline_group_s) then - if (squad.id and level.map_has_object_spot(squad.id,"red_location") == 1) then - level.map_remove_object_spot(squad.id, "red_location") - end - end - end - end - - return var.smart_id - end -end - - ----------------------------< Status functor >--------------------------- -task_status_functor.assault_task_status_functor = function (tsk,task_id) - if not (db.actor and tsk) then return end - - if (tsk.stage == 1) then return end -- already completed - - local var = load_var(db.actor, task_id) -- check saved data - if (not var) then return "fail" end - - local smart_id = var.smart_id -- check smart id - if (not smart_id) then return "fail" end - - local smrt = SIMBOARD.smarts[smart_id] -- check smart object (special defines) - if (not smrt) then return "fail" end - - local smart = smrt.smrt -- check smart server object - if (not smart) then return "fail" end - - -- in case sim_avail is set true during the player's tsk. with simulation_objects.available_by_id[smart.id] nil means unprocess, false is absolutely not avail - if (simulation_objects.available_by_id[smart.id] == nil) then - return - elseif (simulation_objects.available_by_id[smart.id] == false) then - printe("! %s | task failed because smart no longer available", task_id) - return "fail" - end - - - -- Store factions parameters for the first time to re-use it - if (not cache_assault_func[task_id]) then - cache_assault_func[task_id] = {} - local params = parse_list(task_manager.task_ini,task_id,"status_functor_params") - if var.is_enemy then - for i=1,#params do - if is_squad_monster[params[i]] or factions_list[params[i]] then - cache_assault_func[task_id][i] = params[i] - printf("/ %s | Faction [%s] is re-added to cache_assault_func table", task_id, params[i]) - end - end - elseif (not is_squad_monster[params[1]]) then - for fac,_ in pairs(factions_list) do - local cnt = 0 - local is_enemy_to_actor = true --game_relations.is_factions_enemies(fac, get_actor_true_community()) - for i=1,#params do - if (fac ~= params[i]) and is_enemy_to_actor and game_relations.is_factions_enemies(fac, params[i]) then - cnt = cnt + 1 - end - end - if (cnt == #params) then - local idx = #cache_assault_func[task_id] + 1 - cache_assault_func[task_id][idx] = fac - printf("/ %s | Faction [%s] is re-added to cache_assault_func table", task_id, fac) - end - end - end - if (#cache_assault_func[task_id] == 0) then - printe("! %s | no enemy factions found",task_id) - return "fail" - end - end - - - -- Timer for less pressure - local tg = time_global() - if (tsk.__check_smart_time and tg < tsk.__check_smart_time) then - return - end - tsk.__check_smart_time = tg+3000 - - -- cleaning data for re-assign next - local squad_id = var.squad_id - var.squad_id = nil - save_var(db.actor, task_id, var) - - -- Scan saved squad - local squad = squad_id and alife_object(squad_id) - if squad then - local pass_this = evaluate_squads_smarts(task_id, var, squad, smart) - if pass_this then - return - end - end - - -- Scan all squads - for id,v in pairs( SIMBOARD.squads ) do - local squad = alife_object(id) - if squad then - local pass_this = evaluate_squads_smarts(task_id, var, squad, smart) - if pass_this then - return - end - end - end - - -- And who to shoot? - if (smart.position:distance_to(db.actor:position()) > 15) then - return - end - - -- If smart is controllable by factions, player dominate it - if (smart.faction_controlled) then - local comm = character_community(db.actor):sub(7) - smart.faction = factions_list[comm] and comm or smart.faction - end - - -- Assuming no squads means that target smart got cleared - tsk.stage = 1 -end - - ----------------------------< Precondition >--------------------------- -xr_conditions.validate_assault_task = function(actor, npc, p) - if not (p and #p >= 1) then - return false - end - local task_id = p[1] - - if (#p < 7) then - printe("! %s | not enough parameters", task_id) - return false - end - - --// Return true if a squad is picked already - if cache_assault[task_id] then - local c_squad_id = cache_assault[task_id].squad_id - local c_smart_id = cache_assault[task_id].smart_id - local c_squad = c_squad_id and alife_object(c_squad_id) - local c_smart = c_smart_id and alife_object(c_smart_id) - if c_squad and c_smart and (c_squad.current_target_id == c_smart_id) then - return true - end - end - - --// Utilities - local sim = alife() - local gg = game_graph() - local actor_comm = sim:actor():community() - local actor_level = level.name() - local is_avail = simulation_objects.available_by_id - local p_status = parse_list(task_manager.task_ini,task_id,"status_functor_params") - local enemy_faction_list = {} - if (not p_status[1]) then - printe("! %s | status functor parameters are mising!", task_id) - return false - end - - --// Defines - local def = {} - def.scan = tonumber(p[2]) or 1 - def.num = tonumber(p[3]) or 1 - def.stay_time = (p[4] ~= "nil") and tonumber(p[4]) - def.scripted = (p[5] == "true") and true or false - def.is_enemy = (p[6] == "true") and true or false - def.smart = (p[7] ~= "nil") and p_status[1] - - --// Collect enemy factions - if def.is_enemy then -- if faction parameters are enemies - for i=1,#p_status do - if is_squad_monster[p_status[i]] or factions_list[p_status[i]] then - --printf("/ %s | Faction [%s] is added to enemy_faction_list table", task_id, p_status[i]) - enemy_faction_list[p_status[i]] = true - end - end - - elseif (not is_squad_monster[p_status[1]]) then -- if faction parameters are matutal factions - for fac,_ in pairs(factions_list) do - local cnt = 0 - local is_enemy_to_actor = true --game_relations.is_factions_enemies(fac, get_actor_true_community()) - for i=1,#p_status do - if (fac ~= p_status[i]) and is_enemy_to_actor and game_relations.is_factions_enemies(fac, p_status[i]) then - cnt = cnt + 1 - end - end - if (cnt == #p_status) then - enemy_faction_list[fac] = true - --printf("/ %s | Faction [%s] is added to enemy_faction_list table", task_id, fac) - end - end - end - - if is_empty(enemy_faction_list) then - printe("! %s | no enemy factions found", task_id) - return false - end - - - --// Search all smarts - local targets = {} -- target[squad_id] = smart_id - if def.smart then -- search in specific smart - local smart = SIMBOARD.smarts_by_names[def.smart] - if smart then - evaluate_smarts_squads(task_id, targets, smart, def, enemy_faction_list) - end - - else -- search all smarts - for name,v in pairs(SIMBOARD.smarts_by_names) do - - -- if smart is available - if (is_avail[v.id] == true) then - - -- if smart is not in blacklisted location - local smart_level = sim:level_name(gg:vertex(v.m_game_vertex_id):level_id()) - if (not blacklisted_maps[smart_level]) then - - -- if smart location is proper to the parameter - local is_online = v.online - local is_nearby = sfind(simulation_objects.config:r_value(actor_level, "target_maps", 0, ""), smart_level) - if ((def.scan == 1) and is_online) -- same level - or ((def.scan == 2) and (is_online or is_nearby)) -- same + nearby level - or ((def.scan == 3) and is_nearby) -- nearby levels only - or ((def.scan == 4) and (not (is_online or is_nearby))) -- far levels only - or (def.scan == 5) -- anywhere - then - evaluate_smarts_squads(task_id, targets, v, def, enemy_faction_list) - end - end - end - end - end - - --// Cache results - if is_not_empty(targets) then - local target_squad = random_key_table(targets) - local target_smart = targets[target_squad] - - -- local x = alife_object(target_smart) - -- printf('target %s',x and x:name()) - - cache_assault[task_id] = { - squad_id = target_squad, - smart_id = target_smart, - is_enemy = def.is_enemy, - scripted = def.scripted - } - - --printf("- %s | Found %s targets so far", task_id, size_table(targets)) - return true - end - - --printf("! %s | no targets found", task_id) - return false -end - - ----------------------------< Effects >--------------------------- -xr_effects.setup_assault_task = function(actor, npc, p) - if not (p and p[1]) then - return false - end - local task_id = p[1] - - --// Read cache - if cache_assault[task_id] then - local squad_id = cache_assault[task_id].squad_id - local smart_id = cache_assault[task_id].smart_id - local squad = squad_id and alife_object(squad_id) - local smart = smart_id and alife_object(smart_id) - if squad and smart then - squad.stay_time = game.get_game_time() - sim_offline_combat.task_squads[squad_id] = true - local tbl = { - smart_id = smart_id, - squad_id = squad_id, - is_enemy = cache_assault[task_id].is_enemy, - scripted = cache_assault[task_id].scripted, - } - save_var(db.actor, task_id, tbl) - printdbg("- %s | Cached result = squad_id (%s) [%s] - smart_id(%s) - is_enemy: %s - scripted: %s", task_id, squad_id, squad.player_id, smart_id, tbl.is_enemy, tbl.scripted) - - CreateTimeEvent(0,"setup_assault_task",0,postpone_for_next_frame,task_id, squad_id) - end - end -end diff --git a/mods/Anomaly Speed/README b/mods/Anomaly Speed/README deleted file mode 100644 index ac1b1f47..00000000 --- a/mods/Anomaly Speed/README +++ /dev/null @@ -1,44 +0,0 @@ -This addon gives speed bonuses and penalties to various outfits. - -There are three parts to this addon. - -1. Outfit Speed -Light armors like jackets, Sunrise suits and LC suits receive anywhere from a 5-10% increase in movement speed. -Exoskeletons, exosuits and some heavy armors get anywhere from a 5-13% decrease in movement speed. -Other armors like SEVA, SSP, SKAT are untouched (they are balanced compared to exos by carryweight, but I can tweak this if desired). -This is completely configurable using outfit_speeds.ltx. -The speed modifier is displayed in outfit stats. - -2. Active item affects speed (Toggleable) -Having a knife, axe, or handgun out confers an 8% sprint speed bonus. -Having a submachinegun out confers a 4% bonus. -Other weapons or items will either confer no bonus or slow the player down depending on weight, up to -8%. - -3. Encumbrance affects speed (Toggleable) -The actor's total encumbrance (carried weight / max possible weight) affects their movespeed, like in Dark Souls. -Under 25% total weight, the actor moves 8% faster. -Above 70% weight, the actor moves 8% slower. -Above 100% weight, the actor moves 16% slower. -These bonuses and penalties are halved with exoskeletons. - - -V1.2.1 -- Adjusted the formula for encumbrance. -V1.2 -- Mainlined encumbrance as MCM option. Reworked formula for weapon speed (now gives penalty based on weapon weight). -V1.1.7 -- Nerfed exosuit sprint speed (it's heavy after all). Added encumbrance addon as an optional goodie. -V1.1.6 -- Some internal cleanup. Buffed base speed of Nosorog to match that of exoskeletons. Nerfed exo sprint speed by 10%, 20 for Nosorogs. -V1.1.5 -- Monkey patched out dependency on utils_ui. Fixed bugs in speed.script, clamped minimum movement speed to be walking speed. -V1.1.4 -- Small fix for crash on holster. -V1.1.3 -- Refactor to be more modular. Update for 1.5.1. -V1.1.2 -- Fix crash when removing outfits. Added speed reduction to exosuits. -V1.1.1 -- Refactor to remove dependency on modifying outfit.ltx files. Compatibility with speed modification in my Powered Exos addon. -V1.1 -- Pistol and knife make you sprint 10% faster. Patch for exos updated to reflect 1.3.1 changes. \ No newline at end of file diff --git a/mods/Aydin's Grass Tweaks/meta.ini b/mods/Aydin's Grass Tweaks/meta.ini index c9a146b8..42d7e44b 100644 --- a/mods/Aydin's Grass Tweaks/meta.ini +++ b/mods/Aydin's Grass Tweaks/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=4.0.0.0 newestVersion= -category="-1," +category="16," nexusFileStatus=1 installationFile=Aydins_Grass_Tweaks_4.0.7z repository=Nexus diff --git a/mods/Aydins Grass Tweaks - SSS Terrain LOD Compatiblity/meta.ini b/mods/Aydins Grass Tweaks - SSS Terrain LOD Compatiblity/meta.ini index 1a999353..fa3a4faf 100644 --- a/mods/Aydins Grass Tweaks - SSS Terrain LOD Compatiblity/meta.ini +++ b/mods/Aydins Grass Tweaks - SSS Terrain LOD Compatiblity/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=1.0.0.0 newestVersion= -category="-1," +category="16," nexusFileStatus=1 installationFile=Aydins_Grass_Tweaks_SSS_Terrain_LOD_compatiblity.rar repository=Nexus diff --git a/mods/Binocular Renaimation/Optional/0.4 HUD FOV Patch/gamedata/configs/items/weapons/m_binoc.ltx b/mods/Binocular Renaimation/Optional/0.4 HUD FOV Patch/gamedata/configs/items/weapons/m_binoc.ltx deleted file mode 100644 index 45caffe9..00000000 --- a/mods/Binocular Renaimation/Optional/0.4 HUD FOV Patch/gamedata/configs/items/weapons/m_binoc.ltx +++ /dev/null @@ -1,198 +0,0 @@ - -; UNUSED -- it works the same as wpn_binoc_inv and all traders sell that one, so this cannot be obtained normally -; since most properties are defined here i'd say in 1.6 to delete the _inv version and keep and use this one instead -[wpn_binoc]:identity_immunities,weapon_probability,default_weapon_params,wpn_binoc_sounds - GroupControlSection = spawn_group - discovery_dependency = - $npc = on - $prefetch = 8 - $spawn = "weapons\binocular" - scheduled = off - cform = skeleton - - class = WP_BINOC - slot = 4 - animation_slot = 13 - ef_main_weapon_type = 5 - ef_weapon_type = 0 - hand_dependence = 2 - single_handed = 0 - - default_to_ruck = true - sprint_allowed = true - show_ammo = false - show_condition = false - - inv_grid_height = 1 - inv_grid_width = 2 - inv_grid_x = 14 - inv_grid_y = 9 - inv_name = st_binocular_name - inv_name_short = st_binocular_name - description = st_binocular_descr - highlight_equipped = true - anim_item = true - - kind = w_misc - inv_weight = 1.0 - cost = 1580 - repair_type = lens - - hud = wpn_binoc_hud - visual = dynamics\devices\dev_binoculars\dev_binoculars.ogf - normal = 0, 1, 0 - position = -0.08, -0.05, 0.05 - orientation = 0, -90, 70 - direction = 0, 0, 1 - fire_point = 0.0, 0.133, 0.161 - ph_mass = 1 - - attach_bone_name = bip01_r_hand - attach_position_offset = 0.080000, 0.021273, 0.100000 - attach_angle_offset = 3.080506, -1.493053, -1.202040 - auto_attach = false - - catch_snd = none - found_snd = none - vis_frame_color = 0.0, 0.0, 0.0, 0.0 - vis_frame_speed = 0 - vision_present = true - - flame_particles = weapons\generic_weapon05 - smoke_particles = weapons\generic_shoot_00 - - light_color = 0.6, 0.5, 0.3 - light_range = 3.0 - light_time = 0.2 - light_var_color = 0.05 - light_var_range = 0.5 - - upgrades = up_gr_firstab_binoc, up_gr_seconab_binoc, up_gr_thirdab_binoc - installed_upgrades = - upgrade_scheme = upgrade_scheme_binoculars - upgr_icon_x = 300 - upgr_icon_y = 1950 - upgr_icon_width = 150 - upgr_icon_height = 100 - upgr_icon_path = ui\ui_actor_weapons - - ammo_class = ammo_binoc - ammo_current = 0 - ammo_elapsed = 0 - ammo_limit = 0 - ammo_mag_size = 0 - - scope_status = 1 - scope_texture = wpn_crosshair_bino - scope_zoom_factor = 20 - - silencer_status = 0 - - grenade_launcher_status = 0 - - hit_impulse = 0 - hit_power = 0 - hit_type = fire_wound - fire_distance = 0 - bullet_speed = 0 - rpm = 0 - rpm_empty_click = 0 - - zoom_enabled = true - reload_dof = 0.0, 0.5, 5, 1.7 - control_inertion_factor = 1.1 - fire_dispersion_base = 1 - fire_dispersion_condition_factor = 0 - - misfire_start_condition = 0 - misfire_start_prob = 0.003 - misfire_end_condition = 0 - misfire_end_prob = 0.02 - - condition_queue_shot_dec = 0 - condition_shot_dec = 0 - - cam_return = 0 - cam_relax_speed = 7 - cam_dispersion = 1.9 - cam_dispersion_frac = 1.1 - cam_dispersion_inc = 1.9 - cam_max_angle = 10.0 - cam_max_angle_horz = 10.0 - cam_step_angle_horz = 1.2 - - PDM_disp_accel_factor = 1.1 - PDM_disp_base = 0.5 - PDM_disp_crouch = 1.0 - PDM_disp_crouch_no_acc = 1.0 - PDM_disp_vel_factor = 1.1 - disp_crouch_factor = 0 - disp_jump_factor = 0 - disp_vel_factor = 0 - - cam_relax_speed_ai = 360 - min_radius = 0 - max_radius = 500 - - snd_close = weapons\generic_close - snd_on_take = other - - can_be_lowered = false - - -[wpn_binoc_hud]:hud_base - item_visual = dynamics\devices\dev_binoculars\dev_binoculars_hud - attach_place_idx = 0 - zoom_hide_crosshair = true - - item_position = 0, 0, 0 - item_orientation = 0, 0, 0 - - hands_position = 0.00064, 0.022937, 0.125213 - hands_position_16x9 = 0.00064, 0.022937, 0.125213 - hands_orientation = 0, 0, 0 - hands_orientation_16x9 = 0, 0, 0 - - aim_hud_offset_pos = 0.00428, -0.223465, -0.180631 - aim_hud_offset_pos_16x9 = 0.00428, -0.223465, -0.180631 - aim_hud_offset_rot = -0.8013, -0.02704, 0.001071 - aim_hud_offset_rot_16x9 = -0.8013, -0.02704, 0.001071 - - gl_hud_offset_pos = 0, 0, 0 - gl_hud_offset_rot = 0, 0, 0 - - lean_hud_offset_pos = 0, 0, 0 - lean_hud_offset_rot = 0, 0, 0 - - anm_hide = binoc_holster, idle - anm_idle = binoc_idle, idle - anm_idle_aim = binoc_idle, idle - anm_idle_moving = binoc_walk, idle - anm_idle_moving_crouch = binoc_walk, idle, 0.75 - anm_idle_sprint = binoc_sprint, idle, 1.2 - anm_show = binoc_draw, idle - anm_bore = binoc_bore, idle - - freelook_z_offset_mul = 0.75 - -;------------------------------------------------------------------------------------------------ -[wpn_binoc_inv]:identity_immunities,weapon_probability,default_weapon_params,wpn_binoc - animation_slot = 2 - hand_dependence = 1 - - hud = wpn_binoculars_hud - ph_mass = 3 - - scope_dynamic_zoom = off - - control_inertion_factor = 1.28 - fire_dispersion_base = 1 - - holder_fov_modifier = 0.7 - holder_range_modifier = 2.0 - - anim_item = false - -[wpn_binoculars_hud]:wpn_binoc_hud - attach_place_idx = 0 - diff --git a/mods/Body Health System Realistic Overhaul/README.md.mohidden b/mods/Body Health System Realistic Overhaul/README.md.mohidden deleted file mode 100644 index 2a3fd0e6..00000000 --- a/mods/Body Health System Realistic Overhaul/README.md.mohidden +++ /dev/null @@ -1,243 +0,0 @@ -I always disliked how BHS worked. Where medkits give temporary hp and most random items heal certain parts. - -This mod is my attempt at making BHS fun and immersive instead of just "use a if b, use c if d". - -The github link: - -Currently in active development to balance the items and the system. - -MORE UP-TO-DATE Description on Moddb page - -**MOD IS CONSTANTLY BEING DEVELOPED SO EXPECT CHANGES TO HAPPEN FREQUENTLY.** - -# NOW INCLUDES AN EXPERIMENTL TARKOV-LIKE HP SYSTEM. READ 0.8 CHANGELOG FOR MORE INFO - -**An overview of the mod and plans below.** - -# General points: - -## The goals of the mod: - -- Make healing limbs take considerably longer. -- Remove temporary HP. -- Add painkillers and painkilling properties. Think of tarkov. -- Make medkits the main source of healing, like they should be. -- Make the system highly configurable. - -## **Stuff that this mod already has:** - -- No temp hp System. Replaced by painkillers instead. Exactly the same purpose as tarkov basically. Allow you to use the destroyed limbs and remove the nasty effects. -- To complement painkiller system weapon sway mod is integrated. Painkillers reduce weapon sway like if the limb is healed by that amount. -- Medkits either heal all parts at once OR they heal set amount of HP, going one HP at a time for the lowest HP limb(potentially more efficient, which makes a lot of sense). -- Broken limb system. If HP of the limb reaches 0 you need to use a surgical kit, then splint with a splint(all configurable and can turn off). -- Reworked sleep healing to heal more logically(you heal lowest limbs first). Can disable that. -- Health multiplier to enable more gradual healing. Limb HP by default is 11 torso, head; 5 for the rest - kinda low. - Experimental. Realistically would do nothing but increase the number of HP steps so it looks smoother but makes it hard to see real HP -- UNSUPPORTED - TOO MANY PROBLEMS -- Weapon sway depending on arms damage and painkiller effect -- Slower medkit usage and healing rate. -- Campfire heal for limbs(adapting script) -- Artefact healing for limbs(same thing) - -## **Stuff i will add:** - -- More effects on limb damage. Instead of instadeath increase received damage, stuff like that - need ideas -- Heal limbs one-by-one only like in EFT(maybe) - -All new items are sold by medics. Some new items also added to flea market and butcher's shop. -As well as a lot of different traders that don't have medics nearby. - -Keep in mind that in the more-or-less finished version **everything will be optional modules**. While in development i wont split it into modules so my workload is more sane. - -Suggestions and ideas related to BHS are appreciated, as i myself am trying to figure out how to balance things out. - -# Balancing for meds: - -- All medkits heal twice as slow. Overall they heal exactly the same amount, just slower. New time is 66.8 seconds. -- Survival kit modified using same logic as medkits, but with radiation and healing boosted to match heal speed of basic medkit. New time is 90 seconds. -- Rebirth modded to last twice as long. Same idea as medkits. New time is 14 seconds. -- Bandages apply their effect instantly instead of over time. - -## As for limb damage: - -Keep in mind these values: Legs and Arms have 10HP per limb. Torso and Head have 22HP per limb. -That is double of what basic BHS has to make 1HP matter less in the system making balancing easier. -No, boosting HP does not make limbs survive more damage. Everything is scaled. - ---- - -- ### Heal One System(Healing one HP at a time for one limb): - - - Basic medkit: 21 HP total over the duration. Can heal two arms/legs to full or torso/head once - - Army and Cheese: 42 HP total over the duration. Can heal all arms/legs to full or both torso and head to full. - - Stimpacks: Mirror what medkits heal over their duration, but faster. - - Survival kit: 63 HP total over 90 seconds. - - Coagulant(Vinca/Barvinok): Heals 11 HP over 438 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%) - - Rebirth: 63 HP total over 17 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%) - - Propital: 30 HP total over 180 seconds. Cant heal over your HP level. - ---- -- ### Heal All System(Healing one HP at a time for all limbs) - LEGACY: - - - Basic medkit: Head/Torso - 11 HP, Legs/Arms - 5 HP total over the duration. Can heal two arms/legs to full or torso/head once - - Army and Cheese: Head/Torso - 16 HP, Legs/Arms - 7 HP total over the duration. Can heal all arms/legs to full or both torso and head to full. - - Stimpacks: Mirror what medkits heal over their duration, but faster. - - Rebirth: Head/Torso - 22 HP, Legs/Arms - 10 HP over 17 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%) - ---- -- ### Surgery system and kits(In order to restore a limb to 1 HP surgical tools are required): - - - Surgical tools: Slow use, restores one limb to be splinted in 10 seconds. One use and needs a bandage. Will cause damage on use. - - CMS: Slow use, 5 charges. Restores one limb to be splinted in 10 seconds. Can be configured to restore a limb without a splint required. More weight-efficient - ---- - -- ### Splints: - - - Splint: Slow use, restores a limb to full 1HP in 10 seconds. One charge. - - Aluminium splint: Slow use, restores a limb to full 1HP in 10 seconds. Three charges. More weight-efficient - ---- - -- ### Painkillers(**Keep in mind that painkiller system doubles the painkiller power for torso and head because they have double the HP over legs and arms**) - - - Morphine: 9 painkiller power for 305 seconds. - - Rebirth: 9 painkiller power for 305 seconds. - - Salicidic acid: 7 painkiller power for 180 seconds. - - Fentanyl: 4 painkiller power for 202 seconds. - - Analgetic(Diclofenac Sodium): 5 painkiller power for 305 seconds. - - SJ6 stimulator: 7 painkiller power for 600 seconds. - - SJ1 stimulator: 4 painkiller power for 600 seconds. - - Analgin painkiller: 2 painkiller power for 180 seconds. - - Ibuprofen: 4 painkiller power for 290 seconds. - - Yadulin: 4 painkiller power for 505 seconds. - - Adrenalin(Epinephrine): 2 painkiller power for 2184 seconds. - - Army Medkit: 4 painkiller power for 128 seconds. - - Cheese Medkit: 3 painkiller power for 128 seconds. - - Stimpack: 2 painkiller power for 128 seconds. - - Army Stimpack: 4 painkiller power for 128 seconds. - - Sci Stimpack: 3 painkiller power for 128 seconds. - - Cocaine: 2 painkiller power for 1644 seconds. - - Joint: 1 painkiller power for 420 seconds. - - Marijuana: 1 painkiller power for 652 seconds. - - Bottled vodkas: 1 painkiller power for 300 seconds. - - Quality vodka: 2 painkiller power for 300 seconds. - - Zone vodka(bottle_metal): 2 painkiller power for 300 seconds. - ---- - -**Credits:** - -- bvcx for detailed description mod. -- ilrathCXV for campfire and artefact healing scripts. -- DokBrok for BHS Evolution mod that inspired this one. -- TheParaziT - for base injector animation. Extended them to all injectors. -- Uknown person who ported all the animations from gunslinger - ---- - -# Latest changelog: - -## 0.86E Update - -- Actor damage balancer update to match gamma 0.91 - -## 0.86D Update - -- Reduced weapon out delay for bandages(Mirror of Enhanced anims - medical) - -## 0.86C Update - -- Skinning without a knife out is done with a hunting knife, always. Fix for gamma tomahawk. - -## 0.86B Update - -- Crafting recipes added - -## 0.86A Update - -- Fomod made to better convey information - -## 0.86 Update - -- New default BHS hud - thanks to chilichocolate -- Fix for painkiller effect not being recalculated after healing -- Dynamic damage threshold adjustement based on damagescale(no visible effect) -- Small fix for torso surgery display -- Fomod installer. Yes, it has finally happened, folks. - -## 0.85A Hotfix - -- Fix for leftover variable (gamma users) - -## 0.85 Hotfix - -- Rewritten all mechanics on healing, splinting and surgery to match the quality of the latest additions. -- Removed some hard to maintain features. - -## 0.81B(C) Hotfix - -- Fix for missing model crash after removing the mod(nowscript will remove akvatabs and other vanilla changed items too) -- Fix for forgotten sounds - -## 0.81 Hotfix - -- Included forgotten .ppe file for latest ADB version. -- Updated included FDDA Enhanced Animations mod - -## 0.8 Beta: - -### Additions and rebalancing: - -- **New Experimental BHS mode. Tarkov-like limb system. Vanilla HP only acts as a wellness indicator and cannot be healed with medkits. Only vinca and the usual ways of resting, artefacts,etc. Enables below feature automatically.** -- Above can be buggy when the system prevents a death, as a callback fires but is cancelled by the script. Depends on installed mods. An alternative way can be used if this proves too buggy. -- **Combined with the above change - damage bleedthrugh from destroyed limbs to every other limb. If you take damage in the destroyed limb the damage is split between all the other limbs. Can be turned on/off** -- Limb damage multiplier added to MCM menu. -- Small-ish balancing changes to painkillers that are too much to list. -- Added bone breaking sound effect and feedback to notify the player when their limb(s) reach 0 HP. -- Update/reworked the damage system. Changes should not be noticeable unless you go into code. -- Fall damage multiplier added to mcm. Fall damage should be goddamn scary. -- Explosives are **VERY** scary and do damage to all limbs. You really dont want to experience it. -- Update hit detection to more accurately tell what limb was hit. -- Removed legacy features. -- Grok's Actor Damage Balancer and Progressive Rad Damages compatibility patches.(Gamma requires both) -- Non-medical enhanced animations separated into a sister mod. FDDA enhanced animations. - -### Fixes: - -- Fixed FDDA anims crash. Mod is fully DLTX now. -- Fixed arm/legs minimal hp settings to correctly apply. -- General bugfixing of everything not touched by changes, which is not much. - -## 0.63 Beta: - -- Dynamic item spawns,item rewards,new game loadouts DLTX item injection -- Safe deletion utility to safely delete all new items -- Loot injection for new items. Now they can be looted from bodies. - -## Hotfix 0.6A: - -- Fixed mutant harvest animation -- Added FDDA MCM unlocker for gamma users - -## 0.6 Beta: - -### Additions and rebalancing: - -- Bandages and tourniquets now work instantly instead of over time. -- Vodka's are now painkillers of different power. -- To be able to sprint with broken legs you now need painkiller power 3 and above. Vodkas provide up to 2. -- Psy mechanics for SJ stims. Now they lower your max psy health but increase resistance and regeneration the lower your psy health is. (EXPERIMENTAL) -- A lot more traders sell new items now, and old ones should be fixed, hopefully. -- Compatibility patch for Coffee if the zone to use better anims. -- Damage to limbs increased by 25%. Hopefully losing limbs will be more frequent. - -### Fixes: - -- Painkillers active time is now tracked a lot better, so level transitions wont extend their duration. Nor saving/loading will extend/decrease it. Deviation will be very small % wise. -- Detailed description compatibility now has fixed encoding for dot symbols -- Default detailed description script fixes(included by default, not compat) -- Artefact healing now wont work if you dont have PBA mod installed. Meaning if you want to use it in base anomaly you need to patch it. I would do that if i had vanilla classnames and values for them - it is not hard at all. -- General bugfixing for main script -- DLTX bugfixing to make sure included mods are not overwritten by standalone versions of same mods. -- Animation files bugfixing to change as little as possible compared to base FDDA + asnen's. Now should be 100% compatible as no old anims are overwritten or deleted. -- Damage threshold lowered back to 3% like default. Now consumable items are tracked and wont deal damage to limbs -- Renamed Enchaned UI compat to "Enhanced GUI". Got confused about names diff --git a/mods/FDDA Enhanced Animations - Medical and Exo/README.md b/mods/FDDA Enhanced Animations - Medical and Exo/README.md deleted file mode 100644 index 62c0a0aa..00000000 --- a/mods/FDDA Enhanced Animations - Medical and Exo/README.md +++ /dev/null @@ -1,36 +0,0 @@ -A collection of medical item animations, models and textures for FDDA. Sister mod to FDDA Enhanced Animations - Food and drinks. -As many items as possible were converted to fancier gunslinger animations. -Some items had their use sounds replaced/enhanced. - -There werent many gunslinger medical animations, but this has injector, bandage and exo anims. - -Originally made/adapted for ⁠BHS realistic overhaul by me, but separated out into a separate mod. Fully DLTX. - -Goes hand in hand with BHS Realistic Overhaul. This mod was originally a part of it. - -List: -Medkits are untouched. -Bandage replaced. -All the injector animations use the gunslinger injector one. -Exo animations added. -That is it. There really arent that many of them. - -REQUIRES FDDA(this is an extension to it). -Like the original mod, Possibly requires THAP - -Credits: -Uknown person who ported all the animations from gunslinger - -## Update 1.1B -- Added the MCM unlocker by default to fix the skinning problem. It has everything disabled by default to not mess with gamma and other modpacks. - -## Hotfix to 1.1A -- Removed mistakenly included missing animation for a tourniquet - -## Update 1.1 - -- Reduced the time between bandage animation finish and weapon pull out - -## Update 13.09.2023 - -- Fixed a leftover file i forgot to remove and a scientific medkit in exo had a typo in the config. \ No newline at end of file diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general.xml b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general.xml deleted file mode 100644 index 48361897..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general.xml +++ /dev/null @@ -1,19 +0,0 @@ - - -#include "gameplay\character_desc_general_*.xml" - -;#include "gameplay\character_desc_general_actor.xml" -;#include "gameplay\character_desc_general_army.xml" -;#include "gameplay\character_desc_general_bandit.xml" -;#include "gameplay\character_desc_general_csky.xml" -;#include "gameplay\character_desc_general_dolg.xml" -;#include "gameplay\character_desc_general_ecolog.xml" -;#include "gameplay\character_desc_general_freedom.xml" -;#include "gameplay\character_desc_general_greh.xml" -;#include "gameplay\character_desc_general_isg.xml" -;#include "gameplay\character_desc_general_killer.xml" -;#include "gameplay\character_desc_general_monolith.xml" -;#include "gameplay\character_desc_general_renegade.xml" -;#include "gameplay\character_desc_general_stalker.xml" -;#include "gameplay\character_desc_general_zombied.xml" - diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general_freedom_fvm.xml b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general_freedom_fvm.xml deleted file mode 100644 index 6c42781c..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/configs/gameplay/character_desc_general_freedom_fvm.xml +++ /dev/null @@ -1,41 +0,0 @@ - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_1\ - actors\stalker_freedom\stalker_freedom_1a - - - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_1\ - actors\stalker_freedom\stalker_freedom_1a_backpack - - - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_3\ - actors\stalker_freedom\stalker_freedom_1a_mask - - - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_1\ - actors\stalker_freedom\stalker_freedom_1b - - - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_1\ - actors\stalker_freedom\stalker_freedom_1b_backpack - - - -#include "gameplay\profiles\character_desc_freedom_0.xml" - ui_inGame2_Freedom_1 - characters_voice\human\freedom_3\ - actors\stalker_freedom\stalker_freedom_1b_mask - \ No newline at end of file diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a.ogf deleted file mode 100644 index 57243e41..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:23c3e076a696de990061a893085e167255678446656985f7eb2831724843c07d -size 364953 diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_backpack.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_backpack.ogf deleted file mode 100644 index edc14462..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_backpack.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77dce9fe31de3b8df6f9388619cc3fecda2fe7110889c6943f733abbfc6ebdf1 -size 330553 diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_mask.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_mask.ogf deleted file mode 100644 index 311ba683..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1a_mask.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4035ecd22c4d274ec2aa44faf884ff810b0729fc922453c4413bff9a676dff6d -size 308336 diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b.ogf deleted file mode 100644 index b95a5e64..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f5ad09ae4b6ae0fd7793dae103024784dcae65cc10960d3d0ea2a6ee3be918e -size 375525 diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_backpack.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_backpack.ogf deleted file mode 100644 index 0db7b67b..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_backpack.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:177bdcef16196651923f725d7e870968514c0b813147c5be876d121ed29001fa -size 329954 diff --git a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_mask.ogf b/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_mask.ogf deleted file mode 100644 index b71915b1..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/'Wind of Freedom' Variants/gamedata/meshes/actors/stalker_freedom/stalker_freedom_1b_mask.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:337d5583a2baeef868f55fe388f9edc88eaf28343af0b31387e7ce331d95e1ce -size 298022 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_1.dds b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_1.dds deleted file mode 100644 index ad7500ee..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_1.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f96c2cd950376ac287689ba288a876073288dce37e4e7c02eb60bea7b929983 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_2.dds b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_2.dds deleted file mode 100644 index ccadc5e9..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_2.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ade784574a410103692bb8406bccba1c4aa8c578e80413fa5957232cc04f9c6 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.dds b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.dds deleted file mode 100644 index a660d2f8..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e36e9658ae2cfb3ff9184858d2a55609ef543c27d60d5f30529ec27c0295cd87 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.thm b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.thm deleted file mode 100644 index ec8031e4..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f0dbf350769fe8c44de9a1f2da250962a707f602670d3b93c5568e6ebae9edc9 -size 175 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.dds b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.dds deleted file mode 100644 index a85537ee..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e561e7163ba47c38e626162702964ebed7032f72dcd2e1b89068271ece3cd7d -size 240 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.thm b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.thm deleted file mode 100644 index ac6d3afc..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump#.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6552e8d73d3afa6ec20c7907fec4e6d825abae32a0eaab2591828bdc4cffb5a3 -size 138 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.dds b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.dds deleted file mode 100644 index 88f4494a..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff04a2ee361a354e1d8441336cef16bf3ba35c65018cc2b714359b8ce0a8567b -size 1398256 diff --git a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.thm b/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.thm deleted file mode 100644 index bd177aa6..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/Alternative Ecomercs/gamedata/textures/act/ecolog/act_stalker_merc_sun1_bump.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:71713f6b99da8210589c7ce575bc5a5a8ced203abe162a02123a4faf1c14ef76 -size 138 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1a.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1a.ogf deleted file mode 100644 index 9878bc22..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1a.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9fe00d9237581aa797ddbac765f0c7b11e04a0478066e1fb1ca251f791486fa0 -size 325681 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1d.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1d.ogf deleted file mode 100644 index 640f291d..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg1d.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b07827685df4314fbdc2f9cb344b8db5421a17e6026bfae2c45bc9987791dcd -size 325681 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg_1.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg_1.ogf deleted file mode 100644 index 09c59efe..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_dolg/stalker_dolg_1.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:022f1ccbb26291248064142fe9dae4c392d6f6289b91fa9647fb2cd9e80e17ee -size 325681 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_freedom/stalker_free0a.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_freedom/stalker_free0a.ogf deleted file mode 100644 index 8d68a6c3..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_freedom/stalker_free0a.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f1023004411882b84141a4f069ecd2921788e98e2a41996d31953f42d4435a3 -size 325682 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1a_sci.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1a_sci.ogf deleted file mode 100644 index 3c82f395..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1a_sci.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca5f2cb7f72a1045def0d7c84c73d9d094a385f43707c9abcbcd0a1a7b8f2c43 -size 393262 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1b_sci.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1b_sci.ogf deleted file mode 100644 index f03fa2b4..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1b_sci.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:480bf87ede948878de4010377e2239e564ab0e001ea985e472259cf166a04246 -size 393265 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1c_sci.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1c_sci.ogf deleted file mode 100644 index cd8fa3bf..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_1c_sci.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4ee90f427794c1401846f9a04deb6a7d98e3a6f78ceeacb392c1ca6041d4ce7 -size 393266 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_scientific.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_scientific.ogf deleted file mode 100644 index 17c69395..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_isg/stalker_isg_scientific.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e50c1b543e88afd4731e0cb891bc393549058196d174afe8e21f08e7aca18451 -size 325685 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_1.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_1.ogf deleted file mode 100644 index 1b56c3ea..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_1.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e1f40298553bd7b5f028182bf152a60bb5fcc9e9eab4cc3d816aec11bb8f51a -size 325690 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_nauchni3.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_nauchni3.ogf deleted file mode 100644 index 241263ca..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_monolith/stalker_monolith_nauchni3.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f1695bfc7a59049420ea7aaf83eccdc0800d4b0b660268fdf668d43ebe268abe -size 325689 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_1.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_1.ogf deleted file mode 100644 index 14a10e44..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_1.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35f7d862c72e0eff8c814f3029dbc4fd5fc7f0f7767dcf9a7ae606a2eb5f87ed -size 325685 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_2.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_2.ogf deleted file mode 100644 index 96c9ece6..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_nebo/stalker_nebo_seva_2.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85911f3f14776e8fd62ccbc20bc792c1ddaceae615d49c36bc8bc128939916df -size 325684 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni2.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni2.ogf deleted file mode 100644 index 57c5e2eb..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni2.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fa0d465a6d53ad57b596e03ea5328a8ee670ea79e303c96a74f9b8cca6259112 -size 325685 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni4.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni4.ogf deleted file mode 100644 index 79af68e1..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchni4.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c7ff7713f2c4c73c43b492f752197a2e3c9d23f49e7a22bb2cc09393a493d38 -size 472626 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchniy.ogf b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchniy.ogf deleted file mode 100644 index 6c119d65..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/meshes/actors/stalker_neutral/stalker_neutral_nauchniy.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acb89269ad2fc612d9d7c080767a1a875eb7f94fa4fac1ca609307ed241e4fa7 -size 325685 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.dds b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.dds deleted file mode 100644 index d2191825..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fadd58598a48863df192cb2cb92ecee74351421d52acfe0f55ae9654515db84c -size 349652 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.thm b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.thm deleted file mode 100644 index 203c9878..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_dolg.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:569cc21d3a2365c930ca1b546766e3b5493e6a5f53270fb303e53434465e0b1c -size 169 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.dds b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.dds deleted file mode 100644 index 58f9d957..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:61faa16fd8f555ecff1e592d5c65e2bf68c65f4a8fbb876dc6117db2b29ad149 -size 350676 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.thm b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.thm deleted file mode 100644 index 203c9878..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_loner.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:569cc21d3a2365c930ca1b546766e3b5493e6a5f53270fb303e53434465e0b1c -size 169 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.dds b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.dds deleted file mode 100644 index 3943366a..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8980bca47b61f7eef13793f4da572a0bee31aa1a96764a0418d334a3f3f3b898 -size 349652 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.thm b/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.thm deleted file mode 100644 index 203c9878..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SEVA Glass Variety/gamedata/textures/act/act_stalker_head_glass_mono.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:569cc21d3a2365c930ca1b546766e3b5493e6a5f53270fb303e53434465e0b1c -size 169 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_01.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_01.ogf deleted file mode 100644 index 262f8811..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_01.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30a1d768416463763d1cbdc841cab3ca46e9f0b3e231d116f2d10345e9eea7ef -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_02.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_02.ogf deleted file mode 100644 index e9ea36dc..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_02.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b3ecdfd222d1f1454c5379a23e7f371326bcd6310365b0768f50662ec6f7e891 -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_03.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_03.ogf deleted file mode 100644 index a8b7851c..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_03.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f0f2b945df4a90562e2ec0c17e78bbe53275727d16297b7d8878070795c89263 -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_04.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_04.ogf deleted file mode 100644 index 584fe7da..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_04.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1def344d74f9bb6f8645c086ed89d9e11d987bbf92730fe3a3342e3e4d1ab1ec -size 535390 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_05.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_05.ogf deleted file mode 100644 index a28a9995..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1a_face_05.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7bb33efc1c192c2bf7cd527fc37257fba1e317077623d645eaa4ddee77d2598 -size 535390 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_06.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_06.ogf deleted file mode 100644 index a35468a8..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_06.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e09d5f8b3a7f37aef887d381856aa7e001e497a3ea63e6239ff283ac10c77102 -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_07.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_07.ogf deleted file mode 100644 index f7002d3b..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_07.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:86ee9661af081e0de60b51bea242d3c7e42e59c24ed400e45fee5d993bdb9a66 -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_08.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_08.ogf deleted file mode 100644 index 377c77d7..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_08.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b7c6d7105b983936ffd2e563d14370b5f436361f57de10dbed524d22f0025a7 -size 462806 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_09.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_09.ogf deleted file mode 100644 index 0a9a67ed..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_09.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6021bea563d5996454dfad958b82e49909a5e9a90f1f8b0eed9ba5a580600955 -size 535390 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_10.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_10.ogf deleted file mode 100644 index 35c9aa72..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_1b_face_10.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a3872c5b70b46daf899f4361b3a27440080d88e451de813431cf695c09f99991 -size 535390 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_4.ogf b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_4.ogf deleted file mode 100644 index dcb9f5cc..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/meshes/actors/stalker_greh/stalker_greh_4.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a8fc80465ac3b9a3440d0494187877ce9ed9a1ec43154b61a6946bc1019dced -size 745636 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1a.dds b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1a.dds deleted file mode 100644 index 064151b9..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1a.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd212cd93cd60aea8818c0d0a519ba6599d116637193efb64f88ef2405bd1f2a -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1b.dds b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1b.dds deleted file mode 100644 index 319b3d38..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_1b.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f1eb47e72bf947d6c8f2954be8844a272dc144f03c6bb26c5a40f2fbe015111 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.dds b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.dds deleted file mode 100644 index d253efde..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cdbad4cdda6a2f205c87f19c055fab5763b4afec1523e4e3ec5f3ae8975ae0f9 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.thm b/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.thm deleted file mode 100644 index 75c76d13..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/SIN Overhaul/gamedata/textures/act/act_stalker_greh_4.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:989d4157ad34582500d7e04f32a16bc0e22e0f5ef2d39bcd76718222200e6431 -size 165 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/meshes/actors/stalker_isg/stalker_isg_proto.ogf b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/meshes/actors/stalker_isg/stalker_isg_proto.ogf deleted file mode 100644 index 7aa0c757..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/meshes/actors/stalker_isg/stalker_isg_proto.ogf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef3d5d77f8289ff0a4908413ee0c12eabcce20e48ce8db53e4b77adb973cd4c9 -size 497670 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.dds deleted file mode 100644 index 36ce44e8..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7573fdcd72e7f36e6922b514e11bee7db7568cc39e4c490ad7d0e3f100d874a -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.thm deleted file mode 100644 index 241f5707..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_isg_exoskeleton.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:841b3e10aa14f3f47a4861e00cb763a2ae03ccb6baa492ce4bd87184576fd284 -size 170 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_1.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_1.dds deleted file mode 100644 index 7b5a644e..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_1.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d0e475d854dc226f5afbde1dac7b4fbab90c0bb62c6d21b4288a3558f47e91e -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_us.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_us.dds deleted file mode 100644 index 91adbdc0..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/act_stalker_specnaz_us.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c4442d12176bf52d691b62a619dd2829a01cb8c3e4c828e64634c8829f61253 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_1.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_1.dds deleted file mode 100644 index 6d5bde62..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_1.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:92c7fabd0dba384c7d4b17f4ced6e0c42a7470c12b142f358d8cb0a4a3b7b696 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_2.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_2.dds deleted file mode 100644 index 75160531..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_2.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ae3a22114347b87e0aa51d8db779a3e91f4937d3a6ae0423b938bd9c9676269 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_3.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_3.dds deleted file mode 100644 index b0a7bf02..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_isg_merc_3.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4306bd4fe767bc2b02b8700f96547b8bf801c042defa7bfdfa6873c3c9fddae -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.dds deleted file mode 100644 index 8178c13e..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:876a04edcdd5bf26d3138dea3bbe5e39c6859d213ae5e33efec1154e09701129 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.thm deleted file mode 100644 index 241f5707..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:841b3e10aa14f3f47a4861e00cb763a2ae03ccb6baa492ce4bd87184576fd284 -size 170 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.dds deleted file mode 100644 index 7e1c5a3d..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:71356122dcc34304b6f8136deb05750e05d7298a66a031b22193443a53a7701d -size 1398256 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.thm deleted file mode 100644 index de695198..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump#.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:493ab13c092945a8e9178d9475b54bc094db4e92bb2b1f2b17ec09c156926ec9 -size 138 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.dds deleted file mode 100644 index 8b2e03ef..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4682f0ae3d59a16685bfc14fcc9d67f46e7d7e4fb755a6625fb3f89f34692155 -size 1398256 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.thm deleted file mode 100644 index c1dc8e44..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_exo_bump.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77d408a991ea26fc026611be52c96d6ee7efb83926432533172c3d143b7993f7 -size 138 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.dds deleted file mode 100644 index 6e5f85f5..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:320f4da14a1ce025b1dfb9c579afe08c28ce48a5d0436c93c6a2d2d5b2228098 -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.thm deleted file mode 100644 index 5739ce67..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_2.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f21c63e259af2c0ccc41c49eae8beb3236f88eb5eb25076ce084d77ef01eb7b -size 165 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.dds deleted file mode 100644 index 48040df1..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:55bec8185d2492dcc03a62f117bb7a1799c168da3ee8b7f4d39b1fd062f95aad -size 699192 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.thm deleted file mode 100644 index 0997073f..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:891cb8a5063809001ec33d5a8765228f328ecb45a815578e1ba855003f9f3605 -size 172 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.dds deleted file mode 100644 index a85537ee..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e561e7163ba47c38e626162702964ebed7032f72dcd2e1b89068271ece3cd7d -size 240 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.thm deleted file mode 100644 index de695198..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump#.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:493ab13c092945a8e9178d9475b54bc094db4e92bb2b1f2b17ec09c156926ec9 -size 138 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.dds b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.dds deleted file mode 100644 index 603e8902..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.dds +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7646007c2ae68ba7c889aad0b1aab72a2db8b1ced96299a69e755ca1ecde56b8 -size 1398256 diff --git a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.thm b/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.thm deleted file mode 100644 index c1dc8e44..00000000 --- a/mods/Fixed Vanilla Models & Textures/addons/UNISG Overhaul/gamedata/textures/act/isg/act_stalker_isg_sci_3_bump.thm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77d408a991ea26fc026611be52c96d6ee7efb83926432533172c3d143b7993f7 -size 138 diff --git a/mods/Glowsticks/MODDING GUIDE.txt b/mods/Glowsticks/MODDING GUIDE.txt deleted file mode 100644 index 0a946a91..00000000 --- a/mods/Glowsticks/MODDING GUIDE.txt +++ /dev/null @@ -1,35 +0,0 @@ -This is a small guide in case you want to modify some things for Glowsticks by yourself, such as to change the color. - -______________________________________________________________________________________________________________________________________________________________________________________________________ -HOW TO CHANGE THE COLOR. -______________________________________________________________________________________________________________________________________________________________________________________________________ - -1. Go to gamedata/configs/items/items and open up "items_glowstick.xml" -2. You will find various configs that start with "[glowstick_definition]" and a color, the one without any color in the name is the default green. -From here onwards, change the "color" and "color_r2" to whichever you like, the formula is simply a percentage from 0.0 to 1.0. -NOTE: Higher numbers are allowed, but these only add a white tint to the color. - -______________________________________________________________________________________________________________________________________________________________________________________________________ -HOW TO MAKE THE GLOWSTICKS EMIT SHADOWS. -______________________________________________________________________________________________________________________________________________________________________________________________________ - -1. Go to gamedata/scripts and open up "zz_glowstick_mcm.script" -2. Scroll down from there until you find "data.light_flags", which is roughly line 110. -Change the number 45 to 47. - -______________________________________________________________________________________________________________________________________________________________________________________________________ -NOTE TO ADDON AUTHORS REGARDING DEVICES AND DETECTORS -______________________________________________________________________________________________________________________________________________________________________________________________________ - -1. Open your device model in Blender, AXR Tools or OGF Data Changer. -2. Make sure the emissive part of your model uses the shader "models\selflight_det" -3. Save or re-export your model. - -This way the device's screen won't emit any light once the batteries run out. - -______________________________________________________________________________________________________________________________________________________________________________________________________ -HOW TO CHANGE MOD SETTINGS WITHOUT MCM. -______________________________________________________________________________________________________________________________________________________________________________________________________ - -1. Go to gamedata/scripts and open up "zz_glowstick_mcm.script" -2. Change the settings at the top of the file to your liking. \ No newline at end of file diff --git a/mods/Glowsticks/README.txt b/mods/Glowsticks/README.txt deleted file mode 100644 index 21411506..00000000 --- a/mods/Glowsticks/README.txt +++ /dev/null @@ -1,96 +0,0 @@ -___________ -DESCRIPTION -___________ - -This is a collaboration made by Lucy (r3zy) & Blackgrowl. -As the name should imply, this adds glowsticks into Anomaly. Some of the assets are taken from Dead Air, so all credits to them in that regard. -It's more than just glowsticks though; many changes have been made to make the Glowsticks more versatile and interesting. -How? Well, first of all, there's more than just one variety. -They will appear as a "Device", you can use them on hand or drop them. Should be perfect to light up areas that don't have a campfire near, as well. -Check out "DETAILS" for more information. -Also take a gander at the "MODDING GUIDE" if there is something you want to modify yourself from this mod, like the Glowstick color or how to enable the shadows. - -___________ -INSTALLATION -___________ - -Recommended to use Mod Organizer 2 for the FOMOD installer. -Otherwise simply extract the "gamedata" to your main Anomaly folder or install with JSGME. And install optional files from the "addons" folder. -Remember to clear the shader cache (checkbox in the launcher or delete the anomaly/appdata/shaders_cache folder). - -NOTE: You cannot safely uninstall this mod, since it adds new item sections that remain in the savefile. - -___________ -PATCHES/ADDONS INFORMATION -___________ - -- Cr3pis' Icons. Changes the gritty icons into high-quality model-shaded ones. -- Briggs' Glowstick mesh. Replacer for the Dead Air models. -- Enhanced Shaders (and Color Grading) patch. Fixes glowsticks and screens turning dark if you don't have a device/pda equipped. Overwrite the base files. -- Pack of New Devices patch. Makes the device meshes use the correct screen shader. - -___________ -DETAILS -___________ - -VARIANTS: -- GREEN. The default variant, it has a range of 12 and is good all around. -- ORANGE. While offering just a slightly weaker range, about 10 metres, it provides a much more "natural" light. -- RED. While offering the weakest illumination, it also has the best range, more than 24 metres. Perfect for the underground or very dark places with no natural light. -- CYAN. While having a small range of 6, it offers the best illumination. Best used in the Underground to get surprised, can even be used in daytime to find hard-to-see objects and the like. - -IMPORTANT INFO: -- You can press and HOLD the Use key (default "F") to throw the glowstick. (Can be changed to the grenade launcher key in AMCM or by editing the script) -- Glowsticks have their own "lifetime", each variants also have their own lasting time. -- You can still use a glowstick while aiming a pistol. -- CAREFUL! Glowsticks on the ground can be destroyed, in which case you can't use them anymore. - -ACQUISITION: -- At new game start (If you have AMCM installed). -- From traders. -- May be found in some dead STALKERs. -- In stashes. - -BONUS: -- If you have AMCM, you can make it so the flashlights flicker heavily when you're inside the Brain Scorcher or Miracle Machine while they are still active. -This makes Glowsticks a must, just for lore fun. -- Broken flashlight draw animation is fixed by this mod. -- Screens turning dark if you don't have a device/pda equipped is fixed by this mod. - -___________ -KNOWN ISSUES -___________ - -* Animations are a bit "wonky". If any animator wishes to re-animate this, you can go right ahead, you have our full support already. -* Glowsticks only wear down when dropped on the ground or equipped in your hand. - -___________ -COMPATIBILITY -___________ - -Mods that replace detectors/devices can safely overwrite this mod's meshes. -Shader fix won't work though unless the new devices use the "models\selflight_det" shader for their display/light. -There's a patch for Pack of New Devices included, otherwise check out the "MODDING GUIDE". - -___________ -COPYRIGHT/LICENSE -___________ - -There is none. -This is a mod taken from Dead Air, ported to Anomaly, only license that counts is the license Dead Air uses and especially GSCs. -(In short; do whatever you want, but don't go selling it anywhere or claiming it is your own creation) -The only thing requested is that you acknowledge (credit) the work Blackgrowl and Lucy did to port this into Anomaly. - -___________ -CREDITS -___________ - -Dead Air Team for the Glowstick. -Lucy for the script and stuff. -Blackgrowl for the asset help, including making new assets and art. -Thundervision for the Russian translation. -Cr3pis for the icons. -PYP for fixing smoothing issues on the glowstick mesh. -Briggs for the new optional glowstick model. -Arti for the trader autoinjeect script. -RavenAscendant for the monkey patch tutorial. \ No newline at end of file diff --git a/mods/Long Repair Fix/Optional/Disappearing items fix/scripts/trade_manager.script b/mods/Long Repair Fix/gamedata/scripts/trade_manager.script similarity index 100% rename from mods/Long Repair Fix/Optional/Disappearing items fix/scripts/trade_manager.script rename to mods/Long Repair Fix/gamedata/scripts/trade_manager.script diff --git a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index 1c880b6c..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,310 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 0 - -inv_grid_height = 2 -inv_grid_width = 2 - -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 8 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.072000, -0.172, 0.165500 -hands_position_16x9 = -0.072000, -0.172, 0.165500 -hands_orientation = 0.55, 2.39, 0.1499993 -hands_orientation_16x9 = 0.55, 2.39, 0.1499993 - -aim_hud_offset_pos = -0.0795, 0.0745, -0.265 -aim_hud_offset_pos_16x9 = -0.0795, 0.0745, -0.265 -aim_hud_offset_rot = 0.0339, 0.0088, -0.0045 -aim_hud_offset_rot_16x9 = 0.0339, 0.0088, -0.0045 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_aim_moving = lancew_mp7_moving, idle_2, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle_2, 0.7 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 2 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.07895, 0.06025, -0.265 -aim_hud_offset_pos_16x9 = -0.07895, 0.06025, -0.265 -aim_hud_offset_rot = 0.038, 0.0075, -0.0018 -aim_hud_offset_rot_16x9 = 0.038, 0.0075, -0.0018 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 4 -inv_grid_y = 0 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.08025, 0.0565, -0.235 -aim_hud_offset_pos_16x9 = -0.08025, 0.0565, -0.235 -aim_hud_offset_rot = 0.0485, 0.01, -0.004 -aim_hud_offset_rot_16x9 = 0.0485, 0.01, -0.004 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 2 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.081, 0.0634, -0.265 -aim_hud_offset_pos_16x9 = -0.081, 0.0634, -0.265 -aim_hud_offset_rot = 0.0455, 0.0111, 0.0 -aim_hud_offset_rot_16x9 = 0.0455, 0.0111, 0.0 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 0 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.07925, 0.0525, -0.265 -aim_hud_offset_pos_16x9 = -0.07925, 0.0525, -0.265 -aim_hud_offset_rot = 0.048, 0.008, -0.004 -aim_hud_offset_rot_16x9 = 0.048, 0.008, -0.004 diff --git a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index 93e73591..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,303 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -inv_grid_height = 2 -inv_grid_width = 2 -inv_grid_x = 48 -inv_grid_y = 61 -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 7 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.072000, -0.172, 0.165500 -hands_position_16x9 = -0.072000, -0.172, 0.165500 -hands_orientation = 0.55, 2.39, 0.1499993 -hands_orientation_16x9 = 0.55, 2.39, 0.1499993 - -aim_hud_offset_pos = -0.0795, 0.0745, -0.265 -aim_hud_offset_pos_16x9 = -0.0795, 0.0745, -0.265 -aim_hud_offset_rot = 0.0339, 0.0088, -0.0045 -aim_hud_offset_rot_16x9 = 0.0339, 0.0088, -0.0045 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_aim_moving = lancew_mp7_moving, idle_2, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle_2, 0.7 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 -1icon_layer = ac10632 -1icon_layer_x = 16 -1icon_layer_y = -10 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.07895, 0.06025, -0.265 -aim_hud_offset_pos_16x9 = -0.07895, 0.06025, -0.265 -aim_hud_offset_rot = 0.038, 0.0075, -0.0018 -aim_hud_offset_rot_16x9 = 0.038, 0.0075, -0.0018 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 -1icon_layer = acog -1icon_layer_x = 10 -1icon_layer_y = -9 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.08025, 0.0565, -0.235 -aim_hud_offset_pos_16x9 = -0.08025, 0.0565, -0.235 -aim_hud_offset_rot = 0.0485, 0.01, -0.004 -aim_hud_offset_rot_16x9 = 0.0485, 0.01, -0.004 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 -1icon_layer = c-more -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.081, 0.0634, -0.265 -aim_hud_offset_pos_16x9 = -0.081, 0.0634, -0.265 -aim_hud_offset_rot = 0.0455, 0.0111, 0.0 -aim_hud_offset_rot_16x9 = 0.0455, 0.0111, 0.0 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 -1icon_layer = eot -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.07925, 0.0525, -0.265 -aim_hud_offset_pos_16x9 = -0.07925, 0.0525, -0.265 -aim_hud_offset_rot = 0.048, 0.008, -0.004 -aim_hud_offset_rot_16x9 = 0.048, 0.008, -0.004 diff --git a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index e00bd735..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,306 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -inv_grid_height = 2 -inv_grid_width = 2 -inv_grid_x = 48 -inv_grid_y = 61 -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 7 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - -hud_fov = 0.70 - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.082, -0.14, -0.11 -hands_position_16x9 = -0.082, -0.14, -0.11 -hands_orientation = 0.0, 0.0, -2 -hands_orientation_16x9 = 0.0, 0.0, -2 - -aim_hud_offset_pos = -0.06335,0.0345,-0.05 -aim_hud_offset_pos_16x9 = -0.06335,0.0345,-0.05 -aim_hud_offset_rot = -0.0072,-0.0007,-0.0404 -aim_hud_offset_rot_16x9 = -0.0072,-0.0007,-0.0404 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_aim_moving = lancew_mp7_moving, idle_2, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle_2, 0.7 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 -1icon_layer = ac10632 -1icon_layer_x = 16 -1icon_layer_y = -10 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.0630,0.025,-0.06 -aim_hud_offset_pos_16x9 = -0.0630,0.025,-0.06 -aim_hud_offset_rot = 0.019,-0.0016,-0.040 -aim_hud_offset_rot_16x9 = 0.019,-0.0016,-0.040 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 -1icon_layer = acog -1icon_layer_x = 10 -1icon_layer_y = -9 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 -scope_texture = wpn_crosshair_acog - - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.0635,0.0125,-0.05 -aim_hud_offset_pos_16x9 = -0.0635,0.0125,-0.05 -aim_hud_offset_rot = 0.007,0.0002,-0.0404 -aim_hud_offset_rot_16x9 = 0.007,0.0002,-0.0404 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 -1icon_layer = c-more -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.0633,0.0225,-0.06 -aim_hud_offset_pos_16x9 = -0.0633,0.0225,-0.06 -aim_hud_offset_rot = 0.0120,0.0,-0.0404 -aim_hud_offset_rot_16x9 = 0.0120,0.0,-0.0404 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 -1icon_layer = eot -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.06335,0.008,-0.06 -aim_hud_offset_pos_16x9 = -0.06335,0.008,-0.06 -aim_hud_offset_rot = 0.005,0.0,-0.0425 -aim_hud_offset_rot_16x9 = 0.005,0.0,-0.0425 diff --git a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt b/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt deleted file mode 100644 index 5b812e0d..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt +++ /dev/null @@ -1,4 +0,0 @@ -this is a patch if you are using -https://www.moddb.com/mods/stalker-anomaly/addons/position-and-view-v21-release - -copy and paste over gamedata after position and view diff --git a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index 60ff5e5e..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/All Extended Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,313 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 0 - -inv_grid_height = 2 -inv_grid_width = 2 - -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 8 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - -hud_fov = 0.70 - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.082, -0.14, -0.11 -hands_position_16x9 = -0.082, -0.14, -0.11 -hands_orientation = 0.0, 0.0, -2 -hands_orientation_16x9 = 0.0, 0.0, -2 - -aim_hud_offset_pos = -0.06335,0.0345,-0.05 -aim_hud_offset_pos_16x9 = -0.06335,0.0345,-0.05 -aim_hud_offset_rot = -0.0072,-0.0007,-0.0404 -aim_hud_offset_rot_16x9 = -0.0072,-0.0007,-0.0404 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_aim_moving = lancew_mp7_moving, idle_2, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle_2, 0.7 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 2 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.0630,0.025,-0.06 -aim_hud_offset_pos_16x9 = -0.0630,0.025,-0.06 -aim_hud_offset_rot = 0.019,-0.0016,-0.040 -aim_hud_offset_rot_16x9 = 0.019,-0.0016,-0.040 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 4 -inv_grid_y = 0 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 -scope_texture = wpn_crosshair_acog - - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.0635,0.0125,-0.05 -aim_hud_offset_pos_16x9 = -0.0635,0.0125,-0.05 -aim_hud_offset_rot = 0.007,0.0002,-0.0404 -aim_hud_offset_rot_16x9 = 0.007,0.0002,-0.0404 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 2 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.0633,0.0225,-0.06 -aim_hud_offset_pos_16x9 = -0.0633,0.0225,-0.06 -aim_hud_offset_rot = 0.0120,0.0,-0.0404 -aim_hud_offset_rot_16x9 = 0.0120,0.0,-0.0404 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 0 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.06335,0.008,-0.06 -aim_hud_offset_pos_16x9 = -0.06335,0.008,-0.06 -aim_hud_offset_rot = 0.005,0.0,-0.0425 -aim_hud_offset_rot_16x9 = 0.005,0.0,-0.0425 diff --git a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index c6148374..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Anomaly 1.5.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,322 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -inv_grid_height = 2 -inv_grid_width = 2 -inv_grid_x = 48 -inv_grid_y = 61 -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 7 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.072000, -0.172, 0.165500 -hands_position_16x9 = -0.072000, -0.172, 0.165500 -hands_orientation = 0.55, 2.39, 0.1499993 -hands_orientation_16x9 = 0.55, 2.39, 0.1499993 - -aim_hud_offset_pos = -0.0795, 0.0745, -0.265 -aim_hud_offset_pos_16x9 = -0.0795, 0.0745, -0.265 -aim_hud_offset_rot = 0.0339, 0.0088, -0.0045 -aim_hud_offset_rot_16x9 = 0.0339, 0.0088, -0.0045 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster -anm_idle = lancew_mp7_idle -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_idle_aim_moving = lancew_mp7_moving, idle, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle, 0.7 -anm_idle_moving = lancew_mp7_moving -anm_idle_sprint = lancew_mp7_sprint -anm_reload = lancew_mp7_reload, reload -anm_shots = lancew_mp7_shoot, shoot -anm_show = lancew_mp7_draw - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 -1icon_layer = ac10632 -1icon_layer_x = 16 -1icon_layer_y = -10 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.07895, 0.06025, -0.265 -aim_hud_offset_pos_16x9 = -0.07895, 0.06025, -0.265 -aim_hud_offset_rot = 0.038, 0.0075, -0.0018 -aim_hud_offset_rot_16x9 = 0.038, 0.0075, -0.0018 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 -1icon_layer = acog -1icon_layer_x = 10 -1icon_layer_y = -9 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.08025, 0.0565, -0.235 -aim_hud_offset_pos_16x9 = -0.08025, 0.0565, -0.235 -aim_hud_offset_rot = 0.0485, 0.01, -0.004 -aim_hud_offset_rot_16x9 = 0.0485, 0.01, -0.004 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 -1icon_layer = c-more -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.081, 0.0634, -0.265 -aim_hud_offset_pos_16x9 = -0.081, 0.0634, -0.265 -aim_hud_offset_rot = 0.0455, 0.0111, 0.0 -aim_hud_offset_rot_16x9 = 0.0455, 0.0111, 0.0 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 -1icon_layer = eot -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.07925, 0.0525, -0.265 -aim_hud_offset_pos_16x9 = -0.07925, 0.0525, -0.265 -aim_hud_offset_rot = 0.048, 0.008, -0.004 -aim_hud_offset_rot_16x9 = 0.048, 0.008, -0.004 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - diff --git a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index 49577610..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Option - Don't use new MP7 Inventory Icons/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,325 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -inv_grid_height = 2 -inv_grid_width = 2 -inv_grid_x = 48 -inv_grid_y = 61 -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 7 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - -hud_fov = 0.70 - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.082, -0.14, -0.11 -hands_position_16x9 = -0.082, -0.14, -0.11 -hands_orientation = 0.0, 0.0, -2 -hands_orientation_16x9 = 0.0, 0.0, -2 - -aim_hud_offset_pos = -0.06335,0.0345,-0.05 -aim_hud_offset_pos_16x9 = -0.06335,0.0345,-0.05 -aim_hud_offset_rot = -0.0072,-0.0007,-0.0404 -aim_hud_offset_rot_16x9 = -0.0072,-0.0007,-0.0404 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster -anm_idle = lancew_mp7_idle -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_idle_aim_moving = lancew_mp7_moving, idle, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle, 0.7 -anm_idle_moving = lancew_mp7_moving -anm_idle_sprint = lancew_mp7_sprint -anm_reload = lancew_mp7_reload, reload -anm_shots = lancew_mp7_shoot, shoot -anm_show = lancew_mp7_draw - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 -1icon_layer = ac10632 -1icon_layer_x = 16 -1icon_layer_y = -10 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.0630,0.025,-0.06 -aim_hud_offset_pos_16x9 = -0.0630,0.025,-0.06 -aim_hud_offset_rot = 0.019,-0.0016,-0.040 -aim_hud_offset_rot_16x9 = 0.019,-0.0016,-0.040 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 -1icon_layer = acog -1icon_layer_x = 10 -1icon_layer_y = -9 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 -scope_texture = wpn_crosshair_acog - - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.0635,0.0125,-0.05 -aim_hud_offset_pos_16x9 = -0.0635,0.0125,-0.05 -aim_hud_offset_rot = 0.007,0.0002,-0.0404 -aim_hud_offset_rot_16x9 = 0.007,0.0002,-0.0404 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 -1icon_layer = c-more -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.0633,0.0225,-0.06 -aim_hud_offset_pos_16x9 = -0.0633,0.0225,-0.06 -aim_hud_offset_rot = 0.0120,0.0,-0.0404 -aim_hud_offset_rot_16x9 = 0.0120,0.0,-0.0404 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 -1icon_layer = eot -1icon_layer_x = 16 -1icon_layer_y = -6 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.06335,0.008,-0.06 -aim_hud_offset_pos_16x9 = -0.06335,0.008,-0.06 -aim_hud_offset_rot = 0.005,0.0,-0.0425 -aim_hud_offset_rot_16x9 = 0.005,0.0,-0.0425 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - diff --git a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt b/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt deleted file mode 100644 index 5b812e0d..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/Patch for Position and View v2.1.txt +++ /dev/null @@ -1,4 +0,0 @@ -this is a patch if you are using -https://www.moddb.com/mods/stalker-anomaly/addons/position-and-view-v21-release - -copy and paste over gamedata after position and view diff --git a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx b/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx deleted file mode 100644 index 7465e678..00000000 --- a/mods/MP7 Replacement/[Patches + Option]/Default Buttstock Configuration/Patch for Position_and_View_v2.1/gamedata/configs/items/weapons/w_mp7.ltx +++ /dev/null @@ -1,332 +0,0 @@ -;------------------------------------------------------------------------------------------------ -[wpn_mp7]:identity_immunities,weapon_probability,default_weapon_params,wpn_mp7_sounds -GroupControlSection = spawn_group -$npc = on -$prefetch = 8 -$spawn = "weapons\mp5" -scheduled = off -cform = skeleton -parent_section = wpn_mp7 - -class = WP_LR300 -slot = 2 -animation_slot = 8 -ef_main_weapon_type = 2 -ef_weapon_type = 6 -hand_dependence = 1 -single_handed = 0 - -default_to_ruck = false -sprint_allowed = true - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 0 - -inv_grid_height = 2 -inv_grid_width = 2 - -inv_name = st_wpn_mp7 -inv_name_short = st_wpn_mp7 -description = st_wpn_mp7_descr - -kind = w_smg ;w_pistol -inv_weight = 2.1 -cost = 23300 -repair_type = pistol -weapon_class = assault_rifle - -hud = wpn_mp7_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7.ogf -position = -0.015, -0.120, -0.010 -orientation = 3, -6, -1 - -fire_point = 0.0, 0.155, 0.225 -fire_point2 = 0.0, 0.188, 0.392 -strap_bone0 = bip01_spine2 -strap_bone1 = bip01_spine1 -strap_position = -0.16, -0.36, 0.15 -strap_orientation = -10, -5, 10 -ph_mass = 3 - -flame_particles = weapons\generic_weapon05 -smoke_particles = weapons\generic_shoot_00 -grenade_flame_particles = weapons\generic_weapon01 - -shell_point = 0.0, 0.125, -0.050 -shell_dir = 0.0, 1.0, 0.0 -shell_particles = weapons\9x19 - -light_disabled = false -light_color = 0.6, 0.5, 0.3 -light_range = 5 -light_time = 0.2 -light_var_color = 0.05 -light_var_range = 0.5 - -upgrades = up_gr_firstab_mp5, up_gr_seconab_mp5, up_gr_thirdab_mp5, up_gr_fourtab_mp5, up_gr_fifthab_mp5 -installed_upgrades = -upgrade_scheme = upgrade_scheme_mp5_nimble -upgr_icon_x = 1900 -upgr_icon_y = 1350 -upgr_icon_width = 150 -upgr_icon_height = 100 - -fire_modes = 1, -1 -ammo_class = ammo_9x19_fmj, ammo_9x19_fmj_bad, ammo_9x19_fmj_verybad, ammo_9x19_pbp, ammo_9x19_pbp_bad, ammo_9x19_pbp_verybad, ammo_9x19_ap, ammo_9x19_ap_bad, ammo_9x19_ap_verybad -ammo_elapsed = 40 -ammo_mag_size = 40 -startup_ammo = 90 - -scopes = acog, eot, ac10632, c-more -scope_status = 0 -scope_zoom_factor = 0 - -silencer_name = wpn_sil_9mm -silencer_status = 2 -silencer_x = 85 -silencer_y = 8 -silencer_light_color = 0.6, 0.5, 0.3 -silencer_light_range = 0.01 -silencer_light_time = 0.2 -silencer_light_var_color = 0.05 -silencer_light_var_range = 0.5 -silencer_smoke_particles = weapons\generic_shoot_00 - -grenade_class = ammo_vog-25, ammo_vog-25_bad, ammo_vog-25_verybad -grenade_launcher_name = wpn_addon_grenade_launcher -grenade_launcher_status = 0 -grenade_launcher_x = 126 -grenade_launcher_y = 24 -launch_speed = 0 - -hit_impulse = 50 -hit_power = 0.47, 0.47, 0.47, 0.47 -hit_type = fire_wound -fire_distance = 400 -bullet_speed = 400 -rpm = 950 -rpm_empty_click = 200 -ap_modifier = 1.1 - -use_aim_bullet = false -time_to_aim = 0.0 ; 3.0 -zoom_dof = 0.5, 1.0, 180 -zoom_enabled = true -zoom_rotate_time = 0.25 -reload_dof = 0.0, 0.5, 5, 2 -control_inertion_factor = 1.0f -crosshair_inertion = 4.35 -fire_dispersion_base = 0.24 -fire_dispersion_condition_factor = 0.001 -inertion_origin_aim_offset = -0.03 -inertion_origin_offset = -0.05 -inertion_tendto_aim_speed = 8 -inertion_tendto_speed = 5 - -misfire_probability = 0.005 -misfire_start_condition = 0.7 ; 0.8 -misfire_start_prob = 0.005 -misfire_end_condition = 0.1 -misfire_end_prob = 0.09 - -condition_queue_shot_dec = 0.0014 -condition_shot_dec = 0.0012 - -cam_return = 0 -cam_relax_speed = 5 -cam_dispersion = 0.8 -cam_dispersion_frac = 1.0 -cam_dispersion_inc = 0.0475 -cam_max_angle = 50.0 -cam_max_angle_horz = 50.0 -cam_step_angle_horz = 1.5 -zoom_cam_relax_speed = 10 -zoom_cam_dispersion = 0.55 -zoom_cam_dispersion_frac = 1.0 -zoom_cam_dispersion_inc = 0.0375 -zoom_cam_max_angle = 50.0 -zoom_cam_max_angle_horz = 50.0 -zoom_cam_step_angle_horz = 1.5 - -PDM_disp_accel_factor = 1.5 -PDM_disp_base = 0.5 -PDM_disp_crouch = 1.0 -PDM_disp_crouch_no_acc = 1.0 -PDM_disp_vel_factor = 1.5 - -cam_relax_speed_ai = 120.75 -zoom_cam_relax_speed_ai = 120.75 -holder_fov_modifier = 1.0 -holder_range_modifier = 1.0 -min_radius = 0 -max_radius = 500 -hit_probability_gd_novice = 1.00 -hit_probability_gd_stalker = 1.00 -hit_probability_gd_veteran = 1.00 -hit_probability_gd_master = 1.00 - -kill_msg_x = 72 -kill_msg_y = 82 -kill_msg_width = 56 -kill_msg_height = 23 - -hud_fov = 0.70 - -[wpn_mp7_hud]:hud_base -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_hud.ogf -attach_place_idx = 0 -zoom_hide_crosshair = true - -item_position = 0, 0, 0 -item_orientation = 0, 0, 0 - -hands_position = -0.082, -0.14, -0.11 -hands_position_16x9 = -0.082, -0.14, -0.11 -hands_orientation = 0.0, 0.0, -2 -hands_orientation_16x9 = 0.0, 0.0, -2 - -aim_hud_offset_pos = -0.06335,0.0345,-0.05 -aim_hud_offset_pos_16x9 = -0.06335,0.0345,-0.05 -aim_hud_offset_rot = -0.0072,-0.0007,-0.0404 -aim_hud_offset_rot_16x9 = -0.0072,-0.0007,-0.0404 - -gl_hud_offset_pos = 0, 0, 0 -gl_hud_offset_pos_16x9 = 0, 0, 0 -gl_hud_offset_rot = 0, 0, 0 -gl_hud_offset_rot_16x9 = 0, 0, 0 - -lean_hud_offset_pos = 0, 0, 0 -lean_hud_offset_rot = 0, 0, 0 - -anm_hide = lancew_mp7_holster -anm_idle = lancew_mp7_idle -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_idle_aim_moving = lancew_mp7_moving, idle, 0.75 -anm_idle_aim_moving_crouch = lancew_mp7_moving, idle, 0.7 -anm_idle_moving = lancew_mp7_moving -anm_idle_sprint = lancew_mp7_sprint -anm_reload = lancew_mp7_reload, reload -anm_shots = lancew_mp7_shoot, shoot -anm_show = lancew_mp7_draw - -shell_bone = wpn_body -shell_dir = 0.0, 1.0, 0.0 -shell_point = 0.02, 0.06, -0.019 - -fire_bone = wpn_body -fire_bone2 = wpn_body -fire_point = 0, 0.037504, 0.269238 -fire_point2 = 0.0, -0.029, 0.525 - -freelook_z_offset_mul = 0.3 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_ac10632]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 2 - -inv_weight = 2.215 - -hud = wpn_mp7_ac10632_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_ac10632 - - -[wpn_mp7_ac10632_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_ac10632_hud.ogf - -aim_hud_offset_pos = -0.0630,0.025,-0.06 -aim_hud_offset_pos_16x9 = -0.0630,0.025,-0.06 -aim_hud_offset_rot = 0.019,-0.0016,-0.040 -aim_hud_offset_rot_16x9 = 0.019,-0.0016,-0.040 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_acog]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 4 -inv_grid_y = 0 - -inv_weight = 2.45 - -hud = wpn_mp7_acog_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_acog - -scope_status = 0 -scope_zoom_factor = 20 -scope_texture = wpn_crosshair_acog - - -zoom_rotate_time = 0.25 - - -[wpn_mp7_acog_hud]:wpn_mp7_hud,hud_low_interia -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_acog_hud.ogf - -aim_hud_offset_pos = -0.0635,0.0125,-0.05 -aim_hud_offset_pos_16x9 = -0.0635,0.0125,-0.05 -aim_hud_offset_rot = 0.007,0.0002,-0.0404 -aim_hud_offset_rot_16x9 = 0.007,0.0002,-0.0404 - -anm_hide = lancew_mp7_holster, idle_2 -anm_idle = lancew_mp7_idle, idle_2 -anm_idle_aim = lancew_mp7_idle_aim, idle_aim_2 -anm_idle_moving = lancew_mp7_moving, idle_2 -anm_idle_sprint = lancew_mp7_sprint, idle_2 -anm_reload = lancew_mp7_reload, reload_2 -anm_shots = lancew_mp7_shoot, shoot_2 -anm_show = lancew_mp7_draw, idle_2 - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_c-more]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 0 -inv_grid_y = 2 - -inv_weight = 2.4 - -hud = wpn_mp7_c-more_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_c-more - - -[wpn_mp7_c-more_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_c-more_hud.ogf - -aim_hud_offset_pos = -0.0633,0.0225,-0.06 -aim_hud_offset_pos_16x9 = -0.0633,0.0225,-0.06 -aim_hud_offset_rot = 0.0120,0.0,-0.0404 -aim_hud_offset_rot_16x9 = 0.0120,0.0,-0.0404 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - -;------------------------------------------------------------------------------------------------ -[wpn_mp7_eot]:wpn_mp7 - -icons_texture = ui\mp7_icons -inv_grid_x = 2 -inv_grid_y = 0 - -inv_weight = 2.4 - -hud = wpn_mp7_eot_hud -visual = dynamics\weapons\wpn_mp7\wpn_mp7_eotech - - -[wpn_mp7_eot_hud]:wpn_mp7_hud -item_visual = anomaly_weapons\wpn_mp7\wpn_mp7_eotech_hud.ogf - -aim_hud_offset_pos = -0.06335,0.008,-0.06 -aim_hud_offset_pos_16x9 = -0.06335,0.008,-0.06 -aim_hud_offset_rot = 0.005,0.0,-0.0425 -aim_hud_offset_rot_16x9 = 0.005,0.0,-0.0425 - -anm_idle_aim = lancew_mp7_idle_aim, idle_aim -anm_shots = lancew_mp7_shoot, shoot - diff --git a/mods/NPC Looting Fix/PATCH - More Aggressive NPC Looting/scripts/npc_looting_fix.script b/mods/NPC Looting Fix/PATCH - More Aggressive NPC Looting/scripts/npc_looting_fix.script deleted file mode 100644 index 80fbbcd6..00000000 --- a/mods/NPC Looting Fix/PATCH - More Aggressive NPC Looting/scripts/npc_looting_fix.script +++ /dev/null @@ -1,451 +0,0 @@ -local AlwaysDetectDistance, StateWalk, StateRun, MonsterLootCommunities - -function xr_corpse_detection.evaluator_corpse:evaluate() - if not (self.object:alive()) then - return false - end - - if (xr_danger.has_danger(self.object)) then - return false - end - - if (xr_conditions.surge_started() == true) then - return false - end - - local npc = self.object - if (IsWounded(npc) or npc:best_enemy())then - return false - end - - local st = db.storage[npc:id()] - if (st) and ((st.active_scheme == "camper") or (st.help_wounded and st.help_wounded.selected_id ~= nil) or (st.gather_items and st.gather_items.selected_id ~= nil)) then - return false - end - - self.a.analse_mode = xr_logic.pick_section_from_condlist(db.actor, self.object, self.a.mutant_corpse_analysis) - self.a.enabled = xr_logic.pick_section_from_condlist(db.actor, self.object, self.a.corpse_detection_enabled) - if (self.a.analse_mode == "false" and self.a.enabled == "false") then - return false - end - - if (self:find_valid_target()) then - return true - end - - return false -end - -local rank_coeffs_table = { - novice = 20, - trainee = 20, - experienced = 25, - professional = 35, - veteran = 40, - expert = 50, - master = 55, - legend = 60 -} - -function xr_corpse_detection.get_all_from_corpse(npc) - if not (db.actor) then - return - end - - local id = npc:id() - local st = db.storage[id] and db.storage[id].corpse_detection - - -- sanity check, this should never happen - if not (st) then - return - end - - local corpse_npc_id = st.selected_corpse_id - local corpse_npc = corpse_npc_id and db.storage[corpse_npc_id] and db.storage[corpse_npc_id].object or corpse_npc_id and level.object_by_id(corpse_npc_id) - - -- reset all scheme dependent variables - if (st.selected_corpse_id) then - if (db.storage[st.selected_corpse_id]) then - db.storage[st.selected_corpse_id].corpse_already_selected = nil - end - end - st.__stimer = nil - st.mutant_analysed = nil - st.vertex_id = nil - st.vertex_position = nil - st.selected_corpse_id = nil - st.state = nil - st.index = 1 - st.nearest_corpse_dist = nil - st.nearest_corpse_vertex = nil - st.nearest_corpse_position = nil - st.nearest_id = nil - - if (corpse_npc == nil or corpse_npc:alive() == true) then - return - end - - if not(IsStalker(corpse_npc)) then - - if (get_story_object("yan_ecolog_semenov")) then - local need = load_var(db.actor,"yan_ecolog_semenov_task_1_tissue_need") or 0 - if (need > 0) then - local count = load_var(db.actor,"yan_ecolog_semenov_task_1_tissue_count") or 0 - save_var(db.actor,"yan_ecolog_semenov_task_1_tissue_count",count + 1) - end - end - - local looted = se_load_var(corpse_npc:id(),corpse_npc:name(),"looted") == "true" - if (not looted) and ui_mutant_loot then - local loot = {} - ui_mutant_loot.loot_mutant(corpse_npc:section(),corpse_npc:clsid(),loot,npc,nil,corpse_npc) - - local is_there_loot - for sec,t in pairs(loot) do - is_there_loot = true - break - end - - if (is_there_loot) then - xr_sound.set_sound_play(id,"corpse_loot_good") - else - xr_sound.set_sound_play(id,"corpse_loot_bad") - end - se_save_var(corpse_npc:id(),corpse_npc:name(),"looted","true") - game_statistics.increment_npc_statistic(npc,"field_dressings") - end - return - end - - local item_value = 0 - local npc_rank = ranks.get_obj_rank_name(npc) - local inv_weight = npc:get_total_weight() - local max_weight = rank_coeffs_table[npc_rank] / 1.5 - local function get_item(corpse,item) - if (xr_corpse_detection.lootable_table[item:section()] ~= nil) then - if (IsItem("money", item:section())) then - alife_release(item) - else - item_value = item:cost() * item:condition() / (rank_coeffs_table[npc_rank] * (item:weight() + 0.1)) - - if (inv_weight + item:weight() > max_weight) then - if (not IsArtefact(item)) then - item_value = item_value / inv_weight - end - end - - if (item_value > 99 or math.random(item_value) > 5) then - corpse:transfer_item(item,npc) - inv_weight = inv_weight + item:weight() - SendScriptCallback("npc_on_get_all_from_corpse",npc,corpse_npc,item,xr_corpse_detection.lootable_table[item:section()]) - end - end - end - end - corpse_npc:iterate_inventory(get_item,corpse_npc) - - if item_money then - item_money.npc_on_loot_money(npc, corpse_npc) - end - - if (item_value > rank_coeffs_table[npc_rank] * 10) then - xr_sound.set_sound_play(id,"corpse_loot_good") - elseif (math.random(1,100)/100 < 0.5) then - xr_sound.set_sound_play(id,"corpse_loot_bad") - end - - local count = load_var(npc,"s_loot_count") or 0 - if (count >= 255) then - count = 254 - end - save_var(npc,"s_loot_count",count+1) - - game_statistics.increment_npc_statistic(npc,"corpse_looted") - se_save_var(corpse_npc:id(),corpse_npc:name(),npc:id(),"true") -end - -function xr_corpse_detection.evaluator_corpse:find_valid_target() - if (self.a.cstackprevent) then - printf("C Stack Overflow Prevention: warning xr_corpse_detection scheme making repeated calls without return; save now and reload!") - return false - end - - if (self.a.selected_corpse_id) then -- looting process - local corpse = db.storage[self.a.selected_corpse_id] and db.storage[self.a.selected_corpse_id].object or level.object_by_id(self.a.selected_corpse_id) - local state = state_mgr.get_state(self.object) - - -- Code demonized - add check for looting state so the npc wont stop looting if actor is near a corpse - if corpse and (state == "search_corpse" or state == "field_dress" or state == "scaner_crouch" or not xr_corpse_detection.near_actor(corpse)) then - return true - elseif (db.storage[self.a.selected_corpse_id]) then - db.storage[self.a.selected_corpse_id].corpse_already_selected = nil - end - -- code end - end - - local tg = time_global() - self.a.__dtimer = not self.a.__dtimer and tg + 250 or self.a.__dtimer - if (tg < self.a.__dtimer) then - return false - end - self.a.__dtimer = nil - - if not (self.a.index) then - self.a.index = 1 - end - - if not (self.a.memory) then - self.a.memory = {} - end - - local npc = self.object - - local size = #self.a.memory - if (size == 0) then - self.a.cstackprevent = true - - for o in npc:memory_visible_objects() do - local obj = o and o:object() - if (obj and (IsStalker(obj) or IsMonster(obj)) and obj:alive() ~= true and not xr_corpse_detection.near_actor(obj)) then - size = size + 1 - self.a.memory[size] = obj:id() - end - end - self.a.cstackprevent = nil - end - - if (size == 0 or self.a.index > size) then - if (self.a.nearest_id and db.storage[self.a.nearest_id] and db.storage[self.a.nearest_id].corpse_already_selected == nil) then - if (self.a.selected_corpse_id and db.storage[self.a.selected_corpse_id]) then - db.storage[self.a.selected_corpse_id].corpse_already_selected = nil - end - self.a.vertex_id = self.a.nearest_corpse_vertex - self.a.vertex_position = self.a.nearest_corpse_position - self.a.selected_corpse_id = self.a.nearest_id - self.a.state = self.a.nearest_state - - db.storage[self.a.selected_corpse_id].corpse_already_selected = npc:id() -- current looter - - self.a.index = 1 - self.a.nearest_corpse_dist = nil - self.a.nearest_corpse_vertex = nil - self.a.nearest_corpse_position = nil - self.a.nearest_id = nil - return true - end - - self.a.index = 1 - self.a.nearest_corpse_dist = nil - self.a.nearest_corpse_vertex = nil - self.a.nearest_corpse_position = nil - self.a.nearest_id = nil - empty_table(self.a.memory) - return false - end - - local id = self.a.memory[self.a.index] - local corpse_npc = id and db.storage[id] and db.storage[id].object - - if (corpse_npc and corpse_npc:alive() ~= true and db.storage[id] and not db.storage[self.a.selected_corpse_id] and not se_load_var(corpse_npc:id(),corpse_npc:name(),npc:id())) then - if (db.storage[id].corpse_already_selected == nil) then - local is_stalker = IsStalker(corpse_npc) - local can_loot_mutants = not is_stalker and not se_load_var(corpse_npc:id(),corpse_npc:name(),"looted") and (self.a.analse_mode == "true" or self.a.enabled == "true" and MonsterLootCommunities[character_community(npc)]) - - if (self.a.enabled == "true" and is_stalker or can_loot_mutants) then - local corpse_pos = utils_obj.safe_bone_pos(corpse_npc,"bip01_spine") - local dist = npc:position():distance_to_sqr(corpse_pos) - - if (dist < AlwaysDetectDistance) and (self.a.nearest_corpse_dist == nil or dist <= self.a.nearest_corpse_dist) then - local corpse_vertex = level.vertex_id(corpse_pos) - if level.vertex_position(corpse_vertex):distance_to_sqr(corpse_pos) > 16 then - corpse_vertex = corpse_npc:level_vertex_id() - end - if (npc:accessible(corpse_vertex) and level.vertex_position(corpse_vertex):distance_to_sqr(corpse_pos) <= 15) then - self.a.nearest_corpse_dist = dist - self.a.nearest_corpse_vertex = corpse_vertex - self.a.nearest_corpse_position = corpse_pos - self.a.nearest_id = id - self.a.nearest_state = dist < math.random(5,30) and StateWalk or StateRun - end - end - end - elseif math.random(4) > 1 then - se_save_var(corpse_npc:id(),corpse_npc:name(),npc:id(),"true") - end - end - - self.a.index = self.a.index + 1 - - return false -end - -function xr_corpse_detection.on_game_start() - local ini = ini_file("ai_tweaks\\xr_corpse_detection.ltx") - AlwaysDetectDistance = 1500 - StateWalk = ini:r_string_ex("settings","state_walk") or "walk_noweap" - StateRun = ini:r_string_ex("settings","state_run") or "rush" - MonsterLootCommunities = utils_data.collect_section(ini,"loot_mutant_communities",true) - xr_corpse_detection.lootable_table = xr_corpse_detection.get_loot_table(ini) -end - --- not used -function xr_corpse_detection.has_valuable_loot() end -function xr_corpse_detection.set_valuable_loot() end ----------------------------------------------------------------------- -local Items = {} - -function xr_gather_items.eva_gather_itm:find_valid_item() - if (self.st.cstackprevent) then - printf("C Stack Overflow Prevention: warning xr_gather_items scheme making repeated calls without return; save now and reload!") - return false - end - - if (self.st.selected_id) then - local se_itm = self.st.selected_id ~= 0 and self.st.selected_id ~= 65535 and alife_object(self.st.selected_id) - if (se_itm and se_itm.parent_id == 65535) then - local itm = level.object_by_id(se_itm.id) - if (itm) then - return true - end - end - Items[self.st.selected_id] = nil - self.st.selected_id = nil - end - - local tg = time_global() - self.st.__dtimer = not self.st.__dtimer and tg + 250 or self.st.__dtimer - if (tg < self.st.__dtimer) then - return false - end - self.st.__dtimer = nil - - local loot_table = xr_corpse_detection.lootable_table or utils_data.collect_section(ini,"lootable",true) - if not (loot_table) then - return false - end - - if not (self.st.index) then - self.st.index = 1 - end - - if not (self.st.memory) then - self.st.memory = {} - end - - local npc = self.object - - local size = #self.st.memory - if (size == 0) then - local obj_id - - self.st.cstackprevent = true - for o in npc:memory_visible_objects() do - local obj = o and o:object() - if (obj) then - obj_id = obj:id() - if (loot_table[obj:section()] ~= nil) then - size = size + 1 - table.insert(self.st.memory,obj_id) - end - end - end - self.st.cstackprevent = nil - - if (size == 0) then - return false - end - end - - if (size == 0 or self.st.index > size) then - if (self.st.nearest_id and Items[self.st.nearest_id] == nil and (not game_setup.is_world_item(self.st.nearest_id))) then - if (self.st.selected_id and Items[self.st.selected_id]) then - Items[self.st.selected_id] = nil - end - self.st.selected_id = self.st.nearest_id - self.st.vid = self.st.nearest_vid - self.st.vid_pos = self.st.nearest_pos - Items[self.st.selected_id] = npc:id() - self.st.stage = 1 - - self.st.nearest_dist = nil - self.st.nearest_vid = nil - self.st.nearest_pos = nil - self.st.nearest_id = nil - - self.st.index = 1 - - local be = npc:best_enemy() - local dist = npc:position():distance_to(self.st.vid_pos) - if (be or dist < 3) then - self.st.state = "patrol" - else - self.st.state = "rush" - end - return true - end - - self.st.index = 1 - self.st.nearest_dist = nil - self.st.nearest_vid = nil - self.st.nearest_pos = nil - self.st.nearest_id = nil - - empty_table(self.st.memory) - return false - end - - local itm_id = self.st.memory[self.st.index] - self.st.index = self.st.index + 1 - - local itm = itm_id and itm_id ~= 0 and itm_id ~= 65535 and level.object_by_id(itm_id) - local se_itm = itm and loot_table[itm:section()] and Items[itm_id] == nil and alife_object(itm_id) - - if not (se_itm and se_itm.parent_id == 65535) then - return false - end - - if (get_object_story_id(itm_id)) then - return false - end - - if (IsArtefact(nil,se_itm:clsid())) then - if (xr_logic.pick_section_from_condlist(db.actor, npc, self.st.gather_artefact_items_enabled) == "false") then - return false - end - else - if not (npc:see(itm)) then - return false - end - end - - if (npc:best_enemy()) then - if not (IsWeapon(itm)) then - return false - end - if (IsWeapon(npc:active_item())) then - return false - end - else - if (itm:condition() < 0.44) then - return false - end - end - - local itm_pos = itm:position() - local dist = npc:position():distance_to_sqr(itm_pos) - if (self.st.nearest_dist == nil or dist < self.st.nearest_dist) and (dist < 1225) then -- 1225 is MaxDetectDistance - local vid = level.vertex_id(itm_pos) - if (level.vertex_position(vid):distance_to_sqr(itm_pos) > 16) then - vid = itm:level_vertex_id() - end - - if (npc:accessible(vid) and level.vertex_position(vid):distance_to_sqr(itm_pos) <= 15) then - self.st.nearest_dist = dist - self.st.nearest_vid = vid - self.st.nearest_pos = itm_pos - self.st.nearest_id = itm_id - end - end - - return false -end \ No newline at end of file diff --git a/mods/NPC Looting Fix/gamedata/scripts/npc_looting_fix.script b/mods/NPC Looting Fix/gamedata/scripts/npc_looting_fix.script index e90e0fa9..80fbbcd6 100644 --- a/mods/NPC Looting Fix/gamedata/scripts/npc_looting_fix.script +++ b/mods/NPC Looting Fix/gamedata/scripts/npc_looting_fix.script @@ -172,12 +172,15 @@ function xr_corpse_detection.evaluator_corpse:find_valid_target() if (self.a.selected_corpse_id) then -- looting process local corpse = db.storage[self.a.selected_corpse_id] and db.storage[self.a.selected_corpse_id].object or level.object_by_id(self.a.selected_corpse_id) + local state = state_mgr.get_state(self.object) - if corpse and not xr_corpse_detection.near_actor(corpse) then + -- Code demonized - add check for looting state so the npc wont stop looting if actor is near a corpse + if corpse and (state == "search_corpse" or state == "field_dress" or state == "scaner_crouch" or not xr_corpse_detection.near_actor(corpse)) then return true elseif (db.storage[self.a.selected_corpse_id]) then db.storage[self.a.selected_corpse_id].corpse_already_selected = nil end + -- code end end local tg = time_global() diff --git a/mods/NPC Looting Fix/meta.ini b/mods/NPC Looting Fix/meta.ini index 3c1536d7..2a4869a8 100644 --- a/mods/NPC Looting Fix/meta.ini +++ b/mods/NPC Looting Fix/meta.ini @@ -6,7 +6,7 @@ newestVersion= category="7," nexusFileStatus=1 installationFile=NPC_Looting_Fix_1.5.rar -repository=Nexus +repository= ignoredVersion= comments= notes= diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_bwhr.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_bwhr.ltx index 00f71d46..157c20b5 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_bwhr.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_bwhr.ltx @@ -26,4 +26,5 @@ bwhr_warn bwhr_rad bwhr_bio bwhr_info -bwhr_magn \ No newline at end of file +bwhr_magn +bwhr_stash \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_faves.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_faves.ltx index d14d4f98..a1667a9a 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_faves.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_faves.ltx @@ -27,4 +27,6 @@ bwhr_magn diamond_friendly redround32 stalker -stash_green \ No newline at end of file +stash_green +stash_backpack +bwhr_stash \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_npcs.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_npcs.ltx index b2d90e60..eb1cced9 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_npcs.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_npcs.ltx @@ -1,6 +1,6 @@ [iconset_npcs] name = ui_mcm_lst_pawsys_pg_npcs -default = diamond_friendly +default = bwhr_tag [npcs_icons] ; It's best to leave the default groups @@ -34,3 +34,4 @@ npc_medic sleep_zone obj_briefcase obj_lock +bwhr_tag \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_pins.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_pins.ltx index 245f6b22..2c0870ba 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_pins.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icon_set_pins.ltx @@ -4,11 +4,8 @@ default = redpush32 [pins_icons] ; It's best to leave the default groups -; alone, although you can delete this file -; if you never want to see this set again. -; -; You can customize this if you like, or -; even create your own--but it's better +; alone. You can customize this if you like, +; or even create your own--but it's better ; to edit the Favorites group, which can be ; customized in icon_set_faves.ltx and will ; always be displayed at the top of MCM. diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icons.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icons.ltx index 86bc42e1..1fbb53fd 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icons.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/icons.ltx @@ -58,6 +58,8 @@ bwhr_rad = paw_bwhr_rad bwhr_bio = paw_bwhr_bio bwhr_info = paw_bwhr_info bwhr_magn = paw_bwhr_magn +bwhr_tag = paw_bwhr_tag +bwhr_stash = paw_bwhr_stash ; Hi-res (64x64 texture) faction patches hr_army = paw_badge_hr_army @@ -89,11 +91,12 @@ uhr_greh = paw_badge_uhr_greh uhr_isg = paw_badge_uhr_isg uhr_renegade = paw_badge_uhr_renegade -; Vanilla stash icons +; Stash icons stash_green = paw_stash_green stash_red = paw_stash_red stash_purple = paw_stash_purple stash_white = paw_stash_white +stash_backpack = paw_stash_backpack ; Body markers death_small = paw_death_small diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/menu_actions.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/menu_actions.ltx index 11e8a016..a726b0fa 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/menu_actions.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/menu_actions.ltx @@ -47,11 +47,14 @@ icon = stash_green ; in the context menu when you right-click on ; any mapspot. You can make more than one as ; long as each has a unique section name. +; +; NOTE: this file will be overwritten when PAW is +; updated. Back up your customizations. ; ================================================== [mping] ; Ping the map -mode = 4 +mode = 2 enable = true text = ui_mcm_pawsys_pawmenu_mping act = mping @@ -63,20 +66,6 @@ enable = true text = ui_mcm_pawsys_pawmenu_wp_set act = wp_set -[waypoint_rename] -mode = 2 -enable = true -text = ui_mcm_pawsys_pawmenu_waypoint_rename -act = waypoint_rename -field = name - -[waypoint_redesc] -mode = 2 -enable = true -text = ui_mcm_pawsys_pawmenu_waypoint_redesc -act = waypoint_redesc -field = desc - [wp_mov] ; Move an existing waypoint to here mode = 4 @@ -105,16 +94,23 @@ enable = true text = ui_mcm_pawsys_pawmenu_pn_del act = pn_del -[pn_ren] -; Rename a map pin +[pn_settings] +; Open Pin Settings window mode = 4 enable = true -text = ui_mcm_pawsys_pawmenu_pn_ren -act = pn_ren +text = ui_mcm_pawsys_pawmenu_pn_settings +act = pn_settings + +[wp_settings] +; Open Waypoint Settings window +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_wp_settings +act = wp_settings [hud_vis_on] ; Shows a pin on the HUD -mode = 4 +mode = 2 enable = true text = ui_mcm_pawsys_pawmenu_hud_vis_on act = hud_vis_on @@ -154,9 +150,29 @@ enable = true text = ui_mcm_pawsys_pawmenu_unlock_pin act = unlock_pin +[show_label] +; Show a hint-like label/caption banner above pin on PDA map +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_show_label +act = show_label + +[hide_label] +; Hide the label/caption banner +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_hide_label +act = hide_label + +[convert_to_pin] +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_convert_to_pin +act = convert_to_pin + [pn_clr] ; Clear all map pins - no confirmation! -; Disabled by default +; Disabled by default, set mode nonzero to enable mode = 0 enable = true text = ui_mcm_pawsys_pawmenu_pn_clr diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/task_config.ltx b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/task_config.ltx index 7c01254a..e6fddb7d 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/task_config.ltx +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/scripts/paw/task_config.ltx @@ -6,6 +6,9 @@ ; ; NOTE: you must place your text within quotes, or ; Anomaly will strip all spaces from it. +; +; This functionality has essentially been replaced by +; the Waypoint Settings menu. [task_config] ;name = "Personal Waypoint" diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/text/eng/catsy_waypoints.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/text/eng/catsy_waypoints.xml index 6b74b03d..5db72fa3 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/text/eng/catsy_waypoints.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/text/eng/catsy_waypoints.xml @@ -698,7 +698,7 @@ - While this key is held, scrolling the mouse wheel will cycle through the icons in the active set if the scrolling mode is set to Hold for Both. + While this key is held, scrolling the mouse wheel will cycle through the icons in the active set if mouse scrolling is enabled. @@ -726,7 +726,7 @@ - Play sound effect for icon/set changes + Play sound effects for UI interactions @@ -1033,7 +1033,7 @@ This message won't bother you again. Good hunting, %s. - Choose when markers for pins on the HUD should show an indicator for distance: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect without pins set visible on the HUD. + Choose when markers for pins on the HUD should show an indicator for distance: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect if there are no pins set visible on the HUD. @@ -1041,7 +1041,7 @@ This message won't bother you again. Good hunting, %s. - Choose when markers for pins on the HUD should display their text label above the icon: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect without pins set visible on the HUD. + Choose when markers for pins on the HUD should display their text label above the icon: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect if there are no pins set visible on the HUD. @@ -1171,7 +1171,7 @@ This message won't bother you again. Good hunting, %s. - If a pin was created by targeting an object with the crosshairs, it will automatically be shown on the HUD. You can show or hide pins on the HUD at any time using your PDA. + If a pin was created by targeting an object with the crosshairs (whether manually or with Autotag), it will automatically be shown on the HUD. You can show or hide pins on the HUD at any time using your PDA. @@ -1247,7 +1247,7 @@ This message won't bother you again. Good hunting, %s. - The reticle's maximum alpha (transparency) value, with 0 being fully transparent and 255 being no transparency. + The reticle's maximum alpha (transparency) value, with 0 being completely hidden and 255 being fully opaque. @@ -1275,7 +1275,7 @@ This message won't bother you again. Good hunting, %s. - 16:10 (19201200, 2560x1600) + 16:10 (1920x1200, 2560x1600) @@ -1489,7 +1489,7 @@ This message won't bother you again. Good hunting, %s. $clr_yelPAW$clr_wht isn't just a waypoint marker--it's a suite of mapping and navigation tools that give you more control over your map and HUD, letting you mark your own path through the Zone. $clr_yelAll of these features are optional and customizable to your liking.$clr_wht \n \n $clr_lbl Set your own quest marker anywhere, anytime, and customize its text$clr_wht \n $clr_lbl Place, rename, and remove map markers ("pins") anywhere on the map with your choice of icon$clr_wht \n - $clr_lbl Automatically tag known targets with your choice of icon, and display them on the HUD$clr_wht \n \n + $clr_lbl Automatically tag ID'd targets with "smart" pins of your choice, and display them on the HUD$clr_wht \n \n $clr_yelDon't let NPCs tell you where to go--put your PAW down and make the map yours.$clr_wht @@ -1498,4 +1498,192 @@ This message won't bother you again. Good hunting, %s. When the player comes within this distance of the waypoint marker, it will automatically be cleared. Setting this to zero will disable the autoclear setting entirely. + + + + Show Map Label + + + + Hide Map Label + + + + Pin Settings + + + + A + + + + R + + + + G + + + + B + + + + Customize color + + + + Default Settings + + + + BWHR Target Tag + + + + Convert to Pin and Customize + + + + Open or close the pin and set control sidebar + + + + Waypoint Settings + + + + Target + + + + Waypoint is active + + + + None + + + + Customize icon for player backpack stashes + + + + If enabled, when placing a backpack stash, PAW will attempt to replace the usual generic stash icon with one of your choosing. + + + + Icon to use from Favorites set + + + + If you don't see the icon you want here, edit configs\ui\icon_set_faves.ltx and add it to the list. + + + + Backpack Stash + + + + BWHR Stash Icon + + + + $clr_whtOpen or close the$clr_yel Icon Library Sidebar$clr_wht, which lets you browse through all of your sets and replace the pin's current icon with any other. You can scroll your mouse wheel while hovering certain controls to cycle through sets and icons. + + + + $clr_whtClicking this button will$clr_orn immediately and permanently remove this pin.$clr_wht There is no confirmation, and this cannot be undone.\nYou can$clr_yel lock$clr_wht a pin to protect it from accidental deletion. + + + + $clr_whtAccept any changes to this pin and close the dialog. + + + + $clr_whtDiscard any changes to this pin and close the dialog. + + + + $clr_whtToggle $clr_yelUI sound effects on or off$clr_wht. This can also be set in PAW's MCM menu. + + + + $clr_whtA$clr_yel locked$clr_wht pin is protected from any and all changes other than the pin data wipe in MCM. Even the$clr_yel Clear All Pins$clr_wht context action will ignore it. + + + + $clr_whtShow or hide the pin's text as a$clr_yel visible label$clr_wht on the PDA map. + + + + $clr_whtShow or hide a$clr_yel visible HUD marker$clr_wht for this pin. + + + + $clr_whtClick here to$clr_yel edit the label$clr_wht for this pin. + + + + $clr_whtEnable or disable$clr_yel color and transparency customization$clr_wht for this pin's icon. Note that all changes are relative to the starting color of the icon--some changes will look better than others, but only black-and-white icons can be made any color. + + + + $clr_whtClick here to$clr_yel edit the Alpha (transparency)$clr_wht for this pin's icon. Setting it to 0 will make the pin invisible; 255 is completely opaque. + + + + $clr_whtClick here to$clr_yel edit the Red channel$clr_wht for this pin's icon color. This change is relative to the starting color of the icon--only black-and-white icons can be made any color. + + + + $clr_whtClick here to$clr_yel edit the Green channel$clr_wht for this pin's icon color. This change is relative to the starting color of the icon--only black-and-white icons can be made any color. + + + + $clr_whtClick here to$clr_yel edit the Blue channel$clr_wht for this pin's icon color. This change is relative to the starting color of the icon--only black-and-white icons can be made any color. + + + + $clr_whtResets all waypoint settings back to their defaults, including any text customizations above. The current waypoint, if any, is preserved. + + + + Waypoint near fade-out distance (in meters) + + + + When the player comes within this distance of the waypoint, it will begin to fade out. + + + + Waypoint far fade-out distance (in meters) + + + + When the player gets this far away from the waypoint, it will begin to fade out. + + + + Waypoint far hide distance (in meters) + + + + If the player is more than this far beyond where the fade-out begins, the waypoint will disappear completely. + + + + + + + Tooltip Mode + + + + Use Pin Text + + + Use Object Name + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/text/rus/catsy_waypoints.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/text/rus/catsy_waypoints.xml index 245fd718..1b962e16 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/text/rus/catsy_waypoints.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/text/rus/catsy_waypoints.xml @@ -1067,15 +1067,15 @@ - ( "") + ( "") - ( "") + ( "") - ( "") + ( "") @@ -1470,10 +1470,10 @@ - + , , , - . - + ( ) @@ -1488,7 +1488,7 @@ $clr_yelPAW$clr_wht - , , HUD, . $clr_yel .$clr_wht \n \n $clr_lbl $clr_wht \n - $clr_lbl , ("") $clr_wht \n + $clr_lbl , ("") $clr_wht \n $clr_lbl "" HUD$clr_wht \n \n $clr_yel , - PAW .$clr_wht @@ -1497,5 +1497,191 @@ , . , . + + + + + + + + + + + + + + + + + A + + + + R + + + + G + + + + B + + + + + + + + + + + + BWHR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , PAW . + + + + "" + + + + , configs\ui\icon_set_faves.ltx . + + + + + + + + BWHR + + + + $clr_wht $clr_yel$clr_wht, . . + + + + \n , .\n , .\n , . + + + + $clr_wht . + + + + $clr_wht . + + + + $clr_wht $clr_yelUI$clr_wht. MCM PAW. + + + + $clr_wht$clr_yel $clr_wht , MCM. $clr_yel Clear All Pins$clr_wht . + + + + $clr_wht $clr_yel$clr_wht . + + + + $clr_wht "HUD-"$clr_yel . + + + + $clr_wht , $clr_yel $clr_wht . + + + + $clr_wht $clr_yel . , - , , - . + + + + $clr_wht , $clr_yel ()$clr_wht . 0, ; 255 - . + + + + $clr_wht , $clr_yel $clr_wht . - - . + + + + $clr_wht , $clr_yel $clr_wht . - - . + + + + $clr_wht , $clr_yel $clr_wht . - - . + + + + $clr_wht , , . , , . + + + + ( ) + + + + , . + + + + ( ) + + + + , . + + + + ( ) + + + + , , . + + + + + + + + + + + + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw.xml index 44d032cb..26c56c6e 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw.xml @@ -9,7 +9,7 @@ #include "ui\map_spots_paw_patches.xml" #include "ui\map_spots_paw_bwhr.xml" #include "ui\map_spots_paw_npcs.xml" -#include "ui\map_spots_milpda.xml" +#include "ui\map_spots_paw_bodies.xml" @@ -87,71 +87,20 @@ paw_vanilla_stash_icon_red - - - - - + + + + - - ui_icons_paw_pin_bwhr_death64 - + + paw_backpack_stash_icon_green64 + + + + + - - - - - - - ui_icons_paw_blue_circle - - - - - - - - - - ui_icons_paw_crosshair_white - - - - - - - - - - ui_icons_paw_crosshair_red - - - - - - - - - - ui_icons_paw_crosshair_green - - - - - - - - - ui_icons_paw_crosshair_gradient - - - - - - - - - ui_icons_paw_pin_redskull - - + + paw_vanilla_stash_icon_gold + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bodies.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bodies.xml new file mode 100644 index 00000000..d85f0246 --- /dev/null +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bodies.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + ui_icons_paw_pin_bwhr_death64 + + + + + + + + + + ui_icons_paw_blue_circle + + + + + + + + + + ui_icons_paw_crosshair_white + + + + + + + + + + ui_icons_paw_crosshair_red + + + + + + + + + + ui_icons_paw_crosshair_green + + + + + + + + + ui_icons_paw_crosshair_gradient + + + + + + + + + ui_icons_paw_pin_redskull + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mapspot_skull_large + + + + ui_mapspot_skull_small + + + + ui_AlphaLion_XCorpseMarker-small + + + + ui_AlphaLion_XCorpseMarker-large + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bwhr.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bwhr.xml index 21e4952b..3234b8de 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bwhr.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/map_spots_paw_bwhr.xml @@ -103,3 +103,23 @@ ui_icons_paw_pin_bwhr_bio64 + + + + + + + + + ui_icons_paw_pin_bwhr_horizon64 + + + + + + + + + ui_icons_paw_pin_bwhr_stash64 + + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_input_window.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_input_window.xml index 5a54f84f..900fcad6 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_input_window.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_input_window.xml @@ -1,28 +1,168 @@ - - - ui_inGame2_message_box - + + + + + + + + + ui_paw_dialog_classic_chrome_top + + + + ui_paw_dialog_classic_chrome_wpdesc + + + + ui_paw_dialog_classic_chrome_btm + - - + + - - - ui_inGame2_edit_box_2 - + - + + + + ui_inGame2_checkbox + + + + + + + + + + + + + ui_inv_cancel ui_button_ordinary - + ui_inv_ok ui_button_ordinary - + + + ui_paw_reset_defaults + ui_button_ordinary + + + + + + + + ui_inGame2_message_box + + + + + + + + + + ui_paw_btn_open_sidebar + + + + ui_paw_dialog_sidebar + + + + + + + + + + + + + ui_paw_dialog_iconwater_hq + + + + ui_paw_dialog_iconframe_hq + + + + ui_paw_dialog_argb + + + + + + ui_inGame2_checkbox + + + + + + + + + ui_checkbox_TabLED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ui_mcm_pawsys_pawmenu_pn_del + ui_button_ordinary + + + + ui_inv_cancel + ui_button_ordinary + + + + ui_inv_ok + ui_button_ordinary + + + + ui_paw_btn_soundon + + + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_ui_elements.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_ui_elements.xml new file mode 100644 index 00000000..18a1b129 --- /dev/null +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_ui_elements.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ui_paw_fade_cap_bg_left + + + ui_paw_fade_cap_bg_right + + + ui_paw_fade_cap_bg_full + + + + ui_paw_hud_wnd_frmcrv_UL + + + ui_paw_hud_wnd_frmcrv_UM + + + ui_paw_hud_wnd_frmcrv_UR + + + + ui_paw_hud_wnd_frmcrv_LM + + + + + + + + + ui_paw_hud_wnd_frmcrv_RM + + + + ui_paw_hud_wnd_frmcrv_BL + + + ui_paw_hud_wnd_frmcrv_BL_extend + + + ui_paw_hud_wnd_frmcrv_BP + + + ui_paw_hud_wnd_frmcrv_BM + + + ui_paw_hud_wnd_frmcrv_BM_extend + + + ui_paw_hud_wnd_frmcrv_BR + + + + ui_paw_hud_wnd_frmcrv_UT + + + ui_paw_hud_wnd_frmcrv_LT + + + ui_paw_hud_wnd_frmcrv_RT + + + ui_paw_hud_wnd_frmcrv_BT + + + + + + ui_paw_btn_arw_nobg_left + + + + ui_icons_paw_btn_setemboss + + + + ui_paw_btn_arw_nobg_right + + + + ui_paw_btn_yelarrow_up + + + + ui_icons_paw_btn_icon + + + + ui_paw_btn_yelarrow_down + + + + ui_paw_btn_applyicon + + + + + ui_paw_mwheel_ind_icon + + + + + + + + + + + + + + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml index b07c2a30..22b23312 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml +++ b/mods/Personal Adjustable Waypoint/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml @@ -24,14 +24,6 @@ - - - - - - - - @@ -54,12 +46,22 @@ + + + + + + + + + + @@ -104,8 +106,22 @@ + + + + + + + + + + + + + + @@ -121,6 +137,7 @@ + @@ -156,24 +173,33 @@ + + + - + + + + - + - + + @@ -182,6 +208,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mods/Personal Adjustable Waypoint/gamedata/scripts/catsy_paw_mcm.script b/mods/Personal Adjustable Waypoint/gamedata/scripts/catsy_paw_mcm.script index ee9b332d..f7a065af 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/scripts/catsy_paw_mcm.script +++ b/mods/Personal Adjustable Waypoint/gamedata/scripts/catsy_paw_mcm.script @@ -28,6 +28,7 @@ local icon_sets = {} local icons_ini = ini_file_ex("scripts\\paw\\icons.ltx") local icon_ltx = icons_ini:collect_section("icons") local icons = icon_ltx +local all_icons = {} local pawmenu_path = "ui_mcm_pawsys_pawmenu_" local actions_ini = ini_file_ex("scripts\\paw\\menu_actions.ltx") local actions_ltx = actions_ini:get_sections(true) @@ -192,8 +193,13 @@ local function populate_set_list() end local function populate_icon_list(group) - dl("populate_icon_list called for group %s",group) - local ig = icon_sets[group].icons + local ig = icons + if group then + dl("populate_icon_list called for group %s",group) + ig = icon_sets[group].icons + else + dl("populate_icon_list called for full icon list") + end local content = {} for icon,_ in spairs (ig) do local ic = icons[icon] @@ -226,7 +232,7 @@ function populate_autotag_menus() {0,"pawsys_cmenu_off"}, } }, - + --{id = "show_reticle", type = "check", val = 1, def = true}, -- not implemented yet {id = "reticle_alpha", type = "track", val = 2, min = 1, max = 255, step = 1, def = 120}, {id = "ret_fade_attack_time", type = "input", val = 2, min = 1, max = 5000, def = 150}, {id = "ret_fade_decay_time", type = "input", val = 2, min = 1, max = 5000, def = 250}, @@ -273,7 +279,7 @@ function populate_autotag_menus() table.insert(gr,divider) vl("results for populate_autotag_menus:") - if verbose then + if debuglogs and verbose then for k,v in pairs(gr) do local st = k..string.format("=%s",v)..":\n{" for m,o in pairs(v) do @@ -355,6 +361,18 @@ function populate_set_menus() {"set","pawsys_cfg_bodyset"}, } }) + --[[ + table.insert(gr,{id = "use_custom_backpack_icon", type = "check", val = 1, def = false}) + table.insert(gr,{ + id = "custom_backpack_icon", + type = "list", + val = 0, + def = "stash_backpack", + ui_hook_functor = {catsy_paw_mcm.init_mcm_set_ind}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = populate_icon_list("faves") + }) + --]] table.insert(gr,{id = "use_custom_pin_icon", type = "check", val = 1, def = false}) table.insert(gr,{id = "custom_pin_icon", type = "input", val = 0, def = "user_defined"}) vl("results for populate_set_menus:") @@ -420,6 +438,9 @@ function on_mcm_load() {id = "pin_near_fade_dist", type= "track", val = 2, min = 0, max = 50, step = 1, def = 5}, {id = "pin_far_fade_dist", type= "track", val = 2, min = 20, max = 500, step = 1, def = 100}, {id = "pin_far_hide_dist", type= "track", val = 2, min = 1, max = 250, step = 1, def = 150}, + {id = "wp_near_fade_dist", type= "track", val = 2, min = 0, max = 50, step = 1, def = 5}, + {id = "wp_far_fade_dist", type= "track", val = 2, min = 20, max = 500, step = 1, def = 100}, + {id = "wp_far_hide_dist", type= "track", val = 2, min = 1, max = 250, step = 1, def = 150}, {id = "tip_on_icoset_change", type= "check", val = 1, def = true}, {id = "pingsound", type= "check", val = 1, def = true}, {id = "s_device_pda_1", type= "check", val = 1, def = true}, @@ -443,7 +464,7 @@ function on_mcm_load() table.insert(pawgen,7,{id = "disable_load_warning", type = "check", val = 1, def = false}) table.insert(pawgen,8,divider) else - table.insert(pawgen,2,{id = "pawgen_header", type = "image", link = "ui_paw_emptytex", size = {512,155}, + table.insert(pawgen,2,{id = "pawgen_header", type = "image", link = "ui_paw_emptytex", size = {512,160}, ui_hook_functor = {catsy_paw_mcm.mcm_init_header_text_block}, }) @@ -547,9 +568,9 @@ function on_mcm_load() {2,"mcm_kb_mod_ctrl"}, {3,"mcm_kb_mod_alt"} }}, - {id = "cartmode_toggle", type = "check", val = 1, def = false}, + {id = "cartmode_toggle", type = "check", val = 1, def = true}, {id = "cartmode_unfade", type = "check", val = 1, def = true}, - {id = "cart_shows_smarts", type = "check", val = 1, def = true}, + {id = "cart_shows_smarts", type = "check", val = 1, def = false}, divider, @@ -663,6 +684,25 @@ function on_mcm_load() {id = "header", type= "slide", link= "ui_paw_menuslide_menus", size= {512,50}, borderless= true, spacing= 20}, {id = "headertxt", type = "desc", text = "ui_mcm_pawsys_pawmenu_headertxt"}, + + {id = "wp_settings", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "pn_settings", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + {id = "wp_set", type = "list", val = 2, def = 4, content = { {4,"pawsys_cmenu_all"}, @@ -680,24 +720,6 @@ function on_mcm_load() } }, - {id = "waypoint_rename", type = "list", val = 2, def = 2, - content = { - {4,"pawsys_cmenu_all"}, - {1,"pawsys_cmenu_norm"}, - {2,"pawsys_cmenu_cart"}, - {0,"pawsys_cmenu_off"}, - } - }, - - {id = "waypoint_redesc", type = "list", val = 2, def = 2, - content = { - {4,"pawsys_cmenu_all"}, - {1,"pawsys_cmenu_norm"}, - {2,"pawsys_cmenu_cart"}, - {0,"pawsys_cmenu_off"}, - } - }, - {id = "wp_del", type = "list", val = 2, def = 4, content = { {4,"pawsys_cmenu_all"}, @@ -724,7 +746,7 @@ function on_mcm_load() {0,"pawsys_cmenu_off"}, } }, - +--[[ {id = "pn_ren", type = "list", val = 2, def = 4, content = { {4,"pawsys_cmenu_all"}, @@ -733,7 +755,7 @@ function on_mcm_load() {0,"pawsys_cmenu_off"}, } }, - +--]] {id = "show_all_pins", type = "list", val = 2, def = 2, content = { {4,"pawsys_cmenu_all"}, @@ -770,7 +792,7 @@ function on_mcm_load() } }, - {id = "hud_vis_on", type = "list", val = 2, def = 4, + {id = "hud_vis_on", type = "list", val = 2, def = 2, content = { {4,"pawsys_cmenu_all"}, {1,"pawsys_cmenu_norm"}, @@ -788,6 +810,32 @@ function on_mcm_load() } }, + {id = "show_label", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "hide_label", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "convert_to_pin", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, {id = "pn_clr", type = "list", val = 2, def = 0, content = { @@ -957,7 +1005,7 @@ function init_mcm_header_ind(anchor, handlers, opts, flags) local xmlroot = "paw_mcm_indicator" - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") box_wnd = xml:InitStatic(xmlroot,anchor) box_wnd:SetWndSize(vector2():set(563,40)) box_img = xml:InitStatic(xmlroot..":curr",box_wnd) @@ -1067,7 +1115,7 @@ function init_mcm_pos_preview(anchor, handlers, opts, flags) pws.cust_x = ui_mcm.get("pawsys/pawhud/pos_x") or 491 pws.cust_y = ui_mcm.get("pawsys/pawhud/pos_y") or 690 - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") local theme = pws.curr_theme box.wnd = xml:InitStatic(xmlroot,anchor) box.wnd:SetWndSize(vector2():set(640 * unsquish_ratio,270)) @@ -1125,7 +1173,7 @@ end function init_theme_sim(theme) if load_failed then return end dl("init_theme_sim: attempting to initialize %s theme",theme and theme.name) - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") if theme_preview then if theme_preview.wnd then theme_preview.wnd:Show(false) end if theme_preview.empty then theme_preview.empty:Show(false) end @@ -1211,7 +1259,7 @@ function mcm_init_widget_preview(anchor, handlers, opts, flags) if desc then desc:SetWndSize(vector2():set(300, desc:GetHeight())) end - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") theme_box = xml:InitStatic(xmlroot,anchor) theme_box:SetWndPos(vector2():set(330,-70)) theme_box:SetWndSize(vector2():set(200,200)) @@ -1229,18 +1277,18 @@ end function mcm_init_header_text_block(anchor, handlers, opts, flags) - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") local head = xml:InitStatic(xmlroot,anchor) local tbg1 = xml:InitStatic(xmlroot,anchor) local tbox1 = xml:InitTextWnd(xmlroot,tbg1) if (opts and opts.id) == "pawgen_header" then - tbg1:SetWndSize(vector2():set(usr(640),155)) + tbg1:SetWndSize(vector2():set(usr(640),160)) tbg1:SetWndPos(vector2():set(10,0)) tbg1:InitTexture("ui_paw_mcm_messagebox_transbg") local text = psk(ts("ui_mcm_pawsys_pawgen_headertxt"),text_colors) - tbox1:SetWndSize(vector2():set(usr(620),145)) + tbox1:SetWndSize(vector2():set(usr(620),150)) tbox1:SetText(text) tbox1:SetWndPos(vector2():set(10,12)) @@ -1299,7 +1347,7 @@ end function mcm_init_load_error_block(anchor, handlers, opts, flags) local id = opts and opts.id if id == "fix_load_order" then - xml:ParseFile("paw_hud_indicator.xml") + xml:ParseFile("paw_ui_elements.xml") local pic = handlers and handlers.pic if not pic then return end pic:InitTexture("ui_paw_emptytex") diff --git a/mods/Personal Adjustable Waypoint/gamedata/scripts/tasks_placeable_waypoints.script b/mods/Personal Adjustable Waypoint/gamedata/scripts/tasks_placeable_waypoints.script index 3767c6d2..c91169cc 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/scripts/tasks_placeable_waypoints.script +++ b/mods/Personal Adjustable Waypoint/gamedata/scripts/tasks_placeable_waypoints.script @@ -8,8 +8,8 @@ https://www.youtube.com/channel/UCtG8fiWPUZEzWlkUn60btAw Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma - Version: 2.0.2 - Updated: 20231204 + Version: 2.1.2 + Updated: 20240320 You may alter any part of this mod and do whatever you like with it, just give credit where due. @@ -35,12 +35,13 @@ Credits: HarukaSai, RavenAscendant, Ghen Tuong, demonized, and many others who've assisted in ways big and small. + -- ====================================================================== -- SHORTCUTS, FLAGS, AND SYSTEM STUFF (Most of which you probably shouldn't muck with) -- ===================================================================--]] -script_version = "2.0.2" -release_date = 20231204 +script_version = "2.1.2" +release_date = 20240320 local scriptname = "tasks_placeable_waypoints" local logprefix = " " local language = "eng" @@ -51,7 +52,7 @@ verbose = true -- their logs will contain the maximum amount of info automatically. -- It's noisy and you can turn it off here if you have to. -- ====================================================================== -modxml_map_spots_paw.load_me = function() end +modxml_map_spots_paw.load_me = function() end -- forces DXML mapspots to load -- ====================================================================== function dl(logtext,...) -- Debug logging - to disable, set debuglogs to false @@ -80,7 +81,7 @@ waypoint_active = false -- runtime flag waypoint_canceling = false -- runtime flag disable_load_warning = false local load_failed = false -- runtime flag -local welcome_msg_shown = false +welcome_msg_shown = false -- if you don't have MCM, setting this true will disable the welcome message local get_game_time = game.get_game_time local get_start_time = level.get_start_time local ts = game.translate_string @@ -109,8 +110,8 @@ mwheel_next_poll = time_global() local mwheel_exe_ver = 20230701 -- mouse wheel support added to demonized binaries in this version local rclick_exe_ver = 20230922 -- right-click map support added to demonized binaries in this version local game_version = ts("ui_st_game_version") -local gamma_modpack = game_version:find("G.A.M.M.A.") -mwheel_avail = mousewheel_override or (MODDED_EXES_VERSION and (MODDED_EXES_VERSION >= mwheel_exe_ver)) +local gamma_modpack = game_version:find("G.A.M.M.A.") -- GAMMA now supports both features (mwheel and rclick) +mwheel_avail = mousewheel_override or gamma_modpack or (MODDED_EXES_VERSION and (MODDED_EXES_VERSION >= mwheel_exe_ver)) right_click_avail = right_click_override or gamma_modpack or (MODDED_EXES_VERSION and (MODDED_EXES_VERSION >= rclick_exe_ver)) last_clicked_id = nil -- ====================================================================== @@ -151,16 +152,15 @@ cart_shows_smarts = true cartmode_unfade = true tip_on_icoset_change = false allow_non_wp_targets = false -clear_pin_on_death = true -- pin will be cleared if set on a living thing that dies -pin_near_fade_dist = 5 -- min distance within which pins will begin to fade out, set to 0 to disable -pin_far_fade_dist = 0 -- distance beyond which pins will begin to fade out, set to 0 to disable -pin_far_hide_dist = 10 -- max distance after far_fade at which pins will hide, set to 0 to disable +local pin_tooltip_mode = 2 -- ====================================================================== enable_wp_proxcheck = true show_pins = true +local script_zone_changed = false -- runtime flag local custom_task_info = false local icon_cycle_active = false local set_cycle_active = false +local psw_sidebar_state = true widget_enabled = true widget_active = true hide_widget = true @@ -173,10 +173,18 @@ manual_smart_pins = false mark_on_positive_id = true reticle_mustzoom = true reticle_mode = 2 -autotag_milpda_feature = false -- not implemented yet +autotag_mode = 0 +autotag_milpda_feature = true autotag_persistence = false -- if enabled, autotags are cleared on map change or the below timeout value autotag_lifetime = 120 * 6 -- time in ms before autotags are cleared (def 2 minutes) autotags_time_out = autotag_lifetime > 0 +clear_pin_on_death = true -- when set on a living thing, pin will be cleared if it dies +pin_near_fade_dist = 5 -- min distance within which pins will begin to fade out, set to 0 to disable +pin_far_fade_dist = 100 -- distance beyond which pins will begin to fade out, set to 0 to disable +pin_far_hide_dist = 150 -- max distance after far_fade at which pins will hide, set to 0 to disable +wp_near_fade_dist = 5 -- same but for waypoints +wp_far_fade_dist = 100 -- same but for waypoints +wp_far_hide_dist = 150 -- same but for waypoints ret_fade_attack_time = 400 ret_fade_decay_time = 600 @@ -206,6 +214,8 @@ local snd_path = "catspaw\\" local snd_ping = snd_path.."paw_ping" local snd_cycle_blip = snd_path.."paw_blip" local snd_tag_target = snd_path.."paw_blip" +local snd_place_pin = snd_path.."paw_pin" +local snd_note = "device\\pda\\pda_note" local use_ping_snd = true local use_ui_snd = true local add_mapspot_functor = scriptname..".func_add_mapspot" @@ -213,6 +223,7 @@ local ren_mapspot_functor = scriptname..".func_ren_mapspot" local ren_wp_functor = scriptname..".func_ren_waypoint" local task_id = "task_placeable_waypoint" local pawmenu_path = "ui_mcm_pawsys_pawmenu_" +local hint_path = "ui_paw_hint_" -- Don't change any of these icon definitions. If you want to -- override PAW's pin icons with any of yours, use MCM or -- see below for how to add your own, it's easy. @@ -220,6 +231,8 @@ current_body_icon = nil body_icon_mode = "off" patch_res = "badge" local custom_pin_icon = false +use_custom_backpack_icon = false -- Customize the icon for player stashes +init_backpack_as_pin = true -- Player stash icons are created as pins local default_mapspot = "paw_pin_redpush32" local smart_terrain_icon = "paw_pin_magnifier32" local icon_pingspot = "paw_ping_alpha50" @@ -252,6 +265,8 @@ texture_data = {} icon_index = {} set_index = {} valid_clsids = {} +map_labels = {} +waypoint_history = {} -- not implemented yet local script_zones = {} local pings = {} local pawdata = { @@ -292,10 +307,12 @@ pawdata.npc_ident = { tick_speed = 200, progress = {}, } +pawdata.wphist = {} +waypoint_history = pawdata.wphist npc_ident = pawdata.npc_ident smart_pins = pawdata.smart_pins pins = pawdata.pins -dynamic_faves = pawdata.dynamic_faves +dynamic_faves = pawdata.dynamic_faves -- not implemented yet -- ====================================================================== pda_defs = { @@ -318,6 +335,19 @@ pda_defs = { -- }, } + +local default_stash_icon_basic = "treasure" +local default_stash_icon_rare = "treasure_searched" +local default_stash_icon_isg = "treasure_unique" +local default_stash_icon_player = "paw_stash_backpack" + +stash_icons = { + ["basic"] = axr_main.config:r_value("mcm", "pawsys/custom_stash_icon_basic", {val=0}) or default_stash_icon_basic, -- Normal stashes + ["rare"] = axr_main.config:r_value("mcm", "pawsys/custom_stash_icon_rare", {val=0}) or default_stash_icon_rare, -- Rare stashes + ["isg"] = axr_main.config:r_value("mcm", "pawsys/custom_stash_icon_isg", {val=0}) or default_stash_icon_isg, -- Special (e.g. ISG) stashes + ["player"] = axr_main.config:r_value("mcm", "pawsys/custom_stash_icon_player", {val=0}) or default_stash_icon_player, -- Custom player backpack stashes +} + managed_factions = { -- editing this may cause crashes or other unexpected results ["army"] = true, @@ -340,19 +370,23 @@ managed_options = { ["wp_set"] = true, ["wp_mov"] = true, ["wp_del"] = true, --- ["wp_ren"] = true, - ["waypoint_rename"] = true, - ["waypoint_redesc"] = true, + ["waypoint_rename"] = true, -- deprecated, included here so it doesn't appear if someone re-adds it + ["waypoint_redesc"] = true, -- deprecated ["hud_vis_on"] = true, ["hud_vis_off"] = true, ["show_all_pins"] = true, ["hide_all_pins"] = true, + ["show_label"] = true, + ["hide_label"] = true, ["pn_add"] = true, ["pn_del"] = true, - ["pn_ren"] = true, + ["pn_ren"] = true, -- deprecated ["pn_clr"] = true, + ["pn_settings"] = true, + ["wp_settings"] = true, ["lock_pin"] = true, ["unlock_pin"] = true, + ["convert_to_pin"] = true, ["cm_dbg"] = true, } @@ -362,7 +396,7 @@ hud_themes = { node = "pawhudind", style = "full", tex = "ui_paw_hud_indicator_classic", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=890,y=620}, w = 136, h = 75, @@ -373,7 +407,7 @@ hud_themes = { node = "pawhudind", style = "full", tex = "ui_paw_hud_indicator_classic", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=890,y=620}, w = 136, h = 75, @@ -383,7 +417,7 @@ hud_themes = { node = "pawhudind_vertright", style = "minimal", tex = "ui_paw_hud_indicator_vertright", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=922,y=440}, w = 100, h = 154, @@ -393,7 +427,7 @@ hud_themes = { node = "pawhudind_vertleft", style = "minimal", tex = "ui_paw_hud_indicator_vertleft", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=4,y=570}, w = 100, h = 154, @@ -403,7 +437,7 @@ hud_themes = { node = "pawhudind_gamma_right", style = "full", tex = "ui_paw_hud_indicator_gamma_right", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=888,y=440}, w = 130, h = 150, @@ -413,7 +447,7 @@ hud_themes = { node = "pawhudind_gamma_left", style = "full", tex = "ui_paw_hud_indicator_gamma_left", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=4,y=440}, w = 130, h = 150, @@ -423,7 +457,7 @@ hud_themes = { node = "pawhudind_minimal_h", style = "minimal", tex = "ui_paw_hud_indicator_minimal_h", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=924,y=645}, w = 94, h = 52, @@ -433,7 +467,7 @@ hud_themes = { node = "pawhudind_minimal_v", style = "minimal", tex = "ui_paw_hud_indicator_minimal_v", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=924,y=440}, w = 92, h = 112, @@ -443,7 +477,7 @@ hud_themes = { node = "pawhudind_minicom", style = "compact", tex = "ui_paw_hud_indicator_minicom", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=820,y=725}, w = 38, h = 37, @@ -452,12 +486,22 @@ hud_themes = { name = "compact_noui", node = "pawhudind_minicom", style = "compact", - file = "paw_hud_indicator.xml", + file = "paw_ui_elements.xml", pos = {x=820,y=725}, w = 32, h = 37, pre_tex = "ui_paw_hud_indicator_minicom", }, + ["pin_sidebar"] = { + name = "pin_sidebar", + node = "pawhudind_pin_sidebar", + style = "full", + tex = "ui_paw_dialog_sidebar", + file = "paw_ui_elements.xml", + pos = {x=0,y=0}, + w = 161.25, + h = 188, + }, } @@ -467,17 +511,30 @@ colors = { } text_colors = { - ["clr_255"] = "%" .. "%c[255,255,255,255]", - ["clr_red"] = "%" .. "%c[255,255,0,0]", - ["clr_grn"] = "%" .. "%c[255,0,255,0]", - ["clr_blu"] = "%" .. "%c[255,0,0,255]", - ["clr_lbl"] = "%" .. "%c[255,0,200,220]", - ["clr_yel"] = "%" .. "%c[255,250,218,94]", - ["clr_wht"] = "%" .. "%c[255,220,220,220]", - ["clr_prp"] = "%" .. "%c[255,138,43,226]", + ["clr_255"] = "%" .. "%c[255,255,255,255]", + ["clr_red"] = "%" .. "%c[255,255,0,0]", + ["clr_orn"] = "%" .. "%c[255,255,140,0]", + ["clr_grn"] = "%" .. "%c[255,0,255,0]", + ["clr_blu"] = "%" .. "%c[255,0,0,255]", + ["clr_lbl"] = "%" .. "%c[255,0,200,220]", + ["clr_yel"] = "%" .. "%c[255,250,218,94]", + ["clr_wht"] = "%" .. "%c[255,220,220,220]", + ["clr_prp"] = "%" .. "%c[255,138,43,226]", ["clr_blk"] = "%" .. "%c[255,0,0,0]", } +null_tokens = { + ["clr_255"] = "", + ["clr_red"] = "", + ["clr_grn"] = "", + ["clr_blu"] = "", + ["clr_lbl"] = "", + ["clr_yel"] = "", + ["clr_wht"] = "", + ["clr_prp"] = "", + ["clr_blk"] = "", + +} local keybinds = { ["cartmode"] = { @@ -563,6 +620,20 @@ local keybinds = { }, } +local hover_elements = { + ["btn_iprev"] = "icon", + ["btn_inext"] = "icon", + ["btn_sprev"] = "set", + ["btn_snext"] = "set", + ["logo_set"] = "set", + ["box_curr"] = "icon", + ["box_prev"] = "icon", + ["box_next"] = "icon", + ["box_text"] = "set", + ["box_text2"] = "icon", + ["btn_apply"] = "icon", +} + -- ====================================================================== -- GENERAL UTILITY FUNCTIONS -- ====================================================================== @@ -582,7 +653,7 @@ end function delay_exec_of(func,secs,...) if not func then return end secs = secs or 0 - CreateTimeEvent("pawdelay","paw"..func..tostring(time_global()),secs,func,...) + CreateTimeEvent("pawdelay","paw"..tostring(time_global()),secs,func,...) end @@ -682,9 +753,9 @@ function safename(id) local name = se_obj:name() or text local cls = se_obj:clsid() - if pins[id] then - -- If there's a pin for this ID, use its label above all else - text = pins[id].text or pins[id].name + if pins[id] and not script_zones[id] then + -- If there's a pin for this ID, use its text above all else + text = pins[id].name vl("%s (%s) is a pin: %s",name,id,text) elseif (cls == clsid.script_zone) then text = ts("st_paw_pin_default_name") @@ -775,8 +846,9 @@ end function valid_pda() - local dev = db.actor:item_in_slot(8) + local dev = db.actor and db.actor:item_in_slot(8) local sec = dev and dev:section() + if not sec then return false end if dev and pda_defs[sec] then if pda_defs[sec].show_w then return true end elseif item_device.device_npc_pda[sec] then @@ -833,87 +905,124 @@ function play_sound_for_actor(effect) snd:play(db.actor, 0, sound_object.s2d) end +function play_ui_sound(effect) + if effect and use_ui_snd then + play_sound_for_actor(effect) + end +end function add_mapspot(text,id,icon) if not id then return end icon = icon or default_mapspot + text = text or get_tooltip_for_pin(id) or "" vl("Adding mapspot %s for id %s with icon %s",text,id,icon) level.map_add_object_spot(id,icon,text) + if not pins[id] then return end + + local pin = pins[id] + if pin.custom_colors and pin.colors then + local clr = pin.colors + local spot = level.map_get_object_spot_static(id,icon) + spot:SetTextureColor(GetARGB(clr.a, clr.r, clr.g, clr.b)) + end + if pin.hud then + show_hud_pin(id) + end + if pin.show_label then + show_pin_label(id,true) + end + return true end function remove_mapspot(id,icon) if not (id and icon) then return end vl("Trying to remove mapspot for id %s with icon %s",id,icon) + + local pin = pins[id] + if pin and pin.show_label then + show_pin_label(id,false,true) + end + if pin and pin.hud then + hide_hud_pin(id) + end level.map_remove_object_spot(id,icon) - level.map_remove_object_spot(id,icon) + level.map_remove_object_spot(id,icon) -- this operation sometimes doesn't work the first time return true end ---[[ --- this isn't working yet, don't enable -function rotate_dynamic_favorites(icon) - if not icon then return end - local mdf = tonumber(max_dynamic_faves) or 0 - local faves = 0 - if (mdf and (mdf == 0)) then return end - vl("rotate_dynamic_favorites called with new mapspot %s",icon) - if dynamic_faves and (type(dynamic_faves) == "table") then - faves = #dynamic_faves or 0 - if faves > 1 then - for i = 1,faves do - if (faves[i] == icon) then - vl("%s already in favorites, ignoring") - return +function change_mapspot(text,id,icon,old_icon) + if not id then return end + text = text or get_tooltip_for_pin(id) + icon = icon or (pins and pins[id] and pins[id].icon) or default_mapspot + old_icon = old_icon or icon + vl("Trying to change mapspot with id %s from icon %s to icon %s with text %s",id,old_icon,icon,text) + remove_mapspot(id,old_icon) + return add_mapspot(text,id,icon) +end +function get_tooltip_for_pin(id) + local pin = pins and pins[id] + local text = "" + if pin then + local mode = pin.tooltip or pin_tooltip_mode + if mode > 1 then + text = pin.text or pin.name or ts("st_paw_pin_default_name") + elseif mode > 0 then + text = pin.name or ts("st_paw_pin_default_name") + end + vl("get_tooltip_for_pin(%s): tooltip mode %s\n* Returning hint: \"%s\"",id,mode,text) + return text + end +end + +function has_mapspot(id,icon) + return level.map_has_object_spot(id,icon) == 1 +end + +function get_mapspot(id,icon) + local found + if icon then + return has_mapspot(id,icon) and icon + else + for k,v in pairs(stash_icons) do + local has_spot = has_mapspot(id,v) + --printf("id %s has mapspot %s: %s",id,v,has_spot) + if has_spot then + found = v + --printf("found %s",found) + --return v - end - if faves < mdf then - faves = faves + 1 - elseif (mdf > 1) and (faves >= mdf) then - for i = 2,faves do - vl("%s was in position %s, shuffling down to %s",dynamic_faves[i],i,i-1) - dynamic_faves[i - 1] = dynamic_faves[i] end end - else - dynamic_faves = {} end - dynamic_faves[faves] = icon - vl("%s added to top of dynamic_faves",icon) -end ---]] - -function func_add_mapspot(text,args) - local id = args.id - local icon = args.icon or map_pin_icon - if text == "" or text == nil then - set_pin_persistence(id,false) - set_pingspot_persistence(id,false) - pins[id] = nil - vl("Empty text input returned for pin %s, removing",id) - return end - vl("func_add_mapspot called for id %s | %s | %s",id,icon,text) - pins[id].text = text - add_mapspot(text,id,icon) + return found end -function func_ren_mapspot(text,args) - local id = args.id - local icon = map_pin_icon - local old_icon = args.icon - if text == "" or text == nil then - vl("Empty text input returned for pin %s, making no change",id) - text = pins[id].text - icon = old_icon + +function set_mapspot_colors(id,icon,a,r,g,b) + if not (id and icon and a and r and g and b) then return end + local pin = pins[id] + if pin and pin.colors then + local clr = pin.colors + local spot = level.map_get_object_spot_static(id,icon) + if spot then spot:SetTextureColor(GetARGB(clr.a, clr.r, clr.g, clr.b)) end end - pins[id].text = text - vl("func_ren_mapspot called for id %s | %s | %s",id,icon,text) - remove_mapspot(id,old_icon) - add_mapspot(text,id,old_icon) end + +function remove_stash_mapspots(id) + level.map_remove_object_spot(id,"treasure") + level.map_remove_object_spot(id,"treasure") + for _,mapspot in pairs(stash_icons) do + dl("Attempting to remove stash mapspot \"%s\" for ID %s",mapspot,id) + level.map_remove_object_spot(id,mapspot) + level.map_remove_object_spot(id,mapspot) + end +end + + function func_ren_waypoint(text,args) if text == "" then text = nil end local field = args.field @@ -929,19 +1038,38 @@ function pins_exist() return not is_empty(pins) end +function pin_exists(id) + return pins[id] and true or false +end -function waypoint_task_cleanup() + +function can_convert_to_pin(id) + if not (id and (id > 0) and (id < 65535)) then return end + + local se_obj = alife_object(id) + if not se_obj then return end + + local cls = se_obj:clsid() + local is_stash = IsInvbox(nil,cls) + local mapspot = get_mapspot(id) + local is_pin = pin_exists(id) + local can_convert = mapspot and is_stash and not is_pin + vl("can_convert_to_pin(%s): is_stash: %s | is a pin: %s | mapspot: %s | can_convert = %s",id,is_stash,is_pin,mapspot,can_convert) + + return can_convert end function cancel_task() local id = placed_waypoint and placed_waypoint.id tm.task_info[task_id] = nil - remove_mapspot(id, waypoint_mapspot) - _ = set_pingspot_persistence(id,false) + if id then + remove_mapspot(id, waypoint_mapspot) + set_pingspot_persistence(id,false) + end waypoint_active = false placed_waypoint = nil - _ = dl("Waypoint task cancellation complete for %s",id) + dl("Waypoint task cancellation complete for %s",id) waypoint_canceling = false return true end @@ -959,7 +1087,6 @@ function set_current_waypoint(se_obj) set_pingspot_persistence(id) if waypoint_active then last_waypoint = placed_waypoint - set_pingspot_persistence(id,false) end placed_waypoint = { id = id, @@ -975,9 +1102,9 @@ function valid_travel_target(id) -- only those that we know are within the playable -- area--ones spawned at a spot where the player was -- standing at the time. - local pin = pins and pins[id] + local pin = pins and id and pins[id] local valid = pin and pin.quick - vl("valid_travel_target | id %s is pin: %s | is quick pin %s",pin,valid) + vl("valid_travel_target | id %s is pin: %s | is quick pin %s",id,pin,valid) return valid end @@ -988,7 +1115,7 @@ function init_new_pin(id,name,text,icon) pins[id] = { id = id, name = name or ts("st_paw_pin_default_name"), - text = text or name, + text = text, icon = icon, hud = false } @@ -1009,7 +1136,8 @@ function register_script_zone(...) created = now, cleanup = now + ping_lifetime, } - vl("Script zone %s spawned for ping spot",id) + script_zone_changed = true + vl("Script zone %s spawned for mapspot",id) return se_obj end @@ -1020,6 +1148,7 @@ function deregister_script_zone(id) if not se_obj then return end alife_release(se_obj) script_zones[id] = nil + script_zone_changed = true vl("Script zone %s released",id) end @@ -1069,6 +1198,7 @@ function script_zone_cleanup() deregister_script_zone(k) end end + script_zone_changed = false dl("script_zone_cleanup completed") return true end @@ -1079,7 +1209,7 @@ function temp_pin_cleanup(wipe_all) if v.cleanup then local expired = autotags_time_out and (v.cleanup < now) if expired or wipe_all then - do_waypoint("pn_del",nil,nil,{syscall=true,id=k}) + do_paw_action("pn_del",nil,nil,{syscall=true,id=k}) end end end @@ -1097,6 +1227,7 @@ function set_pin_persistence(id,onoff,lifetime) local now = get_time_elapsed() pins[id].cleanup = now + (lifetime or autotag_lifetime or 0) dl("Pin %s flagged as temporary, it will be subject to cleanup at %s",id,pins[id].cleanup) + script_zone_changed = true end return true end @@ -1110,6 +1241,7 @@ function set_pingspot_persistence(id,onoff) else script_zones[id].cleanup = get_time_elapsed() dl("Persistent pingspot %s flagged as unused, it will be subject to cleanup",id) + script_zone_changed = true end return true end @@ -1138,16 +1270,113 @@ function ping_area_around(obj) end end - if use_ping_snd and snd_ping then play_sound_for_actor(snd_ping) end + if use_ping_snd and snd_ping then play_ui_sound(snd_ping) end CreateTimeEvent("paw_ping_cleanup","ping_"..pid,11,tasks_placeable_waypoints.ping_cleanup,pid) end -function do_waypoint(act,se_obj,acode,args) +function init_mapspot_label_wnd(mapspot_text,id,icon,anchor) + vl("init_mapspot_label_wnd(%s,%s,%s)",mapspot_text,id,icon) + mapspot_text = mapspot_text or "" + local anchor = anchor or level.map_get_object_spot_static(id,icon) + local xml = CScriptXmlInit() + local xmlroot = "paw_ui_wnd_box" + local frm = xmlroot..":frm_" + xml:ParseFile("paw_ui_elements.xml") + + local cap = {} + cap.id = id + cap.box = xml:InitStatic(xmlroot,anchor) + local tokens = 0 + + if string.find(mapspot_text,"$") then + local levelname = ts(level.name()) + local se_obj = alife_object(id) + local pos = se_obj and se_obj.position + local coord_x,coord_y,coord_z,coords + if pos then + coord_x = string.format("%.2f",pos.x) + coord_y = string.format("%.2f",pos.y) + coord_z = string.format("%.2f",pos.z) + --coords = string.format("XYZ %s, %s, %s",coord_x,coord_y,coord_z) + end + local token_subs = { + ["obj_id"] = id, + ["name"] = safename(id), + --["level"] = levelname,-- currently wrong + --["coords"] = coords, -- XYZ coordinates formatted as above + ["coord_x"] = coord_x, -- X coordinate to 2 decimal places + ["coord_y"] = coord_y, -- Y coordinate to 2 decimal places + ["coord_z"] = coord_z, -- Z coordinate to 2 decimal places + } + mapspot_text = psk(mapspot_text,token_subs) + _,tokens = mapspot_text:gsub("%$","%$") + plaintext = psk(mapspot_text,null_tokens) + mapspot_text = psk(mapspot_text,text_colors) + end + + local token_adj = tokens * 17 + _, nlcnt = mapspot_text:gsub("\\n", "\\n") + local w = clamp(#mapspot_text * 6,15,200) + local h = ((floor(clamp((#mapspot_text - token_adj) / 35,1,3)) + nlcnt) * 15) + 4 + cap.box:SetWndPos(vector2():set(15,-h)) + + cap.drop = xml:InitStatic(xmlroot..":min_full",cap.box) + cap.drop:SetWndSize(vector2():set(w,h)) + + cap.text_sh = xml:InitStatic(xmlroot..":content:text_sh",cap.drop) + cap.text_sh:SetWndSize(vector2():set(w,h)) + cap.text_sh:TextControl():SetText(plaintext) + cap.text_sh:TextControl():SetTextColor(GetARGB(220,0,0,0)) + + cap.text = xml:InitStatic(xmlroot..":content:text",cap.drop) + cap.text:SetWndSize(vector2():set(w,h)) + cap.text:TextControl():SetText(mapspot_text) + cap.text:TextControl():SetTextColor(GetARGB(220,220,220,220)) + + cap.BL = xml:InitStatic(frm.."BL_extend",cap.drop) + cap.BP = xml:InitStatic(frm.."BP",cap.drop) + cap.BL:SetWndPos(vector2():set(0,h - 7)) + cap.BP:SetWndPos(vector2():set(0,h - 7)) + cap.BM = xml:InitStatic(frm.."BM_extend",cap.BP) + local bmh = cap.BM:GetHeight() + cap.BM:SetWndSize(vector2():set(w,bmh)) + cap.Show = ( + function(tf) + pins[cap.id].show_label = tf + cap.box:Show(tf) + end + ) + return cap +end + + +function show_pin_label(id,onoff,destroy) + vl("show_pin_label(%s,%s,%s)",id,onoff,destroy) + if not (id and pins[id]) then return end + onoff = onoff and true or false + + if not map_labels[id] then + --printf("pin label container doesn't exist yet") + local icon = pins[id].icon + local text = pins[id].text or pins[id].name + if not (icon and text) then return end + map_labels[id] = init_mapspot_label_wnd(text,id,icon) + end + map_labels[id].box:Show(onoff) + pins[id].show_label = onoff + if not destroy then return end + dl("Destroying map label for id %s",id) + map_labels[id] = nil + return onoff +end + + +function do_paw_action(act,se_obj,acode,args) args = args or {} local syscall = args.syscall and true or false - if (not syscall) and valid_pda() and not (paw_enabled and act) then return end + if (not syscall) and not (paw_enabled and act) then return end acode = acode or act local id,name if se_obj then @@ -1156,21 +1385,23 @@ function do_waypoint(act,se_obj,acode,args) elseif args and args.id then id = args.id se_obj = alife_object(id) or se_obj + name = safename(id) end + local ac = action_codes[acode] - dl("Received waypoint call \"%s\" on target %s (id %s)",act,name,id) + dl("Received paw action call \"%s\" on target %s (id %s)",act,name,id) if act == "wp_set" then if not se_obj then - dl("do_waypoint called with action %s but no valid se_obj!",act) + dl("do_paw_action called with action %s but no valid se_obj!",act) return end set_current_waypoint(se_obj) tm:give_task("task_placeable_waypoint") waypoint_active = true elseif act == "wp_mov" then if not se_obj then - dl("do_waypoint called with action %s but no valid se_obj!",act) + dl("do_paw_action called with action %s but no valid se_obj!",act) return end if tm.task_info[task_id] then local id = se_obj.id @@ -1189,55 +1420,34 @@ function do_waypoint(act,se_obj,acode,args) elseif act == "wp_del" then end_waypoint_task() last_waypoint = nil - elseif act == "waypoint_rename" then - dl("Received call to rename waypoint") - local func = ren_wp_functor - local title = ts("ui_mcm_pawsys_pawmenu_waypoint_rename") - local itex = "ui_inGame2_PDA_icon_Secondary_mission" - args.field = "name" - cartography_mode(false) - get_text(title,itex,name,func,args) - elseif act == "waypoint_redesc" then - dl("Received call to redesc waypoint") - local func = ren_wp_functor - local title = ts("ui_mcm_pawsys_pawmenu_waypoint_redesc") - local itex = "ui_inGame2_PDA_icon_Secondary_mission" - args.field = "desc" - cartography_mode(false) - get_text(title,itex,name,func,args) elseif act == "pn_add" then dl("Received call to add new pin to map for %s (%s)",name,id) - local func = add_mapspot_functor local icon = icons[ac.icon] or map_pin_icon - local itex = texture_for_icon(icon) - local title = ts("ui_mcm_pawsys_pawmenu_pn_add") - init_new_pin(id,name,ts("st_paw_pin_default_name"),icon) - cartography_mode(false) - --vl("pin data before input call: %s (%s) % | %",pins[id].name,pins[id].id,pins[id].icon,pins[id].text) - get_text(title,itex,nil,func,pins[id]) - elseif act == "pn_ren" then - if not (id and pins[id]) then return end - dl("Received call to rename map pin %s (%s)",name,id) - if not pins[id].locked then - remove_mapspot(id,icon) - local func = ren_mapspot_functor - local icon = pins[id] and pins[id].icon - local itex = texture_for_icon(icon) - local name = pins[id] and pins[id].name - local title = ts("ui_mcm_pawsys_pawmenu_pn_ren") - cartography_mode(false) - get_text(title,itex,name,func,pins[id]) + local text = ts("st_paw_pin_default_name") + if not script_zones[id] then + text = name end + init_new_pin(id,name,text,icon) + add_mapspot(text,id,icon) + open_pin_settings(id) + elseif act == "pn_settings" then + if not (id and pins[id]) then return end + dl("Received call to open settings for pin %s (%s)",name,id) + open_pin_settings(id) + elseif act == "wp_settings" then + dl("Received call to open waypoint settings") + open_waypoint_settings() elseif act == "pn_del" then if not (id and pins[id]) then return end if syscall or not pins[id].locked then local icon = pins[id] and pins[id].icon + show_pin_label(id,false,true) if hud_pin_objs[id] then vl("Removing pin %s from HUD",id) get_hud():RemoveDialogToRender(hud_pin_objs[id]) hud_pin_objs[id] = nil end - vl("Pin %s (%s) deleted",pins[id].text,id) + vl("Pin %s (%s) deleted",pins[id].name,id) pins[id] = nil if icon then remove_mapspot(id,icon) end end @@ -1247,6 +1457,18 @@ function do_waypoint(act,se_obj,acode,args) elseif act == "unlock_pin" then if not (id and pins[id]) then return end pins[id].locked = false + elseif act == "convert_to_pin" then + local mapspot = get_mapspot(id) + if can_convert_to_pin(id) then + if not texture_data[mapspot] then + get_mapspot_data(mapspot) + end + remove_stash_mapspots(id) + local hint = safename(id) + init_new_pin(id,name,hint,mapspot) + add_mapspot(hint,id,mapspot) + open_pin_settings(id) + end elseif act == "pn_clr" then local wipe_all = args and args.wipe_all if not is_empty(hud_pin_objs) then @@ -1283,11 +1505,17 @@ function do_waypoint(act,se_obj,acode,args) show_all_pins(true) elseif act == "hide_pins" then show_all_pins(false) + elseif act == "show_label" then + if not (id and pins[id]) then return end + show_pin_label(id,true) + elseif act == "hide_label" then + if not (id and pins[id]) then return end + show_pin_label(id,false) elseif act == "cm_dbg" then - local clsid = se_obj and se_obj:clsid() or "empty" - property_ui:AddItem("[PAW Debug] Mapspot for %s (id %s) has clsid %s)",name,id,clsid) + local cls = se_obj and se_obj:clsid() or "empty" + property_ui:AddItem("[PAW Debug] Mapspot for %s (id %s) has clsid %s)",name,id,cls) else - dl("invalid action %s passed to do_waypoint",act) + dl("invalid action %s passed to do_paw_action",act) end return true end @@ -1392,15 +1620,15 @@ function wp_target_obj() if placed_waypoint then if id == placed_waypoint.id then vl("Waypoint is currently active on %s (%s), disabling",se_obj:name(),id) - --do_waypoint("wp_del",se_obj) + --do_paw_action("wp_del",se_obj) toggle_waypoint() else vl("Waypoint is currently active, moving to %s (%s)",se_obj:name(),id) - do_waypoint("wp_mov",se_obj) + do_paw_action("wp_mov",se_obj) end else vl("No current waypoint, setting to target object %s (%s)",se_obj:name(),id) - do_waypoint("wp_set",se_obj) + do_paw_action("wp_set",se_obj) end end end @@ -1463,7 +1691,7 @@ function pin_target_obj(mapspot,notip,silent,smart) local text = string.format(ts("st_paw_pin_removed_from_target"),name,hint) text = psk(text,text_colors) - do_waypoint("pn_del",se_obj) + do_paw_action("pn_del",se_obj) dotip(text,5,nil,false) end else @@ -1474,7 +1702,7 @@ function pin_target_obj(mapspot,notip,silent,smart) show_hud_pin(id) end if not silent then - play_sound_for_actor(snd_tag_target) + play_ui_sound(snd_tag_target) end if not notip then local icon = ts("ui_mcm_lst_"..(mapspot or pawdata.curr_ico_name)) @@ -1519,15 +1747,16 @@ function drop_quick_pin(id,force_text,force_pin,no_tip,no_fast_travel) local mapspot_text = force_text or ts("st_paw_pin_quick_name") local tip_text = ts("st_paw_pin_dropped") init_new_pin(id,name,mapspot_text,icon) - pins[id].quick = not no_fast_travel + pins[id].quick = not no_fast_travel dl("calling add_mapspot with %s | %s | %s",mapspot_text,id,icon) + play_ui_sound(snd_place_pin) add_mapspot(mapspot_text,id,icon) if not no_tip then dotip(tip_text,10000) end end function toggle_waypoint(force) - dl("toggle_waypoint called") + dl("toggle_waypoint action called") if (force ~= nil) then waypoint_active = not force end @@ -1536,7 +1765,7 @@ function toggle_waypoint(force) placed_waypoint = last_waypoint local se_obj = alife_object(placed_waypoint.id) if not se_obj then return end - do_waypoint("wp_set",se_obj) + do_paw_action("wp_set",se_obj) else dotip("st_paw_no_last_wp") end @@ -1568,10 +1797,11 @@ function get_context_menu_options(property_ui,id,maptbl) local se_obj = id and (id > 0) and alife_object(id) if not se_obj then return end - local name = se_obj:name() or "undefined" - local clsid = se_obj:clsid() or "unknown" - local id = se_obj.id - local pin = id and pins[id] + local name = se_obj:name() or "undefined" + local clsid = se_obj:clsid() or "unknown" + local id = se_obj.id + local pin = id and pins[id] + local pinset = false vl("get_context_menu_options: %s (%s) | cls %s",name,id,clsid) add_context_option(property_ui,"mping",maptbl) @@ -1579,21 +1809,31 @@ function get_context_menu_options(property_ui,id,maptbl) if pins[id] then vl("Pin exists") + add_context_option(property_ui,"pn_settings",maptbl) + pinset = true if pin.locked then add_context_option(property_ui,"unlock_pin",maptbl) else add_context_option(property_ui,"pn_del",maptbl) - add_context_option(property_ui,"pn_ren",maptbl) if pins[id].hud then add_context_option(property_ui,"hud_vis_off",maptbl) else add_context_option(property_ui,"hud_vis_on",maptbl) end + if pins[id].show_label then + add_context_option(property_ui,"hide_label",maptbl) + else + add_context_option(property_ui,"show_label",maptbl) + end add_context_option(property_ui,"lock_pin",maptbl) end else vl("No pin") - add_context_option(property_ui,"pn_add",maptbl) + if can_convert_to_pin(id) then + add_context_option(property_ui,"convert_to_pin",maptbl) + else + add_context_option(property_ui,"pn_add",maptbl) + end end local name = se_obj:name() @@ -1603,14 +1843,18 @@ function get_context_menu_options(property_ui,id,maptbl) else local wid = placed_waypoint.id or 0 local sid = se_obj.id or 0 - if wid ~= sid then - vl("Waypoint exists") - add_context_option(property_ui,"wp_mov",maptbl) + + if not pinset then + -- If already showing the pin settings option, don't also clutter the menu with waypoint settings + add_context_option(property_ui,"wp_settings",maptbl) + end + if wid ~= sid then + vl("Waypoint exists elsewhere") + add_context_option(property_ui,"wp_mov",maptbl) + else + vl("Waypoint exists here") end - vl("Waypoint exists here") add_context_option(property_ui,"wp_del",maptbl) - add_context_option(property_ui,"waypoint_rename",maptbl) - add_context_option(property_ui,"waypoint_redesc",maptbl) end end @@ -1642,7 +1886,7 @@ function execute_context_menu_option(property_ui,id,level_name,prop) vl("passed id : %s",id) id = last_clicked_id last_clicked_id = nil - vl("execute_context_menu_option called for id %s\n| prop: %s\n| action %s)",id,prop,action[prop]) + vl("execute_context_menu_option called for id %s\n| prop: %s\n| action %s",id,prop,action[prop]) if not (paw_enabled and id and valid_pda()) then return end if not (id and (id > 0)) then return end local se_obj = alife_object(id) @@ -1650,7 +1894,7 @@ function execute_context_menu_option(property_ui,id,level_name,prop) local ac = action[prop] if ac then local act = action_codes[ac].act - do_waypoint(act,se_obj,ac) + do_paw_action(act,se_obj,ac) end end @@ -1669,11 +1913,11 @@ function faction_body_icon(comm) end function local_set_name(setname) - local name = ts(setname or icon_sets[pawdata.curr_set_name].name) + return ts(setname or icon_sets[pawdata.curr_set_name].name) end function local_icon_name(iconame) - local name = ts(iconame or "ui_mcm_lst_"..pawdata.curr_ico_name) + return ts(iconame or "ui_mcm_lst_"..pawdata.curr_ico_name) end function icon_for_pin(pin_name) @@ -1689,7 +1933,7 @@ end function texture_for_icon(icon) --printf("texture_for_icon(%s) called",icon) local tex = texture_data and texture_data[icon] and texture_data[icon].t - vl("texture_for_icon(%s) returned %s",icon,tex) + --vl("texture_for_icon(%s) returned %s",icon,tex) return tex end @@ -1699,9 +1943,9 @@ function texture_for_set(setname) if not (setdata and setdata.active_icon) then dl("WARNING: No active icon found for %s",setname) return end - vl("active_icon for %s: %s",setname,setdata.active_icon) + --vl("active_icon for %s: %s",setname,setdata.active_icon) local td = texture_data[setdata.active_icon] - vl("texture exists for %s: %s",setdata.active_icon,td ~= nil) + --vl("texture exists for %s: %s",setdata.active_icon,td ~= nil) local tex = td.t vl("texture_for_set(%s) returned %s",setname,tex) return tex @@ -1711,6 +1955,57 @@ function get_current_texture(set_changed) return set_changed and texture_for_set(pawdata.curr_set_name) or texture_for_icon(pawdata.curr_ico_name) end +function get_mapspot_data(spot) + local attr_tex = "texture" + local attr_minimap = "mini_map" + local attr_levelmap = "level_map" + + xml:ParseFile("map_spots.xml") + xml:NavigateToRoot() + th = xml:ReadAttribute(spot,0,"height") + tw = xml:ReadAttribute(spot,0,"width") + xml:NavigateToNode(spot,0) + vl("trying to find texture data for %s",spot) + if xml:NodeExist(attr_tex,0) then + tex = xml:ReadValue(attr_tex,0) + vl("texture node found with value %s",tex) + else + local spotnode = "" + local typ = "" + if xml:NodeExist(attr_minimap) then + spotnode = xml:ReadAttribute(attr_minimap,0,"spot") + typ = attr_minimap + end + if xml:NodeExist(attr_levelmap) then + spotnode = xml:ReadAttribute(attr_levelmap,0,"spot") + typ = attr_levelmap + end + if spotnode ~= "" then + xml:NavigateToRoot() + th = xml:ReadAttribute(spotnode,0,"height") + tw = xml:ReadAttribute(spotnode,0,"width") + vl("ReadAttribute for %s: h %s w %s",spot,th,tw) + xml:NavigateToNode(spotnode,0) + tex = xml:ReadValue(attr_tex,0) + vl("%s node found: %s",typ,spotnode) + end + end + texture_data[spot] = { + id = k, + t = tex, + h = th, + w = tw, + } + local ind = #icon_index + 1 + icon_index[ind] = { + id = k, + icon = spot, + data = texture_data[spot], + } + vl("Texture for %s: %s (%sx%s)",spot,tex,tw,th) + return texture_data[spot],ind +end + function set_or_icon(str) return str and ((str ~= "set") and (str ~= "icon")) end @@ -1846,7 +2141,7 @@ function cycle_icons(cycle_dir,dotip) local setdata = pawdata.curr_set_data local next_ind = roll(pawdata.curr_ico_ind + cycle_dir,1,setdata.inum) get_active_icon(next_ind) - if use_ui_snd then play_sound_for_actor(snd_cycle_blip) end + play_ui_sound(snd_cycle_blip) if dotip then notify_icon_change() end end @@ -1854,7 +2149,7 @@ function cycle_sets(cycle_dir,dotip) if cycle_dir and type(cycle_dir) ~= "number" then return end local next_ind = roll(pawdata.curr_set_ind + cycle_dir,1,#set_index) active_set(next_ind) - if use_ui_snd then play_sound_for_actor(snd_cycle_blip) end + play_ui_sound(snd_cycle_blip) if dotip then notify_icon_change(true) end end @@ -1913,9 +2208,10 @@ function show_all_pins(onoff) vl("Showing all recorded pins") for id,pin in pairs(pins) do local icon = pin.icon - local mapspot_text = pin.text + local mapspot_text = get_tooltip_for_pin(id) vl("calling add_mapspot with %s | %s | %s",mapspot_text,id,icon) add_mapspot(mapspot_text,id,icon) + end else vl("Hiding stored pins from map") @@ -1977,6 +2273,9 @@ function mcm_reload_general_settings() pin_near_fade_dist = tonumber(load_mcm("pawgen/pin_near_fade_dist",pin_near_fade_dist)) pin_far_fade_dist = tonumber(load_mcm("pawgen/pin_far_fade_dist",pin_far_fade_dist)) pin_far_hide_dist = tonumber(load_mcm("pawgen/pin_far_hide_dist",pin_far_hide_dist)) + wp_near_fade_dist = tonumber(load_mcm("pawgen/wp_near_fade_dist",wp_near_fade_dist)) + wp_far_fade_dist = tonumber(load_mcm("pawgen/wp_far_fade_dist",wp_far_fade_dist)) + wp_far_hide_dist = tonumber(load_mcm("pawgen/wp_far_hide_dist",wp_far_hide_dist)) wp_clear_dist = tonumber(load_mcm("pawgen/wp_clear_dist",wp_clear_dist)) tip_on_icoset_change = load_mcm("pawgen/tip_on_icoset_change",tip_on_icoset_change) welcome_msg_shown = load_mcm("pawgen/welcome_msg_shown",welcome_msg_shown) @@ -2010,23 +2309,32 @@ function mcm_reload_keybind_settings() cart_shows_smarts = load_mcm("pawbinds/cart_shows_smarts",cart_shows_smarts) mwheel_notify = load_mcm("pawbinds/mwheel_notify") cartmode_unfade = load_mcm("pawbinds/cartmode_unfade",cartmode_unfade) - local tmp = ui_mcm.get("pawsys/pawbinds/mwheel_enabled") + local tmp + + tmp = ui_mcm.get("pawsys/pawbinds/mwheel_override") + if tmp ~= nil then + dl("MCM override found for mwheel_avail (old = %s | new = %s)",mwheel_avail,tmp) + mwheel_override = tmp + if mwheel_override then + mwheel_avail = true + end + end + + tmp = ui_mcm.get("pawsys/pawbinds/mwheel_enabled") if tmp and type(tmp) == "number" then tmp = (tmp ~= 0) end mwheel_enabled = tmp and mwheel_avail - - tmp = ui_mcm.get("pawsys/pawbinds/mwheel_override") - if tmp ~= nil then - dl("MCM override found for mwheel_avail (old = %s | new = %s)",mwheel_avail,tmp) - mwheel_avail = tmp - end tmp = ui_mcm.get("pawsys/pawbinds/right_click_override") -- if set to true, will force on_map_right_click support on if tmp ~= nil then dl("MCM override found for right_click_avail (old = %s | new = %s)",right_click_avail,tmp) - right_click_override= tmp + right_click_override = tmp + if right_click_override then + right_click_avail = true + RegisterScriptCallback("on_map_right_click",on_map_right_click) + end end tmp = ui_mcm.get("pawsys/pawgen/disable_mcmups") @@ -2064,7 +2372,17 @@ function mcm_reload_pin_settings() current_active_set = pig dl("MCM: icon %s | icon set: %s",icon,pig) - +--[[ + use_custom_backpack_icon = load_mcm("pawpins/use_custom_backpack_icon",use_custom_backpack_icon) + if use_custom_backpack_icon then + local psicon = stash_icons["player"] + local newicon = ui_mcm.get("pawsys/pawpins/custom_backpack_icon") + if newicon ~= nil then + stash_icons["player"] = icons[newicon] + end + dl("MCM: Overriding player stash icon with custom value: %s",stash_icons["player"]) + end +--]] local cp = ui_mcm.get("pawsys/pawpins/use_custom_pin_icon") or false if cp then custom_pin_icon = true @@ -2125,6 +2443,7 @@ function mcm_reload_reticle_settings() pin_hud_icon_default = load_mcm("pawret/pin_auto_visible",pin_hud_icon_default) manual_smart_pins = load_mcm("pawret/manual_smart_pins",manual_smart_pins) reticle_mode = load_mcm("pawret/reticle_mode",reticle_mode) + autotag_mode = load_mcm("pawret/reticle_mode",autotag_mode) reticle_mustzoom = load_mcm("pawret/reticle_mustzoom",reticle_mustzoom) reticle_color.a = load_mcm("pawret/reticle_alpha",reticle_color.a) ret_fade_attack_time = load_mcm("pawret/ret_fade_attack_time",ret_fade_attack_time) @@ -2149,7 +2468,7 @@ end function on_option_change() - if load_failed then return end + -- Sync all MCM values and propagate changes language = ui_options.curr_localization() if ui_mcm and not mcm_killswitch then @@ -2160,14 +2479,15 @@ function on_option_change() if load_mcm("pawgen/wipe_all") then ui_mcm.set("pawsys/pawgen/wipe_all",false) dl("MCM: Wiping all pin data per player request") - local args = {wipe_all=true} - do_waypoint("pn_clr",nil,nil,args) + local args = {wipe_all=true,syscall=true} + do_paw_action("pn_clr",nil,nil,args) end mcm_reload_general_settings() if not paw_enabled then - return - end + printf(logprefix.."Personal Adjustable Waypoint has been disabled, aborting all further action!") + return end + mcm_reload_keybind_table() mcm_reload_keybind_settings() mcm_reload_pin_settings() @@ -2239,7 +2559,7 @@ end function tick() if not paw_enabled then - unregister_all_callbacks() + UnregisterScriptCallback("actor_on_update",actor_on_update) return end local now = time_global() @@ -2249,7 +2569,9 @@ function tick() end if (next_gc_check <= now) then next_gc_check = now + garbcollect_interval - script_zone_cleanup() + if script_zone_changed then + script_zone_cleanup() + end temp_pin_cleanup() end if disable_mcm_updates then return end @@ -2284,7 +2606,10 @@ end -- ====================================================================== -- UI ELEMENTS -- ====================================================================== - +function setwndpos(wnd,x,y) + if not (wnd and x and y) then return end + wnd:SetWndPos(vector2():set(x,y)) +end -- ====================================================================== --[[ TEXT INPUT WINDOW Originally adapted from parts of the vanilla backpack stash script @@ -2293,138 +2618,250 @@ end own mod (ui_get_input.script) -- ====================================================================]] -InputGUI = nil +GUI_WP = nil -function get_text(title_txt,icon_tex,prepop,func,args) - dl("get_text called:\nTitle: %s\nIcon: %s\nExisting text: %s",title_txt,icon_tex,prepop) +function open_waypoint_settings() + dl("open_waypoint_settings called") tex = texdef or tex_defs args = args or {} - if not InputGUI then - InputGUI = UITextInputWnd(title_txt,icon_tex,prepop,func,args) - end + if not GUI_WP then GUI_WP = UIWPSettings() end - if InputGUI and not InputGUI:IsShown() then - InputGUI:Reset(title_txt,icon_tex,prepop,func,args) - InputGUI:ShowDialog(true) - Register_UI("UITextInputWnd","get_text") + if GUI_WP and not GUI_WP:IsShown() then + GUI_WP:ShowDialog(true) + Register_UI("UIWPSettings","open_waypoint_settings") + end +end + +local function destroy_wp_window() + if GUI_WP then + GUI_WP:HideDialog() + GUI_WP = nil end end -- ====================================================================== -class "UITextInputWnd" (CUIScriptWnd) +class "UIWPSettings" (CUIScriptWnd) -function UITextInputWnd:__init(title_txt,icon_tex,prepop,func,args) super() - vl("UITextInputWnd:__init:\nTitle: %s\nIcon: %s\nExisting text: %s",title_txt,icon_tex,prepop) - self.title_txt = title_txt - self.icon_tex = icon_tex +function UIWPSettings:__init() super() + vl("UIWPSettings:__init:\nTitle: %s\nIcon: %s\nExisting text: %s",title_txt,icon_tex,prepop) + self.init_time = tostring(get_time_elapsed()) + self.init_wp = placed_waypoint + self.init_state = waypoint_active + self.def_wpname = custom_name or ts("st_paw_placed_waypoint")..(": "..placed_waypoint.name or "") + self.def_wpdesc = custom_desc or ts("st_paw_proceed") + self.pin_text = title_txt + self.icon_tex = "ui_inGame2_PDA_icon_Secondary_mission" self.prepop = prepop self.func = func self.args = args + self.cap = {} + self:InitControls() self:InitCallBacks() + + self.control_hints = { + ["btn_wpreset"] = true, + } + self.hint_wnd = utils_ui.UIHint(self) end -function UITextInputWnd:__finalize() +function UIWPSettings:__finalize() end -function UITextInputWnd:InitControls() +function UIWPSettings:InitControls() self:SetWndRect(Frect():set(0,0,1024,768)) self:SetAutoDelete(true) - local tex = { - file = "paw_input_window.xml", - tbar = "titlebar", - paw = "paw", - icon = "icon", - text = "text", - root = "dialog", - bg = "background", - input = "input", - ok = "btn_ok", - cancel = "btn_cancel", - } - local xml = CScriptXmlInit() - local tbar = tex.root..":"..tex.tbar - local paw = tbar..":"..tex.paw - local icon = tbar..":"..tex.icon - local text = tbar..":"..tex.text - local bg = tex.root..":"..tex.bg - local cancel = tex.root..":"..tex.cancel - local input = tex.root..":"..tex.input - local ok = tex.root..":"..tex.ok + local file = "paw_input_window.xml" + local root = "wp_dialog" + local rootand = root..":" + local tbar = rootand.."titlebar" + local paw = tbar..":paw" + local text = tbar..":text" + local icon = tbar..":icon" + local reset = rootand.."btn_wpreset" + local cancel = rootand.."btn_cancel" + local input_n = rootand.."input_name" + local input_d = rootand.."input_desc" + local btn_ok = rootand.."btn_ok" + local caption = rootand.."caption" - xml:ParseFile (tex.file) + xml:ParseFile (file) + + self.dialog = xml:InitStatic(root, self) + local bg_top = xml:InitStatic(rootand.."bg_top",self.dialog) + local bg_btm = xml:InitStatic(rootand.."bg_btm",self.dialog) + self.bg_wpdesc = xml:InitStatic(rootand.."bg_desc",self.dialog) + + self.wpname = xml:InitEditBox(input_n,self.dialog) + self:Register(self.wpname,"fld_input_name") + self.wpname:SetText(self.def_wpname) + self.wpname:SetWndSize(vector2():set(220,30)) + + --self.descbg = xml:InitStatic(input_d,self.dialog) + --self.descbg:InitTexture("ui_paw_dialog_large_text_field") + self.wpdesc = xml:InitEditBox(input_d, self.bg_wpdesc) + self:Register(self.wpdesc,"fld_input_desc") + self.wpdesc:SetText(self.def_wpdesc) + --self.descbg:SetWndSize(vector2():set(171,188)) + self.wpdesc:SetWndSize(vector2():set(220,30)) - self.dialog = xml:InitStatic(tex.root, self) - xml:InitStatic(bg, self.dialog) self.tbar = xml:InitStatic(tbar,self.dialog) - self.paw = xml:InitTextWnd(paw,self.tbar) - self.paw:SetText("PAW".." "..script_version) - self.paw:SetFont(GetFontSmall()) + local paw = xml:InitTextWnd(paw,self.tbar) + paw:SetText("PAW".." "..script_version) + paw:SetFont(GetFontSmall()) + + self.icon = xml:InitStatic(icon, self.tbar) if self.icon_tex then self.icon:InitTexture(self.icon_tex) else dl("Empty icon texture passed to input window") end - self.text = xml:InitTextWnd(text, self.tbar) - self.text:SetText(self.title_txt) - self.text:SetFont(GetFontGraffiti22Russian()) + - self.input = xml:InitEditBox(input,self.dialog) - self:Register(self.input,"fld_input") - self.input:SetText(self.prepop) + self.titletxt = xml:InitTextWnd(text, self.tbar) + self.titletxt:SetText(ts("ui_mcm_pawsys_pawmenu_wp_settings")) + self.titletxt:SetFont(GetFontDI()) + + self.targetname = xml:InitStatic(rootand.."target",self.dialog) + + self.tartxt = ts("st_paw_target")..": " + self.tarclr = "$clr_wht" + if placed_waypoint and placed_waypoint.id then + self.tarclr = "$clr_yel" + local tartxt = self.tartxt..self.tarclr..safename(placed_waypoint.id) + self.tartxt = psk(tartxt,text_colors) + self.targetname:TextControl():SetText(self.tartxt) + else + self.targetname:TextControl():SetText(ts("st_paw_none")) + end + + local function setup_checkbox(setting,pos_x,pos_y,captext,default) + local checkopt = "check_"..setting + vl("Initializing checkbox %s (%s) at %s,%s | %s",checkopt,setting,pos_x,pos_y,captext) + self[checkopt] = xml:InitCheck(rootand.."check",self.dialog) + self:Register(self[checkopt], checkopt..self.init_time) + self[checkopt]:SetWndPos(vector2():set(pos_x,pos_y)) + self[checkopt]:SetCheck(default) + + if captext then + self.cap[checkopt] = xml:InitTextWnd(caption,self[checkopt]) + self.cap[checkopt]:SetWndPos(vector2():set(30,8)) + self.cap[checkopt]:SetText(captext) + self.cap[checkopt]:SetVTextAlignment(1) + end + end + + function setup_button(button,pos_x,pos_y,xmlnode) + local buttonx = "btn_"..button + vl("Initializing button %s (%s) at %s,%s",buttonx,button,pos_x,pos_y) + self[buttonx] = xml:Init3tButton(xmlnode,self.dialog) + self:Register(self[buttonx],buttonx) + self[buttonx]:SetWndPos(vector2():set(pos_x,pos_y)) + end + + setup_checkbox( "wpactive", 15, 152, ts("st_paw_wp_active"), waypoint_active ) + setup_checkbox( "wphud", 15, 178, ts("ui_mcm_pawsys_pawgen_wp_hud_icon_enabled"), wp_hud_icon_enabled ) + self.check_wpactive:SetCheck(self.init_state) + self.check_wphud:SetCheck(wp_hud_icon_enabled) + + setwndpos( paw, 215, 26 ) + setwndpos( self.titletxt, 7, 7 ) + + setwndpos( self.icon, 17, 121 ) + setwndpos( self.targetname, 50, 130 ) + + setwndpos( self.wpname, 25, 38 ) + --setwndpos( self.descbg, 25, 90 ) + setwndpos( self.wpdesc, 25, 4 ) + setup_button( "wpreset", 20, 210, reset ) + setup_button( "ok", 112, 210, btn_ok ) + setup_button( "cancel", 183, 210, cancel ) - local btn = xml:Init3tButton(cancel, self.dialog) - self:Register(btn,tex.cancel) - btn = xml:Init3tButton(ok, self.dialog) - self:Register(btn,tex.ok) end -function UITextInputWnd:InitCallBacks() +function UIWPSettings:InitCallBacks() + self:AddCallback("btn_wpreset", ui_events.BUTTON_CLICKED, self.Reset, self) self:AddCallback("btn_ok", ui_events.BUTTON_CLICKED, self.OnAccept, self) self:AddCallback("btn_cancel", ui_events.BUTTON_CLICKED, self.Close, self) end -function UITextInputWnd:Reset(title_txt,icon_tex,prepop,func,args) - self.icon_tex = icon_tex - self.title_txt = title_txt - self.prepop = prepop - self.func = func - self.args = args - if self.title_txt then - self.text:SetText(self.title_txt) +function UIWPSettings:ShowHint(hint) + if hint then + hint = psk(hint,text_colors) + --vl("* [%s] Showing hint_wnd text: %s",time_global(),hint) end - if self.icon_tex then - self.icon:InitTexture(self.icon_tex) - end - self.input:SetText("") + self.hint_wnd:Update(hint) end -function UITextInputWnd:Update() +function UIWPSettings:Reset() + dl("Restoring default waypoint settings") + --self.icon_tex = "ui_inGame2_PDA_icon_Secondary_mission" + --self.icon:InitTexture(self.icon_tex) + custom_name = nil + custom_desc = nil + self.wpname:SetText(self.def_wpname) + self.wpdesc:SetText(self.def_wpdesc) + + wp_hud_icon_enabled = true + self.check_wphud:SetCheck(true) +end + + +function UIWPSettings:Update() CUIScriptWnd.Update(self) + self.hint = nil + for ctrl,enable in pairs(self.control_hints) do + if enable and self[ctrl] and self[ctrl]:IsCursorOverWindow() then + local st_hint = hint_path..ctrl.."_desc" + local hint = ts(st_hint) + self.hint = hint + --vl("Showing hint for %s: %s\n\"%s\"",ctrl,st_hint,hint) + end + end + self:ShowHint(self.hint) end -function UITextInputWnd:OnAccept() - local text_input = self.input:GetText() - if text_input == "" then text_input = nil end - dl("OnAccept: text_input is %s",text_input) - if self.func then - exec(self.func,text_input,self.args) +function UIWPSettings:OnAccept() + local new_wpname = self.wpname:GetText() + if new_wpname ~= self.def_wpname then + custom_name = new_wpname end + + local new_wpdesc = self.wpdesc:GetText() + if new_wpdesc ~= self.def_wpdesc then + custom_desc = new_wpdesc + end + + local new_wpstate = self.check_wpactive:GetCheck() + if self.init_state ~= new_wpstate then + toggle_waypoint() + end + + local new_hudstate = self.check_wphud:GetCheck() + if new_hudstate and not wp_hud_icon_enabled then + wp_hud_icon_enabled = true + show_hud_waypoint() + elseif wp_hud_icon_enabled and not new_hudstate then + wp_hud_icon_enabled = false + hide_hud_waypoint() + end + + dl("UIWPSettings:OnAccept | custom_name: %s | custom_desc: %s",custom_name,custom_desc) self:Close() end -function UITextInputWnd:OnKeyboard(dik, keyboard_action) +function UIWPSettings:OnKeyboard(dik, keyboard_action) local res = CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if (res == false) then local bind = dik_to_bind(dik) @@ -2438,9 +2875,735 @@ function UITextInputWnd:OnKeyboard(dik, keyboard_action) end -function UITextInputWnd:Close() +function UIWPSettings:Close() self:HideDialog() - Unregister_UI("UITextInputWnd") + Unregister_UI("UIWPSettings") + destroy_wp_window() +end + + +-- ====================================================================== +--[[ PIN SETTINGS WINDOW +-- ====================================================================]] + +GUI_PinOpts = nil + + +function pin_window_is_open() + return GUI_PinOpts and GUI_PinOpts:IsShown() +end + +function open_pin_settings(id,args) + if not GUI_PinOpts then + GUI_PinOpts = UIPinSettingsWnd(id,args) + end + + if GUI_PinOpts and not GUI_PinOpts:IsShown() then + GUI_PinOpts:Reset(id) + GUI_PinOpts:ShowDialog(true) + Register_UI("UIPinSettingsWnd","pin_settings") + end +end + +function destroy_pin_window() + GUI_PinOpts = nil +end + +-- ====================================================================== + +class "UIPinSettingsWnd" (CUIScriptWnd) + +function UIPinSettingsWnd:__init(id,args) super() + vl("UIPinSettingsWnd:__init(%s,args passed: %s",id,args ~= nil) + if not ((id and id > 0) and pins[id]) then return end + if debuglogs and verbose then + local pin = pins[id] + printf(logprefix.."Initializing settings window for pin %s:\nName: %s\nLocked: %s | Show on HUD %s | Show Label %s | Custom ARGB: %s", + id, pin.name, pin.lock, pin.hud, pin.show_label, pin.custom_colors + ) + if pins[id].custom_colors and pins[id].colors then + local colors = pins[id].colors + printf(logprefix.."A: %s | R: %s | G: %s | B: %s",colors.a,colors.r,colors.g,colors.b) + end + end + self.init_time = tostring(get_time_elapsed()) + self.next_update = time_global() + self.icon_refresh = true + --self:BackupTempSettings() + self:Reset(id,args) + self:InitControls() + self:HijackWidget() + self:RefreshIcon() + self.hint_wnd = utils_ui.UIHint(self) + self:AllowMovement(true) +end + +function UIPinSettingsWnd:__finalize() +end + + +function UIPinSettingsWnd:BackupTempSettings(restore) + if not self.backups then + self.backups = {} + end + if restore then + dl("UIPinSettingsWnd | restoring old settings:\nwidget_enabled = %s\nwidget_hide_delay = %s | active_theme = %s",widget_enable,widget_hide_delay,active_theme) + widget_enabled = self.backups.enable + active_theme = self.backups.active or active_theme + widget_hide_delay = self.backups.autohide or widget_hide_delay + widget_use_custom_pos = self.backups.use_cust_pos or widget_use_custom_pos + widget_custom_pos = self.backups.cust_pos or widget_custom_pos + + self.backups = {} + else + dl("UIPinSettingsWnd | storing current settings:\nwidget_enabled = %s\nwidget_hide_delay = %s | active_theme = %s",widget_enable,widget_hide_delay,active_theme) + self.backups = { + enabled = widget_enabled, + autohide = widget_hide_delay, + active = active_theme, + use_cust_pos= widget_use_custom_pos, + cust_pos = widget_custom_pos, + } + active_theme = "pin_sidebar" + widget_hide_delay = 0 + widget_use_custom_pos = true + end +end + +function UIPinSettingsWnd:HijackWidget() + reset_indicator(true,self.dialog) +end + +function UIPinSettingsWnd:InitControls() + self:SetWndRect(Frect():set(0,0,1024,768)) + self:SetAutoDelete(true) + self.empty = "ui_paw_emptytex" + self.cap = {} + local pin = self.pin or self.pin_id and pins[self.pin_id] + + self.control_hints = { + ["check_hud"] = true, + ["check_text"] = true, + ["check_lock"] = true, + ["check_argb"] = true, + ["input"] = true, + ["input_a"] = true, + ["input_r"] = true, + ["input_g"] = true, + ["input_b"] = true, + ["btn_sidebar"] = true, + ["btn_ok"] = true, + ["btn_cancel"] = true, + ["btn_delete"] = true, + ["btn_sound"] = true, + } + + local clrtxt ={ + a = ts("st_paw_argb_a"), + r = ts("st_paw_argb_r"), + g = ts("st_paw_argb_g"), + b = ts("st_paw_argb_b") + } + + local xml = CScriptXmlInit() + local xmlfile = "paw_input_window.xml" + local xmlroot = "pin_dialog" + local root = xmlroot..":" + local tbar = root.."titlebar" + local icon = root.."icon" + local paw = tbar..":paw" + local icopanel = icon.."_panel" + local icoframe = icon.."_frame" + local icowater = icon.."_watermark" + local caption = root.."caption" + local bg = root.."bg_settings" + local dialog = root.."pin_settings" + local chrome = root.."chrome" + local input = root.."input_name" + local input_a = root.."input_a" + local input_r = root.."input_r" + local input_g = root.."input_g" + local input_b = root.."input_b" + local btn_ok = root.."btn_ok" + local cancel = root.."btn_cancel" + local delete = root.."btn_delete" + local check = root.."check" + local listbox = root.."listbox" + local opt_icon = root.."opt_icon" + local opt_cap = opt_icon..":caption" + local sidebar = root.."sidebar" + local sb_btn = root.."btn_sidebar" + local btn_sound = root.."btn_sound" + local head_txt = self.title + local lock_txt = ts("ui_mcm_pawsys_pawmenu_lock_pin") + local label_txt = ts("ui_mcm_pawsys_pawmenu_show_label") + local hud_txt = ts("ui_mcm_pawsys_pawmenu_hud_vis_on") + local argb_txt = ts("ui_paw_use_custom_color") + local mstt_txt = ts("ui_paw_mapspot_tooltip_mode") + local set_curr = ts("ui_mcm_lst_pawsys_pg_"..pawdata.curr_set_name) + local ico_curr = ts("ui_mcm_lst_"..pawdata.curr_ico_name) + + xml:ParseFile (xmlfile) + + --================================================================-- + --Title bar + if not self.dialog then + self.dialog = xml:InitStatic(dialog, self) + self.dialog:SetWndSize(vector2():set(400,300)) + self.dialog:SetWndPos(vector2():set(392,200)) + + self.chrome = xml:InitStatic(chrome, self.dialog) + self.chrome:InitTexture("ui_paw_dialog_classic_chrome") + local titletab_sh = xml:InitStatic(caption, self.chrome) + local titletab = xml:InitStatic(caption, self.chrome) + titletab_sh:TextControl():SetText(head_txt) + titletab_sh:TextControl():SetFont(GetFontDI()) + titletab_sh:TextControl():SetTextColor( GetARGB(255,0,0,0) ) + titletab_sh:SetWndPos(vector2():set(18,9)) + titletab_sh:InitTexture("ui_paw_fade_cap_bg_full") + titletab:TextControl():SetText(head_txt) + titletab:TextControl():SetFont(GetFontDI()) + titletab:SetWndPos(vector2():set(19,9)) + + self.tbar = xml:InitStatic(tbar,self.dialog) + local paw = xml:InitTextWnd(paw,self.tbar) + paw:SetText("PAW".." "..script_version) + paw:SetFont(GetFontSmall()) + paw:SetWndPos(vector2():set(195,34)) + + psw_sidebar_state = false + show_indicator(false) + end + + --================================================================-- + -- Rename/relabel input box + vl("Setting up name input box") + self.input = xml:InitEditBox(input,self.dialog) + self:Register(self.input,"fld_input"..self.init_time) + self.input:SetWndSize(vector2():set(190,30)) + self.input:SetWndPos(vector2():set(8,7)) + vl("Setting name input field to %s",self.pin_text) + self.input:SetText(self.pin_text) + + --==== Icon and Set area initialization ==========================-- + -- Icon display + if not self.icon_display_panel then + self.icon_display_panel = xml:InitStatic(icopanel, self.dialog) + self.icon_panel = xml:InitStatic(icowater, self.icon_display_panel) + unsquish_aspect(self.icon_panel) + local icoframe = xml:InitStatic(icoframe, self.icon_display_panel) + unsquish_aspect(icoframe) + self.icon = xml:InitStatic(icon, self.icon_display_panel) + unsquish_aspect(self.icon) + local w = self.icon:GetWidth() + self.icon:SetWndPos(vector2():set(11.75,16)) + end + self:RefreshIcon(self.icon_tex) + self.argb_controls = xml:InitStatic(root.."argb_chrome",self.dialog) + --================================================================-- + + local function setup_argb_control(color,pos_x,pos_y) + local inputx = "input_"..color + vl("Initializing ARGB control %s for color %s at %s,%s",inputx,color,pos_x,pos_y) + local xsh = color.."_sh" + local xtx = color.."_tx" + local xmlnode = root..":"..inputx + self.argb_box = {} + self.argb_box[color] = xml:InitStatic(xmlnode,self.argb_controls) + self.argb_box[color]:SetWndSize(vector2():set(65,31)) + unsquish_aspect(self.argb_box[color]) + self.argb_box[color]:SetWndPos(vector2():set(pos_x,pos_y)) + self.argb_box[color]:InitTexture("ui_paw_dialog_argb_single") + + self[inputx] = xml:InitEditBox(xmlnode,self.argb_box[color]) + self:Register(self[inputx],"fld_input_"..color..self.init_time) + --printf("Original method - %s | color: %s | self.colors[%s]",inputx,color,color,self.colors[color]) + + self.cap[color] = xml:InitStatic(opt_icon,self.argb_box[color]) + self.cap[color]:InitTexture("ui_icons_paw_argb_"..color) + unsquish_aspect(self.cap[color]) + --self.cap[xsh] = xml:InitStatic(opt_cap.."_sh",self.cap[color]) + --self.cap[xsh]:TextControl():SetTextColor( GetARGB(255,0,0,0) ) + --self.cap[xtx] = xml:InitStatic(opt_cap,self.cap[color]) + self:SetARGBVal(color,self.colors[color]) + self[inputx]:SetWndPos(vector2():set(18.5,2.5)) + + local boxframe = xml:InitStatic(xmlnode,self.argb_box[color]) + boxframe:SetWndSize(vector2():set(65,31)) + unsquish_aspect(boxframe) + --boxframe:SetWndPos(vector2():set(pos_x,pos_y)) + boxframe:InitTexture("ui_paw_dialog_argb_single_nobg") + end + + local function setup_checkbox(setting,pos_x,pos_y,captext) + local checkopt = "check_"..setting + vl("Initializing checkbox %s (%s) at %s,%s | %s",checkopt,setting,pos_x,pos_y,captext) + self[checkopt] = xml:InitCheck(check,self.dialog) + self:Register(self[checkopt], checkopt..self.init_time) + self[checkopt]:SetWndPos(vector2():set(pos_x,pos_y)) + if captext then + self.cap[checkopt] = xml:InitTextWnd(caption,self[checkopt]) + self.cap[checkopt]:SetWndPos(vector2():set(30,8)) + self.cap[checkopt]:SetText(captext) + self.cap[checkopt]:SetVTextAlignment(1) + end + end + + + function setup_button(button,pos_x,pos_y,xmlnode) + local buttonx = "btn_"..button + vl("Initializing button %s (%s) at %s,%s",buttonx,button,pos_x,pos_y) + self[buttonx] = xml:Init3tButton(xmlnode,self.dialog) + self:Register(self[buttonx],buttonx) + self[buttonx]:SetWndPos(vector2():set(pos_x,pos_y)) + end + +--[[ + -- not ready yet + + function setup_listbox(setting,pos_x,pos_y,captext,opts) + local num_opts = #opts or 0 + if num_opts < 1 then + vl("Unable to initialize list %s, no opts passed",setting) + return + end + + local listopt = "lst_"..setting + vl("Initializing list %s at %s,%s with %s options",listopt,pos_x,pos_y,num_opts) + + self[listopt] = xml:InitComboBox(listbox,self.dialog) + self[listopt]:SetWndPos(vector2():set(pos_x,pos_y)) + if captext then + self.cap[listopt] = xml:InitTextWnd(caption,self[listopt]) + self.cap[listopt]:SetWndPos(vector2():set(0,-10)) + self.cap[listopt]:SetText(captext) + self.cap[listopt]:SetVTextAlignment(1) + end + + local def = pin.tooltip or pin_tooltip_mode + local opt,tsopt + for i=1,num_opts do + tsopt = opts[i][2] + tsopt = tsopt and "ui_mcm_lst_pawsys_"..tsopt + opt = ts(tsopt) + vl("+ Adding list option %s: %s (%s)\n+- %s",i,opts[i][2],opts[i][1],opt) + self[listopt]:AddItem(opt,i) + if opts[i][1] == def then + vl("* +- %s is default value",def) + self[listopt]:enable_id(def) + self[listopt]:SetText(opt) + end + self:Register(self[listopt],listopt) + end + end +--]] + --================================================================-- + -- Setup and place all elements + --========================= X ===== Y ============================-- + + setup_argb_control( "a", 25, 13 ) + setup_argb_control( "r", 75, 13 ) + setup_argb_control( "g", 125, 13 ) + setup_argb_control( "b", 180, 13 ) + +--[[ + -- not ready yet + setup_listbox("tooltip", 5, 70, mstt_txt, + { + {2, "msttmode_text"}, + {1, "msttmode_obj"}, + {0, "cmenu_off"}, + } + ) +--]] + + setup_checkbox( "hud", 5, 85, hud_txt ) + setup_checkbox( "text", 5, 110, label_txt ) + setup_checkbox( "lock", 5, 135, lock_txt ) + setup_checkbox( "argb", 5, 160, argb_txt ) + + self:RefreshChecks() + + setup_button( "sidebar", 230, -10, sb_btn ) + setup_button( "delete", 5.5, 245.5, delete ) + setup_button( "ok", 95, 245.5, btn_ok ) + setup_button( "cancel", 154, 245.5, cancel ) + setup_button( "sound", 235.5, 267.5, btn_sound) + + --================================================================-- + + widget_custom_pos = { x= 141, y= 46 } + + self.icon_display_panel:SetWndPos(vector2():set(150,77)) + self.argb_controls:SetWndPos(vector2():set( -5.5, 192)) + + self:InitCallBacks() + self.init_done = true + + --self.input:CaptureFocus(true) +end + +function UIPinSettingsWnd:InitCallBacks() + vl("UIPinSettingsWnd registering callbacks") + self:AddCallback("btn_ok", ui_events.BUTTON_CLICKED, self.OnAccept, self) + self:AddCallback("btn_cancel", ui_events.BUTTON_CLICKED, self.Close, self) + self:AddCallback("btn_delete", ui_events.BUTTON_CLICKED, self.DeletePin, self) + self:AddCallback("btn_sidebar", ui_events.BUTTON_CLICKED, self.ToggleSidebar, self) + self:AddCallback("btn_sound", ui_events.BUTTON_CLICKED, self.ToggleSound, self) +end + +function UIPinSettingsWnd:GetAnchorStatic() + if self.dialog then + return self.dialog + else + dl("ERROR self.dialog was nil!") + end +end + + +function UIPinSettingsWnd:ApplyIconToPin(icon) + icon = icon or pawdata.curr_ico_name + pins[self.pin_id].text = pins[self.pin_id].text or pins[self.pin_id].name + local text = get_tooltip_for_pin(self.pin_id) + local old_icon = pins[self.pin_id].icon + pins[self.pin_id].icon = icon + change_mapspot(text,self.pin_id,icon,old_icon) + self.new_icon = nil + self.icon_refresh = true + self:RefreshIcon() +end + +function UIPinSettingsWnd:SetARGBVal(color,val) + local inputx = "input_"..color + --printf("SetARGB method - inputx: %s | color: %s | val %s",inputx,color,val) + if color and val and self[inputx] then + --printf("Current color for %s is %s, setting to value %s",color,self[inputx]:GetText(),val) + self[inputx]:SetText(val) + end +end + +function UIPinSettingsWnd:RefreshIcon(texture) + if not (texture or self.icon_refresh) then return end + if not self.icon then return end + vl("UIPinSettingsWnd:RefreshIcon(%s) %s",texture,self.icon_refresh and "| self.icon_refresh flagged" or "",self.icon_refresh) + + self.icon_curr = pins[self.pin_id].icon or self.icon_curr + texture = texture or texture_for_icon(self.icon_curr) + if texture then + self.icon:InitTexture(texture) + self.icon:SetTextureColor(GetARGB(self.colors.a,self.colors.r,self.colors.g,self.colors.b)) + self.icon_refresh = false + return true + else + dl("No texture found by UIPinSettingsWnd:RefreshIcon!") + return + end +end + +function UIPinSettingsWnd:SetSoundIcon() + if self.btn_sound then + local bstate = use_ui_snd and "on" or "off" + self.btn_sound:InitTexture("ui_paw_btn_sound"..bstate) + end +end + +function UIPinSettingsWnd:ToggleSound() + use_ui_snd = not use_ui_snd + vl("Toggling UI sfx to %s",use_ui_snd) + self:SetSoundIcon() +end + + +function UIPinSettingsWnd:ToggleSidebar() + psw_sidebar_state = not psw_sidebar_state + vl("Toggling sidebar widget to %s",psw_sidebar_state) + GUI_PinInd:ShowDialog(psw_sidebar_state) + if psw_sidebar_state then + self.btn_sidebar:InitTexture("ui_paw_btn_close_sidebar") + else + self.btn_sidebar:InitTexture("ui_paw_btn_open_sidebar") + end + --self.icoset_controls:Show(psw_sidebar_state) + play_ui_sound(snd_cycle_blip) +end + +--[[ +function UIPinSettingsWnd:Callback_Input(color) + vl("UIPinSettingsWnd:Callback_Input for color %s",color) + -- largely lifted from MCM + local is_color = self.colors[color] and true or false + local value = ctrl:GetText() + local default = self.default_all + local min = 0 + local max = 255 + local ctrl = is_color and "input" or "input_"..color + + if not (value and value ~= "") then + value = default + elseif is_color then + value = tonumber(value) + if (not value) then + ctrl:SetText(default) + return + end + value = clamp(value, min, max) + end + printf("Input callback got value %s",value) + if value ~= ctrl:GetText() then + self.cust_argb = true + end + ctrl:SetText(value) + self.colors[color] = value + local a = self.colors.a + local r = self.colors.r + local g = self.colors.g + local b = self.colors.b + dl("Setting custom ARGB of %s|%s|%s|%s for %s",a,r,g,b) + self.icon:SetTextureColor(GetARGB(a,r,g,b)) +end +--]] + +function UIPinSettingsWnd:RefreshChecks() + if self.check_text then + self.check_text:SetCheck(self.show_label) + --vl("check_text after refresh: %s",self.check_text:GetCheck()) + end + if self.check_hud then + self.check_hud:SetCheck(self.show_hud) + --vl("check_hud after refresh: %s",self.check_hud:GetCheck()) + end + if self.check_lock then + self.check_lock:SetCheck(self.locked) + --vl("check_lock after refresh: %s",self.check_lock:GetCheck()) + end + if self.check_argb then + self.check_argb:SetCheck(self.cust_argb) + --vl("check_argb after refresh: %s",self.check_argb:GetCheck()) + end + self:SetSoundIcon() +end + +function UIPinSettingsWnd:Reset(id,args) + self.new_icon = nil + self.args = args + if args and args.wipe then + self.icon_changed = false + self.set_changed = false + + self.cust_argb = nil + self.title = nil + self.pin_id = nil + self.pin = nil + self.locked = nil + self.show_hud = nil + self.show_label = nil + self.pin_text = nil + self.init_time = nil + self.icon_tex = nil + self.colors = nil + self.tooltip = nil + self.icon:InitTexture(self.empty) + return + end + + self.title = args and args.title or ts("ui_mcm_pawsys_pawmenu_pn_settings") + self.pin_id = id + self.pin = pins[self.pin_id] + self.cust_argb = self.pin.custom_colors + self.locked = self.pin.locked + self.show_hud = self.pin.hud + self.show_label = self.pin.show_label + self.tooltip = self.pin.tooltip + self.pin_text = self.pin.text or self.pin.name + self.init_time = tostring(get_time_elapsed()) + self.icon_tex = texture_for_icon(self.pin.icon) + self.colors = self.pin.colors + if not self.colors then + vl("no stored colors in pin %s, defaulting ARGB to 255",id) + self.colors = { + a = 255, + r = 255, + g = 255, + b = 255 + } + end + for k,v in pairs(self.colors) do + self:SetARGBVal(k,v) + end + self:RefreshChecks() + if self.input then + self.input:SetText(self.pin_text) + end + self:RefreshIcon() +end + + +function UIPinSettingsWnd:Update() + --printf("PAW: psw_sidebar_state: %s | widget_active: %s",psw_sidebar_state,widget_active) + if not self.init_done then return end + if time_global() < self.next_update then return end + self.next_update = time_global() + 10 + + CUIScriptWnd.Update(self) + + self.hint = nil + for ctrl,enable in pairs(self.control_hints) do + if enable and self[ctrl] and self[ctrl]:IsCursorOverWindow() then + local st_hint = hint_path..ctrl.."_desc" + local hint = ts(st_hint) + self.hint = hint + --vl("Showing hint for %s: %s\n\"%s\"",ctrl,st_hint,hint) + end + end + self:ShowHint(self.hint) + + -- locking + + self.cust_argb = self.check_argb:GetCheck() + self.argb_controls:Show(self.cust_argb) + + self.last_lock = self.locked + self.locked = self.check_lock:GetCheck() + if self.locked ~= self.last_lock then + self.last_lock = self.locked + self.btn_delete:Enable(not self.locked) + self.check_text:Enable(not self.locked) + self.check_hud:Enable(not self.locked) + self.check_argb:Enable(not self.locked) + --self.input_a:Enable(self.cust_argb and not self.locked) + --self.input_r:Enable(self.cust_argb and not self.locked) + --self.input_g:Enable(self.cust_argb and not self.locked) + --self.input_b:Enable(self.cust_argb and not self.locked) + self.input_a:Enable(not self.locked) + self.input_r:Enable(not self.locked) + self.input_g:Enable(not self.locked) + self.input_b:Enable(not self.locked) + self.input:Enable(not self.locked) + if GUI_PinInd then + GUI_PinInd.btn_apply:Enable(not self.locked) + end + end + local text = self.input:GetText() + + local a,r,g,b = clamp(tonumber(self.input_a:GetText()) or 255,0,255), + clamp(tonumber(self.input_r:GetText()) or 255,0,255), + clamp(tonumber(self.input_g:GetText()) or 255,0,255), + clamp(tonumber(self.input_b:GetText()) or 255,0,255) + + if not self.colors then + self.colors = {} + end + + for c,v in pairs({["a"]=a,["r"]=r,["g"]=g,["b"]=b}) do + if self.colors[c] ~= v then + self.cust_argb = true + end + self.colors[c] = v + end + --self.hint_wnd:Update() + self:RefreshIcon() +end + + +function UIPinSettingsWnd:OnAccept() + local id = self.pin_id + dl("UIPinSettingsWnd:OnAccept - applying changes to Pin %s",id) + + --local old_tooltip = get_tooltip_for_pin(id) + --pins[id].tooltip = self["lst_tooltip"] and self["lst_tooltip"]:CurrentID() or pin_tooltip_mode + --printf("Tooltip mode: %s",pins[id].tooltip) + local new_text = self.input:GetText() + local old_text = pins[id].text or pins[id].name + pins[id].text = new_text + --local hint_is_new = pins[id].tooltip ~= old_tooltip + local has_new_text = old_text ~= new_text + + if has_new_text then --or self.new_icon then --or hint_is_new then + --local old_icon = pins[id].icon + --pins[id].icon = self.new_icon or pins[id].icon + local mapspot_text = get_tooltip_for_pin(id) + --dl("UIPinSettingsWnd:OnAccept: Pin %s has new icon or hint, calling change_mapspot\n* Icon: %s\n* Hint: %s",self.pin_id,pins[id].icon,mapspot_text) + --change_mapspot(mapspot_text,id,pins[id].icon,old_icon) + dl("UIPinSettingsWnd:OnAccept: Pin %s has new icon or hint, calling level.map_change_spot_hint",self.pin_id,pins[id].icon,mapspot_text) + level.map_change_spot_hint(id,pins[id].icon,mapspot_text) + end + + pins[id].custom_colors = self.cust_argb + if self.cust_argb then + local a,r,g,b = clamp(tonumber(self.input_a:GetText()) or 255,0,255), + clamp(tonumber(self.input_r:GetText()) or 255,0,255), + clamp(tonumber(self.input_g:GetText()) or 255,0,255), + clamp(tonumber(self.input_b:GetText()) or 255,0,255) + + if not pins[id].colors then + pins[id].colors = {} + end + pins[id].colors.a = a + pins[id].colors.r = r + pins[id].colors.g = g + pins[id].colors.b = b + set_mapspot_colors(id,pins[id].icon,a,r,g,b) + vl("UIPinSettingsWnd:OnAccept: ARGB is %s|%s|%s|%s",a,r,g,b) + end + + self.show_label = self.check_text:GetCheck() + if map_labels[id] and new_name then + show_pin_label(id,false,true) + end + show_pin_label(id,self.show_label) + + vl("UIPinSettingsWnd:OnAccept: show_label is %s",self.show_label) + + pins[id].hud = self.check_hud:GetCheck() + if pins[id].hud then + show_hud_pin(id) + else + hide_hud_pin(id) + end + vl("UIPinSettingsWnd:OnAccept: show_hud is %s",pins[id].hud) + + pins[id].locked = self.check_lock:GetCheck() + vl("UIPinSettingsWnd:OnAccept: locked is %s",pins[id].locked) + play_ui_sound(snd_place_pin) + self:Close() +end + +function UIPinSettingsWnd:ShowHint(hint) + if hint then + hint = psk(hint,text_colors) + --vl("* [%s] Showing hint_wnd text: %s",time_global(),hint) + end + self.hint_wnd:Update(hint) +end + +function UIPinSettingsWnd:OnKeyboard(dik, keyboard_action) + local res = CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) + if (res == false) then + local bind = dik_to_bind(dik) + if keyboard_action == ui_events.WINDOW_KEY_PRESSED then + if dik == DIK_keys.DIK_ESCAPE then + self:Close() + end + end + end + return res +end + + +function UIPinSettingsWnd:DeletePin() + do_paw_action("pn_del",nil,nil,{syscall=true,id=self.pin_id}) + self:Close() +end + +function UIPinSettingsWnd:Close() + self:HideDialog() + self:Show(false) + Unregister_UI("UIPinSettingsWnd") + if GUI_PinInd then + GUI_PinInd:SettingsMode(false) + end + reset_indicator() + destroy_pin_window() end -- ====================================================================== @@ -2449,18 +3612,23 @@ end -- ====================================================================]] -GUI = nil +GUI_PinInd = nil class "UIPAWIndicator" (CUIScriptWnd) -function UIPAWIndicator:__init() super() - vl("PAW init called, active theme is %s | widget_active %s | widget_enabled %s",active_theme,widget_active,widget_enabled) +function UIPAWIndicator:__init(settings_mode,anchor) super() + vl("PAW init called, active theme is %s | widget_active %s | widget_enabled %s | settingsmode %s",active_theme,widget_active,widget_enabled,settingsmode) + self.anchor = anchor + if settings_mode then + self:SettingsMode(true) + end if not widget_enabled then return end + self.theme = hud_themes[active_theme] self:InitControls() self:DrawIndicator(self.theme) + self:InitCallBacks() get_hud():AddDialogToRender(self) - RegisterScriptCallback("actor_on_net_destroy", self) end @@ -2468,6 +3636,67 @@ function UIPAWIndicator:__finalize() end +function UIPAWIndicator:InitControls() + self.pda_active = item_device.is_pda_active() + self.icon_curr = get_active_icon() + self.set_curr = pawdata.curr_set_name + + vl("UIPAWIndicator:InitControls: active icon is %s",self.icon_curr) +end + + +function UIPAWIndicator:GetAnchorStatic() + if self.dialog then + dl("Passing widget handler back to calling func") + return self.dialog + else + dl("ERROR self.dialog was nil!") + end +end + +function UIPAWIndicator:BackupRestoreSettings(restore) + if not self.backups then + self.backups = {} + end + if restore then + local pos = self.backups.cust_pos + dl("UIPinSettingsWnd | restoring old settings:\nwidget_enabled = %s\nwidget_hide_delay = %s | active_theme = %s | cust pos = %s,%s",widget_enable,widget_hide_delay,active_theme,pos.x,pos.y) + widget_enabled = self.backups.enable + active_theme = self.backups.active + widget_hide_delay = self.backups.autohide + widget_use_custom_pos = self.backups.use_cust_pos + widget_custom_pos = self.backups.cust_pos + self.anchor = self + self.backups = {} + else + local pos = widget_custom_pos + dl("UIPinSettingsWnd | storing current settings:\nwidget_enabled = %s\nwidget_hide_delay = %s | active_theme = %s | cust pos = %s,%s",widget_enable,widget_hide_delay,active_theme,pos.x,pos.y) + self.backups = { + enabled = widget_enabled, + autohide = widget_hide_delay, + active = active_theme, + use_cust_pos= widget_use_custom_pos, + cust_pos = widget_custom_pos, + } + end +end + + +function UIPAWIndicator:SettingsMode(onoff) + self.settings_mode = onoff and true or false + if onoff then + self:BackupRestoreSettings() + active_theme = "pin_sidebar" + widget_hide_delay = 0 + widget_use_custom_pos = true + widget_enabled = true + else + self:BackupRestoreSettings(true) + end + +end + + function UIPAWIndicator:Reset(theme) vl("UIPAWIndicator:Reset called with theme %s",theme and theme.name) if not theme then theme = self.theme end @@ -2499,6 +3728,107 @@ function UIPAWIndicator:actor_on_net_destroy() end +function UIPAWIndicator:IconPrev() + --printf("UIPAWIndicator:IconPrev fired") + cycle_icons(-1,false) +end + +function UIPAWIndicator:IconNext() + --printf("UIPAWIndicator:IconNext fired") + cycle_icons(1,false) +end + +function UIPAWIndicator:SetPrev() + --printf("UIPAWIndicator:SetPrev fired") + cycle_sets(-1,false) +end + +function UIPAWIndicator:SetNext() + --printf("UIPAWIndicator:SetNext fired") + cycle_sets(1,false) +end + + +function UIPAWIndicator:InitIcosetControls() + local xml = CScriptXmlInit() + xml:ParseFile("paw_ui_elements.xml") + local icoset_c = "icoset_controls" + local icoset = icoset_c..":" + local btn_iprev = icoset.."btn_ico_prev" + local btn_inext = icoset.."btn_ico_next" + local btn_sprev = icoset.."btn_set_prev" + local btn_snext = icoset.."btn_set_next" + local btn_apply = icoset.."btn_apply" + + self.icoset_controls = xml:InitStatic(icoset_c, self.dialog) + self.icon_controls = xml:InitStatic(icoset_c, self.icoset_controls) + self.set_controls = xml:InitStatic(icoset_c, self.icoset_controls) + + --printf("icon name: %s | set name: %s",local_icon_name(),local_set_name()) + function setup_icoset_ctrl(icoset_arg, pos_x, pos_y) + local btnx_ = "btn_" + local stub = string.sub(icoset_arg,1,3) + local abbr = string.sub(icoset_arg,1,1) + local mwi = "mwi_" + local button_prev = btnx_..abbr.."prev" + local button_next = btnx_..abbr.."next" + local node_prev = icoset..btnx_..stub.."_prev" + local node_next = icoset..btnx_..stub.."_next" + local icoset_ctrl = icoset_arg.."_controls" + local logo = "logo_"..icoset_arg + --local text_cap = (abbr == "s") and + -- local_set_name() or local_icon_name() + + --printf("setup_icoset_ctrl(%s,%s,%s) for %s\nstub = %s\nabbr = %s\nbutton_prev = %s\nbutton_next = %s\nnode_prev = %s\nnode_next = %s\nicoset_ctrl = %s\n",icoset_arg, pos_x, pos_y,text_cap,stub,abbr,button_prev,button_next,node_prev,node_next,icoset_ctrl) + + self[button_prev] = xml:Init3tButton(node_prev, self[icoset_ctrl]) + self:Register(self[button_prev],button_prev) + + self[logo] = xml:InitStatic(icoset..logo, self[icoset_ctrl]) + unsquish_aspect(self[logo]) + + self[button_next] = xml:Init3tButton(node_next, self[icoset_ctrl]) + self:Register(self[button_next],button_next) + + self[mwi..icoset_arg] = xml:InitStatic("mwheel_ind",self.dialog) + --self.cap[icoset_arg] = xml:InitStatic(caption,self[button_prev]) + --self.cap[icoset_arg]:TextControl():SetText(text_cap) + self[icoset_ctrl]:SetWndPos(vector2():set(pos_x,pos_y)) + end + + function setup_button(button,pos_x,pos_y,xmlnode) + local buttonx = "btn_"..button + vl("Initializing button %s (%s) at %s,%s",buttonx,button,pos_x,pos_y) + self[buttonx] = xml:Init3tButton(xmlnode, self.icoset_controls) + self:Register(self[buttonx],buttonx) + self[buttonx]:SetWndPos(vector2():set(pos_x,pos_y)) + end + + setup_icoset_ctrl( "icon", 92, 34 ) + setup_icoset_ctrl( "set", 109.5, 118 ) + setup_button( "apply", 82.5, 64, btn_apply ) + setwndpos( self.mwi_icon, 145, 8 ) + setwndpos( self.mwi_set, 104, 131 ) + + --================================================================-- + + self.icoset_controls:Show(self.settings_mode) +end + +function UIPAWIndicator:ApplyIconToPin() + GUI_PinOpts:ApplyIconToPin() +end + +function UIPAWIndicator:InitCallBacks() + vl("UIPAWIndicator registering callbacks") + RegisterScriptCallback("actor_on_net_destroy", self) + self:AddCallback("btn_apply", ui_events.BUTTON_CLICKED, self.ApplyIconToPin, self) + self:AddCallback("btn_iprev", ui_events.BUTTON_CLICKED, self.IconPrev, self) + self:AddCallback("btn_inext", ui_events.BUTTON_CLICKED, self.IconNext, self) + self:AddCallback("btn_sprev", ui_events.BUTTON_CLICKED, self.SetPrev, self) + self:AddCallback("btn_snext", ui_events.BUTTON_CLICKED, self.SetNext, self) +end + function UIPAWIndicator:DrawIndicator(theme) vl("UIPAWIndicator:DrawIndicator called with theme %s | self %s",theme and theme.name,self.theme) local pos = theme.pos @@ -2506,7 +3836,9 @@ function UIPAWIndicator:DrawIndicator(theme) local xml = CScriptXmlInit() xml:ParseFile(theme.file) - self.dialog = xml:InitStatic(theme.node, self) + --self.dialog = xml:InitStatic(theme.node, self.anchor or self) + local anchor = self.anchor or self--GUI_PinOpts and GUI_PinOpts.dialog + self.dialog = xml:InitStatic(theme.node, anchor) self.dialog:SetWndPos(vector2():set(pos.x,pos.y)) if theme.tex then self.dialog:InitTexture(theme.tex) @@ -2531,42 +3863,50 @@ function UIPAWIndicator:DrawIndicator(theme) self.box_head2 = xml:InitStatic(theme.node..":head2",self.dialog) self.box_text2 = xml:InitTextWnd(theme.node..":head2",self.box_head2) self.box_text2:SetText(ts("ui_mcm_lst_"..self.icon_curr)) + if self.settings_mode then + self.box_text:SetWndPos(vector2():set(0,0)) + self.box_text:SetTextAlignment(1) + self.box_text2:SetWndPos(vector2():set(0,0)) + self.box_text2:SetTextAlignment(1) + self:InitIcosetControls() + end + elseif theme.style == "minimal" then self.box_text:SetText(ts("ui_mcm_lst_"..self.icon_curr)) end + vl("UIPAWIndicator:DrawIndicator completed") end -function UIPAWIndicator:InitControls() - self.pda_active = item_device.is_pda_active() - self.icon_curr = get_active_icon() - self.set_curr = pawdata.curr_set_name - vl("UIPAWIndicator:InitControls: active icon is %s",self.icon_curr) -end - - function UIPAWIndicator:Update(force) + if self.killswitch then return end + CUIScriptWnd.Update(self) self.dialog:Show(false) - if not (widget_enabled and main_hud_shown()) then return end + + if not ((widget_enabled and main_hud_shown()) or pin_window_is_open()) then return end local theme = self.theme local pda_changed = false - if self.pda_active ~= item_device.is_pda_active() then - pda_changed = true - end - if item_device.is_pda_active() then - local thm = theme.pda_thm - if thm then - - theme = hud_themes[thm] + if not pin_window_is_open() then + if self.pda_active ~= item_device.is_pda_active() then + pda_changed = true end - end - if pda_changed then - vl("PDA mode has changed, resetting theme") - self:Reset(theme) + if item_device.is_pda_active() then + local thm = theme.pda_thm + if thm then + + theme = hud_themes[thm] + end + end + if pda_changed then + vl("PDA mode has changed, resetting theme") + self:Reset(theme) + end + else + widget_active = psw_sidebar_state end if theme.tex then self.dialog:InitTexture(theme.tex) end @@ -2600,26 +3940,36 @@ function UIPAWIndicator:Update(force) if time_global() > widget_last_used + widget_hide_delay then widget_active = false end end self.dialog:Show(widget_active) + if widget_active and self.settings_mode then + self.mwi_set:Show(false) + self.mwi_icon:Show(false) + for ctrl,icoset in pairs(hover_elements) do + --printf("Checking hover state for %s element %s",icoset,ctrl) + if self[ctrl]:IsCursorOverWindow() then + self["mwi_"..icoset]:Show(true) + end + end + end end -function reset_indicator() +function reset_indicator(force,anchor) vl("Resetting PAW indicator") - if GUI then GUI:Destroy() end - if not widget_enabled then return end + if GUI_PinInd then GUI_PinInd:Destroy() end + if not (force or widget_enabled) then return end vl("Re-initializing PAW indicator") - GUI = UIPAWIndicator() + GUI_PinInd = UIPAWIndicator(force,anchor) end function show_indicator(tf) - if not (GUI and widget_enabled) then return end - if show_indicator == nil then - widget_active = -widget_active + if not (GUI_PinInd and widget_enabled) then return end + if tf == nil then + widget_active = not widget_active else widget_active = (tf == true) or false end - GUI:Show(widget_active) + GUI_PinInd:Show(widget_active) end @@ -2864,11 +4214,11 @@ function get_screen_coords(id) --printf(" get_screen_coords: id %s -> obj %s (%s) | se_obj %s",id,obj and obj:name(),obj and obj:id(),se_obj and se_obj:name()) if not (obj or se_obj) then local is_wp = (id == (placed_waypoint and placed_waypoint.id)) and (not waypoint_canceling) and end_waypoint_task(id) - local pin = pins[id] and do_waypoint("pn_del",se_obj,nil,{syscall=true,id=id}) + local pin = pins[id] and do_paw_action("pn_del",se_obj,nil,{syscall=true,id=id}) local exit = (is_wp and " canceling waypoint and") or (pin and " clearing pin and") or "" dl("get_screen_coords: no valid game or server object could be found for %s,%s exiting",id,exit) return - end + end if (obj and IsStalker(obj) or IsMonster(obj)) then pos = obj and utils_obj.safe_bone_pos(obj,"bip01_head") @@ -2911,7 +4261,7 @@ function get_screen_coords(id) local mid_dist = 15 -- dist at which far adjustments begin local max_dist = 60 -- distance ceiling for the far adjustment range local near_adj = 0 -- max icon vertical position change from proximity - local far_adj = 1.75 -- max icon vertical position change from distance + local far_adj = 1.75 -- max icon vertical position change from distance local vert_adj = 0 -- icon position above object will be adjusted by this if is_place then @@ -3047,6 +4397,14 @@ function UIPAWHUDWaypoint:Update() local dist = db.actor:position():distance_to(se_obj.position) local h,v = scale_by_dist(self.marker,dist,20,20,50,100,200,true) self.marker:SetWndSize(vector2():set(h,v)) + + local f_near = wp_near_fade_dist + local f_far = wp_far_fade_dist + local f_hide = wp_far_hide_dist + fade_by_dist(self.marker, dist,f_near,f_far,f_hide) + fade_by_dist(self.dist, dist,f_near,f_far,f_hide,255,230,230,230,1) + fade_by_dist(self.dist_sh, dist,f_near,f_far,f_hide,255,0,0,0,1) + if marker_dist_shown("wp") then local pos = self.marker:GetWndPos() --local dist_txt = string.format("%.1f",dist)..ts("st_paw_meters_abbr") @@ -3086,6 +4444,7 @@ function hide_hud_pin(id) get_hud():RemoveDialogToRender(hud_pin_objs[id]) hud_pin_objs[id] = nil end + return true end function show_hud_pin(id) @@ -3095,6 +4454,7 @@ function show_hud_pin(id) end hud_pin_objs[id] = UIPAWHUDPin(id) get_hud():AddDialogToRender(hud_pin_objs[id]) + return true end function init_hud_pins() @@ -3133,9 +4493,17 @@ function UIPAWHUDPin:InitControls(id) self.xml:ParseFile("paw_hud_pin_icon.xml") self.marker = self.xml:InitStatic("marker",self) local tex = texture_for_icon(pins[id].icon) - local name = pins[id].text + --local name = pins[id].text or pins[id].name + local name = pins[id].name self.marker:InitTexture(tex) - + local color = colors.active + if pins[id].custom_colors then + self.custom_argb = pins[id].colors + local pcc = self.custom_argb + vl("Pin %s has custom ARGB %s,%s,%s,%s",id,pcc.a,pcc.r,pcc.g,pcc.b) + color = GetARGB(pcc.a,pcc.r,pcc.g,pcc.b) + end + self.marker:SetTextureColor(color) -- this may require logic adjustment for transparency interacting with fades self.label = self.xml:InitStatic("marker:label",self) self.label:TextControl():SetTextColor( GetARGB(255,230,230,230) ) @@ -3221,7 +4589,8 @@ function UIPAWHUDPin:Update() local f_near = pin_near_fade_dist local f_far = pin_far_fade_dist local f_hide = pin_far_hide_dist - fade_by_dist(self.marker, pindist,f_near,f_far,f_hide) + local colors = self.custom_argb or {a=255,r=255,g=255,b=255} + fade_by_dist(self.marker, pindist,f_near,f_far,f_hide,colors.a,colors.r,colors.g,colors.b) fade_by_dist(self.label, pindist,f_near,f_far,f_hide,255,230,230,230,1) fade_by_dist(self.label_sh, pindist,f_near,f_far,f_hide,255,0,0,0,1) fade_by_dist(self.dist, pindist,f_near,f_far,f_hide,255,230,230,230,1) @@ -3306,6 +4675,41 @@ function update_vo_crosshair() end end +-- ====================================================================== +-- TASK FUNCTORS +-- ====================================================================== + + +task_functor.waypoint_task_target_functor = function (task_id,field,p,tsk) + if not paw_enabled then return end + -- vl("waypoint_task_target_functor called with task_id %s | field %s",task_id,field) + + if placed_waypoint == nil then + dl("WARNING: waypoint_task_target_functor called but placed_waypoint is nil, cancelling waypoint task to avoid crash") + end_waypoint_task() + return default_id + end + + if (field == "target") then + tsk.target = placed_waypoint.id + tsk.current_target = placed_waypoint.id + return placed_waypoint.id + end +end + + +task_functor.waypoint_task_text_functor = function (task_id,field,p,tsk) + if not (paw_enabled and placed_waypoint) then return end + -- vl("waypoint_task_text_functor called with task_id %s | field %s",task_id,field) + if (field == "title") then + -- vl("custom_name: %s") + return custom_name or ts("st_paw_placed_waypoint")..(": "..placed_waypoint.name or "") + elseif (field == "descr") then + -- vl("custom_desc: %s") + return custom_desc or ts("st_paw_proceed") + end +end + -- ====================================================================== -- CALLBACKS -- ====================================================================== @@ -3318,7 +4722,7 @@ function npc_on_death_callback(victim,killer) if not (id and pins[id]) then return end dl("Clearing existing pin for dead body id %s",id) local se_obj = alife_object(id) - do_waypoint("pn_del",se_obj,nil,{syscall=true}) + do_paw_action("pn_del",se_obj,nil,{syscall=true}) end @@ -3403,6 +4807,9 @@ function on_key_release(key) end +function ctrl_alt_rclick(se_obj,map_table) + -- not currently implemented - considering uses +end function on_map_right_click(property_ui, map_table) if not map_table then return end @@ -3419,17 +4826,27 @@ function on_map_right_click(property_ui, map_table) if mod_key_pressed(1) then -- LSHIFT : unused elseif mod_key_pressed(2) then + --if mod_key_pressed(3) then + -- CTRL+ALT (unused at this time) + -- ctrl_alt_rclick(se_obj,map_table) + -- return + --end + -- LCTRL : Set/Move Waypoint if waypoint_active then - do_waypoint("wp_mov",se_obj) + do_paw_action("wp_mov",se_obj) else - do_waypoint("wp_set",se_obj) + do_paw_action("wp_set",se_obj) end return elseif mod_key_pressed(3) then - -- LALT : Add Pin - do_waypoint("pn_add",se_obj) - return + -- LALT : Add or edit Pin + if pins[se_obj.id] then + open_pin_settings(se_obj.id) + else + do_paw_action("pn_add",se_obj) + return + end end dl(" Passing right-click to get_context_menu_options with id %s and pos %s",se_obj.id,pos) last_clicked_id = se_obj.id @@ -3598,7 +5015,7 @@ function load_file_data() local load_set_curr = axr_main.config:r_value("mcm", "pawsys/pawpins/pin_icon_group", {val=0}) or "pins" local load_pin_curr = axr_main.config:r_value("mcm", "pawsys/pawpins/poi_icon_"..load_set_curr, {val=0}) - printf(logprefix.."Personal Adjustable Waypoint started at %s",time_global()) + printf(logprefix.."Personal Adjustable Waypoint %s started at %s",script_version,time_global()) return true end @@ -3634,13 +5051,18 @@ function load_state(data) pawdata.curr_ico_ind = setdata.ri[root_patch_name(setdata.active_icon)] vl("pawdata: set %s (%s) | icon %s (%s)",pawdata.curr_set_name,pawdata.curr_set_ind,pawdata.curr_ico_name,pawdata.curr_ico_ind) end + if pins_exist() then + for k,v in pairs(pins) do + pins[k].label = nil + end + end end function save_state(data) update_mcm_icoset_data() dl("save_state: Cleaning up script zones and temp markers") - _ = script_zone_cleanup() + script_zone_cleanup() dl("save_state: Saving waypoint and config data") data.paw_waypoint_info = nil data.pawsys = {} @@ -3675,7 +5097,7 @@ function actor_on_first_update() local se_obj = alife_object(id) if not se_obj then return end local savelast = last_waypoint - do_waypoint("wp_mov",se_obj) + do_paw_action("wp_mov",se_obj) last_waypoint = savelast end reset_indicator() @@ -3684,7 +5106,7 @@ function actor_on_first_update() else hide_hud_waypoint() end - if reticle_mode > 0 then + if (reticle_mode > 0) or (autotag_mode > 0) then enable_vo_crosshair() else disable_vo_crosshair() @@ -3703,29 +5125,89 @@ function actor_on_net_destroy() empty_table(hud_pin_objs) end + function on_mouse_wheel(scroll_dir, flags) if not mwheel_enabled then UnregisterScriptCallback("on_mouse_wheel",on_mouse_wheel) return end - if not (icon_cycle_active or set_cycle_active) then return end - if actor_menu.inventory_opened() then return end - - flags.ret_value = false local now = time_global() if now < mwheel_next_poll then return end mwheel_next_poll = now + mwheel_poll_interval - -- local cycle_dir = ((scroll_dir == 0) and -1) or scroll_dir - local cycle_dir = scroll_dir + + local cycling_active = (icon_cycle_active or set_cycle_active) + local invalid_uistate = actor_menu.inventory_opened() or not cycling_active + local pin_wnd_open = pin_window_is_open() + --printf("on_mouse_wheel: cycling_active %s | invalid_uistate %s | pin_wnd_open %s",cycling_active,invalid_uistate,pin_wnd_open) + if invalid_uistate and not pin_wnd_open then + --printf("Invalid UI state for mouse wheel use, aborting") + return + end + + flags.ret_value = false + + local cycle_dir = scroll_dir if cycle_dir == 0 then cycle_dir = -1 end vl("scroll_dir: %s | cycle_dir: %s",scroll_dir,cycle_dir) + + if pin_wnd_open and GUI_PinInd then + for ctrl,icoset in pairs(hover_elements) do + --printf("Checking hover state for GUI_PinInd[%s]",ctrl) + if GUI_PinInd[ctrl]:IsCursorOverWindow() then + cycle_items(cycle_dir,icoset) + return + end + end + if not cycling_active then + flags.ret_value = true + return + end + end cycle_items(cycle_dir) end +--[[ +function actor_on_stash_create(data) + -- figure out why this causes busyhands with hideout furniture + if not use_custom_backpack_icon then return end + local id = data and data.stash_id + if not id then return end + local hint = data and data.stash_name + local mapspot = stash_icons["player"] or "treasure" + dl("Player placed backpack stash %s (%s), replacing mapspot with %s",hint,id,mapspot) + function replace_spot() + remove_mapspot(id,stash_icons["basic"]) + if init_backpack_as_pin then + local sec = data.stash_section + init_new_pin(id,sec,hint,mapspot) + level.map_add_object_spot(id,mapspot,hint) + else + level.map_add_object_spot_ser(id,mapspot,hint) + end + end + -- For some reason the backpack UI script will shit itself if you don't delay messing with the mapspots + CreateTimeEvent("pawdelay","paw"..tostring(time_global()),0.125,replace_spot) +end + +function actor_on_stash_remove(data) + if not use_custom_backpack_icon then return end + local id = data and data.stash_id + if not id then return end + local mapspot = stash_icons["player"] or "treasure" + dl("Player picked up backpack stash %s, removing custom mapspot %s",id,mapspot) + if init_backpack_as_pin then + do_paw_action("pn_del",nil,nil,{syscall=true,id=id}) + else + remove_mapspot(id,mapspot) + end +end +--]] function unregister_all_callbacks() UnregisterScriptCallback("actor_on_update",actor_on_update) - UnregisterScriptCallback("actor_on_net_destroy",actor_on_net_destroy) + --UnregisterScriptCallback("actor_on_stash_create",actor_on_stash_create) + --UnregisterScriptCallback("actor_on_stash_remove",actor_on_stash_remove) + UnregisterScriptCallback("actor_on_net_destroy",actor_on_net_destroy) UnregisterScriptCallback("actor_on_first_update",actor_on_first_update) UnregisterScriptCallback("load_state",load_state) UnregisterScriptCallback("save_state",save_state) @@ -3747,6 +5229,8 @@ end function register_all_callbacks() RegisterScriptCallback("actor_on_update",actor_on_update) + --RegisterScriptCallback("actor_on_stash_create",actor_on_stash_create) + --RegisterScriptCallback("actor_on_stash_remove",actor_on_stash_remove) RegisterScriptCallback("actor_on_net_destroy",actor_on_net_destroy) RegisterScriptCallback("actor_on_first_update",actor_on_first_update) RegisterScriptCallback("load_state",load_state) @@ -3774,42 +5258,6 @@ function on_game_start() on_option_change() end - --- ====================================================================== --- TASK FUNCTORS --- ====================================================================== - - -task_functor.waypoint_task_target_functor = function (task_id,field,p,tsk) - if not paw_enabled then return end - -- vl("waypoint_task_target_functor called with task_id %s | field %s",task_id,field) - - if placed_waypoint == nil then - dl("WARNING: waypoint_task_target_functor called but placed_waypoint is nil, cancelling waypoint task to avoid crash") - end_waypoint_task() - return default_id - end - - if (field == "target") then - tsk.target = placed_waypoint.id - tsk.current_target = placed_waypoint.id - return placed_waypoint.id - end -end - - -task_functor.waypoint_task_text_functor = function (task_id,field,p,tsk) - if not (paw_enabled and placed_waypoint) then return end - -- vl("waypoint_task_text_functor called with task_id %s | field %s",task_id,field) - if (field == "title") then - -- vl("custom_name: %s") - return custom_name or ts("st_paw_placed_waypoint")..(": "..placed_waypoint.name or "") - elseif (field == "descr") then - -- vl("custom_desc: %s") - return custom_desc or ts("st_paw_proceed") - end -end - -- ====================================================================== -- LOAD FILE DATA - KILLSWITCH AND NOTIFY ON FAILURE -- ====================================================================== @@ -3819,7 +5267,7 @@ if not load_file_data() then load_failed = true paw_enabled = false started = false - _ = unregister_all_callbacks() + unregister_all_callbacks() if not disable_load_warning then local tiperr = psk(game.translate_string("st_paw_texture_load_error_tip"),text_colors) @@ -3845,3 +5293,4 @@ if not load_file_data() then end -- ====================================================================== + diff --git a/mods/Personal Adjustable Waypoint/gamedata/scripts/ui_paw_reticle.script b/mods/Personal Adjustable Waypoint/gamedata/scripts/ui_paw_reticle.script index e7a37dfa..10549fd0 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/scripts/ui_paw_reticle.script +++ b/mods/Personal Adjustable Waypoint/gamedata/scripts/ui_paw_reticle.script @@ -34,6 +34,9 @@ function UIPAWReticle:__init() super() --printf("UIPAWReticle:__init(%s)",id) self:InitControls() RegisterScriptCallback("actor_on_net_destroy", self) + RegisterScriptCallback("npc_on_death_callback", self) + RegisterScriptCallback("npc_on_net_destroy", self) + -- Nasty crashes can occur if the last target object is destroyed, so clear it on death or destruction end @@ -334,7 +337,9 @@ end function UIPAWReticle:Update() + if has_alife_info("BAR_ARENA_FIGHT") then return end local mode = paw.reticle_mode + local tag_mode = paw.autotag_mode local cart_mode = paw.cart_mode local enabled = false if autotag_milpda and pda_feature_en then diff --git a/mods/Personal Adjustable Waypoint/gamedata/sounds/catspaw/paw_pin.ogg b/mods/Personal Adjustable Waypoint/gamedata/sounds/catspaw/paw_pin.ogg new file mode 100644 index 00000000..8382e656 --- /dev/null +++ b/mods/Personal Adjustable Waypoint/gamedata/sounds/catspaw/paw_pin.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:131fc35516a8892aadb4e2228c78028f034b80dc4b0033a5c80e46472c11ed56 +size 11828 diff --git a/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/paw_hud_assets.dds b/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/paw_hud_assets.dds new file mode 100644 index 00000000..bb888697 --- /dev/null +++ b/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/paw_hud_assets.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67932019a707431f415ed6427c065b301e80c1d2bd04a234b0f2082a7747803a +size 4194432 diff --git a/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/ui_icons_paw.dds b/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/ui_icons_paw.dds index 768ba56f..2df13501 100644 --- a/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/ui_icons_paw.dds +++ b/mods/Personal Adjustable Waypoint/gamedata/textures/ui/paw/ui_icons_paw.dds @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63aebdb34365f1b6b6968a1680715b5223507f751bedc0cc4443b25de7694c85 +oid sha256:4a9740b33b446547f44fa5e696b9620d544fe7a3602dd1e5dbab583c7de027f3 size 4194432 diff --git a/mods/Personal Adjustable Waypoint/meta.ini b/mods/Personal Adjustable Waypoint/meta.ini index c20d35e4..38593418 100644 --- a/mods/Personal Adjustable Waypoint/meta.ini +++ b/mods/Personal Adjustable Waypoint/meta.ini @@ -1,11 +1,11 @@ [General] gameName=stalkeranomaly modid=0 -version=2.0.1.0 +version=2.1.2.0 newestVersion= category="3," nexusFileStatus=1 -installationFile=Catspaw_Personal_Adjustable_Waypoint-2.0.2.zip +installationFile=Catspaw_Personal_Adjustable_Waypoint-2.1.2.zip repository=Nexus ignoredVersion= comments= diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/misc/task/tm_placeable_waypoints.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/misc/task/tm_placeable_waypoints.ltx new file mode 100644 index 00000000..3da1d37e --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/misc/task/tm_placeable_waypoints.ltx @@ -0,0 +1,19 @@ +; Personal Adjustable Waypoint +; https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma +; Changing things in this file will only bring you sadness + +[task_placeable_waypoint] + +icon = ui_inGame2_Mesta_evakuatsii +storyline = false +prior = 100 +dont_send_update_news = true +;title = st_paw_placed_waypoint +title_functor = waypoint_task_text_functor +;descr = st_paw_proceed +descr_functor = waypoint_task_text_functor + +condlist_0 = {+drx_sl_dummy_info} complete + +stage_complete = 2 +target_functor = waypoint_task_target_functor diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bodies.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bodies.ltx new file mode 100644 index 00000000..eecf4f7d --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bodies.ltx @@ -0,0 +1,24 @@ +; This set is intended to contain body +; markers for integration with the Milspec +; PDA addon's Kill Tracker. Feel free to +; customize the icon list. +; +; If you are never going to use PAW with +; MilPDA, you can safely delete this file. + +[iconset_bodies] +name = ui_mcm_lst_pawsys_pg_bodies +default = death_small + +[bodies_icons] +death_small +blue_circle +crosshair_white +crosshair_red +crosshair_green +mpda_white_x +mpda_skull +mpda_bluedot_sm +mpda_bluedot_md +mpda_bluedot_lg +redskull diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bwhr.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bwhr.ltx new file mode 100644 index 00000000..00f71d46 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_bwhr.ltx @@ -0,0 +1,29 @@ +[iconset_bwhr] +name = ui_mcm_lst_pawsys_pg_bwhr +default = bwhr_magn + +[bwhr_icons] +; It's best to leave the default groups +; alone, although you can delete this file +; if you never want to see this set again. +; +; You can customize this if you like, or +; even create your own--but it's better +; to edit the Favorites group, which can be +; customized in icon_set_faves.ltx and will +; always be displayed at the top of MCM. +; +; You'll lose any changes to default sets +; when updating/reinstalling PAW. Be sure +; to back up any sets you customize. + +bwhr_loot +bwhr_ak +bwhr_ammo +bwhr_signal +bwhr_death +bwhr_warn +bwhr_rad +bwhr_bio +bwhr_info +bwhr_magn \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_faves.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_faves.ltx new file mode 100644 index 00000000..d14d4f98 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_faves.ltx @@ -0,0 +1,30 @@ +; This icon set MUST exist or bad things +; will probably happen. +; +; This is YOUR personal icon set! It will +; always be displayed at the top of PAW's +; MCM menu so that you can access it quickly. +; +; Be sure to back it up before updating PAW +; if you have customized it--Favorites are +; not currently saved anywhere else. +; +[iconset_faves] +; Leave this part alone +name = ui_mcm_lst_pawsys_pg_faves +default = redround32 + +[faves_icons] +; Put any icons here that you want to mark as +; a Favorite. +; +; Valid icons are listed in icons.ltx. +; +; The icons below are just examples. Feel +; free to add or remove any as you see fit. + +bwhr_magn +diamond_friendly +redround32 +stalker +stash_green \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_npcs.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_npcs.ltx new file mode 100644 index 00000000..b2d90e60 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_npcs.ltx @@ -0,0 +1,36 @@ +[iconset_npcs] +name = ui_mcm_lst_pawsys_pg_npcs +default = diamond_friendly + +[npcs_icons] +; It's best to leave the default groups +; alone, although you can delete this file +; if you never want to see this set again. +; +; You can customize this if you like, or +; even create your own--but it's better +; to edit the Favorites group, which can be +; customized in icon_set_faves.ltx and will +; always be displayed at the top of MCM. +; +; You'll lose any changes to default sets +; when updating/reinstalling PAW. Be sure +; to back up any sets you customize. + +diamond_friendly +diamond_neutral +diamond_enemy +chevron_friendly +chevron_neutral +chevron_enemy +flag_friendly +flag_neutral +flag_enemy +npc_mechanic +npc_trader +npc_guide +npc_food_trader +npc_medic +sleep_zone +obj_briefcase +obj_lock diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_patches.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_patches.ltx new file mode 100644 index 00000000..d4174b60 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_patches.ltx @@ -0,0 +1,23 @@ +[iconset_patches] +name = ui_mcm_lst_pawsys_pg_patches +default = stalker + +[patches_icons] +; You can add icons to this file if you like, +; but don't remove the vanilla faction patch +; names that are here by default. They're used +; by the system in multiple ways. +army +bandit +csky +dolg +ecolog +freedom +killer +monolith +stalker +greh +isg +renegade +; Add anything you like below this line + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_pins.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_pins.ltx new file mode 100644 index 00000000..245f6b22 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_pins.ltx @@ -0,0 +1,25 @@ +[iconset_pins] +name = ui_mcm_lst_pawsys_pg_pins +default = redpush32 + +[pins_icons] +; It's best to leave the default groups +; alone, although you can delete this file +; if you never want to see this set again. +; +; You can customize this if you like, or +; even create your own--but it's better +; to edit the Favorites group, which can be +; customized in icon_set_faves.ltx and will +; always be displayed at the top of MCM. +; +; You'll lose any changes to default sets +; when updating/reinstalling PAW. Be sure +; to back up any sets you customize. + +stalker32 +redround32 +redmodern32 +redpush32 +yelpush32 +whtsimple32 \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_smartpins.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_smartpins.ltx new file mode 100644 index 00000000..505e4228 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_set_smartpins.ltx @@ -0,0 +1,29 @@ +[iconset_smartpins] +name = ui_mcm_lst_pawsys_pg_smartpins +default = chevron_enemy + +[smartpins_icons] +; This icon set MUST exist or bad things +; will probably happen if you try to use +; the autotag/smart pin feature. +; +; You can customize this if you like, or +; even create your own--but it's better +; to edit the Favorites group, which can be +; customized in icon_set_faves.ltx and will +; always be displayed at the top of MCM. +; +; You'll lose any changes to default sets +; when updating/reinstalling PAW. Be sure +; to back up any sets you customize. + +chevron_friendly +chevron_neutral +chevron_enemy +redskull +crosshair_red +crosshair_gradient +bwhr_loot +bwhr_ak +stash_green +stash_white \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_sets.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_sets.ltx new file mode 100644 index 00000000..916b3f86 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icon_sets.ltx @@ -0,0 +1,9 @@ +; DO NOT MODIFY THIS FILE +; To customize icon sets, create a file named +; "icon_set_.ltx" and place it in +; this folder. PAW will attempt to load any +; file named in that pattern. It is up to you +; to ensure that you are specifying valid +; mapspot information. +; +#include "icon_set_*.ltx" \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icons.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icons.ltx new file mode 100644 index 00000000..86bc42e1 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/icons.ltx @@ -0,0 +1,129 @@ +[icons] +; To make an icon available to PAW, add +; it here like so: +; +; paw_icon_name = valid_mapspot_icon +; +; paw_icon_name must be lua-conformant name +; of your choice with no spaces, one which +; doesn't already exist in the game. +; +; valid_mapspot_icon must be exactly that: +; the name of a valid "mapspot" found in +; ui\map_spots.xml or any of the files it +; includes (such as map_spots_relations.xml). +; +; If you specify something invalid here, +; you will crash your game and it will suck. +; +; If you know the name of any internal +; Stalker mapspot ID, you can make use +; of it, but be aware that some mapspot IDs +; are used by the game to trigger events or +; flags, and can have unexpected effects. I +; CANNOT provide any support for issues that +; happen only while using custom mapspots. + +; Default Pins +stalker32 = paw_pin_stalker32 +redround32 = paw_pin_redround32 +redmodern32 = paw_pin_redmodern32 +redpush32 = paw_pin_redpush32 +yelpush32 = paw_pin_yelpush32 +whtsimple32 = paw_pin_whtsimple32 +magnifier32 = paw_pin_magnifier32 + +; Default faction patches (vanilla inv icon, low-res) +army = paw_badge_army +bandit = paw_badge_bandit +csky = paw_badge_csky +dolg = paw_badge_dolg +ecolog = paw_badge_ecolog +freedom = paw_badge_freedom +killer = paw_badge_killer +monolith = paw_badge_monolith +stalker = paw_badge_stalker +greh = paw_badge_greh +isg = paw_badge_isg +renegade = paw_badge_renegade + +; BW Hi-res POIs +bwhr_loot = paw_bwhr_loot +bwhr_ak = paw_bwhr_ak +bwhr_ammo = paw_bwhr_ammo +bwhr_signal = paw_bwhr_signal +bwhr_death = paw_bwhr_death +bwhr_warn = paw_bwhr_warn +bwhr_rad = paw_bwhr_rad +bwhr_bio = paw_bwhr_bio +bwhr_info = paw_bwhr_info +bwhr_magn = paw_bwhr_magn + +; Hi-res (64x64 texture) faction patches +hr_army = paw_badge_hr_army +hr_bandit = paw_badge_hr_bandit +hr_csky = paw_badge_hr_csky +hr_dolg = paw_badge_hr_dolg +hr_ecolog = paw_badge_hr_ecolog +hr_freedom = paw_badge_hr_freedom +hr_killer = paw_badge_hr_killer +hr_monolith = paw_badge_hr_monolith +hr_stalker = paw_badge_hr_stalker +hr_greh = paw_badge_hr_greh +hr_isg = paw_badge_hr_isg +hr_renegade = paw_badge_hr_renegade + +; Ultra hi-res (128x128 texture) faction patches +; These may incur a performance hit on some machines +; when a large number of icons are displayed at once +uhr_army = paw_badge_uhr_army +uhr_bandit = paw_badge_uhr_bandit +uhr_csky = paw_badge_uhr_csky +uhr_dolg = paw_badge_uhr_dolg +uhr_ecolog = paw_badge_uhr_ecolog +uhr_freedom = paw_badge_uhr_freedom +uhr_killer = paw_badge_uhr_killer +uhr_monolith = paw_badge_uhr_monolith +uhr_stalker = paw_badge_uhr_stalker +uhr_greh = paw_badge_uhr_greh +uhr_isg = paw_badge_uhr_isg +uhr_renegade = paw_badge_uhr_renegade + +; Vanilla stash icons +stash_green = paw_stash_green +stash_red = paw_stash_red +stash_purple = paw_stash_purple +stash_white = paw_stash_white + +; Body markers +death_small = paw_death_small +blue_circle = paw_blue_circle +crosshair_white = paw_crosshair_white +crosshair_red = paw_crosshair_red +crosshair_green = paw_crosshair_green +crosshair_gradient = paw_crosshair_gradient +mpda_white_x = deadbody_location_whtx +mpda_skull = deadbody_location_skul +mpda_bluedot_sm = deadbody_location_sdot +mpda_bluedot_md = deadbody_location_mdot +mpda_bluedot_lg = deadbody_location_ldot +redskull = paw_pin_redskull + +; Relation and service indicators +diamond_friendly = paw_diamond_friendly +diamond_neutral = paw_diamond_neutral +diamond_enemy = paw_diamond_enemy +chevron_friendly = paw_chevron_friendly +chevron_neutral = paw_chevron_neutral +chevron_enemy = paw_chevron_enemy +flag_friendly = paw_flag_friendly +flag_neutral = paw_flag_neutral +flag_enemy = paw_flag_enemy +npc_mechanic = paw_npc_mechanic +npc_trader = paw_npc_trader +npc_guide = paw_npc_guide +npc_food_trader = paw_npc_food_trader +npc_medic = paw_npc_medic +sleep_zone = paw_sleep_zone +obj_briefcase = paw_obj_briefcase +obj_lock = paw_obj_lock diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/menu_actions.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/menu_actions.ltx new file mode 100644 index 00000000..11e8a016 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/menu_actions.ltx @@ -0,0 +1,180 @@ +; This file allows you to customize the context menu options available +; when right-clicking on mapspots when PAW is active. +; +; enable: setting this to false will hard-killswitch an option to off +; order : not currently implemented +; mode : controls when the option is shown, see below +; text : translation string to display in the menu option +; act : the action executed by the option - currently only pn_add +; has any use beyond the existing option for that action +; icon : forces use of this icon - only for action pn_add + +; Modes: +; -1: only when debug mode is enabled +; 0: disabled completely +; 1: enabled in normal view only +; 2: enabled in cartography mode only +; 4: enabled in both + +; ================================================== + +[my_stash_icon] + +; This is an example of how you can add a +; new menu option that drops a pin with a +; specific icon. It is disabled by default. +; +; To make your own: +; 1. Make a copy of everything between the == +; lines, including the [my_stash_icon] +; section name at the top. +; 2. Rename the section to something unique +; (different from any other in this file). +; 3. Change enable to true. +; 4. Choose any valid icon from icons.ltx and +; replace stash_green with that. +; 5. Change the mode number, if desired. +; 6. Edit the text as desired - this can be +; either a string literal as in the example, +; or the ID of a valid translation string as +; in most of the default functions. +mode = 4 +enable = false +text = "Place stash icon" +act = pn_add +icon = stash_green +; Your new quick pin option should now appear +; in the context menu when you right-click on +; any mapspot. You can make more than one as +; long as each has a unique section name. +; ================================================== + +[mping] +; Ping the map +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_mping +act = mping + +[wp_set] +; Set a new waypoint here when one does not exist yet +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_wp_set +act = wp_set + +[waypoint_rename] +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_waypoint_rename +act = waypoint_rename +field = name + +[waypoint_redesc] +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_waypoint_redesc +act = waypoint_redesc +field = desc + +[wp_mov] +; Move an existing waypoint to here +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_wp_mov +act = wp_mov + +[wp_del] +; Remove the existing waypoint +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_wp_del +act = wp_del + +[pn_add] +; Add a new map pin +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_pn_add +act = pn_add + +[pn_del] +; Delete a map pin +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_pn_del +act = pn_del + +[pn_ren] +; Rename a map pin +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_pn_ren +act = pn_ren + +[hud_vis_on] +; Shows a pin on the HUD +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_hud_vis_on +act = hud_vis_on + +[hud_vis_off] +; Hides a pin from the HUD +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_hud_vis_off +act = hud_vis_off + +[show_all_pins] +; Show pins if hidden +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_show_all_pins +act = show_pins + +[hide_all_pins] +; Hides pins if shown +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_hide_all_pins +act = hide_pins + +[lock_pin] +; Lock pin to prevent changes +mode = 2 +enable = true +text = ui_mcm_pawsys_pawmenu_lock_pin +act = lock_pin + +[unlock_pin] +; Unlock pin +mode = 4 +enable = true +text = ui_mcm_pawsys_pawmenu_unlock_pin +act = unlock_pin + +[pn_clr] +; Clear all map pins - no confirmation! +; Disabled by default +mode = 0 +enable = true +text = ui_mcm_pawsys_pawmenu_pn_clr +act = pn_clr + +;[pn_spt] +; Clear all map pins at this spot - no confirmation +; Not currently working, don't enable +;order = 7 +;mode = 2 +;enable = false +;text = ui_mcm_pawsys_pawmenu_pn_spt +;act = pn_spt + +[cm_dbg] +; Debug menu +mode = -1 +enable = false +text = ui_mcm_pawsys_pawmenu_cm_dbg +act = cm_dbg + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/task_config.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/task_config.ltx new file mode 100644 index 00000000..7c01254a --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/task_config.ltx @@ -0,0 +1,12 @@ +; You can customize your waypoint task in this file. +; If either name or description are present, PAW will +; use what is here instead of its default text. The +; examples below will work, but are commented out by +; default. +; +; NOTE: you must place your text within quotes, or +; Anomaly will strip all spaces from it. + +[task_config] +;name = "Personal Waypoint" +;desc = "Proceed to your chosen destination" diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/valid_clsids.ltx b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/valid_clsids.ltx new file mode 100644 index 00000000..8d1cb5f7 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/scripts/paw/valid_clsids.ltx @@ -0,0 +1,7 @@ +[valid_clsids] +smart_terrain = string +inventory_box_s = string +online_offline_group = string +online_offline_group_s = string +112 = number +140 = number \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/eng/catsy_waypoints.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/eng/catsy_waypoints.xml new file mode 100644 index 00000000..6b74b03d --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/eng/catsy_waypoints.xml @@ -0,0 +1,1501 @@ + + + + + Set waypoint here + + + + Move waypoint here + + + + Remove current waypoint + + + + Placed Waypoint + + + + Proceed to your chosen waypoint + + + + + Placed waypoint was missing from current save, so the task was cancelled to avoid a crash. This is a safety catch and shouldn't happen again after your next save. + + + + + Adjustable Waypoint + + + + General Settings + + + + Map Pins + + + + Context Menus + + + + Keybinds / Mouse + + + + Enable Personal Adjustable Waypoint System + + + + Enabling this option will clear all current waypoint data, remove all waypoint map markers, and cancel any active waypoint task. + + + + Integrate with Milspec PDA addon + + + + Enables integration/compatibility with the Milspec PDA addon. \n\nhttps://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + Enable debug logging + + + + For troubleshooting. If you encounter a crash or other issue with PAW, please:\n1. Enable this option\n2. Reproduce the issue\n3. Upload a copy of the log for me to examine\n\nWithout debug logging it is unlikely that your log will show anything useful. + + + + Add pin to map here + + + + Remove this pin + + + + Rename this pin + + + + Remove all map icons from this spot + + + + Clear ALL of your pins - cannot be undone + + + + Keypress to toggle the current active waypoint + + + + When pressed, this key will toggle off the current waypoint (if one is active), or reactivate the last waypoint if none is currently active. It has no effect if you haven't set a waypoint. + + + + Keypress to drop a Quick Pin + + + + When pressed, this key will place a Quick Pin at the nearest valid smart terrain point to the player's current location. If you have the Fair Fast Travel addon, Quick Pins can optionally be used as fast travel points. + + + + Key bind for Cartography Mode + + + + While held, this key will enable Cartography Mode, which displays all valid smart terrain points and other tools allowing the player to set and manage their Pins. The default hold can be changed to a toggle. + + + + Use a custom mapspot icon for map pins + + + + If enabled, PAW will attempt to use the specified mapspot ID for pin icons. Valid mapspots are in map_spots.xml or its includes. If you put something invalid here, it will probably crash your game. Use at your own risk. + + + + Custom mapspot ID to use + + + + If you know the name of a valid mapspot ID from the mapspots files, enter it here. WARNING: invalid values will very likely crash your game. Reset it to "user_defined" if nothing else works; it's simple and easy to remember. + + + + Pinned Map Location + + + + Quick Pin + + + + Quick pin dropped at current location + + + + You already have a pin at nearest smart %s + + + + Enable Waypoint and Pin functionality on PDA 1.0 + + + + If enabled, PDA 1.0 will be allowed to use all Waypoint and Pin functionality. If disabled, existing Pins will be preserved, but cannot be displayed until a compatible device is equipped. + + + + Enable Waypoint and Pin functionality on PDA 2.0 + + + + If enabled, PDA 2.0 will be allowed to use all Waypoint and Pin functionality. + + + + Enable Waypoint and Pin functionality on PDA 3.1 + + + + If enabled, PDA 3.1 will be allowed to use all Waypoint and Pin functionality. + + + + Enable Waypoint and Pin functionality on the Milspec PDA + + + + If enabled, the Milspec PDA (if installed and available) will be allowed to use all Waypoint and Pin functionality. + + + + Default icon for Pins + + + + When the Pins icon set is active, this option determines which icon is assigned to a map pin at the time it is created. Each map pin can have a different icon. + + + + Default icon for Faction Patches + + + + When the Faction Patches icon set is active, this option determines which icon is assigned to a map pin at the time it is created. Each map pin can have a different icon. + + + + Default icon for BW Hi-res POIs + + + + When the BW Hi-res POIs icon set is active, this option determines which icon is assigned to a map pin at the time it is created. Each map pin can have a different icon. + + + + Default icon for Favorites + + + + When the Favorites icon set is active, this option determines which icon is assigned to a map pin at the time it is created. Each map pin can have a different icon.\n\nNote: you can customize the Favorites, or any other icon set, by editing configs\scripts\paw\icon_set_*.ltx + + + + Favorites + + + + There is no previous or active waypoint to toggle + + + + Red Round Pin + + + + Stalker Cursor-style Pin + + + + Modern GMaps-style Pin + + + + Red Push Pin + + + + Yellow Push Pin + + + + White Minimalist + + + + Loner + + + Military + + + Bandit + + + Clear Sky + + + Duty + + + Ecologist + + + Freedom + + + Mercenary + + + Monolith + + + Sin + + + UNISG + + + Renegade + + + Cartography Only + + + Normal Only + + + Always + + + Disabled + + + + Active Pin icon set + + + + Each set of icons below (e.g. Pins, Patches) has an icon that is currently selected in their drop-down list. This radio button determines which of those sets' icons will be used when placing any new pin.\n\nThe Favorites set will always be placed at the top of the list, and you can freely edit which icons it contains in:\n configs\scripts\paw\icon_set_faves.ltx. + + + + Pin-Style Icons + + + + Faction Patch Icons + + + + This menu allows you to customize PAW's in-game context menus. You can disable each of the following options to de-clutter your menu, or choose whether each of them appears Always, only when Cartography Mode is active, or only when it is not (Normal PDA view). + + + Set Waypoint + + + Move Waypoint + + + Remove Waypoint + + + Add Pin + + + Remove Pin + + + Rename Pin + + + Clear All Pins + + + Clear All at This Spot + + + + + + BW Hi-res POIs + + + + BWHR Info + + + + BWHR Signal Source + + + + BWHR Loot/Valuables + + + + BWHR Danger + + + + BWHR Weapons + + + + BWHR Ammo + + + + BWHR Biohazard + + + + BWHR Radiation + + + + BWHR Warning + + + + BWHR Magnifying Glass + + + + + + HR Loner + + + HR Military + + + HR Bandit + + + HR Clear Sky + + + HR Duty + + + HR Ecologist + + + HR Freedom + + + HR Mercenary + + + HR Monolith + + + HR Sin + + + HR UNISG + + + HR Renegade + + + + UHR Loner + + + UHR Military + + + UHR Bandit + + + UHR Clear Sky + + + UHR Duty + + + UHR Ecologist + + + UHR Freedom + + + UHR Mercenary + + + UHR Monolith + + + UHR Sin + + + UHR UNISG + + + UHR Renegade + + + + Map Ping - Right-click to set waypoint or pin + + + + Ping the map + + + + Play sound effect when pinging the map + + + + + + Customize body icon used by Milspec PDA + + + + This optional feature allows you configure the body marker icon used by Milspec PDA's Kill Tracker feature, if you have that addon installed.\n\nDisabled: MilPDA operates normally\n\nVictim Faction Patch: dead stalkers will have a faction patch for their body marker, all others use the default from the Body Markers set\n\nBody Markers set: MilPDA will use the current default icon from the Body Markers set for all bodies + + + + Requires Milspec PDA 1.7.3 or higher:\nhttps://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + Body Markers + + + + Default icon for Body Markers + + + + Resolution used for faction patches + + + + This option determines which icon quality is used for faction patches: the low-res vanilla inventory icons, PAW's hi-res 64x64 patches, or 128x128 versions with a white outline. The low-res and hi-res mapspots are the same size; the UHR versions are about 25% bigger. + + + + Low-Res (vanilla inventory icon) + + + + Hi-Res (from clean master) + + + + Ultra Hi-Res (with white outline) + + + + Customize body icon used by Milspec PDA + + + + Disabled + + + + Victim Faction Patch + + + + Body Markers set + + + + Rename waypoint + + + + Change waypoint description + + + + Small BWHR Death + + + + Blue Circle + + + + White Crosshairs + + + + Red Crosshairs + + + + Green Crosshairs + + + + Green Crosshairs + + + + Green Stash Icon + + + + White Stash Icon + + + + Purple Stash Icon + + + + Red Stash Icon + + + + + + Wipe all pin data + + + + Removes all pins from the map and wipes the pin database. This cannot be undone. + + + + [MPDA] Small Blue Dot + + + + [MPDA] Medium Blue Dot + + + + [MPDA] Large Blue Dot + + + + [MPDA] White X Mark + + + + [MPDA] Small Plain Skull + + + + Behavior of the Cartography Mode keybind + + + + Toggle + + + + Hold + + + + + + Mouse wheel support (requires modded binaries) + + + + When enabled, the mouse wheel can be scrolled up and down to cycle through the active icons or sets.\n + This feature requires modded binaries version 20230701 or newer. GAMMA also supports this from 0.9.1 onward. + + + + Display a message when changing mouse wheel mode + + + + Modded binaries by demonized (required for mouse wheel support):\n https://github.com/themrdemonized/STALKER-Anomaly-modded-exes/ + + + + + Active Set changed to %s.\n + + + + + Active Icon is now + + + + Cycle to next set + + + + Optional keybind to cycle to the next set + + + + Cycle to previous set + + + + Optional keybind to cycle to the previous set + + + + Cycle to next icon in active set + + + + Optional keybind to cycle to the next icon in the active set + + + + Cycle to previous icon in active set + + + + Optional keybind to cycle to the previous icon in the active set + + + + Hold to change sets with mouse wheel + + + + While this key is held, scrolling the mouse wheel will cycle through the list of sets if mouse scrolling is enabled. + + + + Hold to change icons with mouse wheel + + + + While this key is held, scrolling the mouse wheel will cycle through the icons in the active set if the scrolling mode is set to Hold for Both. + + + + Mouse wheel is now cycling sets + + + + Mouse wheel is now cycling icons + + + + Mouse wheel returned to default behavior + + + + HUD Widget + + + + Enable HUD widget + + + + Autohide delay in seconds (0 never hides) + + + + Play sound effect for icon/set changes + + + + Play sound effect when pinging the map + + + + Widget visual theme (see below for descriptions) + + + + Use the custom position below instead of theme default + + + + The HUD widget displays the current active icon and, depending on the theme, can also display other information. + + + + Sets the X (horizontal) coordinate of the widget's upper left corner. 0,0 is the upper left corner of the screen, 1024,768 is the lower right. The game converts this to your display resolution. + + + + Sets the Y (vertical) coordinate of the widget's upper left corner. 0,0 is the upper left corner of the screen, 1024,768 is the lower right. The game converts this to your display resolution. + + + + X (horizontal, left to right) coordinate + + + + Y (vertical, top to bottom) coordinate + + + + You can read a full description of each available theme below.\n + + + + + Classic Stalker, Auto-Switch: 138x75 (default pos 890,620)\n + Icon and Set text, Next/Current/Prev icons\n + Auto-switches to Classic Vertical Right when PDA is open\n + Select "Classic" theme if you don't want the auto-switch\n + Recommended default + + + + + + Classic Stalker, Horizontal: 138x75 (default pos 890,620)\n + Icon and Set text, Next/Current/Prev icons\n + Does not auto-switch, but blocked by PDA in its default position + + + + + + Classic Vertical, Right-aligned: 100x154 (default pos 922,440)\n + Icon text, Next/Current/Prev icons\n + PDA mode for Classic Stalker Auto-Switch, but can be used on its own + + + + + + Classic Vertical, Left-aligned: 100x154 (default pos 4,570)\n + Icon text, Next/Current/Prev icons\n + Can block news messages in its default position\n + Custom position recommended + + + + + + GAMMA Style, Right-aligned: 136x150 (default pos 888,440)\n + Icon and Set text, Next/Current/Prev icons\n + Visible both with and without PDA open + + + + + + GAMMA Style, Left-aligned: 136x150 (default pos 4,440)\n + Icon and Set text, Next/Current/Prev icons\n + Can block news messages in its default position\n + Custom position recommended + + + + + + Minimalist, Horizontal: 94x52 (default pos 924,645)\n + Icon text, Next/Current/Prev icons on drop shadow\n + Blocked by PDA in its default position\n + Custom position recommended + + + + + + Minimalist, Vertical: 92x112 (default pos 924,440)\n + Icon text, Next/Current/Prev icons on drop shadow\n + No left-aligned version + + + + + + Minimalist, Compact: 38x38 (default pos 890,440)\n + Displays current icon only, on drop shadow\n + blocked by PDA in its default position + + + + + + Compact, No UI Frame: 32x32 (default pos 890,440)\n + Displays current icon only, no other UI or background\n + Suitable for positioning nearly anywhere, easy to integrate with custom HUDs + + + + + Classic Stalker, H/V Auto Switch + + + + Classic Stalker, Horizontal (890,620) + + + + Classic, Vertical, Right-Aligned (922,440) + + + + Classic, Vertical, Left-Aligned (4,570) + + + + GAMMA Style, Right-Aligned (888,440) + + + + GAMMA Style, Left-Aligned (4,574) + + + + Minimalist, Horizontal (890,650) + + + + Minimalist, Vertical (890,440) + + + + Minimalist, Compact (820,725) + + + + Compact, No UI Frame (820,725) + + + + Enabled + + + + + + Current waypoint cleared + + + + + + PAW: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + + + + Milspec PDA: https://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + + + + Disable immediate MCM updates + + + + When you change the current icon/set during gameplay, PAW updates the same setting in MCM. This is so that your changes will be saved even if the game crashes, but it can cause a performance impact on some machines. Enabling this setting will turn off this feature, but the settings will still be stored when you save your game. However, changes will not be reflected in MCM if you enter its menu before saving. + + + + + + Show All Pins + + + + Hide All Pins + + + + + + Waypoint autoclear distance (in meters) + + + + Show waypoint marker on HUD + + + + Don't show PAW welcome message on savegame load + + + + $clr_prp[ Personal Adjustable Waypoint System initialized ]$clr_wht \n \n + Right-click on any visible map icon to set a custom quest marker ($clr_lblwaypoint$clr_wht) or place and label map markers called $clr_lblpins$clr_wht.\n + Press $clr_yel%s$clr_wht to toggle the waypoint on or off at any time. If you don't want a visible HUD marker, you can disable it in MCM.\n + Press $clr_yel%s$clr_wht to mark the map with a $clr_lblQuick Pin$clr_wht at your current location.\n + Hold $clr_yel%s$clr_wht to enter $clr_lblCartography Mode$clr_wht for more map functions, like $clr_lblpinging$clr_wht the map to display temporary markers for precise pin and waypoint placement.\n +\n +You'll find all this and more in MCM under $clr_lblAdjustable Waypoint$clr_wht.\n +\n +This message won't bother you again. Good hunting, %s. + + + + Show Pin on HUD + + + + Hide Pin from HUD + + + + PAW System is disabled + + + + + + + + Active Pin: + + + + When you place a pin, it uses the Default icon from the Current Active Set. You can change them here, or cycle through pins and sets in-game using keybinds of your choice. + + + + Cartography Mode is a toggle + + + + By default, you must hold down the key for Cartography Mode. If this option is enabled, it operates as a toggle instead. + + + + Cartography Mode shows smart terrains + + + + By default, Cartography Mode shows an icon (white map with a magnifying glass) to indicate smart terrain spots. If you don't need or want to see these for any reason, you can turn them off with this option. + + + + + + m + + + + Unknown + + + + stash + + + + squad + + + + You are currently using an NPC's looted PDA, not your own. Equip a player PDA to make use of waypoints, map pins, or other PAW System functionality. + + + + Show distance on waypoint HUD marker + + + + Choose when the waypoint HUD marker should show an indicator for distance: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect when the HUD marker is not enabled. + + + + Show distance on pin HUD markers + + + + Choose when markers for pins on the HUD should show an indicator for distance: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect without pins set visible on the HUD. + + + + Show label on pin HUD markers + + + + Choose when markers for pins on the HUD should display their text label above the icon: never, always, only when Cartography Mode is active, or only when it is not (Normal PDA view). Has no effect without pins set visible on the HUD. + + + + + + NPCs and Services + + + + Default icon for NPCs and Services + + + + Friendly (diamond style) + + + + Neutral (diamond style) + + + + Enemy (diamond style) + + + + Friendly (chevron style) + + + + Neutral (chevron style) + + + + Enemy (chevron style) + + + + Friendly (flag style) + + + + Neutral (flag style) + + + + Enemy (flag style) + + + + NPC Mechanic + + + + NPC Trader + + + + NPC Guide + + + + NPC Food Trader + + + + NPC Medic + + + + Sleeping Area + + + + Briefcase Object + + + + Locked Object + + + + Cartography Mode + + + + Cartography Mode enables additional mapping functionality without cluttering the HUD or menu during normal play. You can configure what functions appear in this mode (or in normal PDA mode) in the Context Menus MCM submenu. + + + + Mouse Wheel Support + + + + Waypointing and Pins - Crosshair Targeting + + + + Waypointing and Pins - Crosshair Targeting + + + + The first two keybinds allow you to use waypoints and pins on whatever object is currently under your crosshair. In order for the game to register this, the object must be exactly under the center of the crosshair. For a stalker, this means centered enough for the crosshair identification to activate. + + + + Waypointing and Pins - General Keybinds + + + + Keypress to set waypoint on the target object + + + + When this key is pressed, the waypoint will be set--or moved--to the object under the player's crosshair. If it was already set to the target object, it will be disabled. + + + + Keypress to set a pin on the target object + + + + When this key is pressed, a pin will be placed on the object under the player's crosshair if there isn't one already, using the current active icon. If a pin already exists for the target, it will be removed. + + + + Pins created by targeting default to visible on the HUD + + + + If a pin was created by targeting an object with the crosshairs, it will automatically be shown on the HUD. You can show or hide pins on the HUD at any time using your PDA. + + + + + Pin $clr_yel%s$clr_wht removed from $clr_lbl%s$clr_wht. + + + + Pin added to $clr_lbl%s$clr_wht using icon: $clr_lbl%s$clr_wht.\n + You can change the current active icon with $clr_yel%s$clr_wht/$clr_yel%s$clr_wht. + + + + Pin $clr_yel%s$clr_wht removed from $clr_lbl%s$clr_wht. + + + + Show news tip when changing icons or sets using keybinds + + + + + + Pin near fade-out distance (in meters) + + + + When the player comes within this distance of a pin, it will begin to fade out. + + + + Pin far fade-out distance (in meters) + + + + When the player gets this far away from a pin, it will begin to fade out. + + + + Pin far hide distance (in meters) + + + + If the player is more than this far beyond where the fade-out begins, a pin will disappear completely. + + + + Pins on the HUD never fade out while in Cartography Mode + + + + If there are any pins on the HUD, and they are normally set to fade out, they won't do so while Cartography Mode is active. + + + + Lock Pin + + + + Unlock Pin + + + + Show smart reticle when a valid object is targeted + + + + This setting controls when the smart reticle can appear: always, only when Cartography Mode is active, or never (disabled). + + + + Reticle transparency + + + + The reticle's maximum alpha (transparency) value, with 0 being fully transparent and 255 being no transparency. + + + + Fade-in duration for object reticle + + + + The time, in milliseconds, that it takes for the reticle to finish fading in when targeting a valid object. + + + + Fade-out duration for object reticle + + + + The time, in milliseconds, that it takes for the reticle to finish fading out after the crosshair no longer has a target. + + + + Aspect ratio for the screen preview below + + + + 4:3 (Standard Definition) + + + + 16:10 (19201200, 2560x1600) + + + + 16:9 (1080p, 1440p, 2160p) + + + + 21:9 (Ultrawide) + + + + + + Example resolutions in this aspect ratio:\n + + + + \n1024x768\n1600x1200 + + + + \n1920x1080\n1280x720\n1600x900\n2560x1440\n3840x2160 + + + + \n1280x800\n1920x1200\n2560x1600\n3840x2400 + + + + \n2560x1080\n3440x1440\n3840x1600 + + + + + + Reticle / Autotag + + + + Enable automatic smart tagging on reticle ID + + + + When this feature is enabled, PAW's HUD reticle will automatically "tag" valid target objects with an appropriate pin once they are identified, as configured below. + + + + Use pins and waypoints on any valid object under your crosshairs using configurable hotkeys. By default, the reticle fades in and out to indicate when you are targeting a valid object. + + + + To instead mark targeted objects automatically, see the "Autotag" setting below. + + + + Autotag will automatically mark certain types of objects with pre-defined pins of your choice once they are positively identified. This allows you to free up keybinds, and focus on the Zone instead of your PDA or menus. + + + + It functions similarly to the Faction Identification addon, reading its MCM settings so that PAW and FacID can work together. Changes that you make in FacID's MCM menu will be respected by PAW. + + + + Smart Pins + + + + Default icon for Smart Pins + + + + + Enable Autotagging for friendly stalkers + + + + Human (friendly) icon + + + + Autotag will assign this icon to friendly stalkers. + + + + + Enable Autotagging for neutral stalkers + + + + Human (neutral) icon + + + + Autotag will assign this icon to neutral stalkers. + + + + + Enable Autotagging for enemy stalkers + + + + Human (enemy) icon + + + + Autotag will assign this icon to enemy stalkers. + + + + + Enable Autotagging for monsters + + + + Monsters + + + + Autotag will assign this icon to mutants, monsters, and other nonhuman creatures. + + + + + Enable Autotagging for stash containers + + + + Stash container icon + + + + Autotag will assign this icon to stashes and other inventory boxes. + + + + + Only active while using scope/binoculars + + + + If this option is enabled, the reticle (and its tagging features) will only be enabled while zoomed with binoculars or a scoped weapon. This is recommended so that tags won't be created just from walking up to or talking to an NPC. + + + + Manually targeted pins are also smart + + + + If this option is enabled, reticle pins created by manually triggering the associated keybind will also use the Autotag settings below, assigning the selected icon for the targeted object instead of the current active icon. + + + + Red Beast Skull + + + + Gradient Crosshairs + + + + + + The $clr_yelPersonal Adjustable Waypoint$clr_wht addon $clr_redfailed to load its texture data$clr_wht, and has disabled itself in order to protect your game from crashes. \n \n + Check the game log for errors, and ensure that nothing loads after PAW which modifies the file $clr_yelmap_spots_relations.xml$clr_wht. \n \n + This only requires a change in load order, and is usually easy to resolve. However, if you never intend to use PAW's features, and don't care that something else is breaking it, you can disable this error message under the $clr_yelAdjustable Waypoint$clr_wht menu in MCM. + + + + WARNING: mapspot texture data missing. + + + + To avoid crashes, both PAW and many parts of its MCM menus have been disabled until this issue is resolved. + + + + Personal Adjustable Waypoint could not load texture data from map_spots_relations.xml. This is almost ALWAYS caused by loading another addon after PAW which modifies that file. Examples include (but are not limited to) Kill Tracker or Milspec PDA. + + + + If you are using Mod Organizer 2 (or a modpack such as GAMMA that uses it), adjust your load order so that PAW loads after (below) any and all addons which modify map_spots_relations.xml. If you are not using MO2, you should do so. + + + + Disable the in-game warning for this error (NOT recommended) + + + + + + Autotag pins are persistent + + + + Unless this option is enabled, all pins added by autotagging will be temporary--that is, they will automatically disappear on next map change or savegame load, or when timed out after the below number of seconds. + + + + Autotag expiration time (in seconds) + + + + If Autotag persistence is not enabled, tags will be automatically cleared after this many seconds. Setting this to zero will disable the timeout, but temporary tags will still be cleared on the next map change or savegame load. + + + + + + + $clr_yelPAW$clr_wht isn't just a waypoint marker--it's a suite of mapping and navigation tools that give you more control over your map and HUD, letting you mark your own path through the Zone. $clr_yelAll of these features are optional and customizable to your liking.$clr_wht \n \n + $clr_lbl Set your own quest marker anywhere, anytime, and customize its text$clr_wht \n + $clr_lbl Place, rename, and remove map markers ("pins") anywhere on the map with your choice of icon$clr_wht \n + $clr_lbl Automatically tag known targets with your choice of icon, and display them on the HUD$clr_wht \n \n + $clr_yelDon't let NPCs tell you where to go--put your PAW down and make the map yours.$clr_wht + + + + + When the player comes within this distance of the waypoint marker, it will automatically be cleared. Setting this to zero will disable the autoclear setting entirely. + + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/rus/catsy_waypoints.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/rus/catsy_waypoints.xml new file mode 100644 index 00000000..245fd718 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/text/rus/catsy_waypoints.xml @@ -0,0 +1,1501 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + , . . + + + + + PAW + + + + + + + + - + + + + + + + + / + + + + + + + + , . + + + + " Milspec" + + + + / " Milspec". \n\nhttps://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + + + + + . PAW, :\n1. \n2. \n3. , \n\n , - . + + + + + + + + + + + + + + + + + + + + - + + + + + + + + ( ) , . , . + + + + , " " + + + + " " . Fair Fast Travel, " " . + + + + + + + + , , . + + + + + + + + , PAW . - , , , . . + + + + + + + + mapspots, . : , , . "user_defined", ; . + + + + + + + + + + + + " " + + + + smart %s + + + + 1.0 + + + + , 1.0 . , , , . + + + + 2.0 + + + + , 2.0 . + + + + 3.1 + + + + , 3.1 . + + + + Milspec + + + + , "Milspec" ( ) . + + + + + + + + , , . . + + + + + + + + , , . . + + + + BW Hi-res POIs + + + + BW Hi-res POIs (Black and White Hi-res POI icons - - POI ), , . . + + + + "" + + + + "" , , . . : "" , "configs\scripts\paw\icon_set_*.ltx" + + + + + + + + . + + + + " " + + + + " " + + + + " " + + + + " " + + + + " " + + + + " " + + + + + + + + + + + + + " " + + + "" + + + / + + + "" + + + + + + "" + + + "" + + + "" + + + + + + + + + + + + + + + + + + + " " + + + + (, , ) , . , .\n\n "" , , , :\n configs\scripts\paw\icon_set_faves.ltx. + + + + " " + + + + " " + + + + PAW. , , , "", " " ( ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BW Hi-res POIs + + + + BWHR ( "") + + + + BWHR ( " ") + + + + BWHR ( "/") + + + + BWHR ( "") + + + + BWHR ( "") + + + + BWHR ( "") + + + + BWHR ( " ") + + + + BWHR ( "") + + + + BWHR ( "") + + + + BWHR ( " ") + + + + + + HR + + + HR + + + HR + + + HR " " + + + HR "" + + + HR / + + + HR "" + + + HR + + + HR "" + + + HR "" + + + HR "" + + + HR "" + + + + UHR + + + UHR + + + UHR + + + UHR " " + + + UHR "" + + + UHR / + + + UHR "" + + + UHR + + + UHR "" + + + UHR "" + + + UHR "" + + + UHR "" + + + + , + + + + + + + + + + + + + + , "Milspec" + + + + , "Milspec", .\n\n: "Milspec" \n\n : " " , " " \n\n " ": "Milspec" " " + + + + "Milspec" 1.7.3 :\nhttps://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + + + + + + + + + , + + + + , : , PAW 64x64 128x128 . ; UHR- 25% . + + + + Low-Res ( ) + + + + Hi-Res ( ) + + + + Ultra Hi-Res ( ) + + + + , "Milspec" + + + + + + + + + + + + + + + + + + + + + + + + BWHR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + [MPDA] + + + + [MPDA] + + + + [MPDA] + + + + [MPDA] + + + + [MPDA] + + + + " " + + + + + + + + + + + + + + ( ) + + + + .\n + 20230701 . + + + + + + + + demonized ( ):\n https://github.com/themrdemonized/STALKER-Anomaly-modded-exes/ + + + + + %s.\n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + , . + + + + , + + + + , . + + + + + + + + + + + + + + + + HUD- + + + + HUD- + + + + (0 - ) + + + + / + + + + + + + + ( ) + + + + + + + + HUD- , , . + + + + X ( ) . 0,0 - , 1024,768 - . . + + + + Y ( ) . 0,0 - , 1024,768 - . . + + + + X ( , ) + + + + Y ( , ) + + + + .\n + + + + + , : 138x75 ( 890,620)\n + , // \n + \n + "" , \n + + + + + + + , : 138x75 ( 890,620)\n + , // \n + , + + + + + + , : 100x154 ( 922,440)\n + , // \n + Stalker, + + + + + + , : 100x154 ( 4,570)\n + , // \n + \n + + + + + + + , : 136x150 ( 888,440)\n + , // \n + , + + + + + + , : 136x150 ( 4,440)\n + , // \n + \n + + + + + + + , : 94x52 ( 924,645)\n + , // \n + \n + + + + + + + , : 92x112 ( 924,440)\n + , // \n + + + + + + + , : 38x38 ( 890,440)\n + \n + + + + + + + , : 32x32 ( 890,440)\n + , \n + , HUD- + + + + + , H/V (./.) + + + + , (890,620) + + + + , , (922,440) + + + + , , (4,570) + + + + , (888,440) + + + + , (4,574) + + + + , (890,650) + + + + , (890,440) + + + + , (820,725) + + + + , (820,725) + + + + + + + + + + + + + + + + PAW: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + + + + Milspec PDA: https://www.moddb.com/mods/stalker-anomaly/addons/milspec-pda-for-anomaly-151-152-and-gamma + + + + + + + MCM + + + + / , PAW MCM. , , . , . MCM, . + + + + + + + + + + + + + + + + ( ) + + + + HUD + + + + PAW + + + + $clr_prp[ ]$clr_wht \n \n + ($clr_lbl $clr_wht) .\n + $clr_yel%s$clr_wht, . HUD-, MCM.\n + $clr_yel%s$clr_wht, $clr_lbl $clr_wht .\n + $clr_yel%s$clr_wht, $clr_lbl$clr_wht , $clr_lbl$clr_wht .\n +\n + MCM $clr_lbl $clr_wht.\n +\n + . , %s. + + + + HUD + + + + HUD + + + + PAW + + + + + + + + : + + + + , , . , . + + + + " " + + + + " " . , . + + + + " " "" + + + + "" ( ), "" . - , . + + + + + + + + + + + + + + + + + + + + + + , . , , PAW. + + + + HUD- + + + + , HUD- : "", "", " " ( ). , HUD- . + + + + "-" HUD + + + + , "-" HUD : "", "", " ", ( ). HUD . + + + + HUD + + + + , "-" HUD : "", "", " " ( ). HUD . + + + + + + + + + + + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + ( "") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "" + + + + "" , HUD . ( ) MCM. + + + + + + + + " " "-" - + + + + " " "-" - + + + + " " "-" , . , . , , . + + + + " " "-" + + + + , " " + + + + " " . , . + + + + , + + + + "-" , , . "-", . + + + + , , HUD + + + + "-" , HUD. HUD . + + + + + $clr_yel%s$clr_wht $clr_lbl%s$clr_wht. + + + + $clr_lbl%s$clr_wht : $clr_lbl%s$clr_wht.\n + $clr_yel%s$clr_wht/$clr_yel%s$clr_wht. + + + + $clr_yel%s$clr_wht $clr_lbl%s$clr_wht. + + + + + + + + + + ( ) + + + + , . + + + + ( ) + + + + , . + + + + ( ) + + + + , . + + + + HUD + + + + HUD - , , . + + + + + + + + + + + + + + + + , : "", " " "" (). + + + + + + + + () , 0 , 255 - . + + + + + + + + , . + + + + + + + + , , , . + + + + , + + + + 4:3 ( ) + + + + 16:10 (1920x1200, 2560x1600) + + + + 16:9 (1080p, 1440p, 2160p) + + + + 21:9 () + + + + + + :\n + + + + \n1024x768\n1600x1200 + + + + \n1920x1080 (1080p)\n1280x720\n1600x900\n2560x1440\n3840x2160 + + + + \n1280x800\n1920x1200\n2560x1600\n3840x2400 + + + + \n2560x1080\n3440x1440\n3840x1600 + + + + + + / + + + + + + + + HUD- PAW "" , . + + + + . , , . + + + + , . "" . + + + + "" . , . + + + + "Faction Identification" (FacID ), MCM-, PAW FacID . , MCM- FacID, PAW. + + + + + + + + " " + + + + + + + + + () + + + + "" . + + + + + + + + + () + + + + "" . + + + + + + + + () + + + + "" . + + + + + + + + + + + + + "" , . + + + + + - + + + + - + + + + "" . + + + + + / + + + + , ( ) . , . + + + + , , + + + + , , , "", . + + + + + + + + + + + + + + $clr_yelPersonal Adjustable Waypoint $clr_red $clr_wht, .\n \n + , PAW , $clr_yelmap_spots_relations.xml$clr_red.\n \n + PAW , - , $clr_yelPAW$clr_wht MCM. + + + + : . + + + + , PAW, MCM . + + + + Personal Adjustable Waypoint map_spots_relations.xml. PAW , . ( ) Kill Tracker Milspec PDA. + + + + GAMMA Mod Organizer 2, , PAW () , map_spots_relations.xml. MO2, . + + + + + ( ) + + + + + + + + + + , , , - . + + + + ( ) + + + + , . , , . + + + + + + + $clr_yelPAW$clr_wht - , , HUD, . $clr_yel .$clr_wht \n \n + $clr_lbl $clr_wht \n + $clr_lbl , ("") $clr_wht \n + $clr_lbl "" HUD$clr_wht \n \n + $clr_yel , - PAW .$clr_wht + + + + + , . , . + + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_milpda.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_milpda.xml new file mode 100644 index 00000000..5fda1525 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_milpda.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mmap_common_actor + + + + ui_mapspot_skull_large + + + + ui_mapspot_skull_small + + + + ui_AlphaLion_XCorpseMarker-small + + + + ui_AlphaLion_XCorpseMarker-large + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw.xml new file mode 100644 index 00000000..44d032cb --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw.xml @@ -0,0 +1,157 @@ + +#include "ui\map_spots_paw_pins.xml" +#include "ui\map_spots_paw_patches.xml" +#include "ui\map_spots_paw_bwhr.xml" +#include "ui\map_spots_paw_npcs.xml" +#include "ui\map_spots_milpda.xml" + + + + + + + + + ui_icons_paw_magnifier32 + + + + + + + + + + ui_icons_paw_ping_spot_alpha + + + + + + + + + ui_icons_paw_ping_spot_alpha + + + + + + + + ui_pda2_stask_last_01a + + + + + + + + + + + + paw_vanilla_stash_icon_green + + + + + + + + + paw_vanilla_stash_icon_white + + + + + + + + + paw_vanilla_stash_icon_purple + + + + + + + + + paw_vanilla_stash_icon_red + + + + + + + + + + ui_icons_paw_pin_bwhr_death64 + + + + + + + + + + ui_icons_paw_blue_circle + + + + + + + + + + ui_icons_paw_crosshair_white + + + + + + + + + + ui_icons_paw_crosshair_red + + + + + + + + + + ui_icons_paw_crosshair_green + + + + + + + + + ui_icons_paw_crosshair_gradient + + + + + + + + + ui_icons_paw_pin_redskull + + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_bwhr.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_bwhr.xml new file mode 100644 index 00000000..21e4952b --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_bwhr.xml @@ -0,0 +1,105 @@ + + + + + + + + ui_icons_paw_pin_bwhr_loot64 + + + + + + + + + + ui_icons_paw_pin_bwhr_warn64 + + + + + + + + + + ui_icons_paw_pin_bwhr_ak64 + + + + + + + + + + ui_icons_paw_pin_bwhr_signal64 + + + + + + + + + + ui_icons_paw_pin_bwhr_death64 + + + + + + + + + + ui_icons_paw_pin_bwhr_ammo64 + + + + + + + + + + ui_icons_paw_pin_bwhr_rad64 + + + + + + + + + + ui_icons_paw_pin_bwhr_info64 + + + + + + + + + + ui_icons_paw_pin_bwhr_magn64 + + + + + + + + + + ui_icons_paw_pin_bwhr_bio64 + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_npcs.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_npcs.xml new file mode 100644 index 00000000..da1177a3 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_npcs.xml @@ -0,0 +1,164 @@ + + + + + + + + ui_icons_paw_pin_cursor_diamond_f + + + + + + + + + ui_icons_paw_pin_cursor_diamond_n + + + + + + + + + ui_icons_paw_pin_cursor_diamond_e + + + + + + + + + + ui_icons_paw_pin_cursor_chevron_f + + + + + + + + + ui_icons_paw_pin_cursor_chevron_n + + + + + + + + + ui_icons_paw_pin_cursor_chevron_e + + + + + + + + + + ui_icons_paw_pin_cursor_flag_f + + + + + + + + + ui_icons_paw_pin_cursor_flag_n + + + + + + + + + ui_icons_paw_pin_cursor_flag_e + + + + + + + + + + ui_icons_paw_pin_impobj_mechanic + + + + + + + + + ui_icons_paw_pin_impobj_trade + + + + + + + + + ui_icons_paw_pin_impobj_person + + + + + + + + + ui_icons_paw_pin_impobj_food + + + + + + + + + ui_icons_paw_pin_impobj_medic + + + + + + + + + + ui_icons_paw_pin_impobj_bed + + + + + + + + + ui_icons_paw_pin_impobj_briefcase + + + + + + + + + ui_icons_paw_pin_obj_lock + + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_patches.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_patches.xml new file mode 100644 index 00000000..f1d7d268 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_patches.xml @@ -0,0 +1,339 @@ + + + + + + + + ui_icons_paw_badge_army + + + + + + + + + ui_icons_paw_badge_bandit + + + + + + + + + ui_icons_paw_badge_csky + + + + + + + + + ui_icons_paw_badge_dolg + + + + + + + + + ui_icons_paw_badge_ecolog + + + + + + + + + ui_icons_paw_badge_freedom + + + + + + + + + ui_icons_paw_badge_killer + + + + + + + + + ui_icons_paw_badge_monolith + + + + + + + + + ui_icons_paw_badge_stalker + + + + + + + + + ui_icons_paw_badge_greh + + + + + + + + + ui_icons_paw_badge_isg + + + + + + + + + ui_icons_paw_badge_renegade + + + + + + + + + + ui_icons_paw_badge_hr_army + + + + + + + + + ui_icons_paw_badge_hr_bandit + + + + + + + + + ui_icons_paw_badge_hr_csky + + + + + + + + + ui_icons_paw_badge_hr_dolg + + + + + + + + + ui_icons_paw_badge_hr_ecolog + + + + + + + + + ui_icons_paw_badge_hr_freedom + + + + + + + + + ui_icons_paw_badge_hr_killer + + + + + + + + + ui_icons_paw_badge_hr_monolith + + + + + + + + + ui_icons_paw_badge_hr_stalker + + + + + + + + + ui_icons_paw_badge_hr_greh + + + + + + + + + ui_icons_paw_badge_hr_isg + + + + + + + + + ui_icons_paw_badge_hr_renegade + + + + + + + + + + ui_icons_paw_badge_uhr_army + + + + + + + + + ui_icons_paw_badge_uhr_bandit + + + + + + + + + ui_icons_paw_badge_uhr_csky + + + + + + + + + ui_icons_paw_badge_uhr_dolg + + + + + + + + + ui_icons_paw_badge_uhr_ecolog + + + + + + + + + ui_icons_paw_badge_uhr_freedom + + + + + + + + + ui_icons_paw_badge_uhr_killer + + + + + + + + + ui_icons_paw_badge_uhr_monolith + + + + + + + + + ui_icons_paw_badge_uhr_stalker + + + + + + + + + ui_icons_paw_badge_uhr_greh + + + + + + + + + ui_icons_paw_badge_uhr_isg + + + + + + + + + ui_icons_paw_badge_uhr_renegade + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_pins.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_pins.xml new file mode 100644 index 00000000..c0fa271f --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/map_spots_paw_pins.xml @@ -0,0 +1,89 @@ + + + + + + + + ui_icons_paw_pin_redpush32 + + + + ui_icons_paw_pin_redpush32 + + + + + + + + + + ui_icons_paw_pin_redmodern32 + + + + ui_icons_paw_pin_redmodern32 + + + + + + + + + + ui_icons_paw_pin_redround32 + + + + ui_icons_paw_pin_redround32 + + + + + + + + + + ui_icons_paw_pin_stalker64 + + + + ui_icons_paw_pin_stalker64 + + + + + + + + + + ui_icons_paw_pin_yelpush32 + + + + ui_icons_paw_pin_yelpush32 + + + + + + + + + + ui_icons_paw_pin_whtsimple32 + + + + ui_icons_paw_pin_whtsimple32 + diff --git a/mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_hud_indicator.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_indicator.xml similarity index 100% rename from mods/Personal Adjustable Waypoint/gamedata/configs/ui/paw_hud_indicator.xml rename to mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_indicator.xml diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_pin_icon.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_pin_icon.xml new file mode 100644 index 00000000..1e7eab71 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_pin_icon.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_wp_icon.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_wp_icon.xml new file mode 100644 index 00000000..e1481a14 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_hud_wp_icon.xml @@ -0,0 +1,11 @@ + + + + + + ui_icons_paw_hud_waypoint + + + + + \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_input_window.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_input_window.xml new file mode 100644 index 00000000..5a54f84f --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/paw_input_window.xml @@ -0,0 +1,28 @@ + + + + ui_inGame2_message_box + + + + + + + + + + + ui_inGame2_edit_box_2 + + + + ui_inv_cancel + ui_button_ordinary + + + + ui_inv_ok + ui_button_ordinary + + + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml new file mode 100644 index 00000000..b07c2a30 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/configs/ui/textures_descr/ui_catsy_paw_texd.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/catsy_paw_mcm.script b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/catsy_paw_mcm.script new file mode 100644 index 00000000..ee9b332d --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/catsy_paw_mcm.script @@ -0,0 +1,1396 @@ +-- ====================================================================== +--[[ Personal Adjustable Waypoint +-- ====================================================================== + MCM initialization script + Author: Catspaw (CatspawMods @ ModDB) + Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + You probably shouldn't mess with this, even if you're familiar with + MCM's menus. It involves a fair bit of black magic, and updates all + sorts of things dynamically based on the contents of the ltx files in + configs\scripts\paw, and touches MCM in some fairly unwholesome ways. +-- ===================================================================--]] + +debuglogs = false -- Controls debug logging if you don't have MCM +verbose = true +local scriptname = "catsy_paw_mcm" +local logprefix = " " +local paw = tasks_placeable_waypoints +printf(logprefix.."Forcing tasks_placeable_waypoints.script to load first") +paw.load_me = function() return paw and paw.started end +-- Force tasks_placeable_waypoints to load first using a dummy monkeypatch +local ts = game.translate_string +local psk = utils_data.parse_string_keys +local text_colors = paw.text_colors +local icon_sets_ini = ini_file_ex("scripts\\paw\\icon_sets.ltx") +local iconset_ltx = icon_sets_ini:get_sections(true) +local icon_sets = {} +local icons_ini = ini_file_ex("scripts\\paw\\icons.ltx") +local icon_ltx = icons_ini:collect_section("icons") +local icons = icon_ltx +local pawmenu_path = "ui_mcm_pawsys_pawmenu_" +local actions_ini = ini_file_ex("scripts\\paw\\menu_actions.ltx") +local actions_ltx = actions_ini:get_sections(true) +local load_failed = false +local load_error_text1 = {id = "load_error1", type = "desc", text = "st_paw_texture_load_error1"} +local load_error_text2 = {id = "load_error2", type = "desc", text = "st_paw_texture_load_error2"} +local load_error_text_block = {load_error_text1,load_error_text2,divider} +local divider = {id = "divider", type = "line"} +local action_codes = {} +local action = {} +local dynamic_faves = {} +-- ======================================================================= + +local preview_started = false +unsquish_ratio = 1 +aspect_ratio = "16_9" +aspects = { + ["21_9"] = { + x = 640, + y = 270, + node = "preview_21_9", + scale_x = 640/1024, + scale_y = 270/768, + unratio = round_idp((1080/2560)/0.75,4), + enabled = true, + }, + ["16_9"] = { + x = 480, + y = 270, + node = "preview_16_9", + scale_x = 480/1024, + scale_y = 270/768, + unratio = round_idp((1080/1920)/0.75,4), + enabled = true, + }, + ["16_10"] = { + x = 420, + y = 262, + node = "preview_16_10", + scale_x = 420/1024, + scale_y = 262/768, + unratio = round_idp((1200/1920)/0.75,4), + enabled = true, + }, + ["4_3"] = { + x = 360, + y = 270, + node = "preview_4_3", + scale_x = 360/1024, + scale_y = 270/768, + unratio = 1, + enabled = true, + }, +} + +local default_widget_state = { + curr_x = 890, + curr_y = 620, + cust_x = 491, + cust_y = 670, + themename = "classicauto", + curr_aspect = "16_9", + use_custom = false, +} +local pws = default_widget_state +function usr(n) return n * unsquish_ratio end + +-- ======================================================================= + +function dl(logtext,...) + -- Debug logging + if logtext and debuglogs then + printf(logprefix..logtext,...) + end +end + + +function vl(logtext,...) + -- Verbose logging + if logtext and debuglogs and verbose then + dl("[V] "..logtext,...) + end +end + +function load_ltx_data() + for w, _ in pairs(iconset_ltx) do + local iconset_ltx_prefix = "iconset_" + local icons_pos = string.find(w,iconset_ltx_prefix) + if icons_pos == 1 then + local group = string.sub(w,icons_pos+string.len(iconset_ltx_prefix)) + local set_cfg = icon_sets_ini:collect_section(w) + + local name = set_cfg.name + local def = set_cfg.default + local sec_list = group.."_icons" + dl("default icon for icon_sets_ini:collect_section(%s): %s",sec_list,def) + local iconlist = icon_sets_ini:collect_section(sec_list) + for k,v in spairs(iconlist) do + dl("Adding icon to drop-down list: %s",k) + end + + + dl("Found icon set %s with group %s, section %s",ts(name),group,sec_list) + icon_sets[group] = { + name = name, + group = group, + default = def, + active_icon = icons[def], + icons = iconlist, + } + local ig = icon_sets[group].icons + dl("Final values loaded for icon_set[%s] (%s):\nIcons: ",group,ts(name)) + + + for k,v in pairs(ig) do + dl("%s = %s",k,v) + end + end + end + dl("Loading menu actions from actions_ini") + for w, _ in pairs(actions_ltx) do + action_codes[w] = actions_ini:collect_section(w) + local ac = action_codes[w] + local opt_loc = ts(pawmenu_path..ac.text) + local isnum = ac and ac.mode and (type(ac.mode) == "number") + if isnum then + ac.mode = clamp(ac.mode,0,4) + else + ac.mode = 0 + end + ac.enable = (ac.enable == "true") + action[opt_loc] = w + if verbose then + vl("Initializing menu action:\n%s = %s",opt_loc,action[opt_loc]) + for k,v in pairs(ac) do vl("%s = %s",k,v) end + vl("action[\"%s\"] = %s",opt_loc,action[opt_loc]) + end + end + table.sort(icons) + table.sort(icon_sets) + table.sort(action_codes) +end +load_ltx_data() + + +local function populate_set_list() + dl("populate_set_list called") + local ig = icon_sets + local pg = "pawsys_pg_" + local ind = 1 + local content = {} + content[ind] = {"faves",pg.."faves"} + dl("adding favorites to first index: {%s,%s}",content[1][1],content[1][2]) + for g,_ in pairs (ig) do + if g ~= "faves" then + ind = ind +1 + table.insert(content,ind,{g,pg..g}) + dl("adding %s to list at index %s: {%s,%s}",g,ind,content[ind][1],content[ind][2]) + end + end + return content +end + +local function populate_icon_list(group) + dl("populate_icon_list called for group %s",group) + local ig = icon_sets[group].icons + local content = {} + for icon,_ in spairs (ig) do + local ic = icons[icon] + if ic then + local entry = {icon,icons[icon]} + table.insert(content,entry) + vl("populate_icon_list adding option for group %s: {%s,%s}",group,entry[1],entry[2]) + else + dl("WARNING: member %s not found in icons.ltx! Check your customizations.",icon) + end + end + + return content +end + +function populate_autotag_menus() + dl("populate_autotag_menus called") + + local gr = { + {id = "reticle_header", type= "image", link = "ui_paw_emptytex", size= {512,170}, + ui_hook_functor = {catsy_paw_mcm.mcm_init_header_text_block}, + }, + + {id = "reticle_mustzoom", type = "check", val = 1, def = true}, + {id = "pin_auto_visible", type = "check", val = 1, def = true}, + {id = "reticle_mode", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "reticle_alpha", type = "track", val = 2, min = 1, max = 255, step = 1, def = 120}, + {id = "ret_fade_attack_time", type = "input", val = 2, min = 1, max = 5000, def = 150}, + {id = "ret_fade_decay_time", type = "input", val = 2, min = 1, max = 5000, def = 250}, + {id = "autotag_header", type = "image", link = "ui_paw_emptytex", size = {512,50}, + ui_hook_functor = {catsy_paw_mcm.mcm_init_header_text_block}, + }, + {id = "enable_autotag", type = "check", val = 1, def = false}, + {id = "manual_smart_pins", type = "check", val = 1, def = true}, + {id = "autotag_persistence", type = "check", val = 1, def = false}, + {id = "autotag_lifetime", type = "track", val = 2, min = 0, max = 600, step = 1, def = 0}, + } + + if load_failed then + table.insert(gr,divider) + table.insert(gr,load_error_text1) + table.insert(gr,load_error_text2) + table.insert(gr,divider) + return gr + end + + for tag,defs in spairs(paw.smart_pins) do + dl("populate_autotag_menus adding entry for %s (default %s)",tag,defs.pin) + enable_opt = { + id = tag.."_enable", + type = "check", + val = 1, + def = defs.enabled, + --on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + } + --local current = axr_main.config:r_value("mcm", "pawsys/pawret/"..tag, {val=0}) + local def = defs.pin or icon_sets["npcs"].default + menu_opt = { + id = tag, + type = "list", + val = 0, + def = def, + ui_hook_functor = {catsy_paw_mcm.init_mcm_set_ind}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = populate_icon_list("smartpins") + } + table.insert(gr,menu_opt) + table.insert(gr,enable_opt) + end + table.insert(gr,divider) + + vl("results for populate_autotag_menus:") + if verbose then + for k,v in pairs(gr) do + local st = k..string.format("=%s",v)..":\n{" + for m,o in pairs(v) do + st = st..m.."="..tostring(o).."," + end + st = st.."}" + vl(st) + end + end + + return gr +end + + +function populate_set_menus() + dl("populate_set_menus called") + local poi ="poi_icon_" + + local recfaves = {{0,"pawsys_cmenu_off"},} + for i = 1,10 do table.insert(recfaves,{i,"paw_last_"..tostring(i)}) end + + local gr = { + {id = "header", type= "slide", link= "ui_paw_menuslide_pins", size= {512,50}, spacing= 20}, + {id = "indicator", type= "image", ui_hook_functor={catsy_paw_mcm.init_mcm_header_ind}}, + {id = "pin_icon_group", type= "list", on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, val = 0, def = "pins", content = populate_set_list()}, + {id = "divider", type= "line"}, + --{id = "fave_recent", type = "list", val = 2, def = 5, content = recfaves}, + } + + if load_failed then + table.insert(gr,divider) + table.insert(gr,load_error_text1) + table.insert(gr,load_error_text2) + table.insert(gr,divider) + return gr + end + + local newentry = { + id = poi.."faves", + type = "list", + val = 0, + def = icon_sets["faves"].default, + ui_hook_functor = {catsy_paw_mcm.init_mcm_set_ind}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = populate_icon_list("faves") + } + table.insert(gr,newentry) + for g,_ in pairs(icon_sets) do + if g ~= "faves" then + dl("populate_set_menus adding entry for icon set %s",g) + local ig = icon_sets[g] + newentry = { + id = poi..g, + type = "list", + val = 0, + def = ig.default, + ui_hook_functor = {catsy_paw_mcm.init_mcm_set_ind}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = populate_icon_list(g) + } + dl("newentry.id %s | type %s | val %s | def %s | content: %s",newentry.id,newentry.type,newentry.val,newentry.def,newentry.content) + table.insert(gr,newentry) + end + end + table.insert(gr,{id = "divider", type = "line"}) + table.insert(gr,{id = "header", type= "slide", link= "ui_paw_menuslide_badges", size= {512,50}, spacing= 20}) + + table.insert(gr,{id = "patch_res", type = "list", val = 0, def = "badge", + content = { + {"badge","pawsys_cfg_badge_res"}, + {"badge_hr","pawsys_cfg_badge_hr_res"}, + {"badge_uhr","pawsys_cfg_badge_uhr_res"}, + } + }) + table.insert(gr,{id = "milpda_body_icon", type = "list", val = 0, def = "bodyoff", + content = { + {"off","pawsys_cfg_bodyoff"}, + {"fac","pawsys_cfg_bodyfac"}, + {"set","pawsys_cfg_bodyset"}, + } + }) + table.insert(gr,{id = "use_custom_pin_icon", type = "check", val = 1, def = false}) + table.insert(gr,{id = "custom_pin_icon", type = "input", val = 0, def = "user_defined"}) + vl("results for populate_set_menus:") + if verbose then + for k,v in pairs(gr) do + local st = "{" + for m,o in pairs(v) do + st = st..m.."="..tostring(o).."," + end + st = st.."}" + vl(st) + end + end + + return gr +end + +function tbl_to_mcm_string(tbl) + for k,v in pairs(v) do + st = st..k.."="..tostring(v).."," + end + st = st.."}" + vl("tbl_to_mcm_string returned %s",st) + return st +end + +-- ====================================================================== + +function on_mcm_load() + load_failed = not (paw and paw.load_me()) + + aspect_ratio = get_current_aspect_ratio() + _ = load_icoset_state() + + local pawgen = { + {id = "header", type= "slide", link= "ui_paw_menuslide_main", size= {512,50}, spacing= 20}, + {id = "wp_hud_icon_enabled", type = "check", val = 1, def = true}, + {id = "show_dist_wp", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + {id = "show_dist_pins", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + {id = "show_hint_pins", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + {id = "wp_clear_dist", type= "track", val = 2, min = 0, max = 50, step = 1, def = 5}, + {id = "pin_near_fade_dist", type= "track", val = 2, min = 0, max = 50, step = 1, def = 5}, + {id = "pin_far_fade_dist", type= "track", val = 2, min = 20, max = 500, step = 1, def = 100}, + {id = "pin_far_hide_dist", type= "track", val = 2, min = 1, max = 250, step = 1, def = 150}, + {id = "tip_on_icoset_change", type= "check", val = 1, def = true}, + {id = "pingsound", type= "check", val = 1, def = true}, + {id = "s_device_pda_1", type= "check", val = 1, def = true}, + {id = "s_device_pda_2", type= "check", val = 1, def = true}, + {id = "s_device_pda_3", type= "check", val = 1, def = true}, + {id = "s_device_pda_milspec", type= "check", val = 1, def = true}, + {id = "disable_mcmups", type= "check", val = 1, def = false}, + {id = "welcome_msg_shown", type= "check", val = 1, def = false}, + {id = "wipe_all", type= "check", val = 1, def = false}, + {id = "debuglogs", type= "check", val = 1, def = false}, + {id = "pawlink", type= "desc", text = "ui_mcm_paw_moddb_link"}, + {id = "milpda", type= "desc", text = "ui_mcm_paw_milpda_link"}, + {id = "modbin", type= "desc", text = "ui_mcm_paw_modded_binaries"}, + } + if load_failed then + table.insert(pawgen,2,{id = "load_header1", type = "desc", text = "st_paw_texture_load_error_mcmhead1", clr = {255,255,0,0}, ui_hook_functor = {catsy_paw_mcm.mcm_init_load_error_block}}) + table.insert(pawgen,3,{id = "load_header2", type = "desc", text = "st_paw_texture_load_error_mcmhead2", clr = {255,255,0,0}}) + table.insert(pawgen,4,load_error_text1) + table.insert(pawgen,5,load_error_text2) + table.insert(pawgen,6,{id = "fix_load_order", type= "image", link = "ui_paw_mcm_fix_mo2_load_order", size= {575,50}, ui_hook_functor = {catsy_paw_mcm.mcm_init_load_error_block}}) + table.insert(pawgen,7,{id = "disable_load_warning", type = "check", val = 1, def = false}) + table.insert(pawgen,8,divider) + else + table.insert(pawgen,2,{id = "pawgen_header", type = "image", link = "ui_paw_emptytex", size = {512,155}, + ui_hook_functor = {catsy_paw_mcm.mcm_init_header_text_block}, + }) + + table.insert(pawgen,3,{id = "enabled", type = "check", val = 1, def = true}) + end + + op = { id = "pawsys", gr={ + -- GENERAL SETTINGS + { id = "pawgen", sh=true, gr=pawgen}, + + -- PIN SETTINGS (procedurally generated) + { id = "pawpins", sh=true, gr=populate_set_menus()}, + + -- AUTOTAG/SMART PIN SETTINGS + { id = "pawret", sh=true, gr=populate_autotag_menus()}, + + -- HUD WIDGET SETTINGS + { id = "pawhud", sh=true, gr={ + {id = "widget_header", type= "slide", link = "ui_paw_menuslide_widget", size= {512,50}, borderless= true, spacing= 0, + ui_hook_functor = {catsy_paw_mcm.mcm_init_widget_preview}, + }, + {id = "header", type= "desc", text = "ui_mcm_pawsys_pawhud_widgetinfo", + ui_hook_functor = {catsy_paw_mcm.mcm_init_widget_preview}, + }, + {id = "widget_enable", type= "check", val = 1, def = true}, + {id = "hudsound", type= "check", val = 1, def = true}, + {id = "autohide", type= "track", val = 2, min = 0, max = 120, step = 1, def = 5}, + {id = "active_theme", type= "list", val = 0, def = "classicauto", + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = { + {"classicauto","theme_classicauto"}, + {"classic","theme_classic"}, + {"vertright","theme_vertright"}, + {"vertleft","theme_vertleft"}, + {"gamma_right","theme_gamma_right"}, + {"gamma_left","theme_gamma_left"}, + {"minimal_h","theme_minimal_h"}, + {"minimal_v","theme_minimal_v"}, + {"minicom","theme_minicom"}, + {"compact_noui","theme_compact_noui"}, + } + }, + + {id = "preview_aspect", type = "list", val = 0, def = aspect_ratio, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + content = { + {"16_9","paw_aspect_16_9"}, + {"16_10","paw_aspect_16_10"}, + {"21_9","paw_aspect_21_9"}, + {"4_3","paw_aspect_4_3"}, + } + }, + + -- SCREEN POSITION PREVIEWER + {id = "pos_preview", type= "image", link = "ui_paw_emptytex", size= {512,270}, + ui_hook_functor = {catsy_paw_mcm.init_mcm_pos_preview}, + }, + + {id = "custompos", type = "check", val = 1, def = false, + --ui_hook_functor = {catsy_paw_mcm.mcm_move_custom_pos_elements}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + }, + {id = "pos_x", type = "input", val = 2, min = 0, max = 1024, def = 491, + --ui_hook_functor = {catsy_paw_mcm.mcm_move_custom_pos_elements}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + }, + {id = "pos_y", type = "input", val = 2, min = 0, max = 768, def = 670, + --ui_hook_functor = {catsy_paw_mcm.mcm_move_custom_pos_elements}, + on_selection_functor = {catsy_paw_mcm.mcm_on_value_select}, + }, + + divider, + + {id = "themedesc", type = "desc", text = "ui_mcm_themes_list"}, + + {id = "themelist", type = "desc", text = "ui_mcm_themes_classicauto"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_classic"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_vertright"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_vertleft"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_gamma_left"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_gamma_right"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_minimal_h"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_minimal_v"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_minicom"}, + {id = "themelist", type = "desc", text = "ui_mcm_themes_compact_noui"}, + divider, + }, + }, + + -- KEYBIND SETTINGS + { id = "pawbinds", sh=true, gr={ + {id = "header", type= "slide", link= "ui_paw_menuslide_controls", size= {512,50}, borderless= true, spacing= 20}, + {id = "featurehead", type = "desc", clr = {255,255,255,0}, text = "ui_mcm_paw_cartmode_head"}, + {id = "featuredesc", type = "desc", text = "ui_mcm_paw_cartmode_desc"}, + + {id = "bind_cartmode", type = "key_bind", val = 2, def = DIK_keys.DIK_SLASH }, + {id = "modk_cartmode", type = ui_mcm.kb_mod_radio, val = 2, def = 0, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + {id = "cartmode_toggle", type = "check", val = 1, def = false}, + {id = "cartmode_unfade", type = "check", val = 1, def = true}, + {id = "cart_shows_smarts", type = "check", val = 1, def = true}, + + divider, + + {id = "featurehead", type = "desc", clr = {255,255,255,0}, text = "ui_mcm_paw_crosshair_target_head"}, + {id = "featuredesc", type = "desc", text = "ui_mcm_paw_crosshair_target_desc"}, + + {id = "bind_wp_target_obj", type = "key_bind", val = 2, def = DIK_keys.DIK_SEMICOLON }, + {id = "modk_wp_target_obj", type = ui_mcm.kb_mod_radio, val = 2, def = 3, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + {id = "bind_pin_target_obj", type = "key_bind", val = 2, def = DIK_keys.DIK_APOSTROPHE }, + {id = "modk_pin_target_obj", type = ui_mcm.kb_mod_radio, val = 2, def = 3, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + divider, + + {id = "featurehead", type = "desc", clr = {255,255,255,0}, text = "ui_mcm_paw_generalbinds_head"}, + + {id = "bind_wptoggle", type = "key_bind", val = 2, def = DIK_keys.DIK_SEMICOLON }, + {id = "modk_wptoggle", type = ui_mcm.kb_mod_radio, val = 2, def = 0, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + {id = "bind_quickpin", type = "key_bind", val = 2, def = DIK_keys.DIK_APOSTROPHE }, + {id = "modk_quickpin", type = ui_mcm.kb_mod_radio, val = 2, def = 0, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + divider, + + {id = "bind_set_next", type = "key_bind", val = 2, def = 52 }, + {id = "modk_set_next", type = ui_mcm.kb_mod_radio, val = 2, def = 3, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + {id = "bind_set_prev", type = "key_bind", val = 2, def = 51 }, + {id = "modk_set_prev", type = ui_mcm.kb_mod_radio, val = 2, def = 3, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + {id = "bind_ico_next", type = "key_bind", val = 2, def = 52 }, + {id = "modk_ico_next", type = ui_mcm.kb_mod_radio, val = 2, def = 0, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + {id = "bind_ico_prev", type = "key_bind", val = 2, def = 51 }, + {id = "modk_ico_prev", type = ui_mcm.kb_mod_radio, val = 2, def = 0, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + divider, + + {id = "featurehead", type = "desc", clr = {255,255,255,0}, text = "ui_mcm_paw_mousewheel_head"}, + + {id = "mwheel_enabled", type = "check", val = 1, def = true}, + {id = "mwheel_notify", type = "check", val = 1, def = true}, + {id = "bind_set_scroll", type = "key_bind", val = 2, def = DIK_keys.DIK_Z}, + {id = "modk_set_scroll", type = ui_mcm.kb_mod_radio, val = 2, def = 2, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + {id = "bind_ico_scroll", type = "key_bind", val = 2, def = DIK_keys.DIK_Z }, + {id = "modk_ico_scroll", type = ui_mcm.kb_mod_radio, val = 2, def = 3, hint = "mcm_kb_modifier", + content = { + {0,"mcm_kb_mod_none"}, + {1,"mcm_kb_mod_shift"}, + {2,"mcm_kb_mod_ctrl"}, + {3,"mcm_kb_mod_alt"} + }}, + + divider, + }, + }, +-- CONTEXT MENU SETTINGS + { id = "pawmenu", sh=true, gr={ + -- Virtualize in ltx like the others at some point + {id = "header", type= "slide", link= "ui_paw_menuslide_menus", size= {512,50}, borderless= true, spacing= 20}, + {id = "headertxt", type = "desc", text = "ui_mcm_pawsys_pawmenu_headertxt"}, + + {id = "wp_set", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + {id = "wp_mov", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "waypoint_rename", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "waypoint_redesc", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "wp_del", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "pn_add", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "pn_del", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "pn_ren", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "show_all_pins", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "hide_all_pins", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + + }, + {id = "lock_pin", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "unlock_pin", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "hud_vis_on", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "hud_vis_off", type = "list", val = 2, def = 4, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + + {id = "pn_clr", type = "list", val = 2, def = 0, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + + {id = "mping", type = "list", val = 2, def = 2, + content = { + {4,"pawsys_cmenu_all"}, + {1,"pawsys_cmenu_norm"}, + {2,"pawsys_cmenu_cart"}, + {0,"pawsys_cmenu_off"}, + } + }, + }, + }, + } + } + + return op +end + +--[[===================================================================== + Everything after this point is fuckin voodoo magic, man + + Dependent on and called only by the custom MCM functors added in: + zzzzz_monkey_paw_ui_mcm.script +-- ====================================================================]] + +icoset = {} +icoset._changed = {} + +local xml = CScriptXmlInit() +local xmlroot = "paw_mcm_pos_preview" +local box_pname, ui_img, theme_box, theme_preview, theme_curr_i, theme_next_i, theme_prev_i + +--[[ +function get_cached_pin_for_set(setname,opid,default) + if not setname then return end + opid = opid or "pawsys/pawpins/poi_icon_" .. setname + local pcur = icoset._changed[opid] + if pcur == nil then + pcur = axr_main.config:r_value("mcm", opid, {val=0}) + if pcur == nil then + local setdata = icon_sets[setname] + pcur = ui_mcm.UIMCM:GetDefaultValue(path,icoset_id,{def=default or (setdata and setdata.default or "redpush32"),val=0}) + end + end + return pcur +end +--]] + +function get_cached_pin_for_set(setname,opid) + if not setname then return end + opid = opid or "pawsys/pawpins/poi_icon_" .. setname + local pcur = icoset._changed[opid] + if pcur == nil then + pcur = axr_main.config:r_value("mcm", opid, {val=0}) + if pcur == nil then + local setdata = icon_sets[setname] + pcur = ui_mcm.UIMCM:GetDefaultValue(path,icoset_id,{def=(setdata and setdata.default or "redpush32"),val=0}) + end + end + return pcur +end + + +function load_icoset_state() + dl("Loading icon and set states") + local path = "pawsys/pawpins" + icoset.set_curr = axr_main.config:r_value("mcm", path.."/pin_icon_group", {val=0}) or "pins" + icoset.pin_curr = axr_main.config:r_value("mcm", path.."/poi_icon_"..icoset.set_curr, {val=0}) + if not icoset.pin_curr then + icoset.setdata = icon_sets[icoset.set_curr] + local setdata = icoset.setdata + local icoset_id = "poi_icon_"..icoset.set_curr + icoset.pin_curr = ui_mcm.UIMCM:GetDefaultValue(path,icoset_id,{def=(setdata and setdata.default or "redpush32"),val=0}) + end + icoset.ico_curr = icons[icoset.pin_curr] + icoset.tex_curr = "ui_icons_paw_pin_redpush32" + local tdata = paw and paw.texture_data + if tdata and not load_failed then + icoset.tex_curr = tdata and tdata[icoset.ico_curr] and tdata[icoset.ico_curr].t + end + dl("Icoset state: curr set %s | curr pin %s",icoset.set_curr,icoset.pin_curr) +end + + +local function asp_scale(x,y,aspect) + if not x and y then return 0,0 end + local ox,oy=x,y + local asp = aspect or pws.curr_aspect + local rat_x = aspects[asp].scale_x + local rat_y = aspects[asp].scale_y + x = x * rat_x * unsquish_ratio + y = y * rat_y + vl("%s, %s scaled to %s, %s for aspect %s",ox,oy,x,y,pws.curr_aspect) + return x,y +end + +pws.eff_x = function() + x = (pws.use_custom and pws.cust_x) or pws.curr_theme.pos.x + vl("eff_x: %s | custom %s",x,pws.use_custom) + return x + end +pws.eff_y = function() + y = (pws.use_custom and pws.cust_y) or pws.curr_theme.pos.y + vl("eff_y: %s | custom %s",y,pws.use_custom) + return y + end +pws.adj_x = function() + effx = pws.eff_x() + x, _ = asp_scale(effx, 1) + vl("adj_x: %s -> %s",effx,x) + return x + end +pws.adj_y = function() + effy = pws.eff_y() + _, y = asp_scale(1, effy) + vl("adj_y: %s -> %s",effy,y) + return y + end + + +function populate_mcm_set_ind(path,opt,opid) + local opid = opid or ui_mcm.cc(path,opt) + local wnd = icoset and icoset[opid] + local tdata = paw and paw.texture_data + if not wnd and tdata then return end + local pin = (icoset and icoset._changed and icoset._changed[opid]) or axr_main.config:r_value("mcm", opid, {val=0}) + local icon = icons[pin] + local tex = tdata and tdata[icon] and tdata[icon].t + dl("Updating texture for %s to %s",opid,tex) + wnd:InitTexture(tex or "ui_icons_paw_pin_redpush32") +end + + +function init_mcm_set_ind(anchor, handlers, opts, flags) + local opt = opts and opts.id + if not opt then return end + local path = flags.path + local opid = ui_mcm.cc(path,opt) + dl("Initializing icon indicator for MCM menu item %s",opid) + if handlers and (type(handlers) == "table") then + -- This is a newer version of the functor with a different container position + anchor = handlers.ctrl + end + local opt_box = xml:InitStatic("paw_mcm_indicator:mini_left",anchor) + opt_box:InitTexture("ui_paw_mapsquareframe") + icoset[opid] = xml:InitStatic("paw_mcm_indicator:mini_left:icon",opt_box) + populate_mcm_set_ind(path,opt,opid) +end + + +function init_mcm_header_ind(anchor, handlers, opts, flags) + vl("init_mcm_header_ind called") + local path = "pawsys/pawpins" + local icon_text_head1 = ts("ui_mcm_paw_current_active_pin") + local icon_text_head2 = ts("ui_mcm_lst_"..icoset.ico_curr) + local icon_text_head3 = ts("ui_mcm_paw_pinmenu_header") + icoset.txt_curr = icon_text_head2 + vl("Current set: %s (%s) | icon %s | texture %s",icoset.txt_curr,icoset.set_curr,icoset.ico_curr,icoset.tex_curr) + + local xmlroot = "paw_mcm_indicator" + + xml:ParseFile("paw_hud_indicator.xml") + box_wnd = xml:InitStatic(xmlroot,anchor) + box_wnd:SetWndSize(vector2():set(563,40)) + box_img = xml:InitStatic(xmlroot..":curr",box_wnd) + ui_img = xml:InitStatic(xmlroot..":curr:icon",box_img) + box_img:InitTexture("ui_paw_mapsquarebg") + ui_img:InitTexture(icoset.tex_curr or "ui_icons_paw_pin_redpush32") + box_head = xml:InitTextWnd(xmlroot..":head",box_wnd) + box_pname = xml:InitTextWnd(xmlroot..":pname",box_wnd) + box_desc = xml:InitTextWnd(xmlroot..":desc",box_wnd) + box_head:SetText(icon_text_head1) + box_pname:SetText(icon_text_head2) + box_desc:SetText(icon_text_head3) +end + + +local function get_theme_data(mcm_theme_opt) + --local thm = string.sub(mcm_theme_opt,7) + local theme = paw and paw.hud_themes and paw.hud_themes[mcm_theme_opt] + --printf("get_theme_data(%s) : %s",mcm_theme_opt,theme and theme.name) + return theme +end + + + +local res = {} +local box = {} +local wid = {} + + +local function reset_widget_pos() + if not preview_started then return end + local asp = aspect or pws.curr_aspect + local x = pws.adj_x() + local y = pws.adj_y() + vl("PosPreviewer: resetting %s widget pos to %s, %s",asp,x,y) + pws.curr_x = x + pws.curr_y = y + wid[asp]:SetWndPos(vector2():set(x,y)) + --wid[asp]:SetWndPos(vector2():set(x * unsquish_ratio,y)) +end + + +local function reset_widget_size(element, theme, aspect, ok_flag, scale, unsquish) + if not ok_flag then return end + local asp = aspect or "16_9" + local w = theme and theme.w or element:GetWidth() + local h = theme and theme.h or element:GetHeight() + local rs = 16/9/5 + local ww = w * (scale or 1) * (unsquish or unsquish_ratio) + local wh = h * (scale or 1) + vl("Resetting widget size for %s to %sx%s",theme and theme.name,ww,wh) + element:SetWndSize(vector2():set(ww,wh)) +end + + +function reset_theme(theme, aspect) + local theme = theme or pws.curr_theme + local asp = aspect or pws.curr_aspect + --printf("reset_theme(%s, %s)",theme and theme.name,aspect) + local a = aspects[asp] + box[asp]:InitTexture("ui_paw_mcmpre_"..asp) + box[asp]:SetWndSize(vector2():set(a.x * unsquish_ratio,a.y)) + local tex = theme.pre_tex or theme.tex + wid[asp]:InitTexture(tex) + --printf("Initializing texture %s (%sx%s) in preview_%s",tex,a.x,a.y,asp) + reset_widget_size(wid[asp], pws.curr_theme, pws.curr_aspect, preview_started, 16/9/5) + reset_widget_pos() + res[asp]:SetText(ts("ui_mcm_paw_resolutions_"..(pws.curr_aspect or ""))) + res[asp]:Show(true) + box[asp]:Show(true) + wid[asp]:Show(true) +end + + +function reset_aspect(aspect) + vl("PosPreviewer: switching aspect ratio to %s",aspect) + for k,v in pairs(aspects) do + res[k]:Show(false) + box[k]:Show(false) + wid[k]:Show(false) + end + pws.curr_aspect = aspect + res[pws.curr_aspect]:Show(false) + box[pws.curr_aspect]:Show(false) + wid[pws.curr_aspect]:Show(false) + reset_theme(pws.curr_theme,pws.curr_aspect) +end + + +function get_theme_or_override_pos(theme) + local pos = theme and theme.pos and theme.pos + + if custom then + pos.x = ui_mcm.get("pawsys/pawhud/pos_x") + pos.y = ui_mcm.get("pawsys/pawhud/pos_y") + end + return pos +end + + +function init_mcm_pos_preview(anchor, handlers, opts, flags) + vl("init_mcm_pos_preview | unsquish %s",unsquish_ratio) + pws.themename = ui_mcm.get("pawsys/pawhud/active_theme") or "classicauto" + pws.curr_theme = get_theme_data(pws.themename) + pws.curr_aspect = ui_mcm.get("pawsys/pawhud/preview_aspect") or "16_9" + pws.use_custom = ui_mcm.get("pawsys/pawhud/custompos") or false + pws.cust_x = ui_mcm.get("pawsys/pawhud/pos_x") or 491 + pws.cust_y = ui_mcm.get("pawsys/pawhud/pos_y") or 690 + + xml:ParseFile("paw_hud_indicator.xml") + local theme = pws.curr_theme + box.wnd = xml:InitStatic(xmlroot,anchor) + box.wnd:SetWndSize(vector2():set(640 * unsquish_ratio,270)) + box.wnd:SetWndPos(vector2():set(180,0)) + box.txt = xml:InitTextWnd(xmlroot,anchor) + box.txt:SetWndSize(vector2():set(170,50)) + box.txt:SetWndPos(vector2():set(15,20)) + box.txt:SetText(ts("ui_mcm_paw_resolutions").."\n") + + + for k,v in pairs (aspects) do + local asp = k + box[asp] = xml:InitStatic(xmlroot..":preview_"..asp,box.wnd) + wid[asp] = xml:InitStatic(theme.node,box[asp]) + res[asp] = xml:InitTextWnd(xmlroot,anchor) + res[asp]:SetWndSize(vector2():set(170,200)) + res[asp]:SetWndPos(vector2():set(15,70)) + box[asp]:Show(false) + wid[asp]:Show(false) + + vl("Finished generating box and wid for aspect ratio %s",asp) + end + + box[pws.curr_aspect]:Show(true) + wid[pws.curr_aspect]:Show(true) + + pws.use_custom = ui_mcm.get("pawsys/pawhud/custompos") + pws.cust_x = ui_mcm.get("pawsys/pawhud/pos_x") + pws.cust_y = ui_mcm.get("pawsys/pawhud/pos_y") + + dl("Finished init for pos preview module | theme %s | aspect %s",pws.themename,pws.curr_aspect) + preview_started = true + reset_theme() +end + + + +function get_current_aspect_ratio() + unsquish_ratio = (device().height / device().width) / (768 / 1024) + local unratio = round_idp(unsquish_ratio,4) + + if unratio == 1 then + asprat = "4_3" -- please upgrade + elseif unratio > 0.8 then + asprat = "16_10" -- some monitors and smartphones + elseif unratio < 0.7 then + asprat = "21_9" -- some kind of ultrawide + else + asprat = "16_9" -- assume HDTV standard, 1080p + end + return asprat +end + + +function init_theme_sim(theme) + if load_failed then return end + dl("init_theme_sim: attempting to initialize %s theme",theme and theme.name) + xml:ParseFile("paw_hud_indicator.xml") + if theme_preview then + if theme_preview.wnd then theme_preview.wnd:Show(false) end + if theme_preview.empty then theme_preview.empty:Show(false) end + end + theme_preview = {} + local set_curr = icoset.set_curr or paw.active_set() or "faves" + setdata = paw.icon_sets[set_curr] + + local ico_curr = icoset.ico_curr or icoset.setdata and icoset.setdata.active_icon + local curr_ico_i = setdata.ri[paw.root_patch_name(ico_curr)] + + local next_i = paw.roll(curr_ico_i + 1, 1, #setdata.ii) + local prev_i = paw.roll(curr_ico_i - 1, 1, #setdata.ii) + local ico_next = setdata.ii[next_i] + local ico_prev = setdata.ii[prev_i] + local tex_c = paw.texture_data[ico_curr].t + local tex_p = paw.texture_data[ico_prev].t + local tex_n = paw.texture_data[ico_next].t + --local tex_c = paw.texture_data["paw_pin_redround32"].t + --local tex_p = paw.texture_data["paw_pin_redmodern32"].t + --local tex_n = paw.texture_data["paw_pin_redpush32"].t + local tex = theme.tex + local offset_x = 25 -- 10 + ((1 - (theme.w / 150)) * 60) + local offset_y = 10 + ((1 - (theme.h / 160)) * 80) + local wnd + + if tex then + theme_preview.wnd = xml:InitStatic(theme.node,theme_box) + theme_preview.wnd:InitTexture(theme.tex) + paw.unsquish_aspect(theme_preview.wnd) + wnd = theme_preview.wnd + else + theme_preview.empty = xml:InitStatic(theme.node,theme_box) + wnd = theme_preview.empty + end + reset_widget_size(wnd, theme, aspect, true, 1, 1) + wnd:SetWndPos(vector2():set(offset_x,offset_y)) + wnd:Show(true) + + --printf("Showing theme %s | w %s h %s | offsets x %s y %s | tex: %s",theme.name,theme.w,theme.h,offset_x,offset_y) + theme_preview.curr_i = xml:InitStatic(theme.node..":curr",wnd) + if tex_c then theme_preview.curr_i:InitTexture(tex_c) end + + if theme.style ~= "compact" then + theme_preview.prev_i = xml:InitStatic(theme.node..":prev",wnd) + tex = tex_p + if tex then theme_preview.prev_i:InitTexture(tex) end + + theme_preview.next_i = xml:InitStatic(theme.node..":next",wnd) + tex = tex_n + if tex then theme_preview.next_i:InitTexture(tex) end + + theme_preview.prev_i:SetTextureColor(paw.colors.dimmed) + theme_preview.next_i:SetTextureColor(paw.colors.dimmed) + theme_preview.box_head = xml:InitStatic(theme.node..":head",wnd) + theme_preview.box_text = xml:InitTextWnd(theme.node..":head",theme_preview.box_head) + end + if theme.style == "full" then + theme_preview.box_text:SetText(ts("ui_mcm_lst_pawsys_pg_"..icoset.set_curr)) + theme_preview.box_head2 = xml:InitStatic(theme.node..":head2",wnd) + theme_preview.box_text2 = xml:InitTextWnd(theme.node..":head2",theme_preview.box_head2) + theme_preview.box_text2:SetText(ts("ui_mcm_lst_"..icoset.ico_curr)) + elseif theme.style == "minimal" then + theme_preview.box_text:SetText(ts("ui_mcm_lst_"..icoset.ico_curr)) + end +end + + +function move_widget_slide(anchor, handlers, opts, flags) + --printf(" Moving widget slide header") + _ = handlers and handlers.pic and handlers.pic:SetWndPos(vector2():set(16,16)) +end + +function mcm_init_widget_preview(anchor, handlers, opts, flags) + --printf("mcm_init_widget_preview called with id %s",opts and opts.id) + if opts and (opts.id == "widget_header") then + --printf(" mcm_init_widget_preview handing off to move_widget_slide") + move_widget_slide(anchor, handlers, opts, flags) + return + end + + local desc = handlers and handlers.desc + if desc then + desc:SetWndSize(vector2():set(300, desc:GetHeight())) + end + xml:ParseFile("paw_hud_indicator.xml") + theme_box = xml:InitStatic(xmlroot,anchor) + theme_box:SetWndPos(vector2():set(330,-70)) + theme_box:SetWndSize(vector2():set(200,200)) + theme_box:InitTexture("ui_paw_mcm_loadframe_bg") + + theme_frame = xml:InitStatic(xmlroot,theme_box) + theme_frame:SetWndPos(vector2():set(0,0)) + theme_frame:SetWndSize(vector2():set(200,200)) + theme_frame:InitTexture("ui_paw_mcm_loadframe") + + local curr_theme = ui_mcm.get("pawsys/pawhud/active_theme") or "classicauto" + local theme = get_theme_data(curr_theme) + init_theme_sim(theme) +end + + +function mcm_init_header_text_block(anchor, handlers, opts, flags) + xml:ParseFile("paw_hud_indicator.xml") + local head = xml:InitStatic(xmlroot,anchor) + local tbg1 = xml:InitStatic(xmlroot,anchor) + local tbox1 = xml:InitTextWnd(xmlroot,tbg1) + + if (opts and opts.id) == "pawgen_header" then + tbg1:SetWndSize(vector2():set(usr(640),155)) + tbg1:SetWndPos(vector2():set(10,0)) + tbg1:InitTexture("ui_paw_mcm_messagebox_transbg") + + local text = psk(ts("ui_mcm_pawsys_pawgen_headertxt"),text_colors) + tbox1:SetWndSize(vector2():set(usr(620),145)) + tbox1:SetText(text) + tbox1:SetWndPos(vector2():set(10,12)) + + elseif (opts and opts.id) == "reticle_header" then + local tbox2 = xml:InitTextWnd(xmlroot,tbg1) + local ibox = xml:InitStatic(xmlroot,anchor) + anchor:SetWndSize(vector2():set(usr(640),175)) + + head:SetWndSize(vector2():set(usr(512),50)) + head:SetWndPos(vector2():set(15,5)) + head:InitTexture("ui_paw_mcm_reticle_header") + + tbg1:SetWndSize(vector2():set(usr(430),110)) + tbg1:SetWndPos(vector2():set(10,60)) + tbg1:InitTexture("ui_paw_mcm_messagebox_transbg") + + tbox1:SetWndSize(vector2():set(usr(420),100)) + tbox1:SetWndPos(vector2():set(13,10)) + tbox1:SetText(ts("ui_mcm_pawsys_pawhud_reticle_info1")) + --[[ + line:InitTexture("ui_inGame2_opt_slider_bar_back") + line:SetWndSize(vector2():set(usr(410),16)) + line:SetWndPos(vector2():set(10,120)) + --]] + tbox2:SetWndSize(vector2():set(usr(420),50)) + tbox2:SetText(ts("ui_mcm_pawsys_pawhud_reticle_info2")) + tbox2:SetWndPos(vector2():set(13,70)) + + ibox:SetWndSize(vector2():set(usr(280),280)) + ibox:SetWndPos(vector2():set(335,-10)) + ibox:InitTexture("ui_paw_mcm_reticlesquare") + + elseif (opts and opts.id) == "autotag_header" then + tbg1:SetWndSize(vector2():set(usr(300),102)) + tbg1:SetWndPos(vector2():set(323,32)) + tbg1:InitTexture("ui_paw_mcm_messagebox_transbg") + + line = xml:InitStatic(xmlroot,anchor) + line:InitTexture("ui_inGame2_opt_slider_bar_back") + line:SetWndSize(vector2():set(563,16)) + line:SetWndPos(vector2():set(5,0)) + + head:InitTexture("ui_paw_mcm_autotag_header") + head:SetWndSize(vector2():set(usr(512),50)) + head:SetWndPos(vector2():set(15,15)) + + tbox1:SetWndSize(vector2():set(usr(285),95)) + --tbox1:InitTexture("ui_inGame2_message_box") + tbox1:SetText(ts("ui_mcm_pawsys_pawhud_autotag_info")) + tbox1:SetWndPos(vector2():set(10,12)) + --tbox1:TextControl():SetTextColor(GetARGB(255,250,218,294)) + end +end + + +function mcm_init_load_error_block(anchor, handlers, opts, flags) + local id = opts and opts.id + if id == "fix_load_order" then + xml:ParseFile("paw_hud_indicator.xml") + local pic = handlers and handlers.pic + if not pic then return end + pic:InitTexture("ui_paw_emptytex") + local wnd = xml:InitStatic(xmlroot,anchor) + wnd:InitTexture("ui_paw_mcm_fix_mo2_load_order") + wnd:SetWndSize(vector2():set(575*unsquish_ratio,50)) + elseif id == "load_header1" then + local desc = handlers and handlers.desc + if not desc then return end + desc:SetFont(GetFontGraffiti22Russian()) + end +end + + +function mcm_on_value_select(path,opt,value,v) + if load_failed then return end + local opid = ui_mcm.cc(path,opt) + --printf("Callback received: MCM value select for %s: %s",opid,value) + if path == "pawsys/pawpins" then + local icon_change = false + icoset._changed[opid] = value + local icoset_id = "poi_icon_"..icoset.set_curr + if opt == "pin_icon_group" then + icon_change = true + icoset.set_curr = value + if icoset.set_curr == nil then + icoset.set_curr = ui_mcm.UIMCM:GetDefaultValue(path,"pin_icon_group",{def="pins",val=0}) + end + icoset_id = "poi_icon_"..icoset.set_curr + end + + icoset.pin_curr = get_cached_pin_for_set(icoset.set_curr) + icoset.ico_curr = icons[icoset.pin_curr] + icoset.tex_curr = "ui_icons_paw_pin_redpush32" + local tdata = paw and paw.texture_data + if tdata then + icoset.tex_curr = tdata and tdata[icoset.ico_curr] and tdata[icoset.ico_curr].t + if icoset[opid] then + populate_mcm_set_ind(path,opt,opid) + end + end + if icoset.tex_curr then + ui_img:InitTexture(icoset.tex_curr) + end + box_pname:SetText(ts("ui_mcm_lst_"..icoset.ico_curr)) + + vl("New current set: %s | icon %s | texture %s",icoset.set_curr,icoset.ico_curr,icoset.tex_curr) + elseif path == "pawsys/pawret" then + dl("MCM value change for %s/%s = %s",path,opt,value) + icoset._changed[opid] = value + --[[ + local pin = get_cached_pin_for_set(icoset.set_curr,opid,paw.smart_pins[opt].pin) + local ico = icons[pin] + local tex = "ui_icons_paw_pin_redpush32" + local tdata = paw and paw.texture_data + --]] + --if tdata then + tex = tdata and tdata[icoset.ico_curr] and tdata[icoset.ico_curr].t + if icoset[opid] then + dl("Updating texture for list item %s",opid) + populate_mcm_set_ind(path,opt,opid) + end + --end + elseif path == "pawsys/pawhud" then + dl("MCM value change for %s/%s = %s | curr_x %s curr_y %s | pws.themename %s | pws.curr_aspect %s",path,opt,value,pws.curr_x,pws.curr_y,pws.themename,pws.curr_aspect) + if opt == "active_theme" then + local theme = get_theme_data(value) + if theme then + pws.themename = value + pws.curr_theme = get_theme_data(value) + reset_theme(pws.curr_theme,pws.curr_aspect) + if theme_preview and theme then + vl("Updating theme preview to %s",theme and theme.name) + init_theme_sim(theme) + end + end + elseif opt == "preview_aspect" then + if aspects[value] then + reset_aspect(value) + end + elseif opt == "custompos" then + pws.use_custom = value + reset_widget_pos() + elseif pws.use_custom then + if (opt == "pos_x") then + pws.cust_x = value + elseif (opt == "pos_y") then + pws.cust_y = value + end + reset_widget_pos() + end + end +end + diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/modxml_map_spots_paw.script b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/modxml_map_spots_paw.script new file mode 100644 index 00000000..1b9d8482 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/modxml_map_spots_paw.script @@ -0,0 +1,27 @@ +-- ====================================================================== +--[[ Personal Adjustable Waypoint +-- ====================================================================== + Mapspot DXML update script + Author: Catspaw (CatspawMods @ ModDB) + Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + Modifying the contents of this file will only result in sadness. +-- ===================================================================--]] + +function on_xml_read() + RegisterScriptCallback("on_xml_read", + function(xml_file_name, xml_obj) + if (xml_file_name == [[ui\map_spots.xml]]) or + (xml_file_name == [[ui\map_spots_16.xml]]) or + (xml_file_name == [[ui\map_spots_21.xml]]) then + printf("DXML is patching mapspots for PAW in %s",xml_file_name) + + local paw_mapspots_include = +[[ +#include "ui\map_spots_paw.xml" +]] + xml_obj:insertFromXMLString(paw_mapspots_include) + end + end + ) +end \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/tasks_placeable_waypoints.script b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/tasks_placeable_waypoints.script new file mode 100644 index 00000000..3767c6d2 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/tasks_placeable_waypoints.script @@ -0,0 +1,3847 @@ +-- ====================================================================== +--[[ Personal Adjustable Waypoint & + Pins Recording Intel, Notes, or Terrain + Yes, I see what I did there, and so do you. +-- ====================================================================== + Author: Catspaw + I post gameplay video on my Youtube channel, Catspaw Adventures: + https://www.youtube.com/channel/UCtG8fiWPUZEzWlkUn60btAw + + Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + Version: 2.0.2 + Updated: 20231204 + + You may alter any part of this mod and do whatever you like with it, + just give credit where due. + + Right-click on any visible map point to set/move/remove a waypoint + or map pins. Map pins can be named, renamed, removed, and given + custom icons. The waypoint is tracked like a task. Semicolon (default) + toggles the current or most recent waypoint on/off. + + To see map points, hold Slash (default, configurable in MCM) to + enter Cartography Mode. In this mode, all terrain smart points are + visible. Both the hold and the terrain display are options in MCM. + + While in Cartography Mode, you can also Ping the map from the context + menu, creating a temporary grid of visible mapspots that you can use + for more precise placement. + + Press Apostrophe (default) to drop a Quick Pin at the player's + current location. + + Press Period or Comma (default) to cycle through active pins in the + current set, or hold Alt while doing this to cycle sets instead. + + Credits: HarukaSai, RavenAscendant, Ghen Tuong, demonized, and + many others who've assisted in ways big and small. +-- ====================================================================== +-- SHORTCUTS, FLAGS, AND SYSTEM STUFF + (Most of which you probably shouldn't muck with) +-- ===================================================================--]] +script_version = "2.0.2" +release_date = 20231204 +local scriptname = "tasks_placeable_waypoints" +local logprefix = " " +local language = "eng" +debuglogs = false -- Controls debug logging if you don't have MCM +verbose = true +-- Verbose being on won't do anything if debuglogs isn't also enabled, +-- but it will ensure that if anyone has to turn on debug logging, +-- their logs will contain the maximum amount of info automatically. +-- It's noisy and you can turn it off here if you have to. +-- ====================================================================== +modxml_map_spots_paw.load_me = function() end +-- ====================================================================== +function dl(logtext,...) + -- Debug logging - to disable, set debuglogs to false + if logtext and debuglogs then + printf (logprefix..logtext,...) + end +end + +function vl(logtext,...) + -- Verbose logging - to disable, set either debuglogs or verbose to false + if logtext and debuglogs and verbose then + dl("[V] "..logtext,...) + end +end +-- ====================================================================== +mcm_killswitch = false +-- Enabling the killswitch will hard-cutoff any attempt +-- to load values from MCM, in case that is causing issues. +disable_mcm_updates = false +-- This flag will disable the immediate MCM updates that happen +-- when changing icons or sets in-game. +paw_enabled = true -- setting false will killswitch the entire addon +local icoset_changed = nil +started = false -- runtime flag +waypoint_active = false -- runtime flag +waypoint_canceling = false -- runtime flag +disable_load_warning = false +local load_failed = false -- runtime flag +local welcome_msg_shown = false +local get_game_time = game.get_game_time +local get_start_time = level.get_start_time +local ts = game.translate_string +local tm = task_manager.get_task_manager() +local psk = utils_data.parse_string_keys +local task_info = tm.task_info +local floor,ceil = math.floor,math.ceil +local pow,sqrt = math.pow,math.sqrt +-- ====================================================================== +mousewheel_override = false +--[[ If set to true, mousewheel_override will skip the autodetection of + mousewheel support and force it to be on. This may have bad results + if your binaries don't actually support it. + + Mousewheel support can also be forced on by setting the following + MCM config value (not exposed in the menu): + + pawsys/pawbinds/mwheel_override = true +--]] +right_click_override = false +-- Similarly with right_click_override, but for the on_map_right_click callback +mwheel_enabled = false -- managed at runtime +mwheel_notify = true -- news tip on state change +mwheel_poll_interval = 50 -- interval between checks for mouse wheel input +mwheel_next_poll = time_global() +local mwheel_exe_ver = 20230701 -- mouse wheel support added to demonized binaries in this version +local rclick_exe_ver = 20230922 -- right-click map support added to demonized binaries in this version +local game_version = ts("ui_st_game_version") +local gamma_modpack = game_version:find("G.A.M.M.A.") +mwheel_avail = mousewheel_override or (MODDED_EXES_VERSION and (MODDED_EXES_VERSION >= mwheel_exe_ver)) +right_click_avail = right_click_override or gamma_modpack or (MODDED_EXES_VERSION and (MODDED_EXES_VERSION >= rclick_exe_ver)) +last_clicked_id = nil +-- ====================================================================== +unsquish_ratio = 1 +local DIK_name = ui_mcm and ui_mcm.dispaly_key or (function() return "" end)-- typo is in the mcm script +local default_id = 15797 -- WP defaults to Rookie Village if missing for any reason to avoid crash +local mcm_update_throttle = 3019 -- minimum time between MCM updates of icon/set data +local next_mcm_update = time_global() +local wp_proxcheck_interval = 837 -- Time between checks for waypoint proximity +local next_wp_proxcheck = time_global() +local garbcollect_interval = 4984 -- Time between pin/sz garbage collection checks +local next_gc_check = time_global() +local wp_clear_dist = 5 +local widget_hide_delay = 5000 +local next_pin = time_global() +local pin_delay = 1000 -- timeout to prevent dupe actions from registering +local ping_lifetime = 10000 +local ping_grid_size = 10 +local ping_grid_radius = 10 +--local max_dynamic_faves = 5 -- not yet implemented +local current_active_set = "pins" +local active_theme = "classicauto" +local current_set_max = 1 +local current_ico_max = 1 +placed_waypoint = nil +last_waypoint = nil +-- ====================================================================== +local toggle_bind = DIK_keys.DIK_SEMICOLON +local toggle_mod = 2 +local quickpin_bind = DIK_keys.DIK_APOSTROPHE +local quickpin_mod = 0 +local cart_mode_hold = DIK_keys.DIK_SLASH +local cart_mode_mod = 0 +local mcm_keybinds = ui_mcm and ui_mcm.key_hold +cart_mode = false +cartography_must_hold = false +cart_shows_smarts = true +cartmode_unfade = true +tip_on_icoset_change = false +allow_non_wp_targets = false +clear_pin_on_death = true -- pin will be cleared if set on a living thing that dies +pin_near_fade_dist = 5 -- min distance within which pins will begin to fade out, set to 0 to disable +pin_far_fade_dist = 0 -- distance beyond which pins will begin to fade out, set to 0 to disable +pin_far_hide_dist = 10 -- max distance after far_fade at which pins will hide, set to 0 to disable +-- ====================================================================== +enable_wp_proxcheck = true +show_pins = true +local custom_task_info = false +local icon_cycle_active = false +local set_cycle_active = false +widget_enabled = true +widget_active = true +hide_widget = true +widget_use_custom_pos = false +widget_custom_pos = {x=491,y=670} +widget_last_used = time_global() +wp_hud_icon_enabled = true +pin_hud_icon_default = true +manual_smart_pins = false +mark_on_positive_id = true +reticle_mustzoom = true +reticle_mode = 2 +autotag_milpda_feature = false -- not implemented yet +autotag_persistence = false -- if enabled, autotags are cleared on map change or the below timeout value +autotag_lifetime = 120 * 6 -- time in ms before autotags are cleared (def 2 minutes) +autotags_time_out = autotag_lifetime > 0 +ret_fade_attack_time = 400 +ret_fade_decay_time = 600 + +reticle_color = { + ["a"] = 150, + ["r"] = 255, + ["g"] = 255, + ["b"] = 255, +} + +show_marker_dist = { + ["pins"] = 4, + ["wp"] = 4, +} + +show_marker_hint = { + ["pins"] = 2, + ["wp"] = 0, -- not implemented yet +} + +-- ====================================================================== +-- STRINGS AND LTX DATA +-- ====================================================================== +local cartmode = "cartmode" +local sep = "_" +local snd_path = "catspaw\\" +local snd_ping = snd_path.."paw_ping" +local snd_cycle_blip = snd_path.."paw_blip" +local snd_tag_target = snd_path.."paw_blip" +local use_ping_snd = true +local use_ui_snd = true +local add_mapspot_functor = scriptname..".func_add_mapspot" +local ren_mapspot_functor = scriptname..".func_ren_mapspot" +local ren_wp_functor = scriptname..".func_ren_waypoint" +local task_id = "task_placeable_waypoint" +local pawmenu_path = "ui_mcm_pawsys_pawmenu_" +-- Don't change any of these icon definitions. If you want to +-- override PAW's pin icons with any of yours, use MCM or +-- see below for how to add your own, it's easy. +current_body_icon = nil +body_icon_mode = "off" +patch_res = "badge" +local custom_pin_icon = false +local default_mapspot = "paw_pin_redpush32" +local smart_terrain_icon = "paw_pin_magnifier32" +local icon_pingspot = "paw_ping_alpha50" +waypoint_mapspot = "paw_task_default" +map_pin_icon = default_mapspot +force_icon_override = nil +-- If force_icon_override is set to anything, PAW will try to use it +-- for pins instead of what it normally would. +-- This is purely a debugging tool. There are better ways to use your own +-- custom icons. +-- ====================================================================== +icons_ini = ini_file_ex("scripts\\paw\\icons.ltx") +icon_sets_ini = ini_file_ex("scripts\\paw\\icon_sets.ltx") +actions_ini = ini_file_ex("scripts\\paw\\menu_actions.ltx") +task_ini = ini_file_ex("scripts\\paw\\task_config.ltx") +clsids_ini = ini_file_ex("scripts\\paw\\valid_clsids.ltx") +icon_ltx = icons_ini:collect_section("icons") +iconset_ltx = icon_sets_ini:get_sections(true) +actions_ltx = actions_ini:get_sections(true) +clsids_ltx = clsids_ini:collect_section("valid_clsids") +task_cfg = task_ini:collect_section("task_config") +custom_name = (task_cfg and task_cfg.name) +custom_desc = (task_cfg and task_cfg.desc) +icons = icon_ltx +curr_menu_options = {} +icon_sets = {} +action_codes = {} +action = {} +texture_data = {} +icon_index = {} +set_index = {} +valid_clsids = {} +local script_zones = {} +local pings = {} +local pawdata = { + pins = {}, + --dynamic_faves = {}, + curr_set_ind = 1, + curr_ico_ind = 1, + curr_set_name = "pins", + curr_ico_name = default_mapspot, +} +pawdata.smart_pins = { + ["human_f"] = { + pin = "chevron_friendly", + enabled = false, + }, + ["human_n"] = { + pin = "chevron_neutral", + enabled = false, + }, + ["human_e"] = { + pin = "chevron_enemy", + enabled = true, + }, + ["monster"] = { + pin = "chevron_enemy", + enabled = true, + }, + ["stash"] = { + pin = "bwhr_loot", + enabled = false, + }, +} +pawdata.npc_ident = { + delay_id = true, + id_bodies = false, + id_speed = 0.3, + lenience = 0.99, + tick_speed = 200, + progress = {}, +} +npc_ident = pawdata.npc_ident +smart_pins = pawdata.smart_pins +pins = pawdata.pins +dynamic_faves = pawdata.dynamic_faves + +-- ====================================================================== +pda_defs = { +-- By default, all PDAs support waypointing + ["device_pda_1"] = { + show_w = true, + }, + ["device_pda_2"] = { + show_w = true, + }, + ["device_pda_3"] = { + show_w = true, + }, + ["device_pda_milspec"] = { + show_w = true, + }, +-- If you use an addon with an unsupported PDA section, add it here +-- ["device_pda_added_by_your_mod"] = { +-- show_w = false, +-- }, +} + +managed_factions = { + -- editing this may cause crashes or other unexpected results + ["army"] = true, + ["bandit"] = true, + ["csky"] = true, + ["dolg"] = true, + ["ecolog"] = true, + ["freedom"] = true, + ["killer"] = true, + ["monolith"] = true, + ["stalker"] = true, + ["greh"] = true, + ["isg"] = true, + ["renegade"] = true, +} + +managed_options = { + -- editing this may cause context menus to behave oddly + ["mping"] = true, + ["wp_set"] = true, + ["wp_mov"] = true, + ["wp_del"] = true, +-- ["wp_ren"] = true, + ["waypoint_rename"] = true, + ["waypoint_redesc"] = true, + ["hud_vis_on"] = true, + ["hud_vis_off"] = true, + ["show_all_pins"] = true, + ["hide_all_pins"] = true, + ["pn_add"] = true, + ["pn_del"] = true, + ["pn_ren"] = true, + ["pn_clr"] = true, + ["lock_pin"] = true, + ["unlock_pin"] = true, + ["cm_dbg"] = true, +} + +hud_themes = { + ["classicauto"] = { + name = "classicauto", + node = "pawhudind", + style = "full", + tex = "ui_paw_hud_indicator_classic", + file = "paw_hud_indicator.xml", + pos = {x=890,y=620}, + w = 136, + h = 75, + pda_thm = "vertright", + }, + ["classic"] = { + name = "classic", + node = "pawhudind", + style = "full", + tex = "ui_paw_hud_indicator_classic", + file = "paw_hud_indicator.xml", + pos = {x=890,y=620}, + w = 136, + h = 75, + }, + ["vertright"] = { + name = "vertright", + node = "pawhudind_vertright", + style = "minimal", + tex = "ui_paw_hud_indicator_vertright", + file = "paw_hud_indicator.xml", + pos = {x=922,y=440}, + w = 100, + h = 154, + }, + ["vertleft"] = { + name = "vertleft", + node = "pawhudind_vertleft", + style = "minimal", + tex = "ui_paw_hud_indicator_vertleft", + file = "paw_hud_indicator.xml", + pos = {x=4,y=570}, + w = 100, + h = 154, + }, + ["gamma_right"] = { + name = "gamma_right", + node = "pawhudind_gamma_right", + style = "full", + tex = "ui_paw_hud_indicator_gamma_right", + file = "paw_hud_indicator.xml", + pos = {x=888,y=440}, + w = 130, + h = 150, + }, + ["gamma_left"] = { + name = "gamma_left", + node = "pawhudind_gamma_left", + style = "full", + tex = "ui_paw_hud_indicator_gamma_left", + file = "paw_hud_indicator.xml", + pos = {x=4,y=440}, + w = 130, + h = 150, + }, + ["minimal_h"] = { + name = "minimal_h", + node = "pawhudind_minimal_h", + style = "minimal", + tex = "ui_paw_hud_indicator_minimal_h", + file = "paw_hud_indicator.xml", + pos = {x=924,y=645}, + w = 94, + h = 52, + }, + ["minimal_v"] = { + name = "minimal_v", + node = "pawhudind_minimal_v", + style = "minimal", + tex = "ui_paw_hud_indicator_minimal_v", + file = "paw_hud_indicator.xml", + pos = {x=924,y=440}, + w = 92, + h = 112, + }, + ["minicom"] = { + name = "minicom", + node = "pawhudind_minicom", + style = "compact", + tex = "ui_paw_hud_indicator_minicom", + file = "paw_hud_indicator.xml", + pos = {x=820,y=725}, + w = 38, + h = 37, + }, + ["compact_noui"] = { + name = "compact_noui", + node = "pawhudind_minicom", + style = "compact", + file = "paw_hud_indicator.xml", + pos = {x=820,y=725}, + w = 32, + h = 37, + pre_tex = "ui_paw_hud_indicator_minicom", + }, +} + + +colors = { + dimmed = GetARGB(100, 255, 255, 255), + active = GetARGB(255, 255, 255, 255), +} + +text_colors = { + ["clr_255"] = "%" .. "%c[255,255,255,255]", + ["clr_red"] = "%" .. "%c[255,255,0,0]", + ["clr_grn"] = "%" .. "%c[255,0,255,0]", + ["clr_blu"] = "%" .. "%c[255,0,0,255]", + ["clr_lbl"] = "%" .. "%c[255,0,200,220]", + ["clr_yel"] = "%" .. "%c[255,250,218,94]", + ["clr_wht"] = "%" .. "%c[255,220,220,220]", + ["clr_prp"] = "%" .. "%c[255,138,43,226]", + ["clr_blk"] = "%" .. "%c[255,0,0,0]", +} + + +local keybinds = { + ["cartmode"] = { + enabled = function() return paw_enabled end, + hold = cartography_must_hold, + bind = DIK_keys.DIK_SLASH, + name = "ui_mcm_pawsys_pawbinds_bind_cartmode", + action = function(tf) + if tf == nil then + tf = not cart_mode + end + cartography_mode(tf) + end, + }, + + ["wp_target_obj"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_SEMICOLON, + mod = 3, + name = "ui_mcm_pawsys_pawbinds_bind_wp_target", + action = function() wp_target_obj() end, + }, + ["pin_target_obj"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_APOSTROPHE, + mod = 3, + name = "ui_mcm_pawsys_pawbinds_bind_pin_target", + action = function() pin_target_obj(nil,nil,nil,manual_smart_pins) end, + }, + ["quickpin"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_APOSTROPHE, + name = "ui_mcm_pawsys_pawbinds_bind_quickpin", + action = function() drop_quick_pin() end, + }, + ["wptoggle"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_SEMICOLON, + name = "ui_mcm_pawsys_pawbinds_bind_wptoggle", + action = function() toggle_waypoint() end, + }, + ["set_next"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_PERIOD, + mod = 3, + name = "ui_mcm_pawsys_pawbinds_bind_set_next", + action = function() cycle_items(1,"set",tip_on_icoset_change) end, + }, + ["set_prev"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_COMMA, + mod = 3, + name = "ui_mcm_pawsys_pawbinds_bind_set_prev", + action = function() cycle_items(-1,"set",tip_on_icoset_change) end, + }, + ["ico_next"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_PERIOD, + name = "ui_mcm_pawsys_pawbinds_bind_ico_next", + action = function() cycle_items(1,"icon",tip_on_icoset_change) end, + }, + ["ico_prev"] = { + enabled = function() return paw_enabled end, + bind = DIK_keys.DIK_COMMA, + name = "ui_mcm_pawsys_pawbinds_bind_ico_prev", + action = function() cycle_items(-1,"icon",tip_on_icoset_change) end, + }, + ["ico_scroll"] = { + enabled = function() return paw_enabled and mwheel_enabled end, + bind = DIK_keys.DIK_Z, + name = "ui_mcm_pawsys_pawbinds_bind_ico_scroll", + mod = 3, + hold = true, + action = function(tf) icon_cycle(true,tf) end, + }, + ["set_scroll"] = { + enabled = function() return paw_enabled and mwheel_enabled end, + bind = DIK_keys.DIK_Z, + name = "ui_mcm_pawsys_pawbinds_bind_set_scroll", + mod = 2, + hold = true, + action = function(tf) set_cycle(true,tf) end, + }, +} + +-- ====================================================================== +-- GENERAL UTILITY FUNCTIONS +-- ====================================================================== + +function exec(str,...) + if str then + str = str_explode(str,"%.") + if str[1] and str[2] and _G[ str[1] ] and _G[ str[1] ][ str[2] ] then + _G[ str[1] ][ str[2] ](...) + else + dl("Could not exec function %s", str) + end + end +end + + +function delay_exec_of(func,secs,...) + if not func then return end + secs = secs or 0 + CreateTimeEvent("pawdelay","paw"..func..tostring(time_global()),secs,func,...) +end + + +function dotip(tiptext,dur,src,beep,icon,snd) + vl("Tip call received: dur %s | src \"%s\" | beep %s\n\"%s\"",dur,src,beep,tiptext) + if tiptext == nil then return end + db.actor:give_game_news(src or "PAW System", tiptext, icon or "ui_inGame2_Mesta_evakuatsii", 0, dur or 5000) + + if beep then + xr_sound.set_sound_play(AC_ID, snd or "pda_tips") + end +end + +function get_time_elapsed() + return math.floor(get_game_time():diffSec(get_start_time())) +end + +function round2(n) + return (math.floor(n * 100) / 100) +end + + +function roll(val,min,max) + if not (val and min and max) then return end + if val > max then + return min + elseif val < min then + return max + else + return val + end +end + +function lerp(a, b, f) + if a and b and f then + return a + f * (b - a) + else + return a or b or 0 + end +end + +function paw_enabled_check() + if not paw_enabled then + actor_menu.set_msg(1,game.translate_string("st_paw_system_disabled"),5) + end + return paw_enabled +end + +function valid_bind(kb) + return (kb ~= nil) and (kb ~= "") and (kb ~= "") and (kb ~= -1) +end + + +function bindtext(kb,km) + local kbt = "" + local kmt = "" + local mt = "" + local vbkb = valid_bind(kb) + local vbkm = km and km > 0 + if vbkb then + kbt = DIK_name(kb) + end + if vbkm then + if km and km < 29 then + km = ((km == 1) and 42) or ((km == 2) and 29) or ((km == 3) and 56) + end + if km then + kmt = DIK_name(km) + end + end + + if vbkb and vbkm then + mt = "+" + elseif not (vbkb or vbkm) then + kmt = "[UNBOUND]" + mt = "" + kbt = "" + end + + return string.format("%s%s%s",kmt,mt,kbt) +end + + +-- ====================================================================== +function safeid(obj) + local id = obj and obj.id + if not id and obj then return end + if type(id) ~= "number" then id = obj:id() end + return id +end + +function safename(id) + if not (id and (id > 0)) then return end + local text = ts("st_paw_unknown") + local se_obj = alife_object(id) + if not se_obj then return text end + local name = se_obj:name() or text + local cls = se_obj:clsid() + + if pins[id] then + -- If there's a pin for this ID, use its label above all else + text = pins[id].text or pins[id].name + vl("%s (%s) is a pin: %s",name,id,text) + elseif (cls == clsid.script_zone) then + text = ts("st_paw_pin_default_name") + vl("%s (%s) is a script zone: %s",name,id,text) + elseif (cls == clsid.script_restr) then + local _,_,hint = txr_routes.get_route_info(name) + if hint then + text = hint and ts(hint) or text + else + text = ts(name) + end + vl("%s (%s) is a level transition: %s",name,id,text) + elseif (cls == clsid.smart_terrain) then + text = ts("st_"..name.."_name"):gsub("%."," -") + vl("%s (%s) is a smart terrain: %s",name,id,text) + elseif (cls == clsid.online_offline_group_s) then + local comm = se_obj.player_id + local sq = ts("st_paw_squad") + if managed_factions[comm] then + text = ts(comm) + end + text = text.." "..sq + if debuglogs then + text = text..": "..name + end + vl("%s (%s) is NPC squad with faction %s: %s",name,id,comm,text) + elseif IsInvbox(nil,cls) then + local locst = "st_"..name.."_name" + text = ts(locst) + if text == locst then + dl("No localization found for stash %s",locst) + text = ts("st_paw_unknown").." "..ts("st_paw_stash") + if debuglogs then + text = text..": "..name + end + end + vl("%s (%s) is a stash marker: %s",name,id,text) + elseif IsStalker(nil,cls) then + text = se_obj:character_name() + vl("%s (%s) is a stalker: %s",name,id,text) + elseif IsMonster(nil,cls) then + local obj = get_object_by_id(id) + local section = obj and obj:section() + if not section then + return text + end + --[[ + Hack adapted from ui_enemy_health.script + This logic acts as a translation layer for + any monster kind/species that doesn't line + up with the name of its encyclopedia entry + --]] + local special_cases = { + dog = "blind_dog", + bird = "crow", + giant = "pseudogiant", + SM_KARLIK = "karlik", + SM_LURKER = "lurker", + SM_POLTER_G = "poltergeist", + SM_PYRO_G = "pyrogeist", + SM_PSEUDO_G = "pseudogeist", + SM_PSYSUCKER = "psysucker", + } + if string.find(section,'rotan') then + text = "rat" + elseif string.find(section,'psy_dog') then + text = "psydog" + else + local what = ini_sys:r_string_ex(section,"kind") or ini_sys:r_string_ex(section,"species") or nil + text = special_cases[what] or what + end + --text = string.lower(ts("encyclopedia_mutants_"..text)) + text = ts("encyclopedia_mutants_"..text) + vl("%s (%s) is a creature: %s",name,id,text) + else + text = ts(name) + if text == name then + text = ts(name.."_name") + if text == name.."_name" then + text = name + dl("No localization or other name found for object %s (%s)",name,id) + end + end + end + dl("safename returns %s for %s",text,name) + return text +end + + +function valid_pda() + local dev = db.actor:item_in_slot(8) + local sec = dev and dev:section() + if dev and pda_defs[sec] then + if pda_defs[sec].show_w then return true end + elseif item_device.device_npc_pda[sec] then + local text = ts("st_paw_npc_pda_equipped") + dotip(text) + else + dl("WARNING: Equipped PDA %s not found in pda_defs - if this is a valid player PDA, add to that table to enable support",sec) + end + return false +end + + +function blacklisted_object(id) + if not (id and (id > 0)) then return true end + + local se_obj = alife_object(id) + + if not se_obj then return true end + + local cls = se_obj:clsid() + if (cls == clsid.poltergeist_s) or + (cls == clsid.psy_dog_phantom_s) then + return true end + +end + +function valid_waypoint_target(se_obj) + if not se_obj then return end + if blacklisted_object(se_obj.id) then return end + -- can add other smart types to this logic later if needed + local clsid = se_obj:clsid() + local valid = (valid_clsids[clsid] ~= nil) or + IsStalker(se_obj) or + IsMonster(se_obj) or + isLc(se_obj) + return valid +end + +function feature_valid_in_mode(mode) + -- -1: debug mode only + -- 0: disabled + -- 1: enabled in normal view only + -- 2: enabled in cartography mode only + -- 4: enabled in both + return ((mode < 0) and debuglogs) or + ((mode == 1) and not cart_mode) or + ((mode >= 2) and cart_mode) or + (mode >= 4) +end + + +function play_sound_for_actor(effect) + local snd = xr_sound.get_safe_sound_object(effect) + snd:play(db.actor, 0, sound_object.s2d) +end + + +function add_mapspot(text,id,icon) + if not id then return end + icon = icon or default_mapspot + vl("Adding mapspot %s for id %s with icon %s",text,id,icon) + level.map_add_object_spot(id,icon,text) +end + + +function remove_mapspot(id,icon) + if not (id and icon) then return end + vl("Trying to remove mapspot for id %s with icon %s",id,icon) + level.map_remove_object_spot(id,icon) + level.map_remove_object_spot(id,icon) + return true +end + +--[[ +-- this isn't working yet, don't enable +function rotate_dynamic_favorites(icon) + if not icon then return end + + local mdf = tonumber(max_dynamic_faves) or 0 + local faves = 0 + if (mdf and (mdf == 0)) then return end + vl("rotate_dynamic_favorites called with new mapspot %s",icon) + if dynamic_faves and (type(dynamic_faves) == "table") then + faves = #dynamic_faves or 0 + if faves > 1 then + for i = 1,faves do + if (faves[i] == icon) then + vl("%s already in favorites, ignoring") + return + + + end + if faves < mdf then + faves = faves + 1 + elseif (mdf > 1) and (faves >= mdf) then + for i = 2,faves do + vl("%s was in position %s, shuffling down to %s",dynamic_faves[i],i,i-1) + dynamic_faves[i - 1] = dynamic_faves[i] + end + end + else + dynamic_faves = {} + end + dynamic_faves[faves] = icon + vl("%s added to top of dynamic_faves",icon) +end +--]] + +function func_add_mapspot(text,args) + local id = args.id + local icon = args.icon or map_pin_icon + if text == "" or text == nil then + set_pin_persistence(id,false) + set_pingspot_persistence(id,false) + pins[id] = nil + vl("Empty text input returned for pin %s, removing",id) + return end + vl("func_add_mapspot called for id %s | %s | %s",id,icon,text) + pins[id].text = text + add_mapspot(text,id,icon) +end + +function func_ren_mapspot(text,args) + local id = args.id + local icon = map_pin_icon + local old_icon = args.icon + if text == "" or text == nil then + vl("Empty text input returned for pin %s, making no change",id) + text = pins[id].text + icon = old_icon + end + pins[id].text = text + vl("func_ren_mapspot called for id %s | %s | %s",id,icon,text) + remove_mapspot(id,old_icon) + add_mapspot(text,id,old_icon) +end + +function func_ren_waypoint(text,args) + if text == "" then text = nil end + local field = args.field + if field == "name" then + custom_name = text + elseif field == "desc" then + custom_desc = text + end +end + + +function pins_exist() + return not is_empty(pins) +end + + +function waypoint_task_cleanup() +end + + +function cancel_task() + local id = placed_waypoint and placed_waypoint.id + tm.task_info[task_id] = nil + remove_mapspot(id, waypoint_mapspot) + _ = set_pingspot_persistence(id,false) + waypoint_active = false + placed_waypoint = nil + _ = dl("Waypoint task cancellation complete for %s",id) + waypoint_canceling = false + return true +end + + +function end_waypoint_task() + waypoint_canceling = true + return cancel_task() +end + + +function set_current_waypoint(se_obj) + if not se_obj then return end + local id = se_obj.id + set_pingspot_persistence(id) + if waypoint_active then + last_waypoint = placed_waypoint + set_pingspot_persistence(id,false) + end + placed_waypoint = { + id = id, + name = safename(id), + } + waypoint_active = true + waypoint_canceling = false +end + +function valid_travel_target(id) + -- To enable interaction with the Fair Fast Travel + -- system addon, allowing fast travel to pins, but + -- only those that we know are within the playable + -- area--ones spawned at a spot where the player was + -- standing at the time. + local pin = pins and pins[id] + local valid = pin and pin.quick + vl("valid_travel_target | id %s is pin: %s | is quick pin %s",pin,valid) + return valid +end + +function init_new_pin(id,name,text,icon) + if id and not pins[id] then + icon = icon or default_mapspot + set_pingspot_persistence(id) + pins[id] = { + id = id, + name = name or ts("st_paw_pin_default_name"), + text = text or name, + icon = icon, + hud = false + } + --rotate_dynamic_favorites(icon) + vl("New pin initialized: %s (%s) | %s | %s",pins[id].name,id,icon,text) + end +end + + +function register_script_zone(...) + local se_obj = alife_create("script_zone",...) + if not se_obj then return end + local id = se_obj.id + local now = time_global() + script_zones[id] = { + id = se_obj.id, + pos = se_obj.position, + created = now, + cleanup = now + ping_lifetime, + } + vl("Script zone %s spawned for ping spot",id) + return se_obj +end + + +function deregister_script_zone(id) + if not id then return end + local se_obj = alife_object(id) + if not se_obj then return end + alife_release(se_obj) + script_zones[id] = nil + vl("Script zone %s released",id) +end + + +function generate_scripted_mapspot_at(pos,lv,gv) + if not (pos and lv and gv) then return end + local sz = register_script_zone(pos,gv,lv) + if not sz then return end + return sz.id +end + + +function generate_scripted_mapspot_on(obj) + if not (obj and obj.id) then return end + local sz = register_script_zone(obj) + if not sz then return end + return sz.id +end + + +function spawn_pingspot(pid,pos,lv,gv) + if not (pid and pos and lv and gv) then return end + local sz = register_script_zone(pos,gv,lv) + if not sz then return end + + local text = ts("st_paw_pingspot") + local id = sz.id + pings[id] = script_zones[id] + pings[id].pid = pid + add_mapspot(text,id,icon_pingspot) + -- vl("Spawned temporary pingspot at %s,%s with id %s",pos.x,pos.z,id) + return id +end + + +function despawn_pingspot(id) + -- vl("despawn_pingspot(%s): deregistering script zone and nulling ping record",id) + deregister_script_zone(id) + pings[id] = nil +end + + +function script_zone_cleanup() + local now = get_time_elapsed() + for k,v in pairs(script_zones) do + if v.cleanup and (v.cleanup < now) then + deregister_script_zone(k) + end + end + dl("script_zone_cleanup completed") + return true +end + +function temp_pin_cleanup(wipe_all) + local now = get_time_elapsed() + for k,v in pairs(pins) do + if v.cleanup then + local expired = autotags_time_out and (v.cleanup < now) + if expired or wipe_all then + do_waypoint("pn_del",nil,nil,{syscall=true,id=k}) + end + end + end + dl("temp_pin_cleanup completed") + return true +end + +function set_pin_persistence(id,onoff,lifetime) + if not (id and (id > 0)) then return end + if not pins[id] then return end + if onoff or (onoff == nil) then + pins[id].cleanup = nil + dl("Pin %s given persistence, it will not be subject to cleanup",id) + else + local now = get_time_elapsed() + pins[id].cleanup = now + (lifetime or autotag_lifetime or 0) + dl("Pin %s flagged as temporary, it will be subject to cleanup at %s",id,pins[id].cleanup) + end + return true +end + +function set_pingspot_persistence(id,onoff) + if not (id and script_zones[id]) then return end + if onoff or (onoff == nil) then + pings[id] = nil + script_zones[id].cleanup = nil + dl("Temporary pingspot %s given persistence, it will not be subject to cleanup",id) + else + script_zones[id].cleanup = get_time_elapsed() + dl("Persistent pingspot %s flagged as unused, it will be subject to cleanup",id) + end + return true +end + +function ping_area_around(obj) + if not obj then return end + local now = time_global() + local pid = tostring(now) + local span = ping_grid_radius or 10 -- radius of grid in squares + local grid = ping_grid_size or 10 -- dimension of grid squares in game units + local rad = span * grid -- actual ping radius in game units + local anch_id = obj.id + local anch_pos = obj.position + local ax = anch_pos.x + local ay = anch_pos.y + local az = anch_pos.z + local gv = obj.m_game_vertex_id + local lv = game_graph():vertex(gv):level_id() + + for z = (az-(span*grid)),(az+(span*grid)),grid do + for x = (ax-(span*grid)),(ax+(span*grid)),grid do + local pos = vector():set(x,ay,z) + if distance_2d(pos,anch_pos) <= (rad + 1) then + spawn_pingspot(pid,pos,gv,lv) + end + end + end + + if use_ping_snd and snd_ping then play_sound_for_actor(snd_ping) end + + CreateTimeEvent("paw_ping_cleanup","ping_"..pid,11,tasks_placeable_waypoints.ping_cleanup,pid) +end + + +function do_waypoint(act,se_obj,acode,args) + args = args or {} + local syscall = args.syscall and true or false + if (not syscall) and valid_pda() and not (paw_enabled and act) then return end + acode = acode or act + local id,name + if se_obj then + id = se_obj.id + name = safename(id) + elseif args and args.id then + id = args.id + se_obj = alife_object(id) or se_obj + end + local ac = action_codes[acode] + + dl("Received waypoint call \"%s\" on target %s (id %s)",act,name,id) + + if act == "wp_set" then + if not se_obj then + dl("do_waypoint called with action %s but no valid se_obj!",act) + return end + set_current_waypoint(se_obj) + tm:give_task("task_placeable_waypoint") + waypoint_active = true + elseif act == "wp_mov" then + if not se_obj then + dl("do_waypoint called with action %s but no valid se_obj!",act) + return end + if tm.task_info[task_id] then + local id = se_obj.id + local task = tm.task_info[task_id] + local atsk = db.actor:get_task(task_id, true) + task.target = id + task.current_target = id + atsk:change_map_location(task.spot, id) + level.map_add_object_spot(id, waypoint_mapspot, "") + set_current_waypoint(se_obj) + xr_sound.set_sound_play(AC_ID, "pda_tips") + else + dl("task_info[task_id] is nil!") + end + waypoint_active = true + elseif act == "wp_del" then + end_waypoint_task() + last_waypoint = nil + elseif act == "waypoint_rename" then + dl("Received call to rename waypoint") + local func = ren_wp_functor + local title = ts("ui_mcm_pawsys_pawmenu_waypoint_rename") + local itex = "ui_inGame2_PDA_icon_Secondary_mission" + args.field = "name" + cartography_mode(false) + get_text(title,itex,name,func,args) + elseif act == "waypoint_redesc" then + dl("Received call to redesc waypoint") + local func = ren_wp_functor + local title = ts("ui_mcm_pawsys_pawmenu_waypoint_redesc") + local itex = "ui_inGame2_PDA_icon_Secondary_mission" + args.field = "desc" + cartography_mode(false) + get_text(title,itex,name,func,args) + elseif act == "pn_add" then + dl("Received call to add new pin to map for %s (%s)",name,id) + local func = add_mapspot_functor + local icon = icons[ac.icon] or map_pin_icon + local itex = texture_for_icon(icon) + local title = ts("ui_mcm_pawsys_pawmenu_pn_add") + init_new_pin(id,name,ts("st_paw_pin_default_name"),icon) + cartography_mode(false) + --vl("pin data before input call: %s (%s) % | %",pins[id].name,pins[id].id,pins[id].icon,pins[id].text) + get_text(title,itex,nil,func,pins[id]) + elseif act == "pn_ren" then + if not (id and pins[id]) then return end + dl("Received call to rename map pin %s (%s)",name,id) + if not pins[id].locked then + remove_mapspot(id,icon) + local func = ren_mapspot_functor + local icon = pins[id] and pins[id].icon + local itex = texture_for_icon(icon) + local name = pins[id] and pins[id].name + local title = ts("ui_mcm_pawsys_pawmenu_pn_ren") + cartography_mode(false) + get_text(title,itex,name,func,pins[id]) + end + elseif act == "pn_del" then + if not (id and pins[id]) then return end + if syscall or not pins[id].locked then + local icon = pins[id] and pins[id].icon + if hud_pin_objs[id] then + vl("Removing pin %s from HUD",id) + get_hud():RemoveDialogToRender(hud_pin_objs[id]) + hud_pin_objs[id] = nil + end + vl("Pin %s (%s) deleted",pins[id].text,id) + pins[id] = nil + if icon then remove_mapspot(id,icon) end + end + elseif act == "lock_pin" then + if not (id and pins[id]) then return end + pins[id].locked = true + elseif act == "unlock_pin" then + if not (id and pins[id]) then return end + pins[id].locked = false + elseif act == "pn_clr" then + local wipe_all = args and args.wipe_all + if not is_empty(hud_pin_objs) then + for k,v in pairs(hud_pin_objs) do + if wipe_all or not (pins[k] and pins[k].locked) then + vl("Hiding HUD pin for %s",k) + get_hud():RemoveDialogToRender(hud_pin_objs[k]) + hud_pin_objs[k] = nil + end + end + end + for k,v in pairs(pins) do + if wipe_all or not v.locked then + local icon = v.icon + remove_mapspot(k,icon) + pins[k] = nil + end + end + elseif act == "mping" then + ping_area_around(se_obj) + elseif act == "hud_vis_on" then + if not (id and pins[id]) then return end + if syscall or not pins[id].locked then + pins[id].hud = true + show_hud_pin(id) + end + elseif act == "hud_vis_off" then + if not (id and pins[id]) then return end + if syscall or not pins[id].locked then + pins[id].hud = false + hide_hud_pin(id) + end + elseif act == "show_pins" then + show_all_pins(true) + elseif act == "hide_pins" then + show_all_pins(false) + elseif act == "cm_dbg" then + local clsid = se_obj and se_obj:clsid() or "empty" + property_ui:AddItem("[PAW Debug] Mapspot for %s (id %s) has clsid %s)",name,id,clsid) + else + dl("invalid action %s passed to do_waypoint",act) + end + return true +end + + +function add_context_option(property_ui,act,maptbl) + local ac = action_codes[act] + vl("add_context_option \"%s\" | cart_mode is %s",act,cart_mode) + if ac and ac.enable then + --printf("action %s is enabled",act) + if type(ac.mode) ~= "number" then + dl("WARNING: mode (%s) for action %s was not a number, resetting to 0",ac.mode,act) + ac.mode = 0 + end + -- -1: debug mode only + -- 0: disabled + -- 1: enabled in normal view only + -- 2: enabled in cartography mode only + -- 4: enabled in both + --[[ + if ((ac.mode < 0) and debuglogs) or + (ac.mode == 1 and not cart_mode) or + ((ac.mode >= 2) and cart_mode) or + (ac.mode >= 4) then + -]] + if feature_valid_in_mode(ac.mode) then + local text = ts(ac.text) + vl("add_context_option(%s): Adding context option %s",act,text) + property_ui:AddItem(text) + curr_menu_options[text] = maptbl + end + else + vl("Action %s is missing or not enabled, ignoring",act) + end +end + +function nearest_smart_to_actor() + vl("nearest_smart_to_actor") + + local levelid = alife():level_id() + local smart_nearest,dist_nearest,name_nearest,result + for name,smart in pairs(SIMBOARD.smarts_by_names) do + if levelid == game_graph():vertex(smart.m_game_vertex_id):level_id() then + -- vl("%s is same map as actor",name) + local dist = smart.position:distance_to(db.actor:position()) + if (SIMBOARD.smarts[smart.id]) and (not smart_nearest or (dist < dist_nearest)) then + vl("%s (%s) is nearest so far at %s",name,smart.id,dist) + smart_nearest = smart + dist_nearest = dist + name_nearest = name + end + end + end + + if not smart_nearest then + dl("!ERROR! No nearby smarts found to actor, this shouldn't be possible") + return {id=0,name="oops"} end + + result = { + smart = smart_nearest, + id = smart_nearest.id or 0, + dist = dist_nearest or 0, + name = name_nearest or "oops", + pos = smart_nearest.position, -- not used yet + } + vl("nearest_smart: %s at %s",name_nearest,dist_nearest) + return result +end + + +function show_smarts(onoff) + vl("show_smarts: %s",onoff) + local toggle = onoff or false + local levelid = alife():level_id() + local smart_nearest,dist_nearest,name_nearest,result + for name,smart in pairs(SIMBOARD.smarts_by_names) do + if (SIMBOARD.smarts[smart.id]) then + local text = name + local id = smart.id + local icon = smart_terrain_icon + if toggle then + -- vl("Adding temporary smart %s (%s) with icon %s",text,id,icon) + level.map_add_object_spot(id,icon,text) + else + -- vl("Removing temporary smart %s (%s)",text,id) + level.map_remove_object_spot(id,icon) + end + end + end +end + + +function wp_target_obj() + dl("wp_target_obj called") + local obj = level.get_target_obj() + local id = obj and obj:id() + vl("ID returned by level.get_target_obj is %s | obj exists: %s",id,obj ~= nil) + if id and (id > 0) then + local se_obj = alife_object(id) + if not (se_obj and (allow_non_wp_targets or valid_waypoint_target(se_obj))) then return end + + if placed_waypoint then + if id == placed_waypoint.id then + vl("Waypoint is currently active on %s (%s), disabling",se_obj:name(),id) + --do_waypoint("wp_del",se_obj) + toggle_waypoint() + else + vl("Waypoint is currently active, moving to %s (%s)",se_obj:name(),id) + do_waypoint("wp_mov",se_obj) + end + else + vl("No current waypoint, setting to target object %s (%s)",se_obj:name(),id) + do_waypoint("wp_set",se_obj) + end + end +end + + +function get_smart_target_type(obj) + --printf("get_smart_target_type(%s)",obj and obj:name()) + local target_type + + if obj then + if IsStalker(obj) then + local acomm = get_actor_true_community() + local comm = obj:character_community() or "stalker" + local is_enemy = game_relations.is_factions_enemies(acomm,comm) + --printf("Targeted object %s (%s) is stalker | actor comm %s | target comm %s | is_enemy %s",obj:character_name(),obj:id(),acomm,comm,is_enemy) + if comm == acomm then + target_type = "human_f" + elseif is_enemy then + target_type = "human_e" + else + target_type = "human_n" + end + elseif IsMonster(obj) then + target_type = "monster" + elseif IsInvbox(obj) then + target_type = "stash" + end + end + + return target_type +end + +function get_smart_icon_for_obj(obj,mapspot) + local mapspot = mapspot or map_pin_icon + local target_type = get_smart_target_type(obj) + local target = target_type and smart_pins[target_type] + mapspot = (target and icons[target.pin]) or mapspot + + vl("get_smart_icon_for_obj %s: best icon for %s was %s",obj and obj:character_name(),target_type,mapspot) + return mapspot +end + + +function pin_target_obj(mapspot,notip,silent,smart) + vl("pin_target_obj: mapspot %s | notip %s | silent %s | smart %s",mapspot,notip,silent,smart) + local obj = level.get_target_obj() + local id = obj and obj:id() + if id and (id > 0) then + if blacklisted_object(id) then return end + if smart then + mapspot = get_smart_icon_for_obj(obj) + vl("pin_target_obj: pin %s is smart, assigned mapspot %s",id,mapspot) + end + local se_obj = alife_object(id) + if not (se_obj and (allow_non_wp_targets or valid_waypoint_target(se_obj))) then return end + local name = safename(id) + if pins[id] then + if not pins[id].locked then + local hint = pins[id].text or pins[id].name or ts("st_paw_pin_default_name") + local text = string.format(ts("st_paw_pin_removed_from_target"),name,hint) + text = psk(text,text_colors) + + do_waypoint("pn_del",se_obj) + dotip(text,5,nil,false) + end + else + local hint = name or ts("st_paw_pin_default_name") + drop_quick_pin(id,hint,mapspot,true,true) + if pin_hud_icon_default and pins[id] then + pins[id].hud = true + show_hud_pin(id) + end + if not silent then + play_sound_for_actor(snd_tag_target) + end + if not notip then + local icon = ts("ui_mcm_lst_"..(mapspot or pawdata.curr_ico_name)) + local nxtb = keybinds["ico_next"].text + local prvb = keybinds["ico_prev"].text + local text = string.format(ts("st_paw_pin_added_to_target"),name,icon,nxtb,prvb) + text = psk(text,text_colors) + dotip(text,5,nil,false) + end + end + end + return id +end + + +function create_smart_pin(notip,silent) + --local mapspot = get_smart_icon_for_obj(obj) + return pin_target_obj(nil,notip,silent,true) +end + +function autotag_target(notip,silent) + local id = create_smart_pin(true) + set_pingspot_persistence(id,autotag_persistence) + set_pin_persistence(id,autotag_persistence) + return id +end + +function drop_quick_pin(id,force_text,force_pin,no_tip,no_fast_travel) + if not paw_enabled_check() then return end + if next_pin > time_global() then return end + next_pin = time_global() + pin_delay + + if not id then + id = generate_scripted_mapspot_on(db.actor) + end + + local se_obj = alife_object(id) + if not se_obj then return end + + local name = se_obj:name() or "none" + local icon = force_pin or map_pin_icon + local mapspot_text = force_text or ts("st_paw_pin_quick_name") + local tip_text = ts("st_paw_pin_dropped") + init_new_pin(id,name,mapspot_text,icon) + pins[id].quick = not no_fast_travel + dl("calling add_mapspot with %s | %s | %s",mapspot_text,id,icon) + add_mapspot(mapspot_text,id,icon) + if not no_tip then dotip(tip_text,10000) end +end + + +function toggle_waypoint(force) + dl("toggle_waypoint called") + if (force ~= nil) then + waypoint_active = not force + end + if not waypoint_active then + if last_waypoint then + placed_waypoint = last_waypoint + local se_obj = alife_object(placed_waypoint.id) + if not se_obj then return end + do_waypoint("wp_set",se_obj) + else + dotip("st_paw_no_last_wp") + end + else + last_waypoint = placed_waypoint + end_waypoint_task() + end +end + + +function cartography_mode(onoff) + if (onoff == nil) then + cart_mode = not cart_mode + else + cart_mode = onoff or false + end + vl ("Setting cart_mode to %s and calling show_smarts to toggle",cart_mode) + show_smarts(cart_shows_smarts and cart_mode) +end + + +function get_context_menu_options(property_ui,id,maptbl) + empty_table(curr_menu_options) + maptbl = maptbl or {} + if not id then + id = maptbl.object_id + end + if not paw_enabled then return end + local se_obj = id and (id > 0) and alife_object(id) + if not se_obj then return end + + local name = se_obj:name() or "undefined" + local clsid = se_obj:clsid() or "unknown" + local id = se_obj.id + local pin = id and pins[id] + vl("get_context_menu_options: %s (%s) | cls %s",name,id,clsid) + + add_context_option(property_ui,"mping",maptbl) + if id and valid_waypoint_target(se_obj) then + if pins[id] then + vl("Pin exists") + + if pin.locked then + add_context_option(property_ui,"unlock_pin",maptbl) + else + add_context_option(property_ui,"pn_del",maptbl) + add_context_option(property_ui,"pn_ren",maptbl) + if pins[id].hud then + add_context_option(property_ui,"hud_vis_off",maptbl) + else + add_context_option(property_ui,"hud_vis_on",maptbl) + end + add_context_option(property_ui,"lock_pin",maptbl) + end + else + vl("No pin") + add_context_option(property_ui,"pn_add",maptbl) + end + + local name = se_obj:name() + if placed_waypoint == nil then + vl("No waypoint") + add_context_option(property_ui,"wp_set",maptbl) + else + local wid = placed_waypoint.id or 0 + local sid = se_obj.id or 0 + if wid ~= sid then + vl("Waypoint exists") + add_context_option(property_ui,"wp_mov",maptbl) + end + vl("Waypoint exists here") + add_context_option(property_ui,"wp_del",maptbl) + add_context_option(property_ui,"waypoint_rename",maptbl) + add_context_option(property_ui,"waypoint_redesc",maptbl) + end + end + + if pins_exist() then + if show_pins then + add_context_option(property_ui,"hide_all_pins",maptbl) + else + add_context_option(property_ui,"show_all_pins",maptbl) + end + end + + if not (pin and pin.locked) then + add_context_option(property_ui,"pn_clr",maptbl) + for k,v in pairs(action_codes) do + local can_add = true + if v.act == "pn_add" then + can_add = (pins[id] == nil) + end + local mode = tonumber(v.mode) or 0 + if can_add and v.enable and (mode > 0) and not managed_options[k] then + add_context_option(property_ui,k,id,maptbl) + end + end + end +end + + +function execute_context_menu_option(property_ui,id,level_name,prop) + vl("passed id : %s",id) + id = last_clicked_id + last_clicked_id = nil + vl("execute_context_menu_option called for id %s\n| prop: %s\n| action %s)",id,prop,action[prop]) + if not (paw_enabled and id and valid_pda()) then return end + if not (id and (id > 0)) then return end + local se_obj = alife_object(id) + if not se_obj then return end + local ac = action[prop] + if ac then + local act = action_codes[ac].act + do_waypoint(act,se_obj,ac) + end +end + + +function faction_body_icon(comm) + vl("faction_body_icon(%s) called",comm) + local icon = nil + if comm and managed_factions[comm] then + local bi = body_icon_mode or "badge" + icon = "paw_"..patch_res..sep..comm + vl("faction_body_icon generated from quality %s for faction %s: %s",patch_res,comm,icon) + else + vl("not a valid human faction, returning %s from bodies set",current_body_icon) + end + return icon or current_body_icon +end + +function local_set_name(setname) + local name = ts(setname or icon_sets[pawdata.curr_set_name].name) +end + +function local_icon_name(iconame) + local name = ts(iconame or "ui_mcm_lst_"..pawdata.curr_ico_name) +end + +function icon_for_pin(pin_name) + if icons and pin_name then return icons[pin_name] end +end + + +function pin_for_icon(icon) + if icon and texture_data and texture_data[icon] then return texture_data[icon].id end +end + + +function texture_for_icon(icon) + --printf("texture_for_icon(%s) called",icon) + local tex = texture_data and texture_data[icon] and texture_data[icon].t + vl("texture_for_icon(%s) returned %s",icon,tex) + return tex +end + +function texture_for_set(setname) + if not setname then return end + local setdata = icon_sets[setname] + if not (setdata and setdata.active_icon) then + dl("WARNING: No active icon found for %s",setname) + return end + vl("active_icon for %s: %s",setname,setdata.active_icon) + local td = texture_data[setdata.active_icon] + vl("texture exists for %s: %s",setdata.active_icon,td ~= nil) + local tex = td.t + vl("texture_for_set(%s) returned %s",setname,tex) + return tex +end + +function get_current_texture(set_changed) + return set_changed and texture_for_set(pawdata.curr_set_name) or texture_for_icon(pawdata.curr_ico_name) +end + +function set_or_icon(str) + return str and ((str ~= "set") and (str ~= "icon")) +end + +function set_icon_index(set) + vl("set_icon_index called for set %s",set) + local ii = set_index[set].ii + return ii +end + +function set_icon_index_rev(set) + vl("set_icon_index_rev called for set %s",set) + local ri = set_index[set].ri + return ri +end + +function set2ind(skey) + local ind = nil + vl("set2ind called for set %s, %s sets listed",skey,#set_index) + for i=1,#set_index,1 do + local k = set_index[i].id + if k == skey then + ind = i + end + end + vl("set2ind(%s) returned %s",skey,ind) + return ind +end + + +function curr_set_i() + return pawdata.curr_set_ind +end + +function next_set_i() + return roll(curr_set_i() + 1, 1, #set_index) +end + +function prev_set_i() + return roll(curr_set_i() - 1, 1, #set_index) +end + + +function curr_ico_i() + --printf("curr_ico_i returns %s",pawdata.curr_ico_ind) + return pawdata.curr_ico_ind +end + +function next_ico_i() + local c_ind = curr_ico_i() + local setdata = icon_sets[pawdata.curr_set_name] + return roll(c_ind + 1, 1, #setdata.ii) +end + +function prev_ico_i() + local c_ind = curr_ico_i() + local setdata = icon_sets[pawdata.curr_set_name] + return roll(c_ind - 1, 1, #setdata.ii) +end + +function root_patch_name(patch) + --printf("root_patch_name called with mapspot %s",patch) + local name = patch + local pos_paw = string.find(name,"paw_badge_") + local pos_qlt = string.find(name,"hr_") + if pos_paw and pos_qlt then + name = "paw_badge_"..string.sub(patch,pos_qlt+3) + vl("root_patch_name strips quality string from %s to get %s",patch,name) + else + vl("root_patch_name returning %s as-is",patch) + end + return name +end + +function active_set(newset) + vl("active_set(%s) called",newset) + if newset and type(newset) == "number" then + pawdata.curr_set_ind = clamp(newset,1,#set_index) + pawdata.curr_set_name = set_index[pawdata.curr_set_ind].id + pawdata.curr_set_data = icon_sets[pawdata.curr_set_name] + current_active_set = pawdata.curr_set_name + local setdata = pawdata.curr_set_data + pawdata.curr_ico_name = setdata.active_icon + pawdata.curr_ico_ind = setdata.ri[root_patch_name(pawdata.curr_ico_name)] + map_pin_icon = pawdata.curr_ico_name + vl("active set is now %s (%s), current icon %s (%s)",pawdata.curr_set_name,pawdata.curr_set_ind,pawdata.curr_ico_name,pawdata.curr_ico_ind) + end + return pawdata.curr_set_name +end + +function get_next_icon() + local setdata = pawdata.curr_set_data + return setdata.ii[next_ico_i()] +end + +function get_prev_icon() + local setdata = pawdata.curr_set_data + return setdata.ii[prev_ico_i()] +end + +function get_active_icon(newico) + if newico and type(newico) == "number" then + vl("Setting new icon to index %s",newico) + local setdata = pawdata.curr_set_data + pawdata.curr_ico_ind = clamp(newico,1,setdata.inum) + pawdata.curr_ico_name = setdata.ii[pawdata.curr_ico_ind] + setdata.active_icon = pawdata.curr_ico_name + map_pin_icon = pawdata.curr_ico_name + end + return pawdata.curr_ico_name +end + +function notify_icon_change(newset) + local setdata = pawdata.curr_set_data + local icon = setdata.active_icon + local td = texture_data[icon] + local tex = td.t + local tiptext = ts("st_paw_change_icon").." "..ts("ui_mcm_lst_"..icon) + + if newset then + local name = ts(setdata.name) + local settext = string.format(ts("st_paw_change_set"),name) + tiptext = settext .. tiptext + end + dotip(tiptext,2,nil,false,tex) +end + + + +function cycle_icons(cycle_dir,dotip) + --printf("cycle_icons: curr_set: %s (%s)",pawdata.curr_set_name,pawdata.curr_set_ind) + if cycle_dir and type(cycle_dir) ~= "number" then return end + local setdata = pawdata.curr_set_data + local next_ind = roll(pawdata.curr_ico_ind + cycle_dir,1,setdata.inum) + get_active_icon(next_ind) + if use_ui_snd then play_sound_for_actor(snd_cycle_blip) end + if dotip then notify_icon_change() end +end + +function cycle_sets(cycle_dir,dotip) + if cycle_dir and type(cycle_dir) ~= "number" then return end + local next_ind = roll(pawdata.curr_set_ind + cycle_dir,1,#set_index) + active_set(next_ind) + if use_ui_snd then play_sound_for_actor(snd_cycle_blip) end + if dotip then notify_icon_change(true) end +end + +function icon_cycle(change,val) + if not mwheel_enabled then return end + if change then + icon_cycle_active = val + if not mwheel_notify then return icon_cycle_active end + if icon_cycle_active then + dotip(ts("st_paw_cycling_icons")) + else + dotip(ts("st_paw_mwheel_normal")) + end + end + return icon_cycle_active +end + +function set_cycle(change,val) + if not mwheel_enabled then return end + if change then + set_cycle_active = val + if not mwheel_notify then return icon_cycle_active end + if set_cycle_active then + dotip(ts("st_paw_cycling_sets")) + else + dotip(ts("st_paw_mwheel_normal")) + end + end + return set_cycle_active +end + +function cycle_items(cycle_dir,item_type,dotip) + if (item_type == nil) then + if icon_cycle() then + item_type = "icon" + elseif set_cycle() then + item_type = "set" + end + end + if not icoset_changed then icoset_changed = {} end + if item_type == "icon" then + icoset_changed.i = true + vl("cycling icons: %s",cycle_dir) + cycle_icons(cycle_dir,dotip) + elseif item_type == "set" then + icoset_changed.s = true + vl("cycling sets: %s",cycle_dir) + cycle_sets(cycle_dir,dotip) + end +end + + +function show_all_pins(onoff) + show_pins = onoff + if onoff then + vl("Showing all recorded pins") + for id,pin in pairs(pins) do + local icon = pin.icon + local mapspot_text = pin.text + vl("calling add_mapspot with %s | %s | %s",mapspot_text,id,icon) + add_mapspot(mapspot_text,id,icon) + end + else + vl("Hiding stored pins from map") + for id,pin in pairs(pins) do + remove_mapspot(id,pin.icon) + end + end +end + + +function load_mcm(pawpath,default) + local val = ui_mcm and ui_mcm.get("pawsys/"..pawpath) + if val ~= nil then + return val + else + return default + end +end + +function marker_hint_shown(wpin) + local mode = show_marker_hint and tonumber(show_marker_hint[wpin]) + local shown = feature_valid_in_mode(mode) + return shown +end + + +function marker_dist_shown(wpin) + local mode = show_marker_dist and tonumber(show_marker_dist[wpin]) + local shown = feature_valid_in_mode(mode) + return shown +end + + +function mcm_reload_general_settings() + if not ui_mcm then return end + local old_paw_en = paw_enabled + paw_enabled = load_mcm("pawgen/enabled",paw_enabled) + + if paw_enabled and not old_paw_en then + on_game_start() + dl("PAW was disabled and now is not, re-registering actor_on_update") + elseif not paw_enabled then + if old_paw_en then + unregister_all_callbacks() + end + printf(logprefix.."Personal Adjustable Waypoint has been disabled, aborting all further action!") + return false end + + disable_load_warning = load_mcm("pawgen/disable_load_warning",disable_load_warning) + wp_hud_icon_enabled = load_mcm("pawgen/wp_hud_icon_enabled",wp_hud_icon_enabled) + if wp_hud_icon_enabled then + show_marker_dist["wp"] = tonumber(load_mcm("pawgen/show_dist_wp",show_marker_dist["wp"])) + show_hud_waypoint() + else + hide_hud_waypoint() + end + show_marker_dist["pins"] = tonumber(load_mcm("pawgen/show_dist_pins",show_marker_dist["pins"])) + show_marker_hint["pins"] = tonumber(load_mcm("pawgen/show_hint_pins",show_marker_hint["pins"])) + pin_near_fade_dist = tonumber(load_mcm("pawgen/pin_near_fade_dist",pin_near_fade_dist)) + pin_far_fade_dist = tonumber(load_mcm("pawgen/pin_far_fade_dist",pin_far_fade_dist)) + pin_far_hide_dist = tonumber(load_mcm("pawgen/pin_far_hide_dist",pin_far_hide_dist)) + wp_clear_dist = tonumber(load_mcm("pawgen/wp_clear_dist",wp_clear_dist)) + tip_on_icoset_change = load_mcm("pawgen/tip_on_icoset_change",tip_on_icoset_change) + welcome_msg_shown = load_mcm("pawgen/welcome_msg_shown",welcome_msg_shown) + enable_wp_proxcheck = wp_clear_dist and wp_clear_dist > 0 + mcm_update_throttle = load_mcm("pawgen/mcm_update_throttle",mcm_update_throttle) + mwheel_poll_interval = load_mcm("pawgen/mwheel_poll_interval",mwheel_poll_interval) + -- These last two options are not in the MCM menu, but can be manually set as overrides + return true +end + +function mcm_reload_keybind_table() + if not ui_mcm then return end + for k,v in pairs(keybinds) do + local kb = load_mcm("pawbinds/bind_"..k) + local km = load_mcm("pawbinds/modk_"..k) + local vbkb = valid_bind(kb) + local vbkm = valid_bind(km) + if vbkb then + keybinds[k].bind = kb + end + if vbkm then + keybinds[k].mod = km + end + keybinds[k].text = bindtext(kb,km) + end +end + +function mcm_reload_keybind_settings() + cartography_must_hold = not load_mcm("pawbinds/cartmode_toggle",cartography_must_hold) + keybinds[cartmode].hold = cartography_must_hold + cart_shows_smarts = load_mcm("pawbinds/cart_shows_smarts",cart_shows_smarts) + mwheel_notify = load_mcm("pawbinds/mwheel_notify") + cartmode_unfade = load_mcm("pawbinds/cartmode_unfade",cartmode_unfade) + local tmp = ui_mcm.get("pawsys/pawbinds/mwheel_enabled") + if tmp and type(tmp) == "number" then + tmp = (tmp ~= 0) + end + mwheel_enabled = tmp and mwheel_avail + + tmp = ui_mcm.get("pawsys/pawbinds/mwheel_override") + if tmp ~= nil then + dl("MCM override found for mwheel_avail (old = %s | new = %s)",mwheel_avail,tmp) + mwheel_avail = tmp + end + + tmp = ui_mcm.get("pawsys/pawbinds/right_click_override") + -- if set to true, will force on_map_right_click support on + if tmp ~= nil then + dl("MCM override found for right_click_avail (old = %s | new = %s)",right_click_avail,tmp) + right_click_override= tmp + end + + tmp = ui_mcm.get("pawsys/pawgen/disable_mcmups") + if tmp ~= nil then + dl("MCM override found for disable_mcm_updates (old = %s | new = %s)",disable_mcm_updates,tmp) + disable_mcm_updates = tmp + end + + tmp = load_mcm("pawgen/pingsound") + if tmp ~= nil then + use_ping_snd = tmp + end +end + +function mcm_reload_pin_settings() + patch_res = ui_mcm.get("pawsys/pawpins/patch_res") or "badge" + local bi = ui_mcm.get("pawsys/pawpins/milpda_body_icon") + local pig = ui_mcm.get("pawsys/pawpins/pin_icon_group") + --local mp = ui_mcm.get("pawsys/pawpins/poi_icon_"..(pig or "")) + local cbi = ui_mcm.get("pawsys/pawpins/poi_icon_bodies") + + for k,v in pairs(icons) do + if managed_factions[k] then + local newbadge = "paw_"..patch_res..sep..k + vl("MCM: icon for %s was %s, is now %s",k,v,newbadge) + icons[k] = newbadge + end + end + + load_active_icoset_data() + local icon = pig and icon_sets[pig] and icon_sets[pig].active_icon or default_mapspot + icon_sets["bodies"].active_icon = icons[cbi] + dl("MCM: body icon mode %s | paw icon %s",bi,cbi) + map_pin_icon = icon + current_active_set = pig + + dl("MCM: icon %s | icon set: %s",icon,pig) + + local cp = ui_mcm.get("pawsys/pawpins/use_custom_pin_icon") or false + if cp then + custom_pin_icon = true + map_pin_icon = ui_mcm.get("pawsys/pawpins/custom_pin_icon") or map_pin_icon + dl("MCM: Overriding default icon with custom value: %s",map_pin_icon) + else + custom_pin_icon = false + end + if force_icon_override then + dl("MCM: Script hardcoded to override map_pin_icon with %s",force_icon_override) + map_pin_icon = force_icon_override + default_mapspot = force_icon_override + end + + if (bi and ish_kill_tracker) then + body_icon_mode = bi + current_body_icon = icons[cbi] or default_mapspot + ish_kill_tracker.use_paw_icon = (bi == "set") or (bi == "fac") + end + widget_enabled = load_mcm("pawhud/widget_enable",widget_enabled) + active_theme = load_mcm("pawhud/active_theme",active_theme) + if not hud_themes[active_theme] then active_theme = "classicauto" end + widget_custom_pos = { + x = load_mcm("pawhud/pos_x"), + y = load_mcm("pawhud/pos_y") + } + widget_use_custom_pos = load_mcm("pawhud/custompos") + widget_hide_delay = (tonumber(load_mcm("pawhud/autohide",widget_hide_delay)) * 1000) + use_ui_snd = load_mcm("pawhud/hudsound") + + --[[ + local mdf = clamp(tonumber(ui_mcm.get("pawsys/pawpins/fave_recent")),0,10) + if mdf and (mdf ~= max_dynamic_faves) then + local old_mdf = max_dynamic_faves + max_dynamic_faves = mdf + dl("new max_dynamic_faves: %s (was %s)",mdf,old_mdf) + if dynamic_faves and (not is_empty(dynamic_faves)) and + (max_dynamic_faves > 0) then + local df = {} + for i = 1,max_dynamic_faves do + if dynamic_faves[i] then + vl("dynamic_fave[%s]: %s",i,dynamic_faves[i]) + df[i] = dynamic_faves[i] + end + end + dynamic_faves = df + end + end + --]] +end + +function mcm_reload_reticle_settings() + if ui_mcm then + mark_on_positive_id = load_mcm("pawret/enable_autotag",mark_on_positive_id) + autotag_persistence = load_mcm("pawret/autotag_persistence",autotag_persistence) + autotag_lifetime = load_mcm("pawret/autotag_lifetime",(autotag_lifetime / 6)) * 6 + autotags_time_out = (autotag_lifetime or 0) > 0 + pin_hud_icon_default = load_mcm("pawret/pin_auto_visible",pin_hud_icon_default) + manual_smart_pins = load_mcm("pawret/manual_smart_pins",manual_smart_pins) + reticle_mode = load_mcm("pawret/reticle_mode",reticle_mode) + reticle_mustzoom = load_mcm("pawret/reticle_mustzoom",reticle_mustzoom) + reticle_color.a = load_mcm("pawret/reticle_alpha",reticle_color.a) + ret_fade_attack_time = load_mcm("pawret/ret_fade_attack_time",ret_fade_attack_time) + ret_fade_decay_time = load_mcm("pawret/ret_fade_decay_time",ret_fade_decay_time) + for k,v in pairs(smart_pins) do + smart_pins[k].pin = load_mcm("pawret/"..k,v.pin) + smart_pins[k].enabled = load_mcm("pawret/"..k.."_enable",v.enabled) + end + -- Load Crook's facid settings, if present + local did = ui_mcm.get("targetID/timeID") + if did ~= nil then + npc_ident.delay_id = did + end + did = ui_mcm.get("targetID/deadID") + if did ~= nil then + npc_ident.id_bodies = did + end + npc_ident.id_speed = ui_mcm.get("targetID/speedID") or 0.3 + npc_ident.lenience = ui_mcm.get("targetID/targL") or 0.99 + end +end + + +function on_option_change() + if load_failed then return end + -- Sync all MCM values and propagate changes + language = ui_options.curr_localization() + if ui_mcm and not mcm_killswitch then + debuglogs = load_mcm("pawgen/debuglogs",debuglogs) + catsy_paw_mcm.debuglogs = debuglogs + dl("Setting for debuglogs loaded from MCM: %s",debuglogs) + + if load_mcm("pawgen/wipe_all") then + ui_mcm.set("pawsys/pawgen/wipe_all",false) + dl("MCM: Wiping all pin data per player request") + local args = {wipe_all=true} + do_waypoint("pn_clr",nil,nil,args) + end + + mcm_reload_general_settings() + if not paw_enabled then + return + end + mcm_reload_keybind_table() + mcm_reload_keybind_settings() + mcm_reload_pin_settings() + mcm_reload_reticle_settings() + + for k,v in pairs(action_codes) do + local m = load_mcm("pawmenu/"..k) + if m ~= nil then + action_codes[k].mode = tonumber(m) or 0 + vl("MCM: Loading action code mode %s for %s",m,k) + else + vl("MCM: No value found for %s, leaving unchanged",k) + end + end + ui_mcm.set("pawsys/pawgen/mcm_ver",script_version) + end + + if ish_kill_tracker and item_milpda then ish_kill_tracker.on_option_change() end + active_set(icon_sets[current_active_set].i) + if db.actor and get_hud() then + unsquish_ratio = (device().height / device().width) / (768 / 1024) + reset_indicator() + end +end + + +function load_active_icoset_data() + if not ui_mcm then return end + vl("Loading MCM values for sets and icons") + local path = "pawsys/pawpins/poi_icon_" + for k,v in pairs(icon_sets) do + local val = ui_mcm.get(path..k) + local icon = icons[val] + --printf("loading "..path..k..": %s | icons %s | icons[%s]: %s",val,icons,val,icons[val]) + vl("Loading active icon for %s: %s = %s",k,val,icon) + icon_sets[k].default = val + icon_sets[k].active_icon = icon + end + local setname = ui_mcm.get("pawsys/pawpins/pin_icon_group") + if set_index[setname] then + active_set(set_index[setname]) + end +end + +function update_mcm_icoset_data() + if not ui_mcm then return end + if icoset_changed then + vl("Updating MCM settings after set/icon change",icoset_changed) + local curr_set = pawdata.curr_set_name + if icoset_changed and icoset_changed.s then + ui_mcm.set("pawsys/pawpins/pin_icon_group",curr_set) + end + local path = "pawsys/pawpins/poi_icon_"..curr_set + local active_pin = pin_for_icon(icon_sets[curr_set].active_icon) + ui_mcm.set(path,active_pin) + end + icoset_changed = nil +end + +function check_waypoint_proximity(id) + local se_obj = id and alife_object(id) + if (not se_obj) or not (se_obj and se_obj.online) then return end + local szpos = se_obj.position + local dist = szpos:distance_to(db.actor:position()) or 0 + if dist <= wp_clear_dist then + toggle_waypoint(false) + end +end + +function tick() + if not paw_enabled then + unregister_all_callbacks() + return + end + local now = time_global() + if enable_wp_proxcheck and waypoint_active and (next_wp_proxcheck <= now) then + next_wp_proxcheck = now + wp_proxcheck_interval + check_waypoint_proximity(placed_waypoint and placed_waypoint.id) + end + if (next_gc_check <= now) then + next_gc_check = now + garbcollect_interval + script_zone_cleanup() + temp_pin_cleanup() + end + if disable_mcm_updates then return end + if (next_mcm_update > now) or not icoset_changed then return end + next_mcm_update = now + mcm_update_throttle + update_mcm_icoset_data() +end + +function paw_welcome_message() + if welcome_msg_shown then return true end + vl("Welcome message not shown yet, displaying to player") + welcome_msg_shown = true + if ui_mcm then + ui_mcm.set("pawsys/pawgen/welcome_msg_shown",true) + end + local player_name = alife():actor():character_name() + local kb = keybinds + toggle_bind = kb["wptoggle"].bind + toggle_mod = kb["wptoggle"].mod + quickpin_bind = kb["quickpin"].bind + quickpin_mod = kb["quickpin"].mod + cart_mode_hold = kb["cartmode"].bind + cart_mode_mod = kb["cartmode"].mod + local toggle_btxt = bindtext(toggle_bind,toggle_mod) + local quickpin_btxt = bindtext(quickpin_bind,quickpin_mod) + local cartmode_btxt = bindtext(cart_mode_hold,cart_mode_mod) + local welcome_msg = string.format(ts("st_pawsys_welcome_msg"),toggle_btxt,quickpin_btxt,cartmode_btxt,player_name) + welcome_msg = psk(welcome_msg,text_colors) + dotip(welcome_msg,10000) + return true +end +-- ====================================================================== +-- UI ELEMENTS +-- ====================================================================== + +-- ====================================================================== +--[[ TEXT INPUT WINDOW + Originally adapted from parts of the vanilla backpack stash script + + A more generic, parameterized version used to ship with PAW as its + own mod (ui_get_input.script) +-- ====================================================================]] + +InputGUI = nil + +function get_text(title_txt,icon_tex,prepop,func,args) + dl("get_text called:\nTitle: %s\nIcon: %s\nExisting text: %s",title_txt,icon_tex,prepop) + tex = texdef or tex_defs + args = args or {} + + if not InputGUI then + InputGUI = UITextInputWnd(title_txt,icon_tex,prepop,func,args) + end + + if InputGUI and not InputGUI:IsShown() then + InputGUI:Reset(title_txt,icon_tex,prepop,func,args) + InputGUI:ShowDialog(true) + Register_UI("UITextInputWnd","get_text") + end +end + +-- ====================================================================== + +class "UITextInputWnd" (CUIScriptWnd) + +function UITextInputWnd:__init(title_txt,icon_tex,prepop,func,args) super() + vl("UITextInputWnd:__init:\nTitle: %s\nIcon: %s\nExisting text: %s",title_txt,icon_tex,prepop) + self.title_txt = title_txt + self.icon_tex = icon_tex + self.prepop = prepop + self.func = func + self.args = args + self:InitControls() + self:InitCallBacks() +end + +function UITextInputWnd:__finalize() +end + +function UITextInputWnd:InitControls() + self:SetWndRect(Frect():set(0,0,1024,768)) + self:SetAutoDelete(true) + + local tex = { + file = "paw_input_window.xml", + tbar = "titlebar", + paw = "paw", + icon = "icon", + text = "text", + root = "dialog", + bg = "background", + input = "input", + ok = "btn_ok", + cancel = "btn_cancel", + } + + local xml = CScriptXmlInit() + local tbar = tex.root..":"..tex.tbar + local paw = tbar..":"..tex.paw + local icon = tbar..":"..tex.icon + local text = tbar..":"..tex.text + local bg = tex.root..":"..tex.bg + local cancel = tex.root..":"..tex.cancel + local input = tex.root..":"..tex.input + local ok = tex.root..":"..tex.ok + + xml:ParseFile (tex.file) + + self.dialog = xml:InitStatic(tex.root, self) + xml:InitStatic(bg, self.dialog) + self.tbar = xml:InitStatic(tbar,self.dialog) + self.paw = xml:InitTextWnd(paw,self.tbar) + self.paw:SetText("PAW".." "..script_version) + self.paw:SetFont(GetFontSmall()) + self.icon = xml:InitStatic(icon, self.tbar) + if self.icon_tex then + self.icon:InitTexture(self.icon_tex) + else + dl("Empty icon texture passed to input window") + end + self.text = xml:InitTextWnd(text, self.tbar) + self.text:SetText(self.title_txt) + self.text:SetFont(GetFontGraffiti22Russian()) + + self.input = xml:InitEditBox(input,self.dialog) + self:Register(self.input,"fld_input") + self.input:SetText(self.prepop) + + local btn = xml:Init3tButton(cancel, self.dialog) + self:Register(btn,tex.cancel) + + btn = xml:Init3tButton(ok, self.dialog) + self:Register(btn,tex.ok) +end + + +function UITextInputWnd:InitCallBacks() + self:AddCallback("btn_ok", ui_events.BUTTON_CLICKED, self.OnAccept, self) + self:AddCallback("btn_cancel", ui_events.BUTTON_CLICKED, self.Close, self) +end + + +function UITextInputWnd:Reset(title_txt,icon_tex,prepop,func,args) + self.icon_tex = icon_tex + self.title_txt = title_txt + self.prepop = prepop + self.func = func + self.args = args + if self.title_txt then + self.text:SetText(self.title_txt) + end + if self.icon_tex then + self.icon:InitTexture(self.icon_tex) + end + self.input:SetText("") +end + + +function UITextInputWnd:Update() + CUIScriptWnd.Update(self) +end + + +function UITextInputWnd:OnAccept() + local text_input = self.input:GetText() + if text_input == "" then text_input = nil end + dl("OnAccept: text_input is %s",text_input) + if self.func then + exec(self.func,text_input,self.args) + end + self:Close() +end + + +function UITextInputWnd:OnKeyboard(dik, keyboard_action) + local res = CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) + if (res == false) then + local bind = dik_to_bind(dik) + if keyboard_action == ui_events.WINDOW_KEY_PRESSED then + if dik == DIK_keys.DIK_ESCAPE then + self:Close() + end + end + end + return res +end + + +function UITextInputWnd:Close() + self:HideDialog() + Unregister_UI("UITextInputWnd") +end + +-- ====================================================================== +--[[ ICON AND SET HUD INDICATOR + See the hud_themes table and PAW's MCM menu for more info +-- ====================================================================]] + + +GUI = nil + +class "UIPAWIndicator" (CUIScriptWnd) + +function UIPAWIndicator:__init() super() + vl("PAW init called, active theme is %s | widget_active %s | widget_enabled %s",active_theme,widget_active,widget_enabled) + if not widget_enabled then return end + self.theme = hud_themes[active_theme] + self:InitControls() + self:DrawIndicator(self.theme) + get_hud():AddDialogToRender(self) + RegisterScriptCallback("actor_on_net_destroy", self) +end + + +function UIPAWIndicator:__finalize() +end + + +function UIPAWIndicator:Reset(theme) + vl("UIPAWIndicator:Reset called with theme %s",theme and theme.name) + if not theme then theme = self.theme end + self.dialog:Show(false) + self.dialog = nil + self:InitControls() + self:DrawIndicator(theme) +end + +function UIPAWIndicator:Destroy() + get_hud():RemoveDialogToRender(self) +end + + +function UIPAWIndicator:SetTheme(theme_name) + vl("UIPAWIndicator:SetTheme called with theme_name %s",theme_name) + local theme = hud_themes and hud_themes[theme_name] + if theme then + self.dialog:Show(false) + active_theme = theme_name or active_theme + self.theme = hud_themes[active_theme] + self:Reset(theme) + end +end + + +function UIPAWIndicator:actor_on_net_destroy() + get_hud():RemoveDialogToRender(self) +end + + +function UIPAWIndicator:DrawIndicator(theme) + vl("UIPAWIndicator:DrawIndicator called with theme %s | self %s",theme and theme.name,self.theme) + local pos = theme.pos + if widget_use_custom_pos then pos = widget_custom_pos end + local xml = CScriptXmlInit() + xml:ParseFile(theme.file) + + self.dialog = xml:InitStatic(theme.node, self) + self.dialog:SetWndPos(vector2():set(pos.x,pos.y)) + if theme.tex then + self.dialog:InitTexture(theme.tex) + end + self.box_curr = xml:InitStatic(theme.node..":curr", self.dialog) + self.box_curr:InitTexture(texture_for_icon(self.icon_curr)) + + if theme.style ~= "compact" then + self.box_prev = xml:InitStatic(theme.node..":prev", self.dialog) + self.box_prev:InitTexture(texture_for_icon(get_prev_icon())) + + self.box_next = xml:InitStatic(theme.node..":next", self.dialog) + self.box_next:InitTexture(texture_for_icon(get_next_icon())) + + self.box_head = xml:InitStatic(theme.node..":head",self.dialog) + self.box_text = xml:InitTextWnd(theme.node..":head",self.box_head) + self.box_prev:SetTextureColor(colors.dimmed) + self.box_next:SetTextureColor(colors.dimmed) + end + if theme.style == "full" then + self.box_text:SetText(ts("ui_mcm_lst_pawsys_pg_"..self.set_curr)) + self.box_head2 = xml:InitStatic(theme.node..":head2",self.dialog) + self.box_text2 = xml:InitTextWnd(theme.node..":head2",self.box_head2) + self.box_text2:SetText(ts("ui_mcm_lst_"..self.icon_curr)) + elseif theme.style == "minimal" then + self.box_text:SetText(ts("ui_mcm_lst_"..self.icon_curr)) + end + vl("UIPAWIndicator:DrawIndicator completed") +end + + +function UIPAWIndicator:InitControls() + self.pda_active = item_device.is_pda_active() + self.icon_curr = get_active_icon() + self.set_curr = pawdata.curr_set_name + vl("UIPAWIndicator:InitControls: active icon is %s",self.icon_curr) +end + + +function UIPAWIndicator:Update(force) + CUIScriptWnd.Update(self) + self.dialog:Show(false) + if not (widget_enabled and main_hud_shown()) then return end + + local theme = self.theme + local pda_changed = false + + if self.pda_active ~= item_device.is_pda_active() then + pda_changed = true + end + if item_device.is_pda_active() then + local thm = theme.pda_thm + if thm then + + theme = hud_themes[thm] + end + end + if pda_changed then + vl("PDA mode has changed, resetting theme") + self:Reset(theme) + end + + if theme.tex then self.dialog:InitTexture(theme.tex) end + local pos = theme.pos + if widget_use_custom_pos then + pos = widget_custom_pos + end + + self.dialog:SetWndPos(vector2():set(pos.x,pos.y)) + + local acticon = pawdata.curr_ico_name + if (self.icon_curr ~= acticon) or (self.set_curr ~= pawdata.curr_set_name) then + vl("UIPAWIndicator:Update - icon/set has changed (new curr icon: %s)",acticon) + self.set_curr = pawdata.curr_set_name + self.icon_curr = acticon + self.box_curr:InitTexture(texture_for_icon(self.icon_curr)) + if theme.style ~= "compact" then + self.box_prev:InitTexture(texture_for_icon(get_prev_icon())) + self.box_next:InitTexture(texture_for_icon(get_next_icon())) + end + if theme.style == "full" then + self.box_text:SetText(ts("ui_mcm_lst_pawsys_pg_"..self.set_curr)) + self.box_text2:SetText(ts("ui_mcm_lst_"..self.icon_curr)) + elseif theme.style == "minimal" then + self.box_text:SetText(ts("ui_mcm_lst_"..self.icon_curr)) + end + widget_last_used = time_global() + widget_active = true + end + if widget_hide_delay > 0 then + if time_global() > widget_last_used + widget_hide_delay then widget_active = false end + end + self.dialog:Show(widget_active) +end + + +function reset_indicator() + vl("Resetting PAW indicator") + if GUI then GUI:Destroy() end + if not widget_enabled then return end + vl("Re-initializing PAW indicator") + GUI = UIPAWIndicator() +end + + +function show_indicator(tf) + if not (GUI and widget_enabled) then return end + if show_indicator == nil then + widget_active = -widget_active + else + widget_active = (tf == true) or false + end + GUI:Show(widget_active) +end + + +-- ====================================================================== +--[[ WAYPOINT AND PIN HUD ICONS + Some pieces adapted from GT's "HUD Ubisoft Friendly" addon +-- ====================================================================]] + +function unsquish_aspect(element) + local w = element:GetWidth() + local h = element:GetHeight() + element:SetWndSize(vector2():set((w*unsquish_ratio),h)) +end + +function dist_from_crosshair(position) + local toPoint = vector():set(position):sub(device().cam_pos):normalize() + return toPoint:dotproduct(device().cam_dir) +end + +--[[ +animate_texture( + container, + 500, + {512.5,384.5}, + {512.5,384.5}, + {0,0}, + {200, 200}, + 1, + 0, + function() printf("anim_finished") end, + function(x) return x^2 end +) +--]] + +function easing_outquint(x) + if not x then return end + return 1 - math.pow(1 - x, 5) +end + +function easing_inquint(x) + if not x then return end + return x * x * x * x * x +end + +function abort_fade_in() + return HUD_RET.fading_out or not HUD_RET.fading_in +end + +function abort_fade_out() + return HUD_RET.fading_in or not HUD_RET.fading_out +end + + +function animate_texture(element, duration, start_pos, end_pos, start_size, end_size, alpha_start, alpha_end , on_finish_func, anim_curve_modifier_func, r, g, b) + r = r or 255 + g = g or 255 + b = b or 255 + + local anim_state = 0 + local start_time = time_global() + local end_time = time_global() + duration + local anim_curve_modifier_func = anim_curve_modifier_func or function(x) return x end + CreateTimeEvent("animate_texture", time_global(), 0, function() + local x = anim_curve_modifier_func(anim_state) + local pos_x = lerp(start_pos.x, end_pos.x, x) + local pos_y = lerp(start_pos.y, end_pos.y, x) + + local size_x = lerp(start_size.x, end_size.x, x) + local size_y = lerp(start_size.y, end_size.y, x) + + local alpha = lerp(alpha_start, alpha_end, x) + + + if anim_state == 1 then + if on_finish_func then on_finish_func() end + return true + end + anim_state = math.min(1, normalize(time_global(), start_time, end_time)) + end) +end + +local active_anims = {} + +function anim_fade(box,alpha_start,alpha_end,duration,event_id,instanced, r, g, b, anim_curve_modifier_func, on_finish_func,abort_func) + if not box then return end + local fade_dir = (alpha_start > alpha_end) and "out" or "in" + dl("anim_fade: start %s end %s dur %s | event_id %s | instanced %s ",alpha_start,alpha_end, duration,event_id,instanced) + if (event_id == nil) then event_id = "anim_fade" end + local anim_id = event_id.."_"..tostring(time_global()) + r = r or 255 + g = g or 255 + b = b or 255 + + if active_anims[event_id] then + alpha_start = active_anims[event_id].a + dl("Repeat invocation of non-instanced fade event, aborting fade-%s and starting new at current alpha (%s)",fade_dir,alpha_start) + active_anims[event_id] = nil + if on_finish_func then on_finish_func(box,event_id,alpha_end,r,g,b) end + --anim_fade(box,alpha_start,alpha_end,duration,event_id,instanced, r, g, b, anim_curve_modifier_func, on_finish_func,abort_func) + --return true + end + + local anim_state = 0 + local start_time= time_global() + local end_time = time_global() + duration + local anim_curve_modifier_func = anim_curve_modifier_func or function(x) return x end + active_anims[event_id] = { + + box = box, + instanced = instanced and true or false, + anim_id = anim_id, + start_time = start_time, + end_time = end_time, + active = true, + a_start = alpha_start, + a_end = alpha_end, + a = alpha_start, + r = r, + g = g, + b = b, + } + + --vl("Creating fade-%s time event %s | %s",fade_dir,event_id,anim_id) + CreateTimeEvent("animate_fade"..event_id..anim_id, time_global(), 0, function() + local abort = abort_func and abort_func() + if abort then + vl("Received abort for %s",event_id) + anim_state = 1 + else + local anim = active_anims[event_id] + if anim then + local x = anim_curve_modifier_func(anim_state) + local alpha = lerp(alpha_start, alpha_end, x) + anim.a,anim.r,anim.g,anim.b = alpha,r,g,b + box:SetTextureColor(GetARGB(alpha,r,g,b)) + --vl("Fade-%s time event: setting transparency for %s to %s at time %s",fade_dir,event_id,alpha,time_global()) + else + vl("Event data for %s has cleared, aborting",event_id) + anim_state = 1 + end + end + + if (anim_state == 1) then + vl("Fade-%s animation %s completed at %s",fade_dir,event_id,time_global()) + if on_finish_func then on_finish_func(box,event_id,alpha_end,r,g,b) end + return true + end + anim_state = math.min(1, normalize(time_global(), start_time, end_time)) + end) +end + +function fade_by_dist(element,dist,min,mid,max,alpha,r,g,b,mode) + -- 0 : fade Static element + -- 1 : fade text in Static + -- 2 : fade text in TextWnd + + alpha = alpha or 255 + r = r or 255 + g = g or 255 + b = b or 255 + if not (cart_mode and cartmode_unfade) then + if (dist <= min) then + if dist < min then + alpha = alpha * (dist / min) + end + elseif dist > mid then + if (mid > 0) then + if (dist > (mid + max)) then + alpha = 0 + elseif dist > mid then + alpha = alpha * (1 - ((dist - mid) / max)) + end + end + end + end + if mode == 1 then + element:TextControl():SetTextColor(GetARGB(alpha,r,g,b)) + elseif mode == 2 then + element:SetTextColor(GetARGB(alpha,r,g,b)) + else + element:SetTextureColor(GetARGB(alpha,r,g,b)) + end +end + + +function scale_by_dist(element,dist,w,h,min,mid,max,unsquish) + --printf("scale_by_dist for %sx%s element at dist %s | unsquish %s | %s - %s - %s ",w,h,dist,unsquish,min,mid,max) + dist = clamp(dist,0,max) + local nw = w + local nh = h + if (dist <= min) then + nw = w + ((1 - (dist / min)) * (w * 0.5)) + nh = h + ((1 - (dist / min)) * (h * 0.5)) + elseif dist > mid then + nw = w - (((dist - mid) / (max - mid)) * (w * 0.4)) -- trying 0.4 rather than 0.3 to bring down min size + nh = h - (((dist - mid) / (max - mid)) * (h * 0.4)) + end + + if unsquish then + nw = nw * unsquish_ratio + end + --printf("scale_by_dist for %sx%s element:\nw %s -> nw %s | h %s -> nh %s | ratio: %s",element:GetWidth(),element:GetHeight(),w,nw,h,nh,unsquish_ratio) + + return nw,nh +end + + +local function zoom_delay_over() zoom_delay = false end +local zoom_delay = false +local last_zoom_coef = 1 +local last_zoom_state = false + +function get_current_zoom_coef() + if zoom_delay then return last_zoom_coef end + + local obj = db.actor:active_item() + if (obj and IsWeapon(obj)) then + local wpn = obj:cast_Weapon() + end + + local is_zoomed = axr_main.binoc_is_zoomed or (wpn and wpn:IsZoomed()) + if is_zoomed ~= last_zoom_state then + last_zoom_state = is_zoomed + zoom_delay = true + CreateTimeEvent("zoomdelay","paw_zoom"..tostring(time_global()),0.25,tasks_placeable_waypoints.zoom_delay_over) + return last_zoom_coef + end + + local fov = device().fov + local zoom_coef = fov / 85 + last_zoom_coef = zoom_coef + + return zoom_coef +end + + +function get_screen_coords(id) + local pos = nil + local is_npc,is_place + local obj = db.storage[id] and db.storage[id].object or level.object_by_id(id) + local se_obj = alife_object(id) + --printf(" get_screen_coords: id %s -> obj %s (%s) | se_obj %s",id,obj and obj:name(),obj and obj:id(),se_obj and se_obj:name()) + if not (obj or se_obj) then + local is_wp = (id == (placed_waypoint and placed_waypoint.id)) and (not waypoint_canceling) and end_waypoint_task(id) + local pin = pins[id] and do_waypoint("pn_del",se_obj,nil,{syscall=true,id=id}) + local exit = (is_wp and " canceling waypoint and") or (pin and " clearing pin and") or "" + dl("get_screen_coords: no valid game or server object could be found for %s,%s exiting",id,exit) + return + end + + if (obj and IsStalker(obj) or IsMonster(obj)) then + pos = obj and utils_obj.safe_bone_pos(obj,"bip01_head") + is_npc = true + --printf(" Pinned object %s is an npc",id) + elseif (se_obj:clsid() == clsid.smart_terrain) or (se_obj:clsid() == clsid.script_zone) then + pos = se_obj.position + is_place = true + --printf(" Pinned object %s is a place",id) + elseif (obj and (type(obj.position) == "function")) then + local tmp = obj:position() + pos = tmp and vector():set(tmp.x,tmp.y,tmp.z) + end + + if (pos == nil) then + if not (se_obj and se_obj.online) then + return nil + elseif (se_obj:clsid() == clsid.online_offline_group_s) then + local i = se_obj:commander_id() + local npc = i and db.storage[i] and db.storage[i].object or level.object_by_id(i) + pos = npc and utils_obj.safe_bone_pos(npc,"bip01_head") + is_npc = true + --printf(" Pinned object %s is an npc squad",id) + else + local tmp = se_obj and se_obj.position + pos = tmp and vector():set(tmp.x,tmp.y,tmp.z) + end + end + if not ((pos and pos.x) and (pos and pos.x) and (pos and pos.z)) then + dl("WARNING: unable to get valid pos for %s",id) + return nil + end + + --printf(" pos found for id %s: %s,%s,%s",id,pos and pos.x,pos and pos.y,pos and pos.z) + + local dist = db.actor:position():distance_to(pos) + local true_dist = dist -- store this + local min_dist = 0 -- distance floor for proximity adjustment range + local near_dist = 15 -- max dist where proximity adjustment range begins + local mid_dist = 15 -- dist at which far adjustments begin + local max_dist = 60 -- distance ceiling for the far adjustment range + local near_adj = 0 -- max icon vertical position change from proximity + local far_adj = 1.75 -- max icon vertical position change from distance + local vert_adj = 0 -- icon position above object will be adjusted by this + + if is_place then + near_adj = 1.2 -- location spots are usually on or in the ground + elseif is_npc then + min_dist = 2 -- to allow for npc bounding box + near_adj = 0.45 -- max increase in height above npc head from proximity < 12m + end + local vert_adj = near_adj + local dist_prog = 0 -- 0 to 1 progress from beginning to end of adjustment range + local dist_coef = 1 -- 0 to 1 multiplier based on distance + dist = clamp(dist,min_dist,max_dist) + + if (dist <= near_dist) then + dist_prog = ((near_dist - min_dist) - (dist - min_dist)) * 0.1 + dist_coef = math.abs(math.sqrt(math.pow(dist_prog, 2))) + vert_adj = near_adj - (near_adj * dist_coef) + elseif (dist > mid_dist) then + local far_range = max_dist - mid_dist + local far_dist = dist - mid_dist + if dist >= max_dist then + dist_prog = 1 + else + dist_prog = (far_dist / far_range) + end + dist_coef = dist_prog -- linear + --dist_coef = math.cos(((1 - dist_prog) * math.pi) / 2) -- eastInSine - this one works ok + --dist_coef = math.sin((dist_prog * math.pi) / 2) -- easeOutSine + --dist_coef = math.abs(math.sqrt(math.pow(dist_prog, 2))) + vert_adj = near_adj + (dist_coef * far_adj) + end + --local zoom_coef = get_current_fov_coef() or 1 + local zoom_coef = (device().fov / 85) + + pos.y = pos.y + 0.575 + (vert_adj * zoom_coef) + --printf("* Actor is %s from %s (near_dist %s | max_dist %s\n* dist_prog %s | dist_coef %s\n| Final vertical adjustment: %s",true_dist,id,near_dist,max_dist,dist_prog,dist_coef,vert_adj) + + local vec = pos and game.world2ui(vector():set(pos.x,pos.y,pos.z),false) + --printf("final vec for %s: %s,%s",id,vec and vec.x,vec and vec.y) + if (vec and (vec.x ~= -9999) and (vec.y ~= 0)) then + return vec + end + + return nil +end + +-- ====================================================================== + +HUD_MT = nil + +function show_hud_waypoint() + if not db.actor then return end + if (HUD_MT == nil) then + HUD_MT = UIPAWHUDWaypoint() + get_hud():AddDialogToRender(HUD_MT) + end +end + +function hide_hud_waypoint() + if not db.actor then return end + if (HUD_MT ~= nil) then + HUD_MT:ShowDialog(false) + get_hud():RemoveDialogToRender(HUD_MT) + HUD_MT = nil + end +end + +function update_hud_waypoint() + if not db.actor then return end + if (HUD_MT ~= nil) then + HUD_MT:Update(true) + end +end + +-- ====================================================================== + +class "UIPAWHUDWaypoint" (CUIScriptWnd) + +function UIPAWHUDWaypoint:__init() super() + self:InitControls() + RegisterScriptCallback("actor_on_net_destroy", self) +end + + +function UIPAWHUDWaypoint:__finalize() +end + + +function UIPAWHUDWaypoint:InitControls() + self:SetAutoDelete(true) + self.xml = CScriptXmlInit() + self.xml:ParseFile("paw_hud_wp_icon.xml") + self.marker = self.xml:InitStatic("marker",self) + self.dist = self.xml:InitStatic("marker:distance_sh:distance",self) + self.dist:TextControl():SetTextColor( GetARGB(255,230,230,230) ) + self.dist:TextControl():SetFont(GetFontSmall()) + self.dist_sh = self.xml:InitStatic("marker:distance_sh",self.dist) + self.dist_sh:TextControl():SetTextColor( GetARGB(255,0,0,0) ) + self.dist_sh:TextControl():SetFont(GetFontSmall()) + self.dist_sh:SetWndPos(vector2():set(1,1)) + self.wref = self.xml:InitStatic("marker:distance_sh:distance",self.dist) + self.wref:TextControl():SetFont(GetFontSmall()) + self.wref:Show(false) +end + + +function UIPAWHUDWaypoint:Destroy() + get_hud():RemoveDialogToRender(self) +end + + +function UIPAWHUDWaypoint:actor_on_net_destroy() + get_hud():RemoveDialogToRender(self) +end + + + +function UIPAWHUDWaypoint:ShowMarker(onoff) + self.dist:Show(onoff and marker_dist_shown("wp")) + self.dist_sh:Show(onoff and marker_dist_shown("wp")) + self.marker:Show(onoff) +end + +function UIPAWHUDWaypoint:Update() + CUIScriptWnd.Update(self) + if waypoint_active and (main_hud_shown() or axr_main.binoc_is_zoomed or axr_main.scoped_weapon_is_zoomed) and not waypoint_canceling then + local vec = placed_waypoint and placed_waypoint.id and get_screen_coords(placed_waypoint.id) + if (vec) then + self.marker:SetWndPos(vec) + local id = placed_waypoint and placed_waypoint.id + local se_obj = id and alife_object(id) + if se_obj then + local dist = db.actor:position():distance_to(se_obj.position) + local h,v = scale_by_dist(self.marker,dist,20,20,50,100,200,true) + self.marker:SetWndSize(vector2():set(h,v)) + if marker_dist_shown("wp") then + local pos = self.marker:GetWndPos() + --local dist_txt = string.format("%.1f",dist)..ts("st_paw_meters_abbr") + local dist_txt = string.format("%.1f",dist).."m" + self.dist:Show(false) + self.dist_sh:Show(false) + self.dist:TextControl():SetText(dist_txt) + self.dist_sh:TextControl():SetText(dist_txt) + self.wref:TextControl():SetText(dist_txt) + self.wref:AdjustWidthToText() + local tw = self.wref:GetWidth() + self.dist:SetWndPos(vector2():set(pos.x - (tw / 2) - 1, pos.y + v - 8)) + end + self:ShowMarker(se_obj.online and true) + end + return + end + self:ShowMarker(false) + else + self:ShowMarker(false) + end +end + +-- ====================================================================== + +hud_pin_objs = {} + +function update_hud_pins() + for k,v in pairs(hud_pin_objs) do + v:Update(true) + end +end + +function hide_hud_pin(id) + if not id then return end + if hud_pin_objs[id] then + get_hud():RemoveDialogToRender(hud_pin_objs[id]) + hud_pin_objs[id] = nil + end +end + +function show_hud_pin(id) + vl("show_hud_pin called for pin ID %s",id) + if hud_pin_objs[id] then + hide_hud_pin(id) + end + hud_pin_objs[id] = UIPAWHUDPin(id) + get_hud():AddDialogToRender(hud_pin_objs[id]) +end + +function init_hud_pins() + for k,v in pairs(pins) do + local id = v and v.id + if id and v.hud then + local se_obj = alife_object(id) + if se_obj and se_obj.online then + show_hud_pin(id) + end + end + end +end + +-- ====================================================================== + +class "UIPAWHUDPin" (CUIScriptWnd) + +function UIPAWHUDPin:__init(id) super() + self.pin_id = id + self.pin_se_obj = alife_object(id) + self:InitControls(id) + RegisterScriptCallback("actor_on_net_destroy", self) + RegisterScriptCallback("on_localization_change", self) + self.med_hint_font = (language == "rus") +end + + +function UIPAWHUDPin:__finalize() +end + + +function UIPAWHUDPin:InitControls(id) + self:SetAutoDelete(true) + self.xml = CScriptXmlInit() + self.xml:ParseFile("paw_hud_pin_icon.xml") + self.marker = self.xml:InitStatic("marker",self) + local tex = texture_for_icon(pins[id].icon) + local name = pins[id].text + self.marker:InitTexture(tex) + + self.label = self.xml:InitStatic("marker:label",self) + self.label:TextControl():SetTextColor( GetARGB(255,230,230,230) ) + + self.label_sh = self.xml:InitStatic("marker:label_sh",self.label) + self.label_sh:TextControl():SetTextColor( GetARGB(255,0,0,0) ) + self.label_sh:SetWndPos(vector2():set(1,1)) + self.lref = self.xml:InitStatic("marker:label",self.label) + self.label:TextControl():SetText(name) + self.label_sh:TextControl():SetText(name) + self.lref:TextControl():SetFont(GetFontSmall()) + self.lref:Show(false) + self:on_localization_change() + vl("Adding label %s to pin %s",name,self.pin_id) + + self.dist = self.xml:InitStatic("marker:distance",self) + self.dist:TextControl():SetTextColor( GetARGB(255,230,230,230) ) + self.dist:TextControl():SetFont(GetFontSmall()) + self.dist_sh = self.xml:InitStatic("marker:distance_sh",self.dist) + self.dist_sh:TextControl():SetTextColor( GetARGB(255,0,0,0) ) + self.dist_sh:TextControl():SetFont(GetFontSmall()) + self.dist_sh:SetWndPos(vector2():set(1,1)) + self.wref = self.xml:InitStatic("marker:distance",self.dist) + self.wref:TextControl():SetFont(GetFontSmall()) + self.wref:Show(false) + self.last_dist = nil + + --local np,dp = self.label:GetWndPos(),self.dist:GetWndPos() + --local nx,ny,dx,dy = np.x,np.y,dp.x,dp.y + --printf("Init: name pos %s,%s | dist pos %s,%s",nx,ny,dx,dy) +end + + +function UIPAWHUDPin:Destroy() + hide_hud_pin(self.pin_id) + get_hud():RemoveDialogToRender(self) +end + +function UIPAWHUDPin:on_localization_change() + self.med_hint_font = (language == "rus") + if self.med_hint_font then + self.label:TextControl():SetFont(GetFontMedium()) + self.label_sh:TextControl():SetFont(GetFontMedium()) + self.lref:TextControl():SetFont(GetFontMedium()) + else + self.label:TextControl():SetFont(GetFontSmall()) + self.label_sh:TextControl():SetFont(GetFontSmall()) + self.lref:TextControl():SetFont(GetFontSmall()) + end +end + +function UIPAWHUDPin:actor_on_net_destroy() + get_hud():RemoveDialogToRender(self) +end + +function UIPAWHUDPin:ShowMarker(onoff) + self.dist:Show(onoff and marker_dist_shown("pins")) + self.dist_sh:Show(onoff and marker_dist_shown("pins")) + self.label:Show(onoff and marker_hint_shown("pins")) + self.label_sh:Show(onoff and marker_hint_shown("pins")) + self.marker:Show(onoff) +end + +function UIPAWHUDPin:Update() + --printf("UIPAWHUDPin:Update") + if not (pins and pins[self.pin_id]) then + self:Destroy() + end + if item_device.is_pda_active() or not (self.pin_se_obj and self.pin_se_obj.online) then + self.marker:Show(false) + return + end + CUIScriptWnd.Update(self) + if (main_hud_shown() or axr_main.binoc_is_zoomed or axr_main.scoped_weapon_is_zoomed) then + local vec = self.pin_id and get_screen_coords(self.pin_id) + + if (vec) then + local pindist = db.actor:position():distance_to(self.pin_se_obj.position) + local szx,szy = scale_by_dist(self.marker,pindist,24,24,10,20,50,true) + + self.marker:SetWndPos(vec) + self.marker:SetWndSize(vector2():set(szx,szy)) + + local f_near = pin_near_fade_dist + local f_far = pin_far_fade_dist + local f_hide = pin_far_hide_dist + fade_by_dist(self.marker, pindist,f_near,f_far,f_hide) + fade_by_dist(self.label, pindist,f_near,f_far,f_hide,255,230,230,230,1) + fade_by_dist(self.label_sh, pindist,f_near,f_far,f_hide,255,0,0,0,1) + fade_by_dist(self.dist, pindist,f_near,f_far,f_hide,255,230,230,230,1) + fade_by_dist(self.dist_sh, pindist,f_near,f_far,f_hide,255,0,0,0,1) + + local name = pins[self.pin_id].text + local maxd = 100 + local disty = pindist + if pindist >= maxd then + disty = maxd + end + local yadj = (disty / maxd * 6) + local pos = self.marker:GetWndPos() + local nx,ny,dx,dy,tw + + if marker_hint_shown("pins") then + self.label:TextControl():SetText(name) + self.label_sh:TextControl():SetText(name) + self.lref:TextControl():SetText(name) + self.lref:AdjustWidthToText() + tw = self.lref:GetWidth() + nx = pos.x - (tw * .5) + ny = pos.y - 22 + yadj + --printf("Container for pin %s is %sx%s",name,nx,ny) + self.label:SetWndPos(vector2():set(nx, ny)) + end + + if marker_dist_shown("pins") then + self.last_dist = pindist + --local dist_txt = string.format("%.1f",pindist)..ts("st_paw_meters_abbr") + local dist_txt = string.format("%.1f",pindist).."m" + self.dist:TextControl():SetText(dist_txt) + self.dist_sh:TextControl():SetText(dist_txt) + self.wref:TextControl():SetText(dist_txt) + self.wref:AdjustWidthToText() + tw = self.wref:GetWidth() + nx = pos.x - (tw * .5) + ny = pos.y + szy - 11 + yadj + self.dist:SetWndPos(vector2():set(nx, ny)) + end + + self:ShowMarker(true) + return + end + self:ShowMarker(false) + else + self:ShowMarker(false) + end +end + +-- ====================================================================== +-- HUD RETICLE (see ui_paw_reticle.script) +-- ====================================================================== + +HUD_RET = nil + +function enable_vo_crosshair() + if not db.actor then return end + if (HUD_RET == nil) then + HUD_RET = ui_paw_reticle and ui_paw_reticle.UIPAWReticle() + if HUD_RET then + get_hud():AddDialogToRender(HUD_RET) + else + printf(logprefix.."ERROR: Unable to load ui_paw_reticle.script or initialize its HUD class") + end + end +end + +function disable_vo_crosshair() + if not db.actor then return end + if (HUD_RET ~= nil) then + HUD_RET:ShowDialog(false) + get_hud():RemoveDialogToRender(HUD_RET) + HUD_RET = nil + end +end + +function update_vo_crosshair() + if not db.actor then return end + if (HUD_RET ~= nil) then + HUD_RET:Update(true) + end +end + +-- ====================================================================== +-- CALLBACKS +-- ====================================================================== + +function npc_on_death_callback(victim,killer) + vl("npc_on_death_callback: %s (%s) | clear_pin_on_death: %s",victim:name(),victim:id(),clear_pin_on_death) + if not clear_pin_on_death then return end + local id = safeid(victim) + if not (id and (id > 0)) then return end + if not (id and pins[id]) then return end + dl("Clearing existing pin for dead body id %s",id) + local se_obj = alife_object(id) + do_waypoint("pn_del",se_obj,nil,{syscall=true}) +end + + +function update_hud_on_show_hide() + update_hud_waypoint() + update_vo_crosshair() + update_hud_pins() +end + +local mod_keys = { + [DIK_keys.DIK_LSHIFT] = {pressed=false,code=1}, + [DIK_keys.DIK_LCONTROL] = {pressed=false,code=2}, + [DIK_keys.DIK_LMENU] = {pressed=false,code=3}, +} +local mod_key_codes = { + [1] = DIK_keys.DIK_LSHIFT, + [2] = DIK_keys.DIK_LCONTROL, + [3] = DIK_keys.DIK_LMENU, +} +local function mod_key_pressed(key) + if ui_mcm then + return ui_mcm.get_mod_key(key) + else + return mod_keys and mod_keys[key] and mod_keys[key].pressed + end +end + +local function mod_key_held() + return + mod_keys[DIK_keys.DIK_LSHIFT].pressed or + mod_keys[DIK_keys.DIK_LCONTROL].pressed or + mod_keys[DIK_keys.DIK_LMENU].pressed +end + +function on_key_press(key) + --if not active_binds[key] then return end + --printf("Monitored keybind %s pressed",key) + local args + if mod_keys[key] then + mod_keys[key].pressed = true + return + end + --local keyname = DIK_name(key) + --vl("on_key_press(%s) : %s\nModifiers held: Shift %s | Ctrl %s | Alt %s",key,keyname,mod_key_pressed(1),mod_key_pressed(2),mod_key_pressed(3)) + for k,v in pairs(keybinds) do + if v and v.enabled then + --local bindtxt = bindtext(v.bind,v.mod) + --vl("** Checking keybind %s (bind %s | mod %s | hold %s)",k,bindtxt,v.bind,v.mod,v.hold) + if (key == v.bind) and mod_key_pressed(v.mod) then + --vl("on_key_press(%s): keybind %s matched %s with bind %s and mod %s",key,k,bindtxt,v.bind,mod) + if v.hold then + args = true + end + v.action(args) + return + end + end + end + --vl("on_key_press: no matching keybind for %s",keyname) +end + + +function on_key_release(key) + local do_action = false + if mod_keys[key] then + mod_keys[key].pressed = false + end + + --local keyname = DIK_name(key) + --vl("on_key_release(%s) : %s\nModifiers held: Shift %s | Ctrl %s | Alt %s",key,keyname,mod_key_pressed(1),mod_key_pressed(2),mod_key_pressed(3)) + for k,v in pairs(keybinds) do + if v and v.enabled and v.hold then + --local bindtxt = bindtext(v.bind,v.mod) + --vl("** Checking keybind %s: %s (bind %s | mod %s | hold %s)",k,bindtxt,v.bind,v.mod,v.hold) + if (key == v.bind) and mod_key_pressed(v.mod) then + --vl("on_key_release(%s): keybind %s matched %s with bind %s and mod %s",key,k,bindtxt,v.bind,mod) + v.action(false) + return + end + end + end + +end + + +function on_map_right_click(property_ui, map_table) + if not map_table then return end + if map_table.object_id ~= 65535 then return end + + local pos = map_table.pos + local se_obj = register_script_zone(pos,map_table.lvid,map_table.gvid) + map_table.object_id = se_obj and se_obj.id + + if not se_obj then + dl(" Right-click capture failed - unable to find or create valid se_obj") + return + else + if mod_key_pressed(1) then + -- LSHIFT : unused + elseif mod_key_pressed(2) then + -- LCTRL : Set/Move Waypoint + if waypoint_active then + do_waypoint("wp_mov",se_obj) + else + do_waypoint("wp_set",se_obj) + end + return + elseif mod_key_pressed(3) then + -- LALT : Add Pin + do_waypoint("pn_add",se_obj) + return + end + dl(" Passing right-click to get_context_menu_options with id %s and pos %s",se_obj.id,pos) + last_clicked_id = se_obj.id + get_context_menu_options(property_ui,se_obj.id,map_table) + end +end + +function map_spot_menu_add_property(property_ui,id) + last_clicked_id = id + get_context_menu_options(property_ui,id) +end + + +function map_spot_menu_property_clicked(property_ui,id,level_name,prop) + execute_context_menu_option(property_ui,id,level_name,prop) +end + + +function load_file_data() + dl(" Loading file data and populating tables") + local attr_tex = "texture" + local minimap = "mini_map" + local levelmap = "level_map" + local ind = 0 + xml = CScriptXmlInit() + xml:ParseFile("map_spots.xml") + for k,v in pairs(icons) do + local tex,th,tw + local spot = v + xml:NavigateToRoot() + th = xml:ReadAttribute(spot,0,"height") + tw = xml:ReadAttribute(spot,0,"width") + xml:NavigateToNode(spot,0) + vl("trying to find texture data for %s | %s",k,v) + if xml:NodeExist(attr_tex,0) then + tex = xml:ReadValue(attr_tex,0) + vl("texture node found with value %s",tex) + else + local spotnode = "" + local typ = "" + if xml:NodeExist(minimap) then + spotnode = xml:ReadAttribute(minimap,0,"spot") + typ = minimap + end + if xml:NodeExist(levelmap) then + spotnode = xml:ReadAttribute(levelmap,0,"spot") + typ = levelmap + end + if spotnode ~= "" then + xml:NavigateToRoot() + th = xml:ReadAttribute(spotnode,0,"height") + tw = xml:ReadAttribute(spotnode,0,"width") + vl("ReadAttribute for %s: h %s w %s",v,th,tw) + xml:NavigateToNode(spotnode,0) + tex = xml:ReadValue(attr_tex,0) + vl("%s node found: %s",typ,spotnode) + end + end + + if spot == "paw_pin_redpush32" then + if not tex then return false end + end + + texture_data[spot] = { + id = k, + t = tex, + h = th, + w = tw, + } + ind = ind + 1 + icon_index[ind] = { + id = k, + icon = spot, + data = texture_data[spot], + } + vl("Texture for %s: %s (%sx%s)",spot,tex,tw,th) + end + current_ico_max = ind + for k,v in pairs(texture_data) do + dl("texture_data(%s): tex %s | id %s | %sx%s",k,v.t,v.id,v.w,v.h) + end + + ind = 0 + for w, _ in pairs(iconset_ltx) do + local iconset_ltx_prefix = "iconset_" + local icons_pos = string.find(w,iconset_ltx_prefix) + if icons_pos == 1 then + local group = string.sub(w,icons_pos+string.len(iconset_ltx_prefix)) + local set_cfg = icon_sets_ini:collect_section(w) + local name = set_cfg.name + local def = set_cfg.default + local sec_list = group.."_icons" + ind = ind + 1 + icon_sets[group] = { + name = name, + group = group, + default = def, + active_icon = icons[def], + i = ind, + } + local setdata = icon_sets[group] + set_index[ind] = { + id = group, + data = setdata, + } + dl("Found icon set %s with group %s, section %s",setdata.name,group,sec_list) + set_index[ind].ii = {} + setdata.ii = {} + setdata.ri = {} + local iconlist = {} + local il = icon_sets_ini:collect_section(sec_list) + local i = 0 + for k,_ in pairs(il) do + i = i + 1 + local spot = icons[k] + vl("set %s iconlist: icons[%s] = %s",group,k,spot) + iconlist[spot] = texture_data[spot].t + set_index[ind].ii[i] = spot + setdata.ii[i] = spot + setdata.ri[spot] = i + end + setdata.inum = i + setdata.icons = iconlist + end + end + current_set_max = ind + dl("Loading menu actions from actions_ini") + for w, _ in pairs(actions_ltx) do + action_codes[w] = actions_ini:collect_section(w) + local ac = action_codes[w] + local opt_loc = ts(ac.text) + dl(" ac.mode: %s | type: %s | as num: %s | >0: %s",ac and ac.mode,ac and type(ac.mode),ac and tonumber(ac.mode),ac and (tonumber(ac.mode) > 0)) + ac.mode = clamp(tonumber(ac and ac.mode) or 0,0,4) + ac.enable = (ac.enable == "true") + action[opt_loc] = w + if verbose then + vl("Initializing menu action:\n%s = %s",opt_loc,action[opt_loc]) + for k,v in pairs(ac) do vl("%s = %s",k,v) end + end + end + + dl("Loading and parsing valid clsids (%s)",size_table(clsids_ltx)) + for k,v in pairs(clsids_ltx) do + dl("%s = %s",k,v) + if v == "number" then + local k1 = tonumber(k) + if k1 and k1 > 0 then + vl("Found valid clsid number value: %s",k1) + valid_clsids[tonumber(k1)] = true + end + elseif v == "string" then + if k and clsid[k] then + local k1 = tonumber(clsid[k]) + vl("Found valid clsid string value: %s = %s",k,k1) + valid_clsids[tonumber(k1)] = true + end + end + end + table.sort(icons) + table.sort(icon_sets) + catsy_paw_mcm.icon_sets = icon_sets + table.sort(action_codes) + dl(logprefix.."All file data loaded") + --utils_data.print_table(icon_sets) + started = true + local load_set_curr = axr_main.config:r_value("mcm", "pawsys/pawpins/pin_icon_group", {val=0}) or "pins" + local load_pin_curr = axr_main.config:r_value("mcm", "pawsys/pawpins/poi_icon_"..load_set_curr, {val=0}) + + printf(logprefix.."Personal Adjustable Waypoint started at %s",time_global()) + return true +end + + +function load_state(data) + dl("load_state: Checking for saved PAW data") + + local ps = data.pawsys + local pd = data.pawdata + if ps then + vl("load_state: pawsys found, loading") + placed_waypoint = ps.current_waypoint + last_waypoint = ps.last_waypoint + custom_name = ps.custom_name + custom_desc = ps.custom_desc + pins = ps.pins + if placed_waypoint then waypoint_active = true end + welcome_msg_shown = ps.welcome_msg_shown + + end + if pd and pd.valid then + dl("load_state: pawdata found, loading") + pawdata = pd + pins = pawdata.pins + else + dl("load_state: pawdata not found, initializing") + pawdata.curr_set_name = "pins" + pawdata.curr_set_data = icon_sets[pawdata.curr_set_name] + local setdata = pawdata.curr_set_data + pawdata.curr_set_data = setdata + pawdata.curr_set_ind = setdata.i + pawdata.curr_ico_name = setdata.active_icon + pawdata.curr_ico_ind = setdata.ri[root_patch_name(setdata.active_icon)] + vl("pawdata: set %s (%s) | icon %s (%s)",pawdata.curr_set_name,pawdata.curr_set_ind,pawdata.curr_ico_name,pawdata.curr_ico_ind) + end +end + + +function save_state(data) + update_mcm_icoset_data() + dl("save_state: Cleaning up script zones and temp markers") + _ = script_zone_cleanup() + dl("save_state: Saving waypoint and config data") + data.paw_waypoint_info = nil + data.pawsys = {} + data.pawsys.current_waypoint = placed_waypoint + data.pawsys.last_waypoint = last_waypoint + data.pawsys.custom_name = custom_name + data.pawsys.custom_desc = custom_desc + data.pawsys.dynamic_faves = dynamic_faves + data.pawsys.welcome_msg_shown = welcome_msg_shown + data.pawsys.pins = {} + pawdata.valid = true + data.pawdata = pawdata + dl("save_state: Saving player's pins") + data.pawsys.pins = pins +end + +function actor_on_update() + tick() +end + +function actor_on_first_update() + on_option_change() + if not paw_enabled then + UnregisterScriptCallback("actor_on_update",actor_on_update) + return + end + temp_pin_cleanup(true) + active_set(icon_sets[current_active_set].i) + show_all_pins(true) + if waypoint_active then + local id = placed_waypoint.id + local se_obj = alife_object(id) + if not se_obj then return end + local savelast = last_waypoint + do_waypoint("wp_mov",se_obj) + last_waypoint = savelast + end + reset_indicator() + if wp_hud_icon_enabled then + show_hud_waypoint() + else + hide_hud_waypoint() + end + if reticle_mode > 0 then + enable_vo_crosshair() + else + disable_vo_crosshair() + end + + init_hud_pins() + if not welcome_msg_shown then + CreateTimeEvent("paw_welcome_message",0,5,paw_welcome_message) + end +end + + +function actor_on_net_destroy() + script_zone_cleanup() + hide_hud_waypoint() + empty_table(hud_pin_objs) +end + +function on_mouse_wheel(scroll_dir, flags) + if not mwheel_enabled then + UnregisterScriptCallback("on_mouse_wheel",on_mouse_wheel) + return + end + if not (icon_cycle_active or set_cycle_active) then return end + if actor_menu.inventory_opened() then return end + + flags.ret_value = false + local now = time_global() + if now < mwheel_next_poll then return end + mwheel_next_poll = now + mwheel_poll_interval + -- local cycle_dir = ((scroll_dir == 0) and -1) or scroll_dir + local cycle_dir = scroll_dir + if cycle_dir == 0 then cycle_dir = -1 end + vl("scroll_dir: %s | cycle_dir: %s",scroll_dir,cycle_dir) + cycle_items(cycle_dir) +end + + +function unregister_all_callbacks() + UnregisterScriptCallback("actor_on_update",actor_on_update) + UnregisterScriptCallback("actor_on_net_destroy",actor_on_net_destroy) + UnregisterScriptCallback("actor_on_first_update",actor_on_first_update) + UnregisterScriptCallback("load_state",load_state) + UnregisterScriptCallback("save_state",save_state) + UnregisterScriptCallback("map_spot_menu_add_property",map_spot_menu_add_property) + UnregisterScriptCallback("map_spot_menu_property_clicked",map_spot_menu_property_clicked) + UnregisterScriptCallback("on_key_press",on_key_press) + UnregisterScriptCallback("on_key_release",on_key_release) + UnregisterScriptCallback("GUI_on_show",update_hud_on_show_hide) + UnregisterScriptCallback("GUI_on_hide",update_hud_on_show_hide) + UnregisterScriptCallback("monster_on_death_callback",npc_on_death_callback) + UnregisterScriptCallback("npc_on_death_callback",npc_on_death_callback) + if mwheel_avail then + UnregisterScriptCallback("on_mouse_wheel",on_mouse_wheel) + end + if right_click_avail then + UnregisterScriptCallback("on_map_right_click",on_map_right_click) + end +end + +function register_all_callbacks() + RegisterScriptCallback("actor_on_update",actor_on_update) + RegisterScriptCallback("actor_on_net_destroy",actor_on_net_destroy) + RegisterScriptCallback("actor_on_first_update",actor_on_first_update) + RegisterScriptCallback("load_state",load_state) + RegisterScriptCallback("save_state",save_state) + RegisterScriptCallback("map_spot_menu_add_property",map_spot_menu_add_property) + RegisterScriptCallback("map_spot_menu_property_clicked",map_spot_menu_property_clicked) + RegisterScriptCallback("on_key_press",on_key_press) + RegisterScriptCallback("on_key_release",on_key_release) + RegisterScriptCallback("GUI_on_show",update_hud_on_show_hide) + RegisterScriptCallback("GUI_on_hide",update_hud_on_show_hide) + RegisterScriptCallback("monster_on_death_callback",npc_on_death_callback) + RegisterScriptCallback("npc_on_death_callback",npc_on_death_callback) + if mwheel_avail then + RegisterScriptCallback("on_mouse_wheel",on_mouse_wheel) + end + if right_click_avail then + RegisterScriptCallback("on_map_right_click",on_map_right_click) + end +end + +function on_game_start() + if load_failed then return end + RegisterScriptCallback("on_option_change",on_option_change) + register_all_callbacks() + on_option_change() +end + + +-- ====================================================================== +-- TASK FUNCTORS +-- ====================================================================== + + +task_functor.waypoint_task_target_functor = function (task_id,field,p,tsk) + if not paw_enabled then return end + -- vl("waypoint_task_target_functor called with task_id %s | field %s",task_id,field) + + if placed_waypoint == nil then + dl("WARNING: waypoint_task_target_functor called but placed_waypoint is nil, cancelling waypoint task to avoid crash") + end_waypoint_task() + return default_id + end + + if (field == "target") then + tsk.target = placed_waypoint.id + tsk.current_target = placed_waypoint.id + return placed_waypoint.id + end +end + + +task_functor.waypoint_task_text_functor = function (task_id,field,p,tsk) + if not (paw_enabled and placed_waypoint) then return end + -- vl("waypoint_task_text_functor called with task_id %s | field %s",task_id,field) + if (field == "title") then + -- vl("custom_name: %s") + return custom_name or ts("st_paw_placed_waypoint")..(": "..placed_waypoint.name or "") + elseif (field == "descr") then + -- vl("custom_desc: %s") + return custom_desc or ts("st_paw_proceed") + end +end + +-- ====================================================================== +-- LOAD FILE DATA - KILLSWITCH AND NOTIFY ON FAILURE +-- ====================================================================== + +if not load_file_data() then + disable_mcm_updates = true + load_failed = true + paw_enabled = false + started = false + _ = unregister_all_callbacks() + + if not disable_load_warning then + local tiperr = psk(game.translate_string("st_paw_texture_load_error_tip"),text_colors) + RegisterScriptCallback("actor_on_first_update", + function() + CreateTimeEvent("pawerror",0,5,( + function() + db.actor:give_game_news("PAW System",tiperr,"ui_inGame2_Mesta_evakuatsii",0,15000) + xr_sound.set_sound_play(AC_ID,"pda_tips") + return true + end + )) + end + ) + end + + local errstr = game.translate_string("st_paw_texture_load_error1").."\n\n"..game.translate_string("st_paw_texture_load_error2") + assert(not load_failed, "\n\n".. + "~ ------------------------------------------------------------------------\n".. + errstr.."\n".. + "~ ------------------------------------------------------------------------\n" + ) +end + +-- ====================================================================== diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/ui_paw_reticle.script b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/ui_paw_reticle.script new file mode 100644 index 00000000..e7a37dfa --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/ui_paw_reticle.script @@ -0,0 +1,371 @@ +-- ====================================================================== +--[[ Personal Adjustable Waypoint +-- ====================================================================== + HUD reticle features script + Author: Catspaw (CatspawMods @ ModDB) + Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + Portions of the target ID code adapted from Crook's Faction ID addon. + + The main script actually loads the MCM settings for Crook's addon, if + it is installed, so that reticle behavior should mirror the NPC ID. +-- ===================================================================--]] +assert(tasks_placeable_waypoints ~= nil, "\n\n".. + "~ ------------------------------------------------------------------------\n".. + "Could not find tasks_placeable_waypoints.script - PAW is not installed".."\n".. + "~ ------------------------------------------------------------------------\n" +) +paw = tasks_placeable_waypoints +dl = paw.dl +vl = paw.vl + +unsquish_aspect = paw.unsquish_aspect +easing_outquint = paw.easing_outquint +npc_ident = paw.npc_ident +anim_fade = paw.anim_fade +reticle_color = paw.reticle_color +autotag_milpda = paw.autotag_milpda_feature +pda_feature_en = item_milpda and item_milpda.pda_feature_enabled +-- ====================================================================== + +class "UIPAWReticle" (CUIScriptWnd) + +function UIPAWReticle:__init() super() + --printf("UIPAWReticle:__init(%s)",id) + self:InitControls() + RegisterScriptCallback("actor_on_net_destroy", self) +end + + +function UIPAWReticle:__finalize() +end + + +function UIPAWReticle:InitControls(id) + --printf("UIPAWReticle:InitControls(%s)",id) + self.unknown = game.translate_string("st_paw_unknown") + self.namecache = {} + self.newtags = {} + self.last_tick = 0 + self.last_check_time = 0 + self:SetAutoDelete(true) + self.xml = CScriptXmlInit() + self.xml:ParseFile("paw_hud_pin_icon.xml") + self.reticle = self.xml:InitStatic("marker",self) + self.objtex = "ui_icons_paw_crosshair_valid" + self.idtex = "ui_icons_paw_crosshair_targetid" + self.locktex = "ui_icons_paw_crosshair_targetlock" + self.tex = self.idtex + self.reticle:InitTexture(self.tex) + local clr = reticle_color + self.reticle:SetTextureColor(GetARGB(clr.a,clr.r,clr.g,clr.b)) + self.reticle:SetWndSize(vector2():set(32,32)) + unsquish_aspect(self.reticle) + local w = self.reticle:GetWidth() + local h = self.reticle:GetHeight() + self.reticle:SetWndPos(vector2():set(512.5,384.5)) + self:ShowMarker(false) +end + + +function UIPAWReticle:Destroy() + get_hud():RemoveDialogToRender(self) +end + +function UIPAWReticle:actor_on_net_destroy() + get_hud():RemoveDialogToRender(self) +end + +function UIPAWReticle:ShowMarker(onoff) + self.reticle:Show(onoff) +end + + +function UIPAWReticle:npc_on_death_callback(npc, who) + if not self.last_target then return end + if npc:id() == self.last_target:id() then + self:TargetOut(self.last_target) + self.last_target = nil + end +end + +function UIPAWReticle:npc_on_net_destroy(npc) + if not self.last_target then return end + if npc:id() == self.last_target:id() then + self:TargetOut(self.last_target) + self.last_target = nil + end +end + +function UIPAWReticle:IsValidTagTarget(obj) + return obj and (IsStalker(obj) or IsMonster(obj)) and (not paw.blacklisted_object(obj:id())) and (obj:id() ~= 0) and (npc_ident.id_bodies or (obj.health > 0)) +end + + +function UIPAWReticle:GetTargetName(obj) + if not obj then return end + if self.namecache[obj] then return self.namecache[obj] end + + local name + if IsStalker(obj) then + name = obj:character_name() + else + --local id = obj:id() + --name = paw.safename(id) + --if name == self.unknown then name = name..id end + name = obj:name() + end + self.namecache[obj] = name + return name +end + + +function UIPAWReticle:GetIDProgress(obj,name) + --printf("UIPAWReticle:GetIDProgress: %s (%s)",self:GetTargetName(obj),obj and obj:id()) + name = name or self:GetTargetName(obj) + local progress = npc_ident.progress + + if not progress[name] then + progress[name] = 0 + end + + if progress[name] >= 1 then + return 1 + end + + if not npc_ident.delay_id then + if progress[name] == 0 then + self.newtags[name] = true + end + progress[name] = 1 + return 1 + end + + local distance = db.actor:position():distance_to_sqr(obj:position()) + + if distance < 2500 then + if progress[name] == 0 then + self.newtags[name] = true + end + progress[name] = 1 + return 1 + end + + local power = (100 / ((distance - 2500) * 0.1) / device().fov) * (npc_ident.tick_speed * 0.1) + + progress[name] = progress[name] + (power * npc_ident.id_speed) + + if progress[name] >= 1 then + progress[name] = 1 + self.newtags[name] = true + return 1 + else + --printf("GetIDProgress: %s has %s progress towards identification at %s",name,progress[name],time_global()) + end + + return progress[name] +end + +function UIPAWReticle:OnTarget(obj) + if not obj then return end + + local progress = self:GetIDProgress(obj,name,id) + return progress +end + +function UIPAWReticle:TargetOut() + self:ShowMarker(false) +end + +function UIPAWReticle:UpdateIDProgress(obj,name) + if not obj then return end + name = name or self:GetTargetName(obj) + if (time_global() - self.last_tick) < npc_ident.tick_speed then return end + self.last_tick = time_global() + + if not npc_ident.progress[name] then return end + + local progress = self:GetIDProgress(obj,name) + return progress +end + +function UIPAWReticle:TargetIDTick(obj,name,id) + name = name or self:GetTargetName(obj) + id = id or (obj and obj:id()) + progress = 0 + + if self:IsValidTagTarget(obj) then + if self.last_target then + if obj:id() ~= self.last_target:id() then + self:ShowMarker(false) + progress = self:OnTarget(obj,name,id) + else + progress = self:UpdateIDProgress(obj,name) + end + else + progress = self:OnTarget(obj,name,id) + end + + self.last_target = obj + return progress + else + if self.last_target then + if npc_ident.lenience >= 1.0 then + self:ShowMarker(false) + self.last_target = nil + return 0 + end + + if (time_global() - self.last_check_time) > 100 then + self.last_check_time = time_global() + + local pos = utils_obj.safe_bone_pos(self.last_target, "bip01_spine") + if pos then + local dot = paw.dist_from_crosshair(pos) + if dot < npc_ident.lenience then + + self:TargetOut() + + self.last_target = nil + return 0 + end + end + end + end + end + + if self.last_target then + progress = self:UpdateIDProgress(self.last_target) + end + return progress +end + + +function UIPAWReticle:UpdateAutotagReticle(obj,name,id) + self:TargetIDTick(obj,name,id) + local progress = (name and npc_ident.progress[name]) or 0 + if self.playing_anim then + --printf(" Reticle animation still playing, skipping update cycle") + self:ShowMarker(true) + return + end + if id and name and progress then + local tex = self.idtex + --printf(" TargetID progress for %s (%s): %s",name,id,progress) + + if progress <= 0 then + self:ShowMarker(false) + return + elseif progress >= 1 then + progress = 1 + if paw.pins[id] then tex = self.locktex end + end + local alpha = reticle_color.a + self.reticle:InitTexture(tex) + + if self.newtags[name] then + local smart_pins = paw.smart_pins + function play_tag_crosshair_anim() + self.playing_anim = false + self.reticle:SetTextureColor(GetARGB(alpha,255,255,255)) + self.reticle:SetWndSize(vector2():set(32,32)) + unsquish_aspect(self.reticle) + self:ShowMarker(true) + --printf(" End anim timeevent at %s, reticle to 32x32",time_global()) + return true + end + --printf(" New positive ID on %s, calling smart pin",name) + self.reticle:InitTexture(self.locktex) + self.reticle:SetTextureColor(GetARGB(alpha,255,255,255)) + self.reticle:SetWndSize(vector2():set(24,24)) + unsquish_aspect(self.reticle) + self.newtags[name] = nil + self.playing_anim = true + --printf(" Starting anim timeevent at %s, reticle to 24x24",time_global()) + CreateTimeEvent("paw_crosshair_tag_anim",time_global(),0.125,play_tag_crosshair_anim) + local target = paw.get_smart_target_type(obj) + local smartpin = target and smart_pins[target] + --printf("smart pin type %s: enabled %s | pin %s",target,smartpin and smartpin.enabled,smartpin and smartpin.pin) + if (not (id and paw.pins[id])) and smartpin and smartpin.enabled and smartpin.pin then + paw.autotag_target(true) + end + return + end + + local w = 80 - (48 * progress) + local h = 80 - (48 * progress) + --printf(" Setting reticle to %sx%s at %s",w,h,time_global()) + self.reticle:SetTextureColor(GetARGB(alpha * progress,255,255,255)) + self.reticle:SetWndSize(vector2():set(w,h)) + unsquish_aspect(self.reticle) + self:ShowMarker(true) + end + +end + + +function UIPAWReticle:UpdateValidObjectReticle(obj,name,id) + if id and (id > 0) then + --printf("Reticle has valid id %s",id) + local se_obj = alife_object(id) + if not se_obj then return end + if paw.allow_non_wp_targets or paw.valid_waypoint_target(se_obj) then + self:ShowMarker(true) + vl("ID %s is a valid waypoint/pin target",id) + if not (self.hovered or self.fading_in) then + anim_fade(self.reticle,0,reticle_color.a,400,"reticle_fade",false,nil,nil,nil,easing_outquint,nil,abort_fade_in) + self.fading_in = true + self.fading_out = false + self.hovered = true + end + return + end + elseif self.hovered then + self.hovered = false + self.fading_out = true + self.fading_in = false + anim_fade(self.reticle,reticle_color.a,0,600,"reticle_fade",false,nil,nil,nil,easing_outquint,nil,abort_fade_out) + return + end + if not self.fading_out then + self:ShowMarker(false) + end +end + + +function UIPAWReticle:Update() + local mode = paw.reticle_mode + local cart_mode = paw.cart_mode + local enabled = false + if autotag_milpda and pda_feature_en then + local dev = db.actor:item_in_slot(8) + enabled = dev and pda_feature_en(dev:section(),"autotag") + if not enabled then mode = 0 end + end + if mode and type(mode) == "number" then + if mode == 0 then + self:ShowMarker(false) + get_hud():RemoveDialogToRender(self) + return + end + enabled = (mode > 0) and paw.feature_valid_in_mode(mode) + --printf("UIPAWReticle: mode %s + cart_mode %s = enabled %s",mode,cart_mode,enabled) + end + CUIScriptWnd.Update(self) + if enabled and ((main_hud_shown() and not paw.reticle_mustzoom) or + axr_main.binoc_is_zoomed or + axr_main.scoped_weapon_is_zoomed) then + + local obj = level.get_target_obj() + local id = obj and obj:id() + local name = self:GetTargetName(obj) + + if paw.mark_on_positive_id then + self:UpdateAutotagReticle(obj,name,id) + else + self:UpdateValidObjectReticle(obj,name,id) + end + else + self:ShowMarker(false) + end +end diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/zzzzz_monkey_paw_ui_mcm.script b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/zzzzz_monkey_paw_ui_mcm.script new file mode 100644 index 00000000..bb6c1b8d --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/scripts/zzzzz_monkey_paw_ui_mcm.script @@ -0,0 +1,260 @@ +-- ====================================================================== +--[[ Monkeypatch to enable dynamic UI elements in MCM +-- ====================================================================== + Author: Catspaw + Version: 2.3 + Updated: 20231020 + Source: https://www.moddb.com/mods/stalker-anomaly/addons/personal-adjustable-waypoint-for-anomaly-151-152-and-gamma + + Included with Personal Adjustable Waypoint, but parameterized so that + any addon can make use of it. + + The code in this script is based on code from RavenAscendant's MCM, + which is in turn based on the works of Tronex and others. + + You may freely include this script in your own addon, unaltered--but + unless your name is RavenAscendant, please do not release it merged + with ui_mcm.script or otherwise as an integrated alteration to your + own (or your modpack's) version of MCM. + + 2.3 roll back support for the Track element due to reported issues + 2.2 adds "borderless" attribute to the slide element and "desc" + to supported elements + 2.1 adds support for the Track element. +-- ====================================================================== + USAGE +-- ====================================================================== + Adds a new functor attribute to the Slide and Image element types: + - [ui_hook_functor] + - Define: ( table {function, parameters} ) + - Used by: image, slide, list, desc (only in this monkeypatch) + - Parameters passed: anchor, handlers, attrs, flags + Execute a function on initial registration of a UI element + anchor - empty static image container + handlers- table of UI handlers + attrs - table of MCM attributes for the menu option + flags - table of MCM metadata + The value of the "parameters" option in the table is added to the end of the parameters list. + + Adds a new functor attribute that triggers on changes in all input types: + - [on_selection_functor] + - Define: ( table {function, parameters} ) + - Used by option elements: ALL (only in this monkeypatch) + - Parameters passed: path, opt, value, attrs + Execute a function on any unsaved change to an option value + path - MCM path to changed option + opt - name of the changed option + value - value of uncommitted change + attrs - table of MCM attributes for the menu option + The value of the "parameters" option in the table is added to the end of the parameters list. + + For most purposes, like simple custom text or image display and/or + formatting, it is sufficient to just instantiate an "image"-type + menu element with a ui_hook_functor, and let the called functor do + whatever work is necessary to build your UI. +-- ====================================================================== + COMPATIBILITY / TROUBLESHOOTING +-- ====================================================================== + This monkeypatch should work with any recent MCM version. If yours + is old and doesn't work, just upgrade already. + + This monkeypatch should NOT alter any functionality of MCM for any + element that does not explicitly invoke either of the new functors. + + However, if you beleve this script is causing problems, you should be + able to delete or disable it without causing issues. Anyone using + these functors in their own addon should know to have it gracefully + fail if this script is missing. +-- ==================================================================--]] + +if ui_mcm and not ui_mcm.ui_functors_enabled then + cache_value = ui_mcm.UIMCM.CacheValue + -- Storing pointer to the unmodified MCM function + function init_wrapper_box(xml, anchor, w, h, posx, posy) + if not (xml and anchor) then return end + wrapbox = xml:InitStatic("elements:image", anchor) + if not wrapbox then return end + w = w or anchor:GetWidth() + h = h or anchor:GetHeight() + posx = posx and (type(posx) == "number") and posx or 0 + posy = posy and (type(posy) == "number") and posy or 0 + wrapbox:SetWndSize(vector2():set(w,h)) + pos = wrapbox:GetWndPos() + wrapbox:SetWndPos(vector2():set(pos.x + posx, pos.y + posy)) + return wrapbox + end + + function ui_mcm.UIMCM:CacheValue(path, opt, value, v) + cache_value(self,path,opt,value,v) + -- Use pointer to pass the args through to MCM unaltered + -- We need to prepend "self" to the args because we're invoking a class method without the colon + if v and v.on_selection_functor then ui_mcm.exec(unpack(v.on_selection_functor),path,opt,value,v) end + -- If the on_selection_functor attribute contains a functor, pass a copy of the same args to the functor + end + + function ui_mcm.UIMCM:Register_Image(xml, handler, v) + local pic = xml:InitStatic("elements:image",handler) + if v.link then + if (v.pos) then + local pos = pic:GetWndPos() + pic:SetWndPos(vector2():set( pos.x + v.pos[1] , pos.y + v.pos[2] )) + end + if (v.size) then + pic:SetWndSize(vector2():set( v.size[1] , v.size[2] )) + end + pic:InitTexture(v.link) + pic:SetStretchTexture(v.stretch and true or false) + end + + if v.ui_hook_functor then + local wrapbox = init_wrapper_box(xml,handler,pic:GetWidth(),pic:GetHeight(),-10) + local handlers = { + pic = pic, -- Handler for the image element + } + local flags = { + etype = "image", + } + ui_mcm.exec(unpack(v.ui_hook_functor),wrapbox,handlers,v,flags) + end + + return pic:GetHeight() + end + + function ui_mcm.UIMCM:Register_Slide(xml, handler, v) + local frame = xml:InitStatic("elements:slide", handler) + local _pos = frame:GetWndPos() + frame:SetWndPos(vector2():set( _pos.x , _pos.y + (v.spacing or 20) )) + + local pic = xml:InitStatic("elements:slide:pic", frame) + if v.link then + pic:InitTexture(v.link) + pic:SetStretchTexture(true) + if (v.pos) then + local pos = pic:GetWndPos() + pic:SetWndPos(vector2():set( pos.x + v.pos[1] , pos.y + v.pos[2] )) + end + if (v.size) then + pic:SetWndSize(vector2():set( v.size[1] * (utils_xml.is_widescreen() and 0.8 or 1) , v.size[2] )) + end + pic:InitTexture(v.link) + end + + local txt = xml:InitTextWnd("elements:slide:txt", frame) + if v.text then + txt:SetText( game.translate_string(v.text) ) + end + + if not v.borderless then + xml:InitStatic("elements:slide:line_1", frame) + xml:InitStatic("elements:slide:line_2", frame) + end + + if v.ui_hook_functor then + local wrapbox = init_wrapper_box(xml,handler,pic:GetWidth(),pic:GetHeight() + 20,-10) + local handlers = { + pic = pic, -- handler for the image element + txt = txt, -- handler for the text element + } + local flags = { + etype = "slide", + } + ui_mcm.exec(unpack(v.ui_hook_functor),wrapbox,handlers,v,flags) + end + + return (pic:GetHeight() + 20) + end + + function ui_mcm.UIMCM:Register_Desc(xml, handler, v) + local desc = xml:InitTextWnd("elements:desc", handler) + desc:SetText( game.translate_string(v.text) ) + desc:AdjustHeightToText() + desc:SetWndSize(vector2():set(desc:GetWidth(), desc:GetHeight() + 20)) + if v.clr and v.clr[4] then + desc:SetTextColor( GetARGB(v.clr[1], v.clr[2], v.clr[3], v.clr[4]) ) + end + + if v.ui_hook_functor then + local wrapbox = init_wrapper_box(xml,handler,desc:GetWidth(),desc:GetHeight(),-10) + local handlers = { + desc = desc, -- Handler for the text description element + } + local flags = { + etype = "desc", + } + ui_mcm.exec(unpack(v.ui_hook_functor),wrapbox,handlers,v,flags) + end + + return desc:GetHeight() + end + + function ui_mcm.UIMCM:Register_List(xml, handler, path, opt, v, flags) + local id = ui_mcm.cc(path , opt) + + -- Caption + local h = self:Register_Cap(xml, handler, id, v.hint) + + -- Apply to all button + if flags.apply_to_all and flags.group then + self:Register_BtnAll(xml, handler, path, opt, v, flags) + end + + -- Create control + local ctrl = xml:InitComboBox("elements:list",handler) + if (ctrl:GetHeight() > h) then + --h = ctrl:GetHeight() + end + + -- Get values + local idx + local value = self:GetValue(path, opt, v, flags) + local content = self:GetContent(path, opt, v) + + -- Setup + for i=1,#content do + local str_2 = content[i][2] or tostring(content[i][1]) + local str = v.no_str and str_2 or game.translate_string("ui_mcm_lst_" .. str_2) + ctrl:AddItem( game.translate_string(str), i) + + if content[i][1] == value then + idx = i + end + end + idx = idx or 1 + local str_2 = content[idx][2] or tostring(content[idx][1]) + local str = v.no_str and str_2 or game.translate_string("ui_mcm_lst_" .. str_2) + ctrl:enable_id( idx ) + ctrl:SetText( game.translate_string(str) ) + + -- Register + local id_ctrl = self:Stacker(path, opt, v) + + self:Register(ctrl, id_ctrl) + local _wrapper = function(handler) -- we need wrapper in order to pass ctrl to method + self:Callback_List(ctrl, path, opt, v) + end + self:AddCallback(id_ctrl, ui_events.LIST_ITEM_SELECT, _wrapper, self) + + if v.ui_hook_functor then + local id_cap = string.gsub(id, "/", "_") + local cap = self._Cap[id_cap] + local wrapbox = init_wrapper_box(xml,handler,handler:GetWidth(),ctrl:GetHeight(),-10) + local handlers = { + ctrl = ctrl, -- handler for the list control element + cap = cap, -- handler for text caption element + } + flags.etype = "list" + flags.path = path -- MCM menu path + flags.opt = opt -- MCM option ID + ui_mcm.exec(unpack(v.ui_hook_functor),wrapbox,handlers,v,flags) + end + + return h + end + + + printf("ui_mcm.script monkeypatched by zzzzz_monkey_paw_ui_mcm.script") +elseif ui_mcm then + printf("zzzzz_monkey_paw_ui_mcm.script: installed MCM already supports UI functors, aborting monkeypatch") +else + printf("zzzzz_monkey_paw_ui_mcm.script: MCM not found, aborting monkeypatch") +end \ No newline at end of file diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_blip.ogg b/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_blip.ogg new file mode 100644 index 00000000..68b2f08a --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_blip.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fce1fcfb951753b3a457462e81c2062ea32d4157255d8f8ddbbc1facfff1f3a +size 8390 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_ping.ogg b/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_ping.ogg new file mode 100644 index 00000000..a5cf39af --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/sounds/catspaw/paw_ping.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54259263048911be79ececa00565a89ecf2c4ab1d54ea5366985c242dc32e1ef +size 48387 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/mcm_screenpos_preview.dds b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/mcm_screenpos_preview.dds new file mode 100644 index 00000000..e7f9b50f --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/mcm_screenpos_preview.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdcd76c47eb84069bd0b7f243d5efb17b13122714df4c554568dbe40866f7d26 +size 4194432 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_hud_indicators.dds b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_hud_indicators.dds new file mode 100644 index 00000000..06ff3b90 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_hud_indicators.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:700199eb2c4c9d08bb5581182639315b5dbc88cf39b8488b3e507c408747a747 +size 1048704 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_mcm_assets.dds b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_mcm_assets.dds new file mode 100644 index 00000000..1a0e02bf --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/paw_mcm_assets.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2ce5273f48aefe59cf5e356c94d3a552ebcc9126d6d8a3295412f0f6d8e0167 +size 4194432 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw.dds b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw.dds new file mode 100644 index 00000000..768ba56f --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63aebdb34365f1b6b6968a1680715b5223507f751bedc0cc4443b25de7694c85 +size 4194432 diff --git a/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw_body_marks.dds b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw_body_marks.dds new file mode 100644 index 00000000..ee0f0362 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/gamedata/textures/ui/paw/ui_icons_paw_body_marks.dds @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1c4c01959ca1da96a5141ef36b56293a275c2f8031a813ac5df39cc7241b035 +size 4194432 diff --git a/mods/Personal Adjustable Waypoint_backup/meta.ini b/mods/Personal Adjustable Waypoint_backup/meta.ini new file mode 100644 index 00000000..c20d35e4 --- /dev/null +++ b/mods/Personal Adjustable Waypoint_backup/meta.ini @@ -0,0 +1,28 @@ +[General] +gameName=stalkeranomaly +modid=0 +version=2.0.1.0 +newestVersion= +category="3," +nexusFileStatus=1 +installationFile=Catspaw_Personal_Adjustable_Waypoint-2.0.2.zip +repository=Nexus +ignoredVersion= +comments= +notes= +nexusDescription= +url= +hasCustomURL=true +lastNexusQuery= +lastNexusUpdate= +nexusLastModified=2024-02-28T11:54:47Z +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 diff --git a/mods/Random NPC Voices/PATCH - ISG - USEC/scripts/modxml_RNPCV.script b/mods/Random NPC Voices/PATCH - ISG - USEC/scripts/modxml_RNPCV.script deleted file mode 100644 index 5bf01142..00000000 --- a/mods/Random NPC Voices/PATCH - ISG - USEC/scripts/modxml_RNPCV.script +++ /dev/null @@ -1,1212 +0,0 @@ -local list = -{ - ["sim_default_isg_1_default_0"] = "isg_1", - ["sim_default_isg_1_default_1"] = "isg_2", - ["sim_default_isg_1_default_2"] = "isg_3", - ["sim_default_isg_1_default_3"] = "isg_1", - ["sim_default_isg_1_default_4"] = "isg_2", - ["sim_default_isg_1_default_5"] = "isg_3", - ["sim_default_isg_1_default_6"] = "isg_1", - ["sim_default_isg_1_default_7"] = "isg_2", - ["sim_default_isg_1_default_8"] = "isg_3", - ["sim_default_isg_1_default_9"] = "isg_1", - ["sim_default_isg_1_default_10"] = "isg_2", - ["sim_default_isg_1_default_11"] = "isg_3", - ["sim_default_isg_1_default_12"] = "isg_1", - ["sim_default_isg_1_default_13"] = "isg_2", - ["sim_default_isg_1_default_14"] = "isg_3", - ["sim_default_isg_1_default_15"] = "isg_1", - ["sim_default_isg_1_default_16"] = "isg_2", - - ["sim_default_isg_2_default_0"] = "isg_3", - ["sim_default_isg_2_default_1"] = "isg_1", - ["sim_default_isg_2_default_2"] = "isg_2", - ["sim_default_isg_2_default_3"] = "isg_3", - ["sim_default_isg_2_default_4"] = "isg_1", - ["sim_default_isg_2_default_5"] = "isg_2", - ["sim_default_isg_2_default_6"] = "isg_3", - ["sim_default_isg_2_default_7"] = "isg_1", - ["sim_default_isg_2_default_8"] = "isg_2", - ["sim_default_isg_2_default_9"] = "isg_3", - ["sim_default_isg_2_default_10"] = "isg_1", - ["sim_default_isg_2_default_11"] = "isg_2", - ["sim_default_isg_2_default_12"] = "isg_3", - ["sim_default_isg_2_default_13"] = "isg_1", - ["sim_default_isg_2_default_14"] = "isg_2", - ["sim_default_isg_2_default_15"] = "isg_3", - ["sim_default_isg_2_default_16"] = "isg_1", - ["sim_default_isg_2_default_17"] = "isg_2", - ["sim_default_isg_2_default_18"] = "isg_3", - ["sim_default_isg_2_default_19"] = "isg_1", - ["sim_default_isg_2_default_20"] = "isg_2", - ["sim_default_isg_2_default_21"] = "isg_3", - - ["sim_default_isg_3_default_0"] = "isg_1", - ["sim_default_isg_3_default_1"] = "isg_2", - ["sim_default_isg_3_default_2"] = "isg_3", - ["sim_default_isg_3_default_3"] = "isg_1", - ["sim_default_isg_3_default_4"] = "isg_2", - ["sim_default_isg_3_default_5"] = "isg_3", - ["sim_default_isg_3_default_6"] = "isg_1", - ["sim_default_isg_3_default_7"] = "isg_2", - ["sim_default_isg_3_default_8"] = "isg_3", - ["sim_default_isg_3_default_9"] = "isg_1", - ["sim_default_isg_3_default_10"] = "isg_2", - ["sim_default_isg_3_default_11"] = "isg_3", - ["sim_default_isg_3_default_12"] = "isg_1", - ["sim_default_isg_3_default_13"] = "isg_2", - ["sim_default_isg_3_default_14"] = "isg_3", - ["sim_default_isg_3_default_15"] = "isg_1", - ["sim_default_isg_3_default_16"] = "isg_2", - - ["sim_default_isg_4_default_0"] = "isg_3", - ["sim_default_isg_4_default_1"] = "isg_1", - ["sim_default_isg_4_default_2"] = "isg_2", - ["sim_default_isg_4_default_3"] = "isg_3", - ["sim_default_isg_4_default_4"] = "isg_1", - ["sim_default_isg_4_default_5"] = "isg_2", - ["sim_default_isg_4_default_6"] = "isg_3", - ["sim_default_isg_4_default_7"] = "isg_1", - - ["sim_default_isg_trader"] = "isg_2", - ["sim_default_isg_mechanic"] = "isg_3", - ["sim_default_isg_medic"] = "isg_1", - ["sim_default_isg_barman"] = "isg_2", - ["sim_default_isg_dead_default_0"] = "isg_3", - ["sim_default_isg_dead_default_1"] = "isg_1", - ["sim_default_isg_dead_default_2"] = "isg_2", - ["sim_default_isg_dead_default_3"] = "isg_3", - - --["sim_default_military_0_default_0"] = "military_1", - ["sim_default_military_0_default_1"] = "stalker_1", - ["sim_default_military_0_default_2"] = "not_greh_1", - ["sim_default_military_0_default_3"] = "csky_1", - ["sim_default_military_0_default_4"] = "dolg_1", - --["sim_default_military_0_default_5"] = "military_1", - ["sim_default_military_0_default_6"] = "killer_1", - ["sim_default_military_0_default_7"] = "freedom_1", - ["sim_default_military_0_default_8"] = "ecolog_1", - ["sim_default_military_0_default_9"] = "bandit_2", - ["sim_default_military_0_default_10"] = "dolg_1", - ["sim_default_military_0_default_11"] = "not_greh_1", - ["sim_default_military_0_default_12"] = "stalker_2", - ["sim_default_military_0_default_13"] = "csky_1", - ["sim_default_military_0_default_14"] = "dolg_1", - ["sim_default_military_0_default_15"] = "killer_1", - ["sim_default_military_0_default_16"] = "freedom_1", - ["sim_default_military_0_default_17"] = "ecolog_1", - --["sim_default_military_0_default_18"] = "military_1", - - --["sim_default_military_1_default_0"] = "military_1", - ["sim_default_military_1_default_1"] = "stalker_1", - ["sim_default_military_1_default_2"] = "not_greh_1", - ["sim_default_military_1_default_3"] = "csky_1", - ["sim_default_military_1_default_4"] = "bandit_1", - ["sim_default_military_1_default_5"] = "killer_1", - ["sim_default_military_1_default_6"] = "dolg_3", - ["sim_default_military_1_default_7"] = "freedom_1", - ["sim_default_military_1_default_8"] = "ecolog_1", - - --["sim_default_military_2_default_0"] = "military_1", - ["sim_default_military_2_default_1"] = "not_greh_1", - ["sim_default_military_2_default_2"] = "stalker_2", - ["sim_default_military_2_default_3"] = "csky_1", - ["sim_default_military_2_default_4"] = "dolg_1", - ["sim_default_military_2_default_5"] = "killer_3", - ["sim_default_military_2_default_6"] = "freedom_1", - ["sim_default_military_2_default_7"] = "ecolog_1", - ["sim_default_military_2_default_8"] = "bandit_2", - - --["sim_default_military_3_default_0"] = "military_3", - ["sim_default_military_3_default_1"] = "not_greh_1", - ["sim_default_military_3_default_2"] = "stalker_2", - ["sim_default_military_3_default_3"] = "csky_1", - ["sim_default_military_3_default_4"] = "dolg_1", - ["sim_default_military_3_default_5"] = "killer_1", - ["sim_default_military_3_default_6"] = "freedom_1", - ["sim_default_military_3_default_7"] = "ecolog_3", - --["sim_default_military_3_default_8"] = "military_1", - ["sim_default_military_3_default_9"] = "stalker_1", - ["sim_default_military_3_default_10"] = "not_greh_1", - ["sim_default_military_3_default_11"] = "csky_1", - ["sim_default_military_3_default_12"] = "dolg_1", - ["sim_default_military_3_default_13"] = "killer_1", - ["sim_default_military_3_default_14"] = "freedom_1", - ["sim_default_military_3_default_15"] = "ecolog_1", - --["sim_default_military_3_default_16"] = "military_1", - ["sim_default_military_3_default_17"] = "stalker_1", - ["sim_default_military_3_default_18"] = "stalker_2", - ["sim_default_military_3_default_19"] = "csky_1", - ["sim_default_military_3_default_20"] = "dolg_1", - ["sim_default_military_3_default_21"] = "killer_1", - ["sim_default_military_3_default_22"] = "freedom_1", - --["sim_default_military_3_default_23"] = "military_1", - ["sim_default_military_3_default_24"] = "stalker_2", - ["sim_default_military_3_default_25"] = "dolg_1", - ["sim_default_military_3_default_26"] = "killer_1", - - --["sim_default_military_4_default_0"] = "military_3", - ["sim_default_military_4_default_1"] = "stalker_3", - ["sim_default_military_4_default_2"] = "stalker_4", - ["sim_default_military_4_default_3"] = "csky_3", - ["sim_default_military_4_default_4"] = "dolg_3", - ["sim_default_military_4_default_5"] = "killer_3", - ["sim_default_military_4_default_6"] = "freedom_3", - ["sim_default_military_4_default_7"] = "killer_3", - --["sim_default_military_4_default_8"] = "military_3", - ["sim_default_military_4_default_9"] = "not_greh_3", - ["sim_default_military_4_default_10"] = "stalker_3", - ["sim_default_military_4_default_11"] = "csky_3", - ["sim_default_military_4_default_12"] = "dolg_3", - ["sim_default_military_4_default_13"] = "killer_3", - ["sim_default_military_4_default_14"] = "csky_3", - --["sim_default_military_4_default_15"] = "military_3", - ["sim_default_military_4_default_16"] = "not_greh_3", - ["sim_default_military_4_default_17"] = "stalker_2", - --["sim_default_military_4_default_18"] = "military_1", - ["sim_default_military_4_default_19"] = "dolg_3", - ["sim_default_military_4_default_20"] = "killer_3", - ["sim_default_military_4_default_21"] = "not_greh_3", - - --["sim_default_bandit_0_default_0"] = "bandit_1", - ["sim_default_bandit_0_default_1"] = "bandit_2", - --["sim_default_bandit_0_default_2"] = "bandit_1", - ["sim_default_bandit_0_default_3"] = "stalker_1", - ["sim_default_bandit_0_default_4"] = "dolg_1", - ["sim_default_bandit_0_default_5"] = "military_1", - ["sim_default_bandit_0_default_6"] = "ecolog_1", - ["sim_default_bandit_0_default_7"] = "freedom_1", - ["sim_default_bandit_0_default_8"] = "csky_1", - --["sim_default_bandit_0_default_9"] = "bandit_2", - ["sim_default_bandit_0_default_10"] = "killer_1", - ["sim_default_bandit_0_default_11"] = "stalker_2", - ["sim_default_bandit_0_default_12"] = "killer_3", - ["sim_default_bandit_0_default_13"] = "dolg_3", - ["sim_default_bandit_0_default_14"] = "not_greh_3", - ["sim_default_bandit_0_default_15"] = "bandit_4", - --["sim_default_bandit_0_default_16"] = "bandit_3", - - --["sim_default_bandit_1_default_0"] = "bandit_1", - ["sim_default_bandit_1_default_1"] = "bandit_2", - ["sim_default_bandit_1_default_2"] = "ecolog_1", - ["sim_default_bandit_1_default_3"] = "stalker_1", - ["sim_default_bandit_1_default_4"] = "dolg_1", - ["sim_default_bandit_1_default_5"] = "not_greh_1", - ["sim_default_bandit_1_default_6"] = "csky_1", - --["sim_default_bandit_1_default_7"] = "bandit_1", - --["sim_default_bandit_1_default_8"] = "bandit_2", - ["sim_default_bandit_1_default_9"] = "killer_1", - ["sim_default_bandit_1_default_10"] = "stalker_2", - ["sim_default_bandit_1_default_11"] = "dolg_1", - ["sim_default_bandit_1_default_12"] = "military_1", - --["sim_default_bandit_1_default_13"] = "bandit_2", - --["sim_default_bandit_1_default_14"] = "bandit_3", - ["sim_default_bandit_1_default_15"] = "dolg_3", - ["sim_default_bandit_1_default_16"] = "killer_3", - ["sim_default_bandit_1_default_17"] = "bandit_4", - - --["sim_default_bandit_2_default_0"] = "bandit_2", - --["sim_default_bandit_2_default_1"] = "bandit_3", - ["sim_default_bandit_2_default_2"] = "not_greh_3", - ["sim_default_bandit_2_default_3"] = "dolg_1", - --["sim_default_bandit_2_default_4"] = "bandit_1", - ["sim_default_bandit_2_default_5"] = "military_1", - ["sim_default_bandit_2_default_6"] = "freedom_1", - ["sim_default_bandit_2_default_7"] = "stalker_1", - --["sim_default_bandit_2_default_8"] = "bandit_1", - ["sim_default_bandit_2_default_9"] = "killer_1", - ["sim_default_bandit_2_default_10"] = "freedom_3", - ["sim_default_bandit_2_default_11"] = "dolg_1", - ["sim_default_bandit_2_default_12"] = "csky_1", - ["sim_default_bandit_2_default_13"] = "freedom_1", - ["sim_default_bandit_2_default_14"] = "stalker_2", - --["sim_default_bandit_2_default_15"] = "bandit_2", - --["sim_default_bandit_2_default_16"] = "bandit_3", - ["sim_default_bandit_2_default_17"] = "killer_3", - ["sim_default_bandit_2_default_18"] = "dolg_3", - ["sim_default_bandit_2_default_19"] = "csky_3", - ["sim_default_bandit_2_default_20"] = "military_3", - ["sim_default_bandit_2_default_21"] = "freedom_3", - ["sim_default_bandit_2_default_22"] = "stalker_3", - ["sim_default_bandit_2_default_23"] = "not_greh_3", - --["sim_default_bandit_2_default_24"] = "bandit_3", - ["sim_default_bandit_2_default_25"] = "bandit_4", - ["sim_default_bandit_2_default_26"] = "killer_3", - ["sim_default_bandit_2_default_27"] = "dolg_3", - ["sim_default_bandit_2_default_28"] = "freedom_3", - ["sim_default_bandit_2_default_29"] = "stalker_4", - ["sim_default_bandit_2_default_30"] = "bandit_4", - - --["sim_default_bandit_3_default_0"] = "bandit_2", - ["sim_default_bandit_3_default_1"] = "bandit_1", - ["sim_default_bandit_3_default_2"] = "stalker_1", - --["sim_default_bandit_3_default_3"] = "bandit_3", - ["sim_default_bandit_3_default_4"] = "dolg_3", - ["sim_default_bandit_3_default_5"] = "freedom_1", - ["sim_default_bandit_3_default_6"] = "csky_1", - ["sim_default_bandit_3_default_7"] = "military_1", - ["sim_default_bandit_3_default_8"] = "killer_3", - ["sim_default_bandit_3_default_9"] = "stalker_4", - --["sim_default_bandit_3_default_10"] = "bandit_2", - ["sim_default_bandit_3_default_11"] = "bandit_1", - ["sim_default_bandit_3_default_12"] = "killer_1", - ["sim_default_bandit_3_default_13"] = "dolg_1", - ["sim_default_bandit_3_default_14"] = "freedom_3", - ["sim_default_bandit_3_default_15"] = "csky_1", - ["sim_default_bandit_3_default_16"] = "dolg_3", - ["sim_default_bandit_3_default_17"] = "ecolog_3", - ["sim_default_bandit_3_default_18"] = "not_greh_3", - --["sim_default_bandit_3_default_19"] = "bandit_3", - ["sim_default_bandit_3_default_20"] = "bandit_4", - ["sim_default_bandit_3_default_21"] = "military_3", - ["sim_default_bandit_3_default_22"] = "dolg_3", - ["sim_default_bandit_3_default_23"] = "freedom_3", - ["sim_default_bandit_3_default_24"] = "csky_3", - ["sim_default_bandit_3_default_25"] = "killer_3", - ["sim_default_bandit_3_default_26"] = "stalker_3", - ["sim_default_bandit_3_default_27"] = "freedom_1", - ["sim_default_bandit_3_default_28"] = "dolg_1", - ["sim_default_bandit_3_default_29"] = "bandit_1", - ["sim_default_bandit_3_default_30"] = "stalker_2", - ["sim_default_bandit_3_default_31"] = "military_1", - ["sim_default_bandit_3_default_32"] = "bandit_4", - ["sim_default_bandit_3_default_33"] = "military_3", - - --["sim_default_bandit_4_default_0"] = "bandit_2", - ["sim_default_bandit_4_default_1"] = "stalker_1", - ["sim_default_bandit_4_default_2"] = "not_greh_1", - ["sim_default_bandit_4_default_3"] = "dolg_1", - --["sim_default_bandit_4_default_4"] = "bandit_1", - ["sim_default_bandit_4_default_5"] = "freedom_1", - ["sim_default_bandit_4_default_6"] = "killer_3", - ["sim_default_bandit_4_default_7"] = "csky_3", - --["sim_default_bandit_4_default_8"] = "bandit_2", - ["sim_default_bandit_4_default_9"] = "dolg_3", - --["sim_default_bandit_4_default_10"] = "bandit_3", - ["sim_default_bandit_4_default_11"] = "bandit_4", - ["sim_default_bandit_4_default_12"] = "freedom_3", - ["sim_default_bandit_4_default_13"] = "dolg_3", - ["sim_default_bandit_4_default_14"] = "ecolog_1", - ["sim_default_bandit_4_default_15"] = "killer_3", - ["sim_default_bandit_4_default_16"] = "killer_1", - ["sim_default_bandit_4_default_17"] = "bandit_4", - ["sim_default_bandit_4_default_18"] = "military_3", - --["sim_default_bandit_4_default_19"] = "bandit_3", - - ["sim_default_csky_0_default_0"] = "stalker_1", - ["sim_default_csky_0_default_1"] = "stalker_4", - --["sim_default_csky_0_default_2"] = "csky_1", - ["sim_default_csky_0_default_3"] = "ecolog_3", - ["sim_default_csky_0_default_4"] = "dolg_1", - - ["sim_default_csky_1_default_0"] = "not_greh_1", - ["sim_default_csky_1_default_1"] = "stalker_2", - --["sim_default_csky_1_default_2"] = "csky_1", - ["sim_default_csky_1_default_3"] = "ecolog_1", - ["sim_default_csky_1_default_4"] = "dolg_3", - ["sim_default_csky_1_default_5"] = "military_1", - ["sim_default_csky_1_default_6"] = "stalker_1", - ["sim_default_csky_1_default_7"] = "stalker_2", - ["sim_default_csky_1_default_8"] = "bandit_4", - --["sim_default_csky_1_default_9"] = "csky_3", - ["sim_default_csky_1_default_10"] = "ecolog_3", - ["sim_default_csky_1_default_11"] = "dolg_1", - ["sim_default_csky_1_default_12"] = "freedom_1", - ["sim_default_csky_1_default_13"] = "stalker_3", - --["sim_default_csky_1_default_14"] = "csky_1", - ["sim_default_csky_1_default_15"] = "ecolog_1", - ["sim_default_csky_1_default_16"] = "dolg_1", - ["sim_default_csky_1_default_17"] = "military_1", - ["sim_default_csky_1_default_18"] = "freedom_1", - ["sim_default_csky_1_default_19"] = "killer_1", - - ["sim_default_csky_2_default_0"] = "stalker_1", - ["sim_default_csky_2_default_1"] = "stalker_2", - --["sim_default_csky_2_default_2"] = "csky_1", - --["sim_default_csky_2_default_3"] = "csky_3", - ["sim_default_csky_2_default_4"] = "ecolog_3", - ["sim_default_csky_2_default_5"] = "dolg_3", - ["sim_default_csky_2_default_6"] = "military_3", - ["sim_default_csky_2_default_7"] = "bandit_3", - ["sim_default_csky_2_default_8"] = "killer_1", - ["sim_default_csky_2_default_9"] = "freedom_1", - ["sim_default_csky_2_default_10"] = "not_greh_1", - ["sim_default_csky_2_default_11"] = "stalker_3", - --["sim_default_csky_2_default_12"] = "csky_3", - ["sim_default_csky_2_default_13"] = "killer_3", - ["sim_default_csky_2_default_14"] = "ecolog_1", - ["sim_default_csky_2_default_15"] = "military_1", - --["sim_default_csky_2_default_16"] = "csky_1", - ["sim_default_csky_2_default_17"] = "freedom_1", - ["sim_default_csky_2_default_18"] = "dolg_1", - ["sim_default_csky_2_default_19"] = "ecolog_1", - - --["sim_default_csky_3_default_0"] = "csky_3", - ["sim_default_csky_3_default_1"] = "stalker_4", - --["sim_default_csky_3_default_2"] = "csky_3", - ["sim_default_csky_3_default_3"] = "ecolog_3", - ["sim_default_csky_3_default_4"] = "dolg_3", - ["sim_default_csky_3_default_5"] = "military_3", - ["sim_default_csky_3_default_6"] = "bandit_4", - ["sim_default_csky_3_default_7"] = "killer_3", - ["sim_default_csky_3_default_8"] = "freedom_3", - ["sim_default_csky_3_default_9"] = "stalker_3", - --["sim_default_csky_3_default_10"] = "csky_3", - ["sim_default_csky_3_default_11"] = "not_greh_3", - ["sim_default_csky_3_default_12"] = "ecolog_3", - ["sim_default_csky_3_default_13"] = "dolg_3", - ["sim_default_csky_3_default_14"] = "military_3", - ["sim_default_csky_3_default_15"] = "killer_3", - ["sim_default_csky_3_default_16"] = "freedom_3", - ["sim_default_csky_3_default_17"] = "dolg_3", - - ["sim_default_csky_4_default_0"] = "stalker_3", - ["sim_default_csky_4_default_1"] = "stalker_4", - --["sim_default_csky_4_default_2"] = "csky_3", - ["sim_default_csky_4_default_3"] = "ecolog_3", - ["sim_default_csky_4_default_4"] = "not_greh_3", - ["sim_default_csky_4_default_5"] = "military_3", - ["sim_default_csky_4_default_6"] = "killer_3", - ["sim_default_csky_4_default_7"] = "freedom_3", - ["sim_default_csky_4_default_8"] = "dolg_3", - --["sim_default_csky_4_default_9"] = "csky_3", - - ["sim_default_duty_0_default_0"] = "stalker_1", - ["sim_default_duty_0_default_1"] = "stalker_2", - --["sim_default_duty_0_default_2"] = "dolg_1", - ["sim_default_duty_0_default_3"] = "military_1", - ["sim_default_duty_0_default_4"] = "killer_1", - ["sim_default_duty_0_default_5"] = "csky_1", - ["sim_default_duty_0_default_6"] = "not_greh_1", - ["sim_default_duty_0_default_7"] = "ecolog_1", - ["sim_default_duty_0_default_8"] = "military_1", - ["sim_default_duty_0_default_9"] = "csky_1", - --["sim_default_duty_0_default_10"] = "dolg_1", - ["sim_default_duty_0_default_11"] = "military_1", - ["sim_default_duty_0_default_12"] = "killer_1", - ["sim_default_duty_0_default_13"] = "csky_1", - ["sim_default_duty_0_default_14"] = "freedom_1", - ["sim_default_duty_0_default_15"] = "military_1", - --["sim_default_duty_0_default_16"] = "dolg_1", - ["sim_default_duty_0_default_17"] = "freedom_1", - ["sim_default_duty_0_default_18"] = "not_greh_1", - - ["sim_default_duty_1_default_0"] = "stalker_1", - ["sim_default_duty_1_default_1"] = "stalker_2", - --["sim_default_duty_1_default_2"] = "dolg_1", - ["sim_default_duty_1_default_3"] = "not_greh_1", - ["sim_default_duty_1_default_4"] = "killer_1", - ["sim_default_duty_1_default_5"] = "csky_1", - ["sim_default_duty_1_default_6"] = "freedom_1", - ["sim_default_duty_1_default_7"] = "ecolog_1", - ["sim_default_duty_1_default_8"] = "military_1", - ["sim_default_duty_1_default_9"] = "csky_1", - --["sim_default_duty_1_default_10"] = "dolg_1", - ["sim_default_duty_1_default_11"] = "stalker_1", - ["sim_default_duty_1_default_12"] = "stalker_2", - ["sim_default_duty_1_default_13"] = "military_1", - ["sim_default_duty_1_default_14"] = "killer_1", - --["sim_default_duty_1_default_15"] = "dolg_1", - ["sim_default_duty_1_default_16"] = "freedom_1", - ["sim_default_duty_1_default_17"] = "bandit_1", - ["sim_default_duty_1_default_18"] = "military_1", - ["sim_default_duty_1_default_19"] = "killer_1", - ["sim_default_duty_1_default_20"] = "csky_1", - --["sim_default_duty_1_default_21"] = "dolg_1", - ["sim_default_duty_1_default_22"] = "stalker_1", - ["sim_default_duty_1_default_23"] = "stalker_2", - ["sim_default_duty_1_default_24"] = "military_1", - ["sim_default_duty_1_default_25"] = "killer_1", - ["sim_default_duty_1_default_26"] = "csky_1", - ["sim_default_duty_1_default_27"] = "freedom_1", - ["sim_default_duty_1_default_28"] = "ecolog_1", - ["sim_default_duty_1_default_29"] = "military_1", - --["sim_default_duty_1_default_30"] = "dolg_1", - ["sim_default_duty_1_default_31"] = "bandit_2", - - ["sim_default_duty_2_default_0"] = "stalker_1", - ["sim_default_duty_2_default_1"] = "stalker_2", - --["sim_default_duty_2_default_2"] = "dolg_1", - ["sim_default_duty_2_default_3"] = "not_greh_1", - ["sim_default_duty_2_default_4"] = "killer_1", - ["sim_default_duty_2_default_5"] = "csky_1", - ["sim_default_duty_2_default_6"] = "freedom_1", - ["sim_default_duty_2_default_7"] = "ecolog_1", - ["sim_default_duty_2_default_8"] = "military_1", - ["sim_default_duty_2_default_9"] = "csky_1", - ["sim_default_duty_2_default_10"] = "stalker_1", - ["sim_default_duty_2_default_11"] = "stalker_2", - --["sim_default_duty_2_default_12"] = "dolg_1", - ["sim_default_duty_2_default_13"] = "military_1", - ["sim_default_duty_2_default_14"] = "killer_1", - ["sim_default_duty_2_default_15"] = "ecolog_1", - ["sim_default_duty_2_default_16"] = "freedom_1", - ["sim_default_duty_2_default_17"] = "killer_1", - ["sim_default_duty_2_default_18"] = "military_1", - ["sim_default_duty_2_default_19"] = "ecolog_1", - ["sim_default_duty_2_default_20"] = "bandit_2", - ["sim_default_duty_2_default_21"] = "stalker_2", - --["sim_default_duty_2_default_22"] = "dolg_1", - ["sim_default_duty_2_default_23"] = "military_1", - ["sim_default_duty_2_default_24"] = "killer_1", - ["sim_default_duty_2_default_25"] = "csky_1", - ["sim_default_duty_2_default_26"] = "freedom_1", - ["sim_default_duty_2_default_27"] = "ecolog_1", - ["sim_default_duty_2_default_28"] = "military_1", - ["sim_default_duty_2_default_29"] = "csky_1", - ["sim_default_duty_2_default_30"] = "stalker_1", - ["sim_default_duty_2_default_31"] = "stalker_2", - --["sim_default_duty_2_default_32"] = "dolg_1", - ["sim_default_duty_2_default_33"] = "freedom_1", - ["sim_default_duty_2_default_34"] = "killer_1", - ["sim_default_duty_2_default_35"] = "csky_1", - --["sim_default_duty_2_default_36"] = "dolg_1", - - ["sim_default_duty_3_default_0"] = "not_greh_1", - ["sim_default_duty_3_default_1"] = "stalker_2", - --["sim_default_duty_3_default_2"] = "dolg_1", - ["sim_default_duty_3_default_3"] = "military_1", - ["sim_default_duty_3_default_4"] = "killer_1", - ["sim_default_duty_3_default_5"] = "csky_1", - ["sim_default_duty_3_default_6"] = "freedom_1", - ["sim_default_duty_3_default_7"] = "ecolog_1", - ["sim_default_duty_3_default_8"] = "stalker_1", - ["sim_default_duty_3_default_9"] = "stalker_2", - --["sim_default_duty_3_default_10"] = "dolg_1", - ["sim_default_duty_3_default_11"] = "military_1", - ["sim_default_duty_3_default_12"] = "killer_1", - ["sim_default_duty_3_default_13"] = "csky_1", - ["sim_default_duty_3_default_14"] = "freedom_1", - ["sim_default_duty_3_default_15"] = "ecolog_1", - ["sim_default_duty_3_default_16"] = "stalker_1", - ["sim_default_duty_3_default_17"] = "stalker_2", - --["sim_default_duty_3_default_18"] = "dolg_1", - ["sim_default_duty_3_default_19"] = "military_1", - ["sim_default_duty_3_default_20"] = "killer_1", - ["sim_default_duty_3_default_21"] = "csky_1", - ["sim_default_duty_3_default_22"] = "freedom_1", - ["sim_default_duty_3_default_23"] = "ecolog_1", - ["sim_default_duty_3_default_24"] = "stalker_1", - ["sim_default_duty_3_default_25"] = "stalker_2", - --["sim_default_duty_3_default_26"] = "dolg_1", - ["sim_default_duty_3_default_27"] = "csky_1", - ["sim_default_duty_3_default_28"] = "killer_1", - ["sim_default_duty_3_default_29"] = "military_3", - --["sim_default_duty_3_default_30"] = "dolg_3", - - ["sim_default_duty_4_default_0"] = "csky_1", - ["sim_default_duty_4_default_1"] = "killer_1", - --["sim_default_duty_4_default_2"] = "dolg_1", - ["sim_default_duty_4_default_3"] = "military_1", - ["sim_default_duty_4_default_4"] = "killer_1", - ["sim_default_duty_4_default_5"] = "freedom_1", - ["sim_default_duty_4_default_6"] = "ecolog_1", - ["sim_default_duty_4_default_7"] = "military_1", - ["sim_default_duty_4_default_8"] = "freedom_3", - --["sim_default_duty_4_default_9"] = "dolg_3", - ["sim_default_duty_4_default_10"] = "stalker_3", - ["sim_default_duty_4_default_11"] = "stalker_4", - ["sim_default_duty_4_default_12"] = "csky_3", - ["sim_default_duty_4_default_13"] = "ecolog_3", - --["sim_default_duty_4_default_14"] = "dolg_3", - ["sim_default_duty_4_default_15"] = "killer_3", - ["sim_default_duty_4_default_16"] = "military_3", - - --["sim_default_ecolog_0_default_0"] = "stalker_3", - ["sim_default_ecolog_0_default_1"] = "stalker_4", - ["sim_default_ecolog_0_default_2"] = "dolg_3", - ["sim_default_ecolog_0_default_3"] = "freedom_3", - ["sim_default_ecolog_0_default_4"] = "killer_3", - - ["sim_default_ecolog_01_default_0"] = "stalker_3", - ["sim_default_ecolog_01_default_1"] = "dolg_3", - ["sim_default_ecolog_01_default_2"] = "not_greh_3", - ["sim_default_ecolog_01_default_3"] = "freedom_3", - ["sim_default_ecolog_01_default_4"] = "csky_3", - --["sim_default_ecolog_01_default_5"] = "ecolog_3", - - ["sim_default_ecolog_1_default_0"] = "stalker_4", - ["sim_default_ecolog_1_default_1"] = "dolg_3", - ["sim_default_ecolog_1_default_2"] = "military_3", - ["sim_default_ecolog_1_default_3"] = "freedom_3", - ["sim_default_ecolog_1_default_4"] = "csky_3", - --["sim_default_ecolog_1_default_5"] = "ecolog_3", - - --["sim_default_ecolog_2_default_0"] = "stalker_3", - ["sim_default_ecolog_2_default_1"] = "stalker_4", - ["sim_default_ecolog_2_default_2"] = "dolg_3", - ["sim_default_ecolog_2_default_3"] = "military_3", - ["sim_default_ecolog_2_default_4"] = "freedom_3", - ["sim_default_ecolog_2_default_5"] = "bandit_3", - ["sim_default_ecolog_2_default_6"] = "killer_3", - ["sim_default_ecolog_2_default_7"] = "csky_3", - ["sim_default_ecolog_2_default_8"] = "ecolog_3", - --["sim_default_ecolog_2_default_9"] = "stalker_3", - ["sim_default_ecolog_2_default_10"] = "not_greh_3", - ["sim_default_ecolog_2_default_11"] = "dolg_3", - ["sim_default_ecolog_2_default_12"] = "military_3", - ["sim_default_ecolog_2_default_13"] = "freedom_3", - ["sim_default_ecolog_2_default_14"] = "csky_3", - ["sim_default_ecolog_2_default_15"] = "killer_3", - ["sim_default_ecolog_2_default_16"] = "ecolog_3", - --["sim_default_ecolog_2_default_17"] = "stalker_3", - ["sim_default_ecolog_2_default_18"] = "stalker_4", - ["sim_default_ecolog_2_default_19"] = "dolg_3", - ["sim_default_ecolog_2_default_20"] = "military_3", - ["sim_default_ecolog_2_default_21"] = "freedom_3", - ["sim_default_ecolog_2_default_22"] = "bandit_4", - ["sim_default_ecolog_2_default_23"] = "killer_3", - ["sim_default_ecolog_2_default_24"] = "ecolog_3", - --["sim_default_ecolog_2_default_25"] = "stalker_3", - ["sim_default_ecolog_2_default_26"] = "not_greh_3", - ["sim_default_ecolog_2_default_27"] = "dolg_3", - ["sim_default_ecolog_2_default_28"] = "military_3", - ["sim_default_ecolog_2_default_29"] = "freedom_3", - ["sim_default_ecolog_2_default_30"] = "csky_3", - ["sim_default_ecolog_2_default_31"] = "killer_3", - ["sim_default_ecolog_2_default_32"] = "ecolog_3", - --["sim_default_ecolog_2_default_33"] = "stalker_3", - ["sim_default_ecolog_2_default_34"] = "stalker_4", - ["sim_default_ecolog_2_default_35"] = "dolg_3", - ["sim_default_ecolog_2_default_36"] = "military_3", - ["sim_default_ecolog_2_default_37"] = "freedom_3", - ["sim_default_ecolog_2_default_38"] = "csky_3", - - ["sim_default_ecolog_3_default_0"] = "dolg_3", - ["sim_default_ecolog_3_default_1"] = "military_3", - --["sim_default_ecolog_3_default_2"] = "killer_3", - ["sim_default_ecolog_3_default_3"] = "csky_3", - --["sim_default_ecolog_3_default_4"] = "stalker_3", - ["sim_default_ecolog_3_default_5"] = "stalker_4", - ["sim_default_ecolog_3_default_6"] = "ecolog_3", - ["sim_default_ecolog_3_default_7"] = "freedom_3", - ["sim_default_ecolog_3_default_8"] = "dolg_3", - - ["sim_default_ecolog_4_default_0"] = "dolg_3", - ["sim_default_ecolog_4_default_1"] = "military_3", - --["sim_default_ecolog_4_default_2"] = "killer_3", - ["sim_default_ecolog_4_default_3"] = "freedom_3", - ["sim_default_ecolog_4_default_4"] = "stalker_3", - ["sim_default_ecolog_4_default_5"] = "stalker_4", - ["sim_default_ecolog_4_default_6"] = "ecolog_3", - ["sim_default_ecolog_4_default_7"] = "csky_3", - - ["sim_default_ecolog_5_default_0"] = "csky_3", - ["sim_default_ecolog_5_default_1"] = "ecolog_3", - ["sim_default_ecolog_5_default_2"] = "dolg_3", - ["sim_default_ecolog_5_default_3"] = "military_3", - - ["sim_default_freedom_0_default_0"] = "bandit_3", - ["sim_default_freedom_0_default_1"] = "not_greh_3", - --["sim_default_freedom_0_default_2"] = "freedom_3", - --["sim_default_freedom_0_default_3"] = "freedom_1", - ["sim_default_freedom_0_default_4"] = "dolg_1", - ["sim_default_freedom_0_default_5"] = "military_1", - ["sim_default_freedom_0_default_6"] = "ecolog_3", - ["sim_default_freedom_0_default_7"] = "bandit_1", - ["sim_default_freedom_0_default_8"] = "bandit_2", - ["sim_default_freedom_0_default_9"] = "killer_1", - ["sim_default_freedom_0_default_10"] = "csky_1", - ["sim_default_freedom_0_default_11"] = "stalker_1", - ["sim_default_freedom_0_default_12"] = "stalker_2", - --["sim_default_freedom_0_default_13"] = "freedom_1", - ["sim_default_freedom_0_default_14"] = "killer_1", - - ["sim_default_freedom_1_default_0"] = "bandit_4", - --["sim_default_freedom_1_default_1"] = "freedom_3", - ["sim_default_freedom_1_default_2"] = "ecolog_1", - ["sim_default_freedom_1_default_3"] = "dolg_1", - ["sim_default_freedom_1_default_4"] = "dolg_3", - ["sim_default_freedom_1_default_5"] = "bandit_3", - ["sim_default_freedom_1_default_6"] = "csky_3", - ["sim_default_freedom_1_default_7"] = "stalker_3", - ["sim_default_freedom_1_default_8"] = "stalker_4", - ["sim_default_freedom_1_default_9"] = "killer_3", - ["sim_default_freedom_1_default_10"] = "bandit_3", - --["sim_default_freedom_1_default_11"] = "freedom_1", - ["sim_default_freedom_1_default_12"] = "ecolog_1", - ["sim_default_freedom_1_default_13"] = "csky_1", - ["sim_default_freedom_1_default_14"] = "dolg_1", - ["sim_default_freedom_1_default_15"] = "stalker_1", - --["sim_default_freedom_1_default_16"] = "freedom_1", - ["sim_default_freedom_1_default_17"] = "killer_1", - ["sim_default_freedom_1_default_18"] = "bandit_1", - ["sim_default_freedom_1_default_19"] = "bandit_2", - --["sim_default_freedom_1_default_20"] = "freedom_1", - ["sim_default_freedom_1_default_21"] = "military_1", - ["sim_default_freedom_1_default_22"] = "dolg_3", - ["sim_default_freedom_1_default_23"] = "bandit_3", - ["sim_default_freedom_1_default_24"] = "killer_3", - ["sim_default_freedom_1_default_25"] = "not_greh_3", - --["sim_default_freedom_1_default_26"] = "freedom_3", - ["sim_default_freedom_1_default_27"] = "stalker_1", - ["sim_default_freedom_1_default_28"] = "stalker_2", - ["sim_default_freedom_1_default_29"] = "military_1", - ["sim_default_freedom_1_default_30"] = "dolg_1", - ["sim_default_freedom_1_default_31"] = "killer_1", - - --["sim_default_freedom_2_default_0"] = "freedom_3", - ["sim_default_freedom_2_default_1"] = "bandit_2", - ["sim_default_freedom_2_default_2"] = "stalker_2", - ["sim_default_freedom_2_default_3"] = "bandit_3", - ["sim_default_freedom_2_default_4"] = "dolg_3", - ["sim_default_freedom_2_default_5"] = "csky_3", - ["sim_default_freedom_2_default_6"] = "military_3", - ["sim_default_freedom_2_default_7"] = "killer_3", - --["sim_default_freedom_2_default_8"] = "freedom_3", - ["sim_default_freedom_2_default_9"] = "stalker_4", - ["sim_default_freedom_2_default_10"] = "stalker_1", - --["sim_default_freedom_2_default_11"] = "freedom_1", - ["sim_default_freedom_2_default_12"] = "ecolog_1", - ["sim_default_freedom_2_default_13"] = "bandit_1", - ["sim_default_freedom_2_default_14"] = "dolg_1", - ["sim_default_freedom_2_default_15"] = "military_1", - ["sim_default_freedom_2_default_16"] = "killer_1", - --["sim_default_freedom_2_default_17"] = "freedom_1", - ["sim_default_freedom_2_default_18"] = "dolg_1", - ["sim_default_freedom_2_default_19"] = "ecolog_3", - ["sim_default_freedom_2_default_20"] = "csky_1", - ["sim_default_freedom_2_default_21"] = "bandit_4", - ["sim_default_freedom_2_default_22"] = "bandit_3", - --["sim_default_freedom_2_default_23"] = "freedom_3", - ["sim_default_freedom_2_default_24"] = "stalker_1", - ["sim_default_freedom_2_default_25"] = "not_greh_1", - ["sim_default_freedom_2_default_26"] = "dolg_1", - ["sim_default_freedom_2_default_27"] = "killer_1", - --["sim_default_freedom_2_default_28"] = "freedom_1", - ["sim_default_freedom_2_default_29"] = "csky_1", - - --["sim_default_freedom_3_default_0"] = "freedom_3", - ["sim_default_freedom_3_default_1"] = "killer_3", - --["sim_default_freedom_3_default_2"] = "freedom_1", - ["sim_default_freedom_3_default_3"] = "bandit_1", - ["sim_default_freedom_3_default_4"] = "stalker_3", - ["sim_default_freedom_3_default_5"] = "stalker_4", - ["sim_default_freedom_3_default_6"] = "dolg_3", - ["sim_default_freedom_3_default_7"] = "csky_3", - ["sim_default_freedom_3_default_8"] = "ecolog_3", - ["sim_default_freedom_3_default_9"] = "bandit_3", - ["sim_default_freedom_3_default_10"] = "bandit_4", - --["sim_default_freedom_3_default_11"] = "freedom_3", - ["sim_default_freedom_3_default_12"] = "military_3", - ["sim_default_freedom_3_default_13"] = "dolg_3", - --["sim_default_freedom_3_default_14"] = "freedom_3", - - --["sim_default_freedom_4_default_0"] = "freedom_3", - --["sim_default_freedom_4_default_1"] = "freedom_1", - ["sim_default_freedom_4_default_2"] = "killer_3", - ["sim_default_freedom_4_default_3"] = "bandit_3", - ["sim_default_freedom_4_default_4"] = "bandit_4", - ["sim_default_freedom_4_default_5"] = "stalker_3", - ["sim_default_freedom_4_default_6"] = "not_greh_3", - ["sim_default_freedom_4_default_7"] = "dolg_3", - ["sim_default_freedom_4_default_8"] = "ecolog_3", - ["sim_default_freedom_4_default_9"] = "csky_3", - ["sim_default_freedom_4_default_10"] = "military_3", - --["sim_default_freedom_4_default_11"] = "freedom_3", - ["sim_default_freedom_4_default_12"] = "killer_3", - ["sim_default_freedom_4_default_13"] = "bandit_3", - ["sim_default_freedom_4_default_14"] = "stalker_4", - ["sim_default_freedom_4_default_15"] = "dolg_3", - ["sim_default_freedom_4_default_16"] = "military_3", - --["sim_default_freedom_4_default_17"] = "freedom_3", - - --["sim_default_greh_0_default_0"] = "greh_1", - ["sim_default_greh_0_default_1"] = "greh_dolg_1", - ["sim_default_greh_0_default_2"] = "greh_killer_1", - --["sim_default_greh_0_default_3"] = "greh_1", - ["sim_default_greh_0_default_4"] = "greh_dolg_1", - ["sim_default_greh_0_default_5"] = "greh_killer_1", - --["sim_default_greh_0_default_6"] = "greh_1", - ["sim_default_greh_0_default_7"] = "greh_dolg_1", - ["sim_default_greh_0_default_8"] = "greh_killer_1", - --["sim_default_greh_0_default_9"] = "greh_1", - ["sim_default_greh_0_default_10"] = "greh_dolg_1", - ["sim_default_greh_0_default_11"] = "greh_killer_1", - --["sim_default_greh_0_default_12"] = "greh_1", - ["sim_default_greh_0_default_13"] = "greh_dolg_1", - ["sim_default_greh_0_default_14"] = "greh_killer_1", - --["sim_default_greh_0_default_15"] = "greh_1", - ["sim_default_greh_0_default_16"] = "greh_dolg_1", - ["sim_default_greh_0_default_17"] = "greh_killer_1", - --["sim_default_greh_0_default_18"] = "greh_1", - ["sim_default_greh_0_default_19"] = "greh_dolg_1", - ["sim_default_greh_0_default_20"] = "greh_killer_1", - --["sim_default_greh_0_default_21"] = "greh_1", - - --["sim_default_greh_1_default_0"] = "greh_1", - ["sim_default_greh_1_default_1"] = "greh_dolg_1", - ["sim_default_greh_1_default_2"] = "greh_killer_1", - --["sim_default_greh_1_default_3"] = "greh_1", - ["sim_default_greh_1_default_4"] = "greh_dolg_1", - ["sim_default_greh_1_default_5"] = "greh_killer_1", - --["sim_default_greh_1_default_6"] = "greh_1", - ["sim_default_greh_1_default_7"] = "greh_dolg_1", - ["sim_default_greh_1_default_8"] = "greh_killer_1", - --["sim_default_greh_1_default_9"] = "greh_1", - - --["sim_default_greh_2_default_0"] = "greh_1", - ["sim_default_greh_2_default_1"] = "greh_dolg_1", - ["sim_default_greh_2_default_2"] = "greh_killer_1", - --["sim_default_greh_2_default_3"] = "greh_1", - ["sim_default_greh_2_default_4"] = "greh_dolg_1", - ["sim_default_greh_2_default_5"] = "greh_killer_1", - --["sim_default_greh_2_default_6"] = "greh_3", - --["sim_default_greh_2_default_7"] = "greh_3", - --["sim_default_greh_2_default_8"] = "greh_3", - --["sim_default_greh_2_default_9"] = "greh_3", - --["sim_default_greh_2_default_10"] = "greh_3", - ["sim_default_greh_2_default_11"] = "greh_stalker_3", - ["sim_default_greh_2_default_12"] = "greh_stalker_3", - ["sim_default_greh_2_default_13"] = "greh_stalker_3", - ["sim_default_greh_2_default_14"] = "greh_stalker_3", - --["sim_default_greh_2_default_15"] = "greh_1", - ["sim_default_greh_2_default_16"] = "greh_dolg_1", - ["sim_default_greh_2_default_17"] = "greh_killer_1", - --["sim_default_greh_2_default_18"] = "greh_1", - ["sim_default_greh_2_default_19"] = "greh_dolg_1", - ["sim_default_greh_2_default_20"] = "greh_killer_1", - - --["sim_default_greh_3_default_0"] = "greh_3", - ["sim_default_greh_3_default_1"] = "greh_stalker_3", - --["sim_default_greh_3_default_2"] = "greh_3", - ["sim_default_greh_4_default_0"] = "greh_stalker_3", - --["sim_default_greh_4_default_1"] = "greh_3", - - --["sim_default_killer_0_default_0"] = "killer_3", - ["sim_default_killer_0_default_1"] = "stalker_3", - ["sim_default_killer_0_default_2"] = "stalker_4", - ["sim_default_killer_0_default_3"] = "dolg_3", - ["sim_default_killer_0_default_4"] = "military_3", - ["sim_default_killer_0_default_5"] = "freedom_3", - ["sim_default_killer_0_default_6"] = "csky_3", - ["sim_default_killer_0_default_7"] = "ecolog_3", - ["sim_default_killer_0_default_8"] = "bandit_3", - ["sim_default_killer_0_default_9"] = "not_greh_3", - --["sim_default_killer_0_default_10"] = "killer_3", - ["sim_default_killer_0_default_11"] = "dolg_3", - ["sim_default_killer_0_default_12"] = "bandit_4", - - --["sim_default_killer_1_default_0"] = "killer_3", - ["sim_default_killer_1_default_1"] = "stalker_3", - ["sim_default_killer_1_default_2"] = "stalker_4", - ["sim_default_killer_1_default_3"] = "dolg_3", - ["sim_default_killer_1_default_4"] = "military_3", - ["sim_default_killer_1_default_5"] = "freedom_3", - ["sim_default_killer_1_default_6"] = "csky_3", - ["sim_default_killer_1_default_7"] = "ecolog_3", - ["sim_default_killer_1_default_8"] = "bandit_4", - ["sim_default_killer_1_default_9"] = "not_greh_3", - --["sim_default_killer_1_default_10"] = "killer_3", - ["sim_default_killer_1_default_11"] = "stalker_3", - ["sim_default_killer_1_default_12"] = "stalker_4", - ["sim_default_killer_1_default_13"] = "dolg_3", - ["sim_default_killer_1_default_14"] = "military_3", - ["sim_default_killer_1_default_15"] = "freedom_3", - ["sim_default_killer_1_default_16"] = "csky_3", - ["sim_default_killer_1_default_17"] = "bandit_3", - ["sim_default_killer_1_default_18"] = "not_greh_3", - --["sim_default_killer_1_default_19"] = "killer_3", - ["sim_default_killer_1_default_20"] = "ecolog_3", - ["sim_default_killer_1_default_21"] = "freedom_3", - ["sim_default_killer_1_default_22"] = "military_3", - - --["sim_default_killer_2_default_0"] = "killer_3", - ["sim_default_killer_2_default_1"] = "stalker_3", - ["sim_default_killer_2_default_2"] = "stalker_4", - ["sim_default_killer_2_default_3"] = "dolg_3", - ["sim_default_killer_2_default_4"] = "military_3", - ["sim_default_killer_2_default_5"] = "freedom_3", - ["sim_default_killer_2_default_6"] = "csky_3", - ["sim_default_killer_2_default_7"] = "ecolog_3", - ["sim_default_killer_2_default_8"] = "bandit_4", - ["sim_default_killer_2_default_9"] = "not_greh_3", - --["sim_default_killer_2_default_10"] = "killer_3", - ["sim_default_killer_2_default_11"] = "stalker_3", - ["sim_default_killer_2_default_12"] = "stalker_4", - ["sim_default_killer_2_default_13"] = "dolg_3", - ["sim_default_killer_2_default_14"] = "military_3", - ["sim_default_killer_2_default_15"] = "freedom_3", - ["sim_default_killer_2_default_16"] = "csky_3", - ["sim_default_killer_2_default_17"] = "ecolog_3", - ["sim_default_killer_2_default_18"] = "bandit_3", - --["sim_default_killer_2_default_19"] = "killer_3", - ["sim_default_killer_2_default_20"] = "dolg_3", - ["sim_default_killer_2_default_21"] = "freedom_3", - - --["sim_default_killer_3_default_0"] = "killer_3", - ["sim_default_killer_3_default_1"] = "dolg_3", - ["sim_default_killer_3_default_2"] = "military_3", - ["sim_default_killer_3_default_3"] = "freedom_3", - ["sim_default_killer_3_default_4"] = "csky_3", - ["sim_default_killer_3_default_5"] = "bandit_4", - ["sim_default_killer_3_default_6"] = "not_greh_3", - - --["sim_default_killer_4_default_0"] = "killer_3", - ["sim_default_killer_4_default_1"] = "stalker_3", - ["sim_default_killer_4_default_2"] = "stalker_4", - ["sim_default_killer_4_default_3"] = "dolg_3", - ["sim_default_killer_4_default_4"] = "military_3", - ["sim_default_killer_4_default_5"] = "freedom_3", - ["sim_default_killer_4_default_6"] = "csky_3", - ["sim_default_killer_4_default_7"] = "ecolog_3", - ["sim_default_killer_4_default_8"] = "bandit_3", - ["sim_default_killer_4_default_9"] = "not_greh_3", - --["sim_default_killer_4_default_10"] = "killer_3", - ["sim_default_killer_4_default_11"] = "stalker_3", - ["sim_default_killer_4_default_12"] = "stalker_4", - ["sim_default_killer_4_default_13"] = "dolg_3", - ["sim_default_killer_4_default_14"] = "military_3", - ["sim_default_killer_4_default_15"] = "freedom_3", - ["sim_default_killer_4_default_16"] = "bandit_4", - - --["sim_default_killer_5_default_0"] = "killer_3", - ["sim_default_killer_5_default_1"] = "stalker_3", - ["sim_default_killer_5_default_2"] = "stalker_4", - ["sim_default_killer_5_default_3"] = "dolg_3", - ["sim_default_killer_5_default_4"] = "military_3", - ["sim_default_killer_5_default_5"] = "freedom_3", - ["sim_default_killer_5_default_6"] = "csky_3", - ["sim_default_killer_5_default_7"] = "bandit_3", - - --["sim_default_renegade_0_default_0"] = "bandit_1", - --["sim_default_renegade_0_default_1"] = "bandit_2", - ["sim_default_renegade_0_default_2"] = "killer_1", - ["sim_default_renegade_0_default_3"] = "stalker_1", - ["sim_default_renegade_0_default_4"] = "dolg_1", - ["sim_default_renegade_0_default_5"] = "military_1", - ["sim_default_renegade_0_default_6"] = "ecolog_1", - ["sim_default_renegade_0_default_7"] = "freedom_1", - ["sim_default_renegade_0_default_8"] = "csky_1", - ["sim_default_renegade_0_default_9"] = "not_greh_1", - --["sim_default_renegade_0_default_10"] = "bandit_2", - ["sim_default_renegade_0_default_11"] = "bandit_1", - ["sim_default_renegade_0_default_12"] = "killer_1", - ["sim_default_renegade_0_default_13"] = "stalker_2", - ["sim_default_renegade_0_default_14"] = "freedom_1", - ["sim_default_renegade_0_default_15"] = "csky_1", - ["sim_default_renegade_0_default_16"] = "not_greh_1", - --["sim_default_renegade_0_default_17"] = "bandit_2", - ["sim_default_renegade_0_default_18"] = "bandit_1", - ["sim_default_renegade_0_default_19"] = "killer_1", - ["sim_default_renegade_0_default_20"] = "dolg_1", - ["sim_default_renegade_0_default_21"] = "military_1", - ["sim_default_renegade_0_default_22"] = "not_greh_1", - --["sim_default_renegade_0_default_23"] = "bandit_2", - - --["sim_default_renegade_1_default_0"] = "bandit_1", - --["sim_default_renegade_1_default_1"] = "bandit_2", - ["sim_default_renegade_1_default_2"] = "killer_3", - ["sim_default_renegade_1_default_3"] = "stalker_3", - ["sim_default_renegade_1_default_4"] = "dolg_1", - ["sim_default_renegade_1_default_5"] = "military_1", - ["sim_default_renegade_1_default_6"] = "ecolog_1", - ["sim_default_renegade_1_default_7"] = "freedom_1", - ["sim_default_renegade_1_default_8"] = "not_greh_1", - --["sim_default_renegade_1_default_9"] = "bandit_1", - --["sim_default_renegade_1_default_10"] = "bandit_2", - ["sim_default_renegade_1_default_11"] = "killer_1", - ["sim_default_renegade_1_default_12"] = "stalker_2", - ["sim_default_renegade_1_default_13"] = "dolg_1", - ["sim_default_renegade_1_default_14"] = "military_1", - ["sim_default_renegade_1_default_15"] = "csky_1", - ["sim_default_renegade_1_default_16"] = "not_greh_1", - ["sim_default_renegade_1_default_17"] = "bandit_1", - --["sim_default_renegade_1_default_18"] = "bandit_2", - ["sim_default_renegade_1_default_19"] = "not_greh_3", - ["sim_default_renegade_1_default_20"] = "freedom_1", - - --["sim_default_renegade_2_default_0"] = "bandit_3", - ["sim_default_renegade_2_default_1"] = "bandit_4", - ["sim_default_renegade_2_default_2"] = "killer_3", - ["sim_default_renegade_2_default_3"] = "csky_1", - ["sim_default_renegade_2_default_4"] = "military_1", - ["sim_default_renegade_2_default_5"] = "freedom_1", - ["sim_default_renegade_2_default_6"] = "not_greh_1", - ["sim_default_renegade_2_default_7"] = "dolg_3", - --["sim_default_renegade_2_default_8"] = "bandit_3", - ["sim_default_renegade_2_default_9"] = "not_greh_3", - - --["sim_default_stalker_0_default_0"] = "stalker_1", - ["sim_default_stalker_0_default_1"] = "stalker_2", - ["sim_default_stalker_0_default_2"] = "bandit_1", - ["sim_default_stalker_0_default_3"] = "dolg_1", - ["sim_default_stalker_0_default_4"] = "military_1", - ["sim_default_stalker_0_default_5"] = "killer_1", - ["sim_default_stalker_0_default_6"] = "freedom_1", - ["sim_default_stalker_0_default_7"] = "ecolog_1", - ["sim_default_stalker_0_default_8"] = "csky_1", - ["sim_default_stalker_0_default_9"] = "not_greh_1", - ["sim_default_stalker_0_default_10"] = "stalker_2", - ["sim_default_stalker_0_default_11"] = "bandit_2", - ["sim_default_stalker_0_default_12"] = "dolg_1", - --["sim_default_stalker_0_default_13"] = "stalker_1", - ["sim_default_stalker_0_default_14"] = "freedom_1", - ["sim_default_stalker_0_default_15"] = "military_1", - ["sim_default_stalker_0_default_16"] = "ecolog_1", - ["sim_default_stalker_0_default_17"] = "csky_1", - --["sim_default_stalker_0_default_18"] = "stalker_1", - ["sim_default_stalker_0_default_19"] = "not_greh_1", - ["sim_default_stalker_0_default_20"] = "dolg_1", - ["sim_default_stalker_0_default_21"] = "military_3", - ["sim_default_stalker_0_default_22"] = "killer_3", - ["sim_default_stalker_0_default_23"] = "freedom_3", - ["sim_default_stalker_0_default_24"] = "bandit_3", - ["sim_default_stalker_0_default_25"] = "csky_3", - --["sim_default_stalker_0_default_26"] = "stalker_3", - ["sim_default_stalker_0_default_27"] = "stalker_4", - ["sim_default_stalker_0_default_28"] = "dolg_1", - ["sim_default_stalker_0_default_29"] = "military_1", - ["sim_default_stalker_0_default_30"] = "killer_1", - ["sim_default_stalker_0_default_31"] = "freedom_1", - ["sim_default_stalker_0_default_32"] = "ecolog_1", - ["sim_default_stalker_0_default_33"] = "csky_1", - ["sim_default_stalker_0_default_34"] = "freedom_1", - - --["sim_default_stalker_1_default_0"] = "stalker_3", - ["sim_default_stalker_1_default_1"] = "stalker_4", - ["sim_default_stalker_1_default_2"] = "bandit_3", - ["sim_default_stalker_1_default_3"] = "dolg_3", - ["sim_default_stalker_1_default_4"] = "military_3", - ["sim_default_stalker_1_default_5"] = "killer_3", - ["sim_default_stalker_1_default_6"] = "not_greh_3", - ["sim_default_stalker_1_default_7"] = "ecolog_3", - ["sim_default_stalker_1_default_8"] = "csky_3", - ["sim_default_stalker_1_default_9"] = "freedom_3", - --["sim_default_stalker_1_default_10"] = "stalker_2", - ["sim_default_stalker_1_default_11"] = "stalker_1", - ["sim_default_stalker_1_default_12"] = "military_1", - ["sim_default_stalker_1_default_13"] = "dolg_1", - ["sim_default_stalker_1_default_14"] = "military_1", - ["sim_default_stalker_1_default_15"] = "killer_1", - ["sim_default_stalker_1_default_16"] = "freedom_1", - ["sim_default_stalker_1_default_17"] = "ecolog_1", - ["sim_default_stalker_1_default_18"] = "csky_1", - ["sim_default_stalker_1_default_19"] = "not_greh_1", - ["sim_default_stalker_1_default_20"] = "stalker_1", - ["sim_default_stalker_1_default_21"] = "bandit_1", - ["sim_default_stalker_1_default_22"] = "dolg_1", - ["sim_default_stalker_1_default_23"] = "freedom_1", - ["sim_default_stalker_1_default_24"] = "killer_1", - ["sim_default_stalker_1_default_25"] = "dolg_3", - ["sim_default_stalker_1_default_26"] = "killer_3", - ["sim_default_stalker_1_default_27"] = "csky_3", - --["sim_default_stalker_1_default_28"] = "stalker_3", - ["sim_default_stalker_1_default_29"] = "stalker_1", - ["sim_default_stalker_1_default_30"] = "csky_1", - ["sim_default_stalker_1_default_31"] = "bandit_2", - ["sim_default_stalker_1_default_32"] = "dolg_1", - ["sim_default_stalker_1_default_33"] = "military_1", - ["sim_default_stalker_1_default_34"] = "freedom_1", - ["sim_default_stalker_1_default_35"] = "freedom_3", - ["sim_default_stalker_1_default_36"] = "ecolog_3", - ["sim_default_stalker_1_default_37"] = "csky_3", - ["sim_default_stalker_1_default_38"] = "not_greh_3", - ["sim_default_stalker_1_default_39"] = "stalker_4", - ["sim_default_stalker_1_default_40"] = "bandit_4", - --["sim_default_stalker_1_default_41"] = "stalker_3", - --["sim_default_stalker_1_default_42"] = "stalker_1", - ["sim_default_stalker_1_default_43"] = "dolg_3", - ["sim_default_stalker_1_default_44"] = "military_3", - ["sim_default_stalker_1_default_45"] = "freedom_3", - ["sim_default_stalker_1_default_46"] = "killer_3", - ["sim_default_stalker_1_default_47"] = "csky_3", - ["sim_default_stalker_1_default_48"] = "not_greh_3", - --["sim_default_stalker_1_default_49"] = "stalker_3", - ["sim_default_stalker_1_default_50"] = "bandit_3", - ["sim_default_stalker_1_default_51"] = "dolg_3", - ["sim_default_stalker_1_default_52"] = "military_3", - ["sim_default_stalker_1_default_53"] = "freedom_3", - ["sim_default_stalker_1_default_54"] = "ecolog_3", - ["sim_default_stalker_1_default_55"] = "freedom_3", - ["sim_default_stalker_1_default_56"] = "killer_3", - --["sim_default_stalker_1_default_57"] = "stalker_3", - ["sim_default_stalker_1_default_58"] = "stalker_4", - ["sim_default_stalker_1_default_59"] = "dolg_3", - ["sim_default_stalker_1_default_60"] = "csky_3", - ["sim_default_stalker_1_default_61"] = "dolg_1", - --["sim_default_stalker_1_default_62"] = "stalker_2", - ["sim_default_stalker_1_default_63"] = "dolg_1", - ["sim_default_stalker_1_default_64"] = "csky_1", - ["sim_default_stalker_1_default_65"] = "killer_1", - ["sim_default_stalker_1_default_66"] = "csky_1", - ["sim_default_stalker_1_default_67"] = "bandit_2", - ["sim_default_stalker_1_default_68"] = "freedom_1", - ["sim_default_stalker_1_default_69"] = "military_1", - --["sim_default_stalker_1_default_70"] = "stalker_2", - ["sim_default_stalker_1_default_71"] = "stalker_1", - ["sim_default_stalker_1_default_72"] = "dolg_1", - ["sim_default_stalker_1_default_73"] = "military_1", - ["sim_default_stalker_1_default_74"] = "killer_1", - ["sim_default_stalker_1_default_75"] = "csky_1", - ["sim_default_stalker_1_default_76"] = "freedom_1", - ["sim_default_stalker_1_default_77"] = "ecolog_1", - ["sim_default_stalker_1_default_78"] = "bandit_1", - --["sim_default_stalker_1_default_79"] = "stalker_2", - ["sim_default_stalker_1_default_80"] = "military_1", - --["sim_default_stalker_1_default_81"] = "stalker_3", - ["sim_default_stalker_1_default_82"] = "bandit_3", - ["sim_default_stalker_1_default_83"] = "freedom_1", - ["sim_default_stalker_1_default_84"] = "dolg_3", - ["sim_default_stalker_1_default_85"] = "killer_3", - ["sim_default_stalker_1_default_86"] = "military_3", - ["sim_default_stalker_1_default_87"] = "csky_3", - - ["sim_default_stalker_2_default_0"] = "not_greh_1", - --["sim_default_stalker_2_default_1"] = "stalker_2", - ["sim_default_stalker_2_default_2"] = "dolg_1", - ["sim_default_stalker_2_default_3"] = "military_1", - ["sim_default_stalker_2_default_4"] = "killer_1", - ["sim_default_stalker_2_default_5"] = "csky_3", - ["sim_default_stalker_2_default_6"] = "freedom_3", - ["sim_default_stalker_2_default_7"] = "ecolog_3", - ["sim_default_stalker_2_default_8"] = "bandit_4", - --["sim_default_stalker_2_default_9"] = "stalker_3", - ["sim_default_stalker_2_default_10"] = "stalker_4", - ["sim_default_stalker_2_default_11"] = "dolg_3", - ["sim_default_stalker_2_default_12"] = "military_3", - ["sim_default_stalker_2_default_13"] = "killer_3", - ["sim_default_stalker_2_default_14"] = "bandit_3", - ["sim_default_stalker_2_default_15"] = "csky_1", - ["sim_default_stalker_2_default_16"] = "ecolog_1", - ["sim_default_stalker_2_default_17"] = "csky_1", - ["sim_default_stalker_2_default_18"] = "freedom_1", - --["sim_default_stalker_2_default_19"] = "stalker_2", - ["sim_default_stalker_2_default_20"] = "dolg_1", - ["sim_default_stalker_2_default_21"] = "military_1", - ["sim_default_stalker_2_default_22"] = "killer_1", - ["sim_default_stalker_2_default_23"] = "not_greh_1", - ["sim_default_stalker_2_default_24"] = "freedom_1", - ["sim_default_stalker_2_default_25"] = "dolg_1", - ["sim_default_stalker_2_default_26"] = "csky_3", - --["sim_default_stalker_2_default_27"] = "stalker_2", - ["sim_default_stalker_2_default_28"] = "military_3", - ["sim_default_stalker_2_default_29"] = "dolg_3", - ["sim_default_stalker_2_default_30"] = "freedom_1", - ["sim_default_stalker_2_default_31"] = "military_1", - ["sim_default_stalker_2_default_32"] = "killer_3", - ["sim_default_stalker_2_default_33"] = "csky_1", - ["sim_default_stalker_2_default_34"] = "ecolog_1", - ["sim_default_stalker_2_default_35"] = "freedom_3", - ["sim_default_stalker_2_default_36"] = "bandit_3", - --["sim_default_stalker_2_default_37"] = "stalker_3", - ["sim_default_stalker_2_default_38"] = "stalker_4", - ["sim_default_stalker_2_default_39"] = "dolg_3", - ["sim_default_stalker_2_default_40"] = "killer_3", - ["sim_default_stalker_2_default_41"] = "csky_3", - ["sim_default_stalker_2_default_42"] = "freedom_1", - ["sim_default_stalker_2_default_43"] = "dolg_1", - ["sim_default_stalker_2_default_44"] = "bandit_1", - ["sim_default_stalker_2_default_45"] = "ecolog_1", - ["sim_default_stalker_2_default_46"] = "military_1", - ["sim_default_stalker_2_default_47"] = "stalker_1", - --["sim_default_stalker_2_default_48"] = "stalker_2", - ["sim_default_stalker_2_default_49"] = "freedom_3", - ["sim_default_stalker_2_default_50"] = "csky_3", - --["sim_default_stalker_2_default_51"] = "stalker_3", - ["sim_default_stalker_2_default_52"] = "stalker_4", - ["sim_default_stalker_2_default_53"] = "csky_1", - ["sim_default_stalker_2_default_54"] = "not_greh_3", - ["sim_default_stalker_2_default_55"] = "killer_3", - ["sim_default_stalker_2_default_56"] = "dolg_1", - ["sim_default_stalker_2_default_57"] = "freedom_3", - ["sim_default_stalker_2_default_58"] = "ecolog_3", - ["sim_default_stalker_2_default_59"] = "dolg_3", - ["sim_default_stalker_2_default_60"] = "stalker_4", - ["sim_default_stalker_2_default_61"] = "bandit_1", - ["sim_default_stalker_2_default_62"] = "dolg_1", - ["sim_default_stalker_2_default_63"] = "killer_3", - ["sim_default_stalker_2_default_64"] = "freedom_1", - ["sim_default_stalker_2_default_65"] = "not_greh_1", - ["sim_default_stalker_2_default_66"] = "ecolog_1", - ["sim_default_stalker_2_default_67"] = "stalker_1", - --["sim_default_stalker_2_default_68"] = "stalker_2", - ["sim_default_stalker_2_default_69"] = "dolg_1", - ["sim_default_stalker_2_default_70"] = "military_1", - ["sim_default_stalker_2_default_71"] = "killer_1", - ["sim_default_stalker_2_default_72"] = "freedom_1", - ["sim_default_stalker_2_default_73"] = "csky_1", - ["sim_default_stalker_2_default_74"] = "freedom_1", - ["sim_default_stalker_2_default_75"] = "bandit_2", - - --["sim_default_stalker_3_default_0"] = "stalker_3", - ["sim_default_stalker_3_default_1"] = "stalker_4", - ["sim_default_stalker_3_default_2"] = "ecolog_3", - ["sim_default_stalker_3_default_3"] = "military_3", - ["sim_default_stalker_3_default_4"] = "killer_3", - ["sim_default_stalker_3_default_5"] = "freedom_3", - ["sim_default_stalker_3_default_6"] = "csky_3", - ["sim_default_stalker_3_default_7"] = "ecolog_3", - ["sim_default_stalker_3_default_8"] = "bandit_2", - ["sim_default_stalker_3_default_9"] = "not_greh_3", - ["sim_default_stalker_3_default_10"] = "dolg_3", - ["sim_default_stalker_3_default_11"] = "military_3", - ["sim_default_stalker_3_default_12"] = "killer_3", - ["sim_default_stalker_3_default_13"] = "freedom_3", - ["sim_default_stalker_3_default_14"] = "csky_3", - ["sim_default_stalker_3_default_15"] = "ecolog_3", - --["sim_default_stalker_3_default_16"] = "stalker_3", - ["sim_default_stalker_3_default_17"] = "stalker_4", - ["sim_default_stalker_3_default_18"] = "dolg_3", - ["sim_default_stalker_3_default_19"] = "bandit_3", - ["sim_default_stalker_3_default_20"] = "killer_3", - ["sim_default_stalker_3_default_21"] = "csky_1", - ["sim_default_stalker_3_default_22"] = "military_1", - ["sim_default_stalker_3_default_23"] = "ecolog_1", - ["sim_default_stalker_3_default_24"] = "freedom_1", - ["sim_default_stalker_3_default_25"] = "csky_1", - ["sim_default_stalker_3_default_26"] = "freedom_1", - --["sim_default_stalker_3_default_27"] = "stalker_2", - --["sim_default_stalker_3_default_28"] = "stalker_3", - ["sim_default_stalker_3_default_29"] = "dolg_3", - ["sim_default_stalker_3_default_30"] = "military_3", - ["sim_default_stalker_3_default_31"] = "killer_3", - ["sim_default_stalker_3_default_32"] = "freedom_3", - ["sim_default_stalker_3_default_33"] = "military_3", - ["sim_default_stalker_3_default_34"] = "ecolog_3", - ["sim_default_stalker_3_default_35"] = "bandit_1", - ["sim_default_stalker_3_default_36"] = "not_greh_3", - ["sim_default_stalker_3_default_37"] = "dolg_3", - ["sim_default_stalker_3_default_38"] = "csky_3", - ["sim_default_stalker_3_default_39"] = "killer_3", - --["sim_default_stalker_3_default_40"] = "stalker_3", - ["sim_default_stalker_3_default_41"] = "dolg_3", - ["sim_default_stalker_3_default_42"] = "military_3", - ["sim_default_stalker_3_default_43"] = "killer_3", - ["sim_default_stalker_3_default_44"] = "freedom_3", - ["sim_default_stalker_3_default_45"] = "csky_3", - ["sim_default_stalker_3_default_46"] = "ecolog_3", - ["sim_default_stalker_3_default_47"] = "bandit_4", - --["sim_default_stalker_3_default_48"] = "stalker_3", - ["sim_default_stalker_3_default_49"] = "stalker_4", - ["sim_default_stalker_3_default_50"] = "dolg_3", - ["sim_default_stalker_3_default_51"] = "military_3", - ["sim_default_stalker_3_default_52"] = "killer_3", - ["sim_default_stalker_3_default_53"] = "freedom_3", - ["sim_default_stalker_3_default_54"] = "csky_3", - ["sim_default_stalker_3_default_55"] = "dolg_3", - --["sim_default_stalker_3_default_56"] = "stalker_3", - --["sim_default_stalker_3_default_57"] = "stalker_1", - ["sim_default_stalker_3_default_58"] = "killer_1", - --["sim_default_stalker_3_default_59"] = "stalker_2", - ["sim_default_stalker_3_default_60"] = "dolg_1", - - --["sim_default_stalker_4_default_0"] = "stalker_3", - ["sim_default_stalker_4_default_1"] = "stalker_4", - ["sim_default_stalker_4_default_2"] = "killer_1", - ["sim_default_stalker_4_default_3"] = "csky_3", - ["sim_default_stalker_4_default_4"] = "dolg_3", - ["sim_default_stalker_4_default_5"] = "ecolog_3", - ["sim_default_stalker_4_default_6"] = "military_3", - ["sim_default_stalker_4_default_7"] = "freedom_3", - ["sim_default_stalker_4_default_8"] = "not_greh_3", - ["sim_default_stalker_4_default_9"] = "killer_3" -} - -function on_game_start() - RegisterScriptCallback("on_specific_character_init", function(character_id, data) - if list[character_id] then - data.snd_config = "characters_voice\\human\\" .. list[character_id] .. "\\" - end - end) -end \ No newline at end of file diff --git a/mods/Random NPC Voices/Without ISG/scripts/modxml_RNPCV.script b/mods/Random NPC Voices/Without ISG/scripts/modxml_RNPCV.script deleted file mode 100644 index d2c9fa6b..00000000 --- a/mods/Random NPC Voices/Without ISG/scripts/modxml_RNPCV.script +++ /dev/null @@ -1,1214 +0,0 @@ -local list = -{ - --[[ - --["sim_default_isg_1_default_0"] = "killer_1", - --["sim_default_isg_1_default_1"] = "killer_3", - ["sim_default_isg_1_default_2"] = "military_1", - ["sim_default_isg_1_default_3"] = "not_greh_1", - ["sim_default_isg_1_default_4"] = "csky_1", - ["sim_default_isg_1_default_5"] = "dolg_3", - ["sim_default_isg_1_default_6"] = "freedom_3", - ["sim_default_isg_1_default_7"] = "ecolog_1", - ["sim_default_isg_1_default_8"] = "dolg_1", - ["sim_default_isg_1_default_9"] = "freedom_1", - ["sim_default_isg_1_default_10"] = "bandit_4", - --["sim_default_isg_1_default_11"] = "killer_3", - --["sim_default_isg_1_default_12"] = "killer_1", - ["sim_default_isg_1_default_13"] = "military_1", - ["sim_default_isg_1_default_14"] = "not_greh_1", - ["sim_default_isg_1_default_15"] = "dolg_3", - ["sim_default_isg_1_default_16"] = "ecolog_3", - - --["sim_default_isg_2_default_0"] = "killer_1", - --["sim_default_isg_2_default_1"] = "killer_3", - ["sim_default_isg_2_default_2"] = "bandit_1", - ["sim_default_isg_2_default_3"] = "dolg_1", - ["sim_default_isg_2_default_4"] = "csky_1", - ["sim_default_isg_2_default_5"] = "dolg_3", - ["sim_default_isg_2_default_6"] = "freedom_3", - ["sim_default_isg_2_default_7"] = "ecolog_1", - ["sim_default_isg_2_default_8"] = "freedom_1", - ["sim_default_isg_2_default_9"] = "not_greh_1", - ["sim_default_isg_2_default_10"] = "military_3", - --["sim_default_isg_2_default_11"] = "killer_3", - --["sim_default_isg_2_default_12"] = "killer_1", - ["sim_default_isg_2_default_13"] = "freedom_1", - ["sim_default_isg_2_default_14"] = "not_greh_1", - ["sim_default_isg_2_default_15"] = "csky_3", - ["sim_default_isg_2_default_16"] = "not_greh_3", - ["sim_default_isg_2_default_17"] = "military_3", - ["sim_default_isg_2_default_18"] = "ecolog_1", - ["sim_default_isg_2_default_19"] = "not_greh_3", - ["sim_default_isg_2_default_20"] = "bandit_2", - --["sim_default_isg_2_default_21"] = "killer_3", - - --["sim_default_isg_3_default_0"] = "killer_3", - ["sim_default_isg_3_default_1"] = "bandit_3", - ["sim_default_isg_3_default_2"] = "dolg_1", - ["sim_default_isg_3_default_3"] = "csky_3", - ["sim_default_isg_3_default_4"] = "freedom_3", - ["sim_default_isg_3_default_5"] = "ecolog_3", - ["sim_default_isg_3_default_6"] = "not_greh_3", - --["sim_default_isg_3_default_7"] = "killer_1", - ["sim_default_isg_3_default_8"] = "military_3", - --["sim_default_isg_3_default_9"] = "killer_1", - ["sim_default_isg_3_default_10"] = "not_greh_3", - --["sim_default_isg_3_default_11"] = "killer_3", - ["sim_default_isg_3_default_12"] = "not_greh_3", - ["sim_default_isg_3_default_13"] = "dolg_3", - ["sim_default_isg_3_default_14"] = "freedom_3", - ["sim_default_isg_3_default_15"] = "ecolog_3", - ["sim_default_isg_3_default_16"] = "military_3", - - --["sim_default_isg_4_default_0"] = "killer_3", - ["sim_default_isg_4_default_1"] = "dolg_3", - ["sim_default_isg_4_default_2"] = "csky_3", - ["sim_default_isg_4_default_3"] = "freedom_3", - ["sim_default_isg_4_default_4"] = "ecolog_3", - ["sim_default_isg_4_default_5"] = "military_3", - ["sim_default_isg_4_default_6"] = "not_greh_3", - ["sim_default_isg_4_default_7"] = "dolg_3", - - --["sim_default_isg_trader"] = "killer_3", - --["sim_default_isg_mechanic"] = "killer_1", - --["sim_default_isg_medic"] = "killer_3", - --["sim_default_isg_barman"] = "killer_1", - --["sim_default_isg_dead_default_0"] = "killer_1", - --["sim_default_isg_dead_default_1"] = "killer_3", - --["sim_default_isg_dead_default_2"] = "killer_3", - --["sim_default_isg_dead_default_3"] = "killer_3", - --]] - - --["sim_default_military_0_default_0"] = "military_1", - ["sim_default_military_0_default_1"] = "stalker_1", - ["sim_default_military_0_default_2"] = "not_greh_1", - ["sim_default_military_0_default_3"] = "csky_1", - ["sim_default_military_0_default_4"] = "dolg_1", - --["sim_default_military_0_default_5"] = "military_1", - ["sim_default_military_0_default_6"] = "killer_1", - ["sim_default_military_0_default_7"] = "freedom_1", - ["sim_default_military_0_default_8"] = "ecolog_1", - ["sim_default_military_0_default_9"] = "bandit_2", - ["sim_default_military_0_default_10"] = "dolg_1", - ["sim_default_military_0_default_11"] = "not_greh_1", - ["sim_default_military_0_default_12"] = "stalker_2", - ["sim_default_military_0_default_13"] = "csky_1", - ["sim_default_military_0_default_14"] = "dolg_1", - ["sim_default_military_0_default_15"] = "killer_1", - ["sim_default_military_0_default_16"] = "freedom_1", - ["sim_default_military_0_default_17"] = "ecolog_1", - --["sim_default_military_0_default_18"] = "military_1", - - --["sim_default_military_1_default_0"] = "military_1", - ["sim_default_military_1_default_1"] = "stalker_1", - ["sim_default_military_1_default_2"] = "not_greh_1", - ["sim_default_military_1_default_3"] = "csky_1", - ["sim_default_military_1_default_4"] = "bandit_1", - ["sim_default_military_1_default_5"] = "killer_1", - ["sim_default_military_1_default_6"] = "dolg_3", - ["sim_default_military_1_default_7"] = "freedom_1", - ["sim_default_military_1_default_8"] = "ecolog_1", - - --["sim_default_military_2_default_0"] = "military_1", - ["sim_default_military_2_default_1"] = "not_greh_1", - ["sim_default_military_2_default_2"] = "stalker_2", - ["sim_default_military_2_default_3"] = "csky_1", - ["sim_default_military_2_default_4"] = "dolg_1", - ["sim_default_military_2_default_5"] = "killer_3", - ["sim_default_military_2_default_6"] = "freedom_1", - ["sim_default_military_2_default_7"] = "ecolog_1", - ["sim_default_military_2_default_8"] = "bandit_2", - - --["sim_default_military_3_default_0"] = "military_3", - ["sim_default_military_3_default_1"] = "not_greh_1", - ["sim_default_military_3_default_2"] = "stalker_2", - ["sim_default_military_3_default_3"] = "csky_1", - ["sim_default_military_3_default_4"] = "dolg_1", - ["sim_default_military_3_default_5"] = "killer_1", - ["sim_default_military_3_default_6"] = "freedom_1", - ["sim_default_military_3_default_7"] = "ecolog_3", - --["sim_default_military_3_default_8"] = "military_1", - ["sim_default_military_3_default_9"] = "stalker_1", - ["sim_default_military_3_default_10"] = "not_greh_1", - ["sim_default_military_3_default_11"] = "csky_1", - ["sim_default_military_3_default_12"] = "dolg_1", - ["sim_default_military_3_default_13"] = "killer_1", - ["sim_default_military_3_default_14"] = "freedom_1", - ["sim_default_military_3_default_15"] = "ecolog_1", - --["sim_default_military_3_default_16"] = "military_1", - ["sim_default_military_3_default_17"] = "stalker_1", - ["sim_default_military_3_default_18"] = "stalker_2", - ["sim_default_military_3_default_19"] = "csky_1", - ["sim_default_military_3_default_20"] = "dolg_1", - ["sim_default_military_3_default_21"] = "killer_1", - ["sim_default_military_3_default_22"] = "freedom_1", - --["sim_default_military_3_default_23"] = "military_1", - ["sim_default_military_3_default_24"] = "stalker_2", - ["sim_default_military_3_default_25"] = "dolg_1", - ["sim_default_military_3_default_26"] = "killer_1", - - --["sim_default_military_4_default_0"] = "military_3", - ["sim_default_military_4_default_1"] = "stalker_3", - ["sim_default_military_4_default_2"] = "stalker_4", - ["sim_default_military_4_default_3"] = "csky_3", - ["sim_default_military_4_default_4"] = "dolg_3", - ["sim_default_military_4_default_5"] = "killer_3", - ["sim_default_military_4_default_6"] = "freedom_3", - ["sim_default_military_4_default_7"] = "killer_3", - --["sim_default_military_4_default_8"] = "military_3", - ["sim_default_military_4_default_9"] = "not_greh_3", - ["sim_default_military_4_default_10"] = "stalker_3", - ["sim_default_military_4_default_11"] = "csky_3", - ["sim_default_military_4_default_12"] = "dolg_3", - ["sim_default_military_4_default_13"] = "killer_3", - ["sim_default_military_4_default_14"] = "csky_3", - --["sim_default_military_4_default_15"] = "military_3", - ["sim_default_military_4_default_16"] = "not_greh_3", - ["sim_default_military_4_default_17"] = "stalker_2", - --["sim_default_military_4_default_18"] = "military_1", - ["sim_default_military_4_default_19"] = "dolg_3", - ["sim_default_military_4_default_20"] = "killer_3", - ["sim_default_military_4_default_21"] = "not_greh_3", - - --["sim_default_bandit_0_default_0"] = "bandit_1", - ["sim_default_bandit_0_default_1"] = "bandit_2", - --["sim_default_bandit_0_default_2"] = "bandit_1", - ["sim_default_bandit_0_default_3"] = "stalker_1", - ["sim_default_bandit_0_default_4"] = "dolg_1", - ["sim_default_bandit_0_default_5"] = "military_1", - ["sim_default_bandit_0_default_6"] = "ecolog_1", - ["sim_default_bandit_0_default_7"] = "freedom_1", - ["sim_default_bandit_0_default_8"] = "csky_1", - --["sim_default_bandit_0_default_9"] = "bandit_2", - ["sim_default_bandit_0_default_10"] = "killer_1", - ["sim_default_bandit_0_default_11"] = "stalker_2", - ["sim_default_bandit_0_default_12"] = "killer_3", - ["sim_default_bandit_0_default_13"] = "dolg_3", - ["sim_default_bandit_0_default_14"] = "not_greh_3", - ["sim_default_bandit_0_default_15"] = "bandit_4", - --["sim_default_bandit_0_default_16"] = "bandit_3", - - --["sim_default_bandit_1_default_0"] = "bandit_1", - ["sim_default_bandit_1_default_1"] = "bandit_2", - ["sim_default_bandit_1_default_2"] = "ecolog_1", - ["sim_default_bandit_1_default_3"] = "stalker_1", - ["sim_default_bandit_1_default_4"] = "dolg_1", - ["sim_default_bandit_1_default_5"] = "not_greh_1", - ["sim_default_bandit_1_default_6"] = "csky_1", - --["sim_default_bandit_1_default_7"] = "bandit_1", - --["sim_default_bandit_1_default_8"] = "bandit_2", - ["sim_default_bandit_1_default_9"] = "killer_1", - ["sim_default_bandit_1_default_10"] = "stalker_2", - ["sim_default_bandit_1_default_11"] = "dolg_1", - ["sim_default_bandit_1_default_12"] = "military_1", - --["sim_default_bandit_1_default_13"] = "bandit_2", - --["sim_default_bandit_1_default_14"] = "bandit_3", - ["sim_default_bandit_1_default_15"] = "dolg_3", - ["sim_default_bandit_1_default_16"] = "killer_3", - ["sim_default_bandit_1_default_17"] = "bandit_4", - - --["sim_default_bandit_2_default_0"] = "bandit_2", - --["sim_default_bandit_2_default_1"] = "bandit_3", - ["sim_default_bandit_2_default_2"] = "not_greh_3", - ["sim_default_bandit_2_default_3"] = "dolg_1", - --["sim_default_bandit_2_default_4"] = "bandit_1", - ["sim_default_bandit_2_default_5"] = "military_1", - ["sim_default_bandit_2_default_6"] = "freedom_1", - ["sim_default_bandit_2_default_7"] = "stalker_1", - --["sim_default_bandit_2_default_8"] = "bandit_1", - ["sim_default_bandit_2_default_9"] = "killer_1", - ["sim_default_bandit_2_default_10"] = "freedom_3", - ["sim_default_bandit_2_default_11"] = "dolg_1", - ["sim_default_bandit_2_default_12"] = "csky_1", - ["sim_default_bandit_2_default_13"] = "freedom_1", - ["sim_default_bandit_2_default_14"] = "stalker_2", - --["sim_default_bandit_2_default_15"] = "bandit_2", - --["sim_default_bandit_2_default_16"] = "bandit_3", - ["sim_default_bandit_2_default_17"] = "killer_3", - ["sim_default_bandit_2_default_18"] = "dolg_3", - ["sim_default_bandit_2_default_19"] = "csky_3", - ["sim_default_bandit_2_default_20"] = "military_3", - ["sim_default_bandit_2_default_21"] = "freedom_3", - ["sim_default_bandit_2_default_22"] = "stalker_3", - ["sim_default_bandit_2_default_23"] = "not_greh_3", - --["sim_default_bandit_2_default_24"] = "bandit_3", - ["sim_default_bandit_2_default_25"] = "bandit_4", - ["sim_default_bandit_2_default_26"] = "killer_3", - ["sim_default_bandit_2_default_27"] = "dolg_3", - ["sim_default_bandit_2_default_28"] = "freedom_3", - ["sim_default_bandit_2_default_29"] = "stalker_4", - ["sim_default_bandit_2_default_30"] = "bandit_4", - - --["sim_default_bandit_3_default_0"] = "bandit_2", - ["sim_default_bandit_3_default_1"] = "bandit_1", - ["sim_default_bandit_3_default_2"] = "stalker_1", - --["sim_default_bandit_3_default_3"] = "bandit_3", - ["sim_default_bandit_3_default_4"] = "dolg_3", - ["sim_default_bandit_3_default_5"] = "freedom_1", - ["sim_default_bandit_3_default_6"] = "csky_1", - ["sim_default_bandit_3_default_7"] = "military_1", - ["sim_default_bandit_3_default_8"] = "killer_3", - ["sim_default_bandit_3_default_9"] = "stalker_4", - --["sim_default_bandit_3_default_10"] = "bandit_2", - ["sim_default_bandit_3_default_11"] = "bandit_1", - ["sim_default_bandit_3_default_12"] = "killer_1", - ["sim_default_bandit_3_default_13"] = "dolg_1", - ["sim_default_bandit_3_default_14"] = "freedom_3", - ["sim_default_bandit_3_default_15"] = "csky_1", - ["sim_default_bandit_3_default_16"] = "dolg_3", - ["sim_default_bandit_3_default_17"] = "ecolog_3", - ["sim_default_bandit_3_default_18"] = "not_greh_3", - --["sim_default_bandit_3_default_19"] = "bandit_3", - ["sim_default_bandit_3_default_20"] = "bandit_4", - ["sim_default_bandit_3_default_21"] = "military_3", - ["sim_default_bandit_3_default_22"] = "dolg_3", - ["sim_default_bandit_3_default_23"] = "freedom_3", - ["sim_default_bandit_3_default_24"] = "csky_3", - ["sim_default_bandit_3_default_25"] = "killer_3", - ["sim_default_bandit_3_default_26"] = "stalker_3", - ["sim_default_bandit_3_default_27"] = "freedom_1", - ["sim_default_bandit_3_default_28"] = "dolg_1", - ["sim_default_bandit_3_default_29"] = "bandit_1", - ["sim_default_bandit_3_default_30"] = "stalker_2", - ["sim_default_bandit_3_default_31"] = "military_1", - ["sim_default_bandit_3_default_32"] = "bandit_4", - ["sim_default_bandit_3_default_33"] = "military_3", - - --["sim_default_bandit_4_default_0"] = "bandit_2", - ["sim_default_bandit_4_default_1"] = "stalker_1", - ["sim_default_bandit_4_default_2"] = "not_greh_1", - ["sim_default_bandit_4_default_3"] = "dolg_1", - --["sim_default_bandit_4_default_4"] = "bandit_1", - ["sim_default_bandit_4_default_5"] = "freedom_1", - ["sim_default_bandit_4_default_6"] = "killer_3", - ["sim_default_bandit_4_default_7"] = "csky_3", - --["sim_default_bandit_4_default_8"] = "bandit_2", - ["sim_default_bandit_4_default_9"] = "dolg_3", - --["sim_default_bandit_4_default_10"] = "bandit_3", - ["sim_default_bandit_4_default_11"] = "bandit_4", - ["sim_default_bandit_4_default_12"] = "freedom_3", - ["sim_default_bandit_4_default_13"] = "dolg_3", - ["sim_default_bandit_4_default_14"] = "ecolog_1", - ["sim_default_bandit_4_default_15"] = "killer_3", - ["sim_default_bandit_4_default_16"] = "killer_1", - ["sim_default_bandit_4_default_17"] = "bandit_4", - ["sim_default_bandit_4_default_18"] = "military_3", - --["sim_default_bandit_4_default_19"] = "bandit_3", - - ["sim_default_csky_0_default_0"] = "stalker_1", - ["sim_default_csky_0_default_1"] = "stalker_4", - --["sim_default_csky_0_default_2"] = "csky_1", - ["sim_default_csky_0_default_3"] = "ecolog_3", - ["sim_default_csky_0_default_4"] = "dolg_1", - - ["sim_default_csky_1_default_0"] = "not_greh_1", - ["sim_default_csky_1_default_1"] = "stalker_2", - --["sim_default_csky_1_default_2"] = "csky_1", - ["sim_default_csky_1_default_3"] = "ecolog_1", - ["sim_default_csky_1_default_4"] = "dolg_3", - ["sim_default_csky_1_default_5"] = "military_1", - ["sim_default_csky_1_default_6"] = "stalker_1", - ["sim_default_csky_1_default_7"] = "stalker_2", - ["sim_default_csky_1_default_8"] = "bandit_4", - --["sim_default_csky_1_default_9"] = "csky_3", - ["sim_default_csky_1_default_10"] = "ecolog_3", - ["sim_default_csky_1_default_11"] = "dolg_1", - ["sim_default_csky_1_default_12"] = "freedom_1", - ["sim_default_csky_1_default_13"] = "stalker_3", - --["sim_default_csky_1_default_14"] = "csky_1", - ["sim_default_csky_1_default_15"] = "ecolog_1", - ["sim_default_csky_1_default_16"] = "dolg_1", - ["sim_default_csky_1_default_17"] = "military_1", - ["sim_default_csky_1_default_18"] = "freedom_1", - ["sim_default_csky_1_default_19"] = "killer_1", - - ["sim_default_csky_2_default_0"] = "stalker_1", - ["sim_default_csky_2_default_1"] = "stalker_2", - --["sim_default_csky_2_default_2"] = "csky_1", - --["sim_default_csky_2_default_3"] = "csky_3", - ["sim_default_csky_2_default_4"] = "ecolog_3", - ["sim_default_csky_2_default_5"] = "dolg_3", - ["sim_default_csky_2_default_6"] = "military_3", - ["sim_default_csky_2_default_7"] = "bandit_3", - ["sim_default_csky_2_default_8"] = "killer_1", - ["sim_default_csky_2_default_9"] = "freedom_1", - ["sim_default_csky_2_default_10"] = "not_greh_1", - ["sim_default_csky_2_default_11"] = "stalker_3", - --["sim_default_csky_2_default_12"] = "csky_3", - ["sim_default_csky_2_default_13"] = "killer_3", - ["sim_default_csky_2_default_14"] = "ecolog_1", - ["sim_default_csky_2_default_15"] = "military_1", - --["sim_default_csky_2_default_16"] = "csky_1", - ["sim_default_csky_2_default_17"] = "freedom_1", - ["sim_default_csky_2_default_18"] = "dolg_1", - ["sim_default_csky_2_default_19"] = "ecolog_1", - - --["sim_default_csky_3_default_0"] = "csky_3", - ["sim_default_csky_3_default_1"] = "stalker_4", - --["sim_default_csky_3_default_2"] = "csky_3", - ["sim_default_csky_3_default_3"] = "ecolog_3", - ["sim_default_csky_3_default_4"] = "dolg_3", - ["sim_default_csky_3_default_5"] = "military_3", - ["sim_default_csky_3_default_6"] = "bandit_4", - ["sim_default_csky_3_default_7"] = "killer_3", - ["sim_default_csky_3_default_8"] = "freedom_3", - ["sim_default_csky_3_default_9"] = "stalker_3", - --["sim_default_csky_3_default_10"] = "csky_3", - ["sim_default_csky_3_default_11"] = "not_greh_3", - ["sim_default_csky_3_default_12"] = "ecolog_3", - ["sim_default_csky_3_default_13"] = "dolg_3", - ["sim_default_csky_3_default_14"] = "military_3", - ["sim_default_csky_3_default_15"] = "killer_3", - ["sim_default_csky_3_default_16"] = "freedom_3", - ["sim_default_csky_3_default_17"] = "dolg_3", - - ["sim_default_csky_4_default_0"] = "stalker_3", - ["sim_default_csky_4_default_1"] = "stalker_4", - --["sim_default_csky_4_default_2"] = "csky_3", - ["sim_default_csky_4_default_3"] = "ecolog_3", - ["sim_default_csky_4_default_4"] = "not_greh_3", - ["sim_default_csky_4_default_5"] = "military_3", - ["sim_default_csky_4_default_6"] = "killer_3", - ["sim_default_csky_4_default_7"] = "freedom_3", - ["sim_default_csky_4_default_8"] = "dolg_3", - --["sim_default_csky_4_default_9"] = "csky_3", - - ["sim_default_duty_0_default_0"] = "stalker_1", - ["sim_default_duty_0_default_1"] = "stalker_2", - --["sim_default_duty_0_default_2"] = "dolg_1", - ["sim_default_duty_0_default_3"] = "military_1", - ["sim_default_duty_0_default_4"] = "killer_1", - ["sim_default_duty_0_default_5"] = "csky_1", - ["sim_default_duty_0_default_6"] = "not_greh_1", - ["sim_default_duty_0_default_7"] = "ecolog_1", - ["sim_default_duty_0_default_8"] = "military_1", - ["sim_default_duty_0_default_9"] = "csky_1", - --["sim_default_duty_0_default_10"] = "dolg_1", - ["sim_default_duty_0_default_11"] = "military_1", - ["sim_default_duty_0_default_12"] = "killer_1", - ["sim_default_duty_0_default_13"] = "csky_1", - ["sim_default_duty_0_default_14"] = "freedom_1", - ["sim_default_duty_0_default_15"] = "military_1", - --["sim_default_duty_0_default_16"] = "dolg_1", - ["sim_default_duty_0_default_17"] = "freedom_1", - ["sim_default_duty_0_default_18"] = "not_greh_1", - - ["sim_default_duty_1_default_0"] = "stalker_1", - ["sim_default_duty_1_default_1"] = "stalker_2", - --["sim_default_duty_1_default_2"] = "dolg_1", - ["sim_default_duty_1_default_3"] = "not_greh_1", - ["sim_default_duty_1_default_4"] = "killer_1", - ["sim_default_duty_1_default_5"] = "csky_1", - ["sim_default_duty_1_default_6"] = "freedom_1", - ["sim_default_duty_1_default_7"] = "ecolog_1", - ["sim_default_duty_1_default_8"] = "military_1", - ["sim_default_duty_1_default_9"] = "csky_1", - --["sim_default_duty_1_default_10"] = "dolg_1", - ["sim_default_duty_1_default_11"] = "stalker_1", - ["sim_default_duty_1_default_12"] = "stalker_2", - ["sim_default_duty_1_default_13"] = "military_1", - ["sim_default_duty_1_default_14"] = "killer_1", - --["sim_default_duty_1_default_15"] = "dolg_1", - ["sim_default_duty_1_default_16"] = "freedom_1", - ["sim_default_duty_1_default_17"] = "bandit_1", - ["sim_default_duty_1_default_18"] = "military_1", - ["sim_default_duty_1_default_19"] = "killer_1", - ["sim_default_duty_1_default_20"] = "csky_1", - --["sim_default_duty_1_default_21"] = "dolg_1", - ["sim_default_duty_1_default_22"] = "stalker_1", - ["sim_default_duty_1_default_23"] = "stalker_2", - ["sim_default_duty_1_default_24"] = "military_1", - ["sim_default_duty_1_default_25"] = "killer_1", - ["sim_default_duty_1_default_26"] = "csky_1", - ["sim_default_duty_1_default_27"] = "freedom_1", - ["sim_default_duty_1_default_28"] = "ecolog_1", - ["sim_default_duty_1_default_29"] = "military_1", - --["sim_default_duty_1_default_30"] = "dolg_1", - ["sim_default_duty_1_default_31"] = "bandit_2", - - ["sim_default_duty_2_default_0"] = "stalker_1", - ["sim_default_duty_2_default_1"] = "stalker_2", - --["sim_default_duty_2_default_2"] = "dolg_1", - ["sim_default_duty_2_default_3"] = "not_greh_1", - ["sim_default_duty_2_default_4"] = "killer_1", - ["sim_default_duty_2_default_5"] = "csky_1", - ["sim_default_duty_2_default_6"] = "freedom_1", - ["sim_default_duty_2_default_7"] = "ecolog_1", - ["sim_default_duty_2_default_8"] = "military_1", - ["sim_default_duty_2_default_9"] = "csky_1", - ["sim_default_duty_2_default_10"] = "stalker_1", - ["sim_default_duty_2_default_11"] = "stalker_2", - --["sim_default_duty_2_default_12"] = "dolg_1", - ["sim_default_duty_2_default_13"] = "military_1", - ["sim_default_duty_2_default_14"] = "killer_1", - ["sim_default_duty_2_default_15"] = "ecolog_1", - ["sim_default_duty_2_default_16"] = "freedom_1", - ["sim_default_duty_2_default_17"] = "killer_1", - ["sim_default_duty_2_default_18"] = "military_1", - ["sim_default_duty_2_default_19"] = "ecolog_1", - ["sim_default_duty_2_default_20"] = "bandit_2", - ["sim_default_duty_2_default_21"] = "stalker_2", - --["sim_default_duty_2_default_22"] = "dolg_1", - ["sim_default_duty_2_default_23"] = "military_1", - ["sim_default_duty_2_default_24"] = "killer_1", - ["sim_default_duty_2_default_25"] = "csky_1", - ["sim_default_duty_2_default_26"] = "freedom_1", - ["sim_default_duty_2_default_27"] = "ecolog_1", - ["sim_default_duty_2_default_28"] = "military_1", - ["sim_default_duty_2_default_29"] = "csky_1", - ["sim_default_duty_2_default_30"] = "stalker_1", - ["sim_default_duty_2_default_31"] = "stalker_2", - --["sim_default_duty_2_default_32"] = "dolg_1", - ["sim_default_duty_2_default_33"] = "freedom_1", - ["sim_default_duty_2_default_34"] = "killer_1", - ["sim_default_duty_2_default_35"] = "csky_1", - --["sim_default_duty_2_default_36"] = "dolg_1", - - ["sim_default_duty_3_default_0"] = "not_greh_1", - ["sim_default_duty_3_default_1"] = "stalker_2", - --["sim_default_duty_3_default_2"] = "dolg_1", - ["sim_default_duty_3_default_3"] = "military_1", - ["sim_default_duty_3_default_4"] = "killer_1", - ["sim_default_duty_3_default_5"] = "csky_1", - ["sim_default_duty_3_default_6"] = "freedom_1", - ["sim_default_duty_3_default_7"] = "ecolog_1", - ["sim_default_duty_3_default_8"] = "stalker_1", - ["sim_default_duty_3_default_9"] = "stalker_2", - --["sim_default_duty_3_default_10"] = "dolg_1", - ["sim_default_duty_3_default_11"] = "military_1", - ["sim_default_duty_3_default_12"] = "killer_1", - ["sim_default_duty_3_default_13"] = "csky_1", - ["sim_default_duty_3_default_14"] = "freedom_1", - ["sim_default_duty_3_default_15"] = "ecolog_1", - ["sim_default_duty_3_default_16"] = "stalker_1", - ["sim_default_duty_3_default_17"] = "stalker_2", - --["sim_default_duty_3_default_18"] = "dolg_1", - ["sim_default_duty_3_default_19"] = "military_1", - ["sim_default_duty_3_default_20"] = "killer_1", - ["sim_default_duty_3_default_21"] = "csky_1", - ["sim_default_duty_3_default_22"] = "freedom_1", - ["sim_default_duty_3_default_23"] = "ecolog_1", - ["sim_default_duty_3_default_24"] = "stalker_1", - ["sim_default_duty_3_default_25"] = "stalker_2", - --["sim_default_duty_3_default_26"] = "dolg_1", - ["sim_default_duty_3_default_27"] = "csky_1", - ["sim_default_duty_3_default_28"] = "killer_1", - ["sim_default_duty_3_default_29"] = "military_3", - --["sim_default_duty_3_default_30"] = "dolg_3", - - ["sim_default_duty_4_default_0"] = "csky_1", - ["sim_default_duty_4_default_1"] = "killer_1", - --["sim_default_duty_4_default_2"] = "dolg_1", - ["sim_default_duty_4_default_3"] = "military_1", - ["sim_default_duty_4_default_4"] = "killer_1", - ["sim_default_duty_4_default_5"] = "freedom_1", - ["sim_default_duty_4_default_6"] = "ecolog_1", - ["sim_default_duty_4_default_7"] = "military_1", - ["sim_default_duty_4_default_8"] = "freedom_3", - --["sim_default_duty_4_default_9"] = "dolg_3", - ["sim_default_duty_4_default_10"] = "stalker_3", - ["sim_default_duty_4_default_11"] = "stalker_4", - ["sim_default_duty_4_default_12"] = "csky_3", - ["sim_default_duty_4_default_13"] = "ecolog_3", - --["sim_default_duty_4_default_14"] = "dolg_3", - ["sim_default_duty_4_default_15"] = "killer_3", - ["sim_default_duty_4_default_16"] = "military_3", - - --["sim_default_ecolog_0_default_0"] = "stalker_3", - ["sim_default_ecolog_0_default_1"] = "stalker_4", - ["sim_default_ecolog_0_default_2"] = "dolg_3", - ["sim_default_ecolog_0_default_3"] = "freedom_3", - ["sim_default_ecolog_0_default_4"] = "killer_3", - - ["sim_default_ecolog_01_default_0"] = "stalker_3", - ["sim_default_ecolog_01_default_1"] = "dolg_3", - ["sim_default_ecolog_01_default_2"] = "not_greh_3", - ["sim_default_ecolog_01_default_3"] = "freedom_3", - ["sim_default_ecolog_01_default_4"] = "csky_3", - --["sim_default_ecolog_01_default_5"] = "ecolog_3", - - ["sim_default_ecolog_1_default_0"] = "stalker_4", - ["sim_default_ecolog_1_default_1"] = "dolg_3", - ["sim_default_ecolog_1_default_2"] = "military_3", - ["sim_default_ecolog_1_default_3"] = "freedom_3", - ["sim_default_ecolog_1_default_4"] = "csky_3", - --["sim_default_ecolog_1_default_5"] = "ecolog_3", - - --["sim_default_ecolog_2_default_0"] = "stalker_3", - ["sim_default_ecolog_2_default_1"] = "stalker_4", - ["sim_default_ecolog_2_default_2"] = "dolg_3", - ["sim_default_ecolog_2_default_3"] = "military_3", - ["sim_default_ecolog_2_default_4"] = "freedom_3", - ["sim_default_ecolog_2_default_5"] = "bandit_3", - ["sim_default_ecolog_2_default_6"] = "killer_3", - ["sim_default_ecolog_2_default_7"] = "csky_3", - ["sim_default_ecolog_2_default_8"] = "ecolog_3", - --["sim_default_ecolog_2_default_9"] = "stalker_3", - ["sim_default_ecolog_2_default_10"] = "not_greh_3", - ["sim_default_ecolog_2_default_11"] = "dolg_3", - ["sim_default_ecolog_2_default_12"] = "military_3", - ["sim_default_ecolog_2_default_13"] = "freedom_3", - ["sim_default_ecolog_2_default_14"] = "csky_3", - ["sim_default_ecolog_2_default_15"] = "killer_3", - ["sim_default_ecolog_2_default_16"] = "ecolog_3", - --["sim_default_ecolog_2_default_17"] = "stalker_3", - ["sim_default_ecolog_2_default_18"] = "stalker_4", - ["sim_default_ecolog_2_default_19"] = "dolg_3", - ["sim_default_ecolog_2_default_20"] = "military_3", - ["sim_default_ecolog_2_default_21"] = "freedom_3", - ["sim_default_ecolog_2_default_22"] = "bandit_4", - ["sim_default_ecolog_2_default_23"] = "killer_3", - ["sim_default_ecolog_2_default_24"] = "ecolog_3", - --["sim_default_ecolog_2_default_25"] = "stalker_3", - ["sim_default_ecolog_2_default_26"] = "not_greh_3", - ["sim_default_ecolog_2_default_27"] = "dolg_3", - ["sim_default_ecolog_2_default_28"] = "military_3", - ["sim_default_ecolog_2_default_29"] = "freedom_3", - ["sim_default_ecolog_2_default_30"] = "csky_3", - ["sim_default_ecolog_2_default_31"] = "killer_3", - ["sim_default_ecolog_2_default_32"] = "ecolog_3", - --["sim_default_ecolog_2_default_33"] = "stalker_3", - ["sim_default_ecolog_2_default_34"] = "stalker_4", - ["sim_default_ecolog_2_default_35"] = "dolg_3", - ["sim_default_ecolog_2_default_36"] = "military_3", - ["sim_default_ecolog_2_default_37"] = "freedom_3", - ["sim_default_ecolog_2_default_38"] = "csky_3", - - ["sim_default_ecolog_3_default_0"] = "dolg_3", - ["sim_default_ecolog_3_default_1"] = "military_3", - --["sim_default_ecolog_3_default_2"] = "killer_3", - ["sim_default_ecolog_3_default_3"] = "csky_3", - --["sim_default_ecolog_3_default_4"] = "stalker_3", - ["sim_default_ecolog_3_default_5"] = "stalker_4", - ["sim_default_ecolog_3_default_6"] = "ecolog_3", - ["sim_default_ecolog_3_default_7"] = "freedom_3", - ["sim_default_ecolog_3_default_8"] = "dolg_3", - - ["sim_default_ecolog_4_default_0"] = "dolg_3", - ["sim_default_ecolog_4_default_1"] = "military_3", - --["sim_default_ecolog_4_default_2"] = "killer_3", - ["sim_default_ecolog_4_default_3"] = "freedom_3", - ["sim_default_ecolog_4_default_4"] = "stalker_3", - ["sim_default_ecolog_4_default_5"] = "stalker_4", - ["sim_default_ecolog_4_default_6"] = "ecolog_3", - ["sim_default_ecolog_4_default_7"] = "csky_3", - - ["sim_default_ecolog_5_default_0"] = "csky_3", - ["sim_default_ecolog_5_default_1"] = "ecolog_3", - ["sim_default_ecolog_5_default_2"] = "dolg_3", - ["sim_default_ecolog_5_default_3"] = "military_3", - - ["sim_default_freedom_0_default_0"] = "bandit_3", - ["sim_default_freedom_0_default_1"] = "not_greh_3", - --["sim_default_freedom_0_default_2"] = "freedom_3", - --["sim_default_freedom_0_default_3"] = "freedom_1", - ["sim_default_freedom_0_default_4"] = "dolg_1", - ["sim_default_freedom_0_default_5"] = "military_1", - ["sim_default_freedom_0_default_6"] = "ecolog_3", - ["sim_default_freedom_0_default_7"] = "bandit_1", - ["sim_default_freedom_0_default_8"] = "bandit_2", - ["sim_default_freedom_0_default_9"] = "killer_1", - ["sim_default_freedom_0_default_10"] = "csky_1", - ["sim_default_freedom_0_default_11"] = "stalker_1", - ["sim_default_freedom_0_default_12"] = "stalker_2", - --["sim_default_freedom_0_default_13"] = "freedom_1", - ["sim_default_freedom_0_default_14"] = "killer_1", - - ["sim_default_freedom_1_default_0"] = "bandit_4", - --["sim_default_freedom_1_default_1"] = "freedom_3", - ["sim_default_freedom_1_default_2"] = "ecolog_1", - ["sim_default_freedom_1_default_3"] = "dolg_1", - ["sim_default_freedom_1_default_4"] = "dolg_3", - ["sim_default_freedom_1_default_5"] = "bandit_3", - ["sim_default_freedom_1_default_6"] = "csky_3", - ["sim_default_freedom_1_default_7"] = "stalker_3", - ["sim_default_freedom_1_default_8"] = "stalker_4", - ["sim_default_freedom_1_default_9"] = "killer_3", - ["sim_default_freedom_1_default_10"] = "bandit_3", - --["sim_default_freedom_1_default_11"] = "freedom_1", - ["sim_default_freedom_1_default_12"] = "ecolog_1", - ["sim_default_freedom_1_default_13"] = "csky_1", - ["sim_default_freedom_1_default_14"] = "dolg_1", - ["sim_default_freedom_1_default_15"] = "stalker_1", - --["sim_default_freedom_1_default_16"] = "freedom_1", - ["sim_default_freedom_1_default_17"] = "killer_1", - ["sim_default_freedom_1_default_18"] = "bandit_1", - ["sim_default_freedom_1_default_19"] = "bandit_2", - --["sim_default_freedom_1_default_20"] = "freedom_1", - ["sim_default_freedom_1_default_21"] = "military_1", - ["sim_default_freedom_1_default_22"] = "dolg_3", - ["sim_default_freedom_1_default_23"] = "bandit_3", - ["sim_default_freedom_1_default_24"] = "killer_3", - ["sim_default_freedom_1_default_25"] = "not_greh_3", - --["sim_default_freedom_1_default_26"] = "freedom_3", - ["sim_default_freedom_1_default_27"] = "stalker_1", - ["sim_default_freedom_1_default_28"] = "stalker_2", - ["sim_default_freedom_1_default_29"] = "military_1", - ["sim_default_freedom_1_default_30"] = "dolg_1", - ["sim_default_freedom_1_default_31"] = "killer_1", - - --["sim_default_freedom_2_default_0"] = "freedom_3", - ["sim_default_freedom_2_default_1"] = "bandit_2", - ["sim_default_freedom_2_default_2"] = "stalker_2", - ["sim_default_freedom_2_default_3"] = "bandit_3", - ["sim_default_freedom_2_default_4"] = "dolg_3", - ["sim_default_freedom_2_default_5"] = "csky_3", - ["sim_default_freedom_2_default_6"] = "military_3", - ["sim_default_freedom_2_default_7"] = "killer_3", - --["sim_default_freedom_2_default_8"] = "freedom_3", - ["sim_default_freedom_2_default_9"] = "stalker_4", - ["sim_default_freedom_2_default_10"] = "stalker_1", - --["sim_default_freedom_2_default_11"] = "freedom_1", - ["sim_default_freedom_2_default_12"] = "ecolog_1", - ["sim_default_freedom_2_default_13"] = "bandit_1", - ["sim_default_freedom_2_default_14"] = "dolg_1", - ["sim_default_freedom_2_default_15"] = "military_1", - ["sim_default_freedom_2_default_16"] = "killer_1", - --["sim_default_freedom_2_default_17"] = "freedom_1", - ["sim_default_freedom_2_default_18"] = "dolg_1", - ["sim_default_freedom_2_default_19"] = "ecolog_3", - ["sim_default_freedom_2_default_20"] = "csky_1", - ["sim_default_freedom_2_default_21"] = "bandit_4", - ["sim_default_freedom_2_default_22"] = "bandit_3", - --["sim_default_freedom_2_default_23"] = "freedom_3", - ["sim_default_freedom_2_default_24"] = "stalker_1", - ["sim_default_freedom_2_default_25"] = "not_greh_1", - ["sim_default_freedom_2_default_26"] = "dolg_1", - ["sim_default_freedom_2_default_27"] = "killer_1", - --["sim_default_freedom_2_default_28"] = "freedom_1", - ["sim_default_freedom_2_default_29"] = "csky_1", - - --["sim_default_freedom_3_default_0"] = "freedom_3", - ["sim_default_freedom_3_default_1"] = "killer_3", - --["sim_default_freedom_3_default_2"] = "freedom_1", - ["sim_default_freedom_3_default_3"] = "bandit_1", - ["sim_default_freedom_3_default_4"] = "stalker_3", - ["sim_default_freedom_3_default_5"] = "stalker_4", - ["sim_default_freedom_3_default_6"] = "dolg_3", - ["sim_default_freedom_3_default_7"] = "csky_3", - ["sim_default_freedom_3_default_8"] = "ecolog_3", - ["sim_default_freedom_3_default_9"] = "bandit_3", - ["sim_default_freedom_3_default_10"] = "bandit_4", - --["sim_default_freedom_3_default_11"] = "freedom_3", - ["sim_default_freedom_3_default_12"] = "military_3", - ["sim_default_freedom_3_default_13"] = "dolg_3", - --["sim_default_freedom_3_default_14"] = "freedom_3", - - --["sim_default_freedom_4_default_0"] = "freedom_3", - --["sim_default_freedom_4_default_1"] = "freedom_1", - ["sim_default_freedom_4_default_2"] = "killer_3", - ["sim_default_freedom_4_default_3"] = "bandit_3", - ["sim_default_freedom_4_default_4"] = "bandit_4", - ["sim_default_freedom_4_default_5"] = "stalker_3", - ["sim_default_freedom_4_default_6"] = "not_greh_3", - ["sim_default_freedom_4_default_7"] = "dolg_3", - ["sim_default_freedom_4_default_8"] = "ecolog_3", - ["sim_default_freedom_4_default_9"] = "csky_3", - ["sim_default_freedom_4_default_10"] = "military_3", - --["sim_default_freedom_4_default_11"] = "freedom_3", - ["sim_default_freedom_4_default_12"] = "killer_3", - ["sim_default_freedom_4_default_13"] = "bandit_3", - ["sim_default_freedom_4_default_14"] = "stalker_4", - ["sim_default_freedom_4_default_15"] = "dolg_3", - ["sim_default_freedom_4_default_16"] = "military_3", - --["sim_default_freedom_4_default_17"] = "freedom_3", - - --["sim_default_greh_0_default_0"] = "greh_1", - ["sim_default_greh_0_default_1"] = "greh_dolg_1", - ["sim_default_greh_0_default_2"] = "greh_killer_1", - --["sim_default_greh_0_default_3"] = "greh_1", - ["sim_default_greh_0_default_4"] = "greh_dolg_1", - ["sim_default_greh_0_default_5"] = "greh_killer_1", - --["sim_default_greh_0_default_6"] = "greh_1", - ["sim_default_greh_0_default_7"] = "greh_dolg_1", - ["sim_default_greh_0_default_8"] = "greh_killer_1", - --["sim_default_greh_0_default_9"] = "greh_1", - ["sim_default_greh_0_default_10"] = "greh_dolg_1", - ["sim_default_greh_0_default_11"] = "greh_killer_1", - --["sim_default_greh_0_default_12"] = "greh_1", - ["sim_default_greh_0_default_13"] = "greh_dolg_1", - ["sim_default_greh_0_default_14"] = "greh_killer_1", - --["sim_default_greh_0_default_15"] = "greh_1", - ["sim_default_greh_0_default_16"] = "greh_dolg_1", - ["sim_default_greh_0_default_17"] = "greh_killer_1", - --["sim_default_greh_0_default_18"] = "greh_1", - ["sim_default_greh_0_default_19"] = "greh_dolg_1", - ["sim_default_greh_0_default_20"] = "greh_killer_1", - --["sim_default_greh_0_default_21"] = "greh_1", - - --["sim_default_greh_1_default_0"] = "greh_1", - ["sim_default_greh_1_default_1"] = "greh_dolg_1", - ["sim_default_greh_1_default_2"] = "greh_killer_1", - --["sim_default_greh_1_default_3"] = "greh_1", - ["sim_default_greh_1_default_4"] = "greh_dolg_1", - ["sim_default_greh_1_default_5"] = "greh_killer_1", - --["sim_default_greh_1_default_6"] = "greh_1", - ["sim_default_greh_1_default_7"] = "greh_dolg_1", - ["sim_default_greh_1_default_8"] = "greh_killer_1", - --["sim_default_greh_1_default_9"] = "greh_1", - - --["sim_default_greh_2_default_0"] = "greh_1", - ["sim_default_greh_2_default_1"] = "greh_dolg_1", - ["sim_default_greh_2_default_2"] = "greh_killer_1", - --["sim_default_greh_2_default_3"] = "greh_1", - ["sim_default_greh_2_default_4"] = "greh_dolg_1", - ["sim_default_greh_2_default_5"] = "greh_killer_1", - --["sim_default_greh_2_default_6"] = "greh_3", - --["sim_default_greh_2_default_7"] = "greh_3", - --["sim_default_greh_2_default_8"] = "greh_3", - --["sim_default_greh_2_default_9"] = "greh_3", - --["sim_default_greh_2_default_10"] = "greh_3", - ["sim_default_greh_2_default_11"] = "greh_stalker_3", - ["sim_default_greh_2_default_12"] = "greh_stalker_3", - ["sim_default_greh_2_default_13"] = "greh_stalker_3", - ["sim_default_greh_2_default_14"] = "greh_stalker_3", - --["sim_default_greh_2_default_15"] = "greh_1", - ["sim_default_greh_2_default_16"] = "greh_dolg_1", - ["sim_default_greh_2_default_17"] = "greh_killer_1", - --["sim_default_greh_2_default_18"] = "greh_1", - ["sim_default_greh_2_default_19"] = "greh_dolg_1", - ["sim_default_greh_2_default_20"] = "greh_killer_1", - - --["sim_default_greh_3_default_0"] = "greh_3", - ["sim_default_greh_3_default_1"] = "greh_stalker_3", - --["sim_default_greh_3_default_2"] = "greh_3", - ["sim_default_greh_4_default_0"] = "greh_stalker_3", - --["sim_default_greh_4_default_1"] = "greh_3", - - --["sim_default_killer_0_default_0"] = "killer_3", - ["sim_default_killer_0_default_1"] = "stalker_3", - ["sim_default_killer_0_default_2"] = "stalker_4", - ["sim_default_killer_0_default_3"] = "dolg_3", - ["sim_default_killer_0_default_4"] = "military_3", - ["sim_default_killer_0_default_5"] = "freedom_3", - ["sim_default_killer_0_default_6"] = "csky_3", - ["sim_default_killer_0_default_7"] = "ecolog_3", - ["sim_default_killer_0_default_8"] = "bandit_3", - ["sim_default_killer_0_default_9"] = "not_greh_3", - --["sim_default_killer_0_default_10"] = "killer_3", - ["sim_default_killer_0_default_11"] = "dolg_3", - ["sim_default_killer_0_default_12"] = "bandit_4", - - --["sim_default_killer_1_default_0"] = "killer_3", - ["sim_default_killer_1_default_1"] = "stalker_3", - ["sim_default_killer_1_default_2"] = "stalker_4", - ["sim_default_killer_1_default_3"] = "dolg_3", - ["sim_default_killer_1_default_4"] = "military_3", - ["sim_default_killer_1_default_5"] = "freedom_3", - ["sim_default_killer_1_default_6"] = "csky_3", - ["sim_default_killer_1_default_7"] = "ecolog_3", - ["sim_default_killer_1_default_8"] = "bandit_4", - ["sim_default_killer_1_default_9"] = "not_greh_3", - --["sim_default_killer_1_default_10"] = "killer_3", - ["sim_default_killer_1_default_11"] = "stalker_3", - ["sim_default_killer_1_default_12"] = "stalker_4", - ["sim_default_killer_1_default_13"] = "dolg_3", - ["sim_default_killer_1_default_14"] = "military_3", - ["sim_default_killer_1_default_15"] = "freedom_3", - ["sim_default_killer_1_default_16"] = "csky_3", - ["sim_default_killer_1_default_17"] = "bandit_3", - ["sim_default_killer_1_default_18"] = "not_greh_3", - --["sim_default_killer_1_default_19"] = "killer_3", - ["sim_default_killer_1_default_20"] = "ecolog_3", - ["sim_default_killer_1_default_21"] = "freedom_3", - ["sim_default_killer_1_default_22"] = "military_3", - - --["sim_default_killer_2_default_0"] = "killer_3", - ["sim_default_killer_2_default_1"] = "stalker_3", - ["sim_default_killer_2_default_2"] = "stalker_4", - ["sim_default_killer_2_default_3"] = "dolg_3", - ["sim_default_killer_2_default_4"] = "military_3", - ["sim_default_killer_2_default_5"] = "freedom_3", - ["sim_default_killer_2_default_6"] = "csky_3", - ["sim_default_killer_2_default_7"] = "ecolog_3", - ["sim_default_killer_2_default_8"] = "bandit_4", - ["sim_default_killer_2_default_9"] = "not_greh_3", - --["sim_default_killer_2_default_10"] = "killer_3", - ["sim_default_killer_2_default_11"] = "stalker_3", - ["sim_default_killer_2_default_12"] = "stalker_4", - ["sim_default_killer_2_default_13"] = "dolg_3", - ["sim_default_killer_2_default_14"] = "military_3", - ["sim_default_killer_2_default_15"] = "freedom_3", - ["sim_default_killer_2_default_16"] = "csky_3", - ["sim_default_killer_2_default_17"] = "ecolog_3", - ["sim_default_killer_2_default_18"] = "bandit_3", - --["sim_default_killer_2_default_19"] = "killer_3", - ["sim_default_killer_2_default_20"] = "dolg_3", - ["sim_default_killer_2_default_21"] = "freedom_3", - - --["sim_default_killer_3_default_0"] = "killer_3", - ["sim_default_killer_3_default_1"] = "dolg_3", - ["sim_default_killer_3_default_2"] = "military_3", - ["sim_default_killer_3_default_3"] = "freedom_3", - ["sim_default_killer_3_default_4"] = "csky_3", - ["sim_default_killer_3_default_5"] = "bandit_4", - ["sim_default_killer_3_default_6"] = "not_greh_3", - - --["sim_default_killer_4_default_0"] = "killer_3", - ["sim_default_killer_4_default_1"] = "stalker_3", - ["sim_default_killer_4_default_2"] = "stalker_4", - ["sim_default_killer_4_default_3"] = "dolg_3", - ["sim_default_killer_4_default_4"] = "military_3", - ["sim_default_killer_4_default_5"] = "freedom_3", - ["sim_default_killer_4_default_6"] = "csky_3", - ["sim_default_killer_4_default_7"] = "ecolog_3", - ["sim_default_killer_4_default_8"] = "bandit_3", - ["sim_default_killer_4_default_9"] = "not_greh_3", - --["sim_default_killer_4_default_10"] = "killer_3", - ["sim_default_killer_4_default_11"] = "stalker_3", - ["sim_default_killer_4_default_12"] = "stalker_4", - ["sim_default_killer_4_default_13"] = "dolg_3", - ["sim_default_killer_4_default_14"] = "military_3", - ["sim_default_killer_4_default_15"] = "freedom_3", - ["sim_default_killer_4_default_16"] = "bandit_4", - - --["sim_default_killer_5_default_0"] = "killer_3", - ["sim_default_killer_5_default_1"] = "stalker_3", - ["sim_default_killer_5_default_2"] = "stalker_4", - ["sim_default_killer_5_default_3"] = "dolg_3", - ["sim_default_killer_5_default_4"] = "military_3", - ["sim_default_killer_5_default_5"] = "freedom_3", - ["sim_default_killer_5_default_6"] = "csky_3", - ["sim_default_killer_5_default_7"] = "bandit_3", - - --["sim_default_renegade_0_default_0"] = "bandit_1", - --["sim_default_renegade_0_default_1"] = "bandit_2", - ["sim_default_renegade_0_default_2"] = "killer_1", - ["sim_default_renegade_0_default_3"] = "stalker_1", - ["sim_default_renegade_0_default_4"] = "dolg_1", - ["sim_default_renegade_0_default_5"] = "military_1", - ["sim_default_renegade_0_default_6"] = "ecolog_1", - ["sim_default_renegade_0_default_7"] = "freedom_1", - ["sim_default_renegade_0_default_8"] = "csky_1", - ["sim_default_renegade_0_default_9"] = "not_greh_1", - --["sim_default_renegade_0_default_10"] = "bandit_2", - ["sim_default_renegade_0_default_11"] = "bandit_1", - ["sim_default_renegade_0_default_12"] = "killer_1", - ["sim_default_renegade_0_default_13"] = "stalker_2", - ["sim_default_renegade_0_default_14"] = "freedom_1", - ["sim_default_renegade_0_default_15"] = "csky_1", - ["sim_default_renegade_0_default_16"] = "not_greh_1", - --["sim_default_renegade_0_default_17"] = "bandit_2", - ["sim_default_renegade_0_default_18"] = "bandit_1", - ["sim_default_renegade_0_default_19"] = "killer_1", - ["sim_default_renegade_0_default_20"] = "dolg_1", - ["sim_default_renegade_0_default_21"] = "military_1", - ["sim_default_renegade_0_default_22"] = "not_greh_1", - --["sim_default_renegade_0_default_23"] = "bandit_2", - - --["sim_default_renegade_1_default_0"] = "bandit_1", - --["sim_default_renegade_1_default_1"] = "bandit_2", - ["sim_default_renegade_1_default_2"] = "killer_3", - ["sim_default_renegade_1_default_3"] = "stalker_3", - ["sim_default_renegade_1_default_4"] = "dolg_1", - ["sim_default_renegade_1_default_5"] = "military_1", - ["sim_default_renegade_1_default_6"] = "ecolog_1", - ["sim_default_renegade_1_default_7"] = "freedom_1", - ["sim_default_renegade_1_default_8"] = "not_greh_1", - --["sim_default_renegade_1_default_9"] = "bandit_1", - --["sim_default_renegade_1_default_10"] = "bandit_2", - ["sim_default_renegade_1_default_11"] = "killer_1", - ["sim_default_renegade_1_default_12"] = "stalker_2", - ["sim_default_renegade_1_default_13"] = "dolg_1", - ["sim_default_renegade_1_default_14"] = "military_1", - ["sim_default_renegade_1_default_15"] = "csky_1", - ["sim_default_renegade_1_default_16"] = "not_greh_1", - ["sim_default_renegade_1_default_17"] = "bandit_1", - --["sim_default_renegade_1_default_18"] = "bandit_2", - ["sim_default_renegade_1_default_19"] = "not_greh_3", - ["sim_default_renegade_1_default_20"] = "freedom_1", - - --["sim_default_renegade_2_default_0"] = "bandit_3", - ["sim_default_renegade_2_default_1"] = "bandit_4", - ["sim_default_renegade_2_default_2"] = "killer_3", - ["sim_default_renegade_2_default_3"] = "csky_1", - ["sim_default_renegade_2_default_4"] = "military_1", - ["sim_default_renegade_2_default_5"] = "freedom_1", - ["sim_default_renegade_2_default_6"] = "not_greh_1", - ["sim_default_renegade_2_default_7"] = "dolg_3", - --["sim_default_renegade_2_default_8"] = "bandit_3", - ["sim_default_renegade_2_default_9"] = "not_greh_3", - - --["sim_default_stalker_0_default_0"] = "stalker_1", - ["sim_default_stalker_0_default_1"] = "stalker_2", - ["sim_default_stalker_0_default_2"] = "bandit_1", - ["sim_default_stalker_0_default_3"] = "dolg_1", - ["sim_default_stalker_0_default_4"] = "military_1", - ["sim_default_stalker_0_default_5"] = "killer_1", - ["sim_default_stalker_0_default_6"] = "freedom_1", - ["sim_default_stalker_0_default_7"] = "ecolog_1", - ["sim_default_stalker_0_default_8"] = "csky_1", - ["sim_default_stalker_0_default_9"] = "not_greh_1", - ["sim_default_stalker_0_default_10"] = "stalker_2", - ["sim_default_stalker_0_default_11"] = "bandit_2", - ["sim_default_stalker_0_default_12"] = "dolg_1", - --["sim_default_stalker_0_default_13"] = "stalker_1", - ["sim_default_stalker_0_default_14"] = "freedom_1", - ["sim_default_stalker_0_default_15"] = "military_1", - ["sim_default_stalker_0_default_16"] = "ecolog_1", - ["sim_default_stalker_0_default_17"] = "csky_1", - --["sim_default_stalker_0_default_18"] = "stalker_1", - ["sim_default_stalker_0_default_19"] = "not_greh_1", - ["sim_default_stalker_0_default_20"] = "dolg_1", - ["sim_default_stalker_0_default_21"] = "military_3", - ["sim_default_stalker_0_default_22"] = "killer_3", - ["sim_default_stalker_0_default_23"] = "freedom_3", - ["sim_default_stalker_0_default_24"] = "bandit_3", - ["sim_default_stalker_0_default_25"] = "csky_3", - --["sim_default_stalker_0_default_26"] = "stalker_3", - ["sim_default_stalker_0_default_27"] = "stalker_4", - ["sim_default_stalker_0_default_28"] = "dolg_1", - ["sim_default_stalker_0_default_29"] = "military_1", - ["sim_default_stalker_0_default_30"] = "killer_1", - ["sim_default_stalker_0_default_31"] = "freedom_1", - ["sim_default_stalker_0_default_32"] = "ecolog_1", - ["sim_default_stalker_0_default_33"] = "csky_1", - ["sim_default_stalker_0_default_34"] = "freedom_1", - - --["sim_default_stalker_1_default_0"] = "stalker_3", - ["sim_default_stalker_1_default_1"] = "stalker_4", - ["sim_default_stalker_1_default_2"] = "bandit_3", - ["sim_default_stalker_1_default_3"] = "dolg_3", - ["sim_default_stalker_1_default_4"] = "military_3", - ["sim_default_stalker_1_default_5"] = "killer_3", - ["sim_default_stalker_1_default_6"] = "not_greh_3", - ["sim_default_stalker_1_default_7"] = "ecolog_3", - ["sim_default_stalker_1_default_8"] = "csky_3", - ["sim_default_stalker_1_default_9"] = "freedom_3", - --["sim_default_stalker_1_default_10"] = "stalker_2", - ["sim_default_stalker_1_default_11"] = "stalker_1", - ["sim_default_stalker_1_default_12"] = "military_1", - ["sim_default_stalker_1_default_13"] = "dolg_1", - ["sim_default_stalker_1_default_14"] = "military_1", - ["sim_default_stalker_1_default_15"] = "killer_1", - ["sim_default_stalker_1_default_16"] = "freedom_1", - ["sim_default_stalker_1_default_17"] = "ecolog_1", - ["sim_default_stalker_1_default_18"] = "csky_1", - ["sim_default_stalker_1_default_19"] = "not_greh_1", - ["sim_default_stalker_1_default_20"] = "stalker_1", - ["sim_default_stalker_1_default_21"] = "bandit_1", - ["sim_default_stalker_1_default_22"] = "dolg_1", - ["sim_default_stalker_1_default_23"] = "freedom_1", - ["sim_default_stalker_1_default_24"] = "killer_1", - ["sim_default_stalker_1_default_25"] = "dolg_3", - ["sim_default_stalker_1_default_26"] = "killer_3", - ["sim_default_stalker_1_default_27"] = "csky_3", - --["sim_default_stalker_1_default_28"] = "stalker_3", - ["sim_default_stalker_1_default_29"] = "stalker_1", - ["sim_default_stalker_1_default_30"] = "csky_1", - ["sim_default_stalker_1_default_31"] = "bandit_2", - ["sim_default_stalker_1_default_32"] = "dolg_1", - ["sim_default_stalker_1_default_33"] = "military_1", - ["sim_default_stalker_1_default_34"] = "freedom_1", - ["sim_default_stalker_1_default_35"] = "freedom_3", - ["sim_default_stalker_1_default_36"] = "ecolog_3", - ["sim_default_stalker_1_default_37"] = "csky_3", - ["sim_default_stalker_1_default_38"] = "not_greh_3", - ["sim_default_stalker_1_default_39"] = "stalker_4", - ["sim_default_stalker_1_default_40"] = "bandit_4", - --["sim_default_stalker_1_default_41"] = "stalker_3", - --["sim_default_stalker_1_default_42"] = "stalker_1", - ["sim_default_stalker_1_default_43"] = "dolg_3", - ["sim_default_stalker_1_default_44"] = "military_3", - ["sim_default_stalker_1_default_45"] = "freedom_3", - ["sim_default_stalker_1_default_46"] = "killer_3", - ["sim_default_stalker_1_default_47"] = "csky_3", - ["sim_default_stalker_1_default_48"] = "not_greh_3", - --["sim_default_stalker_1_default_49"] = "stalker_3", - ["sim_default_stalker_1_default_50"] = "bandit_3", - ["sim_default_stalker_1_default_51"] = "dolg_3", - ["sim_default_stalker_1_default_52"] = "military_3", - ["sim_default_stalker_1_default_53"] = "freedom_3", - ["sim_default_stalker_1_default_54"] = "ecolog_3", - ["sim_default_stalker_1_default_55"] = "freedom_3", - ["sim_default_stalker_1_default_56"] = "killer_3", - --["sim_default_stalker_1_default_57"] = "stalker_3", - ["sim_default_stalker_1_default_58"] = "stalker_4", - ["sim_default_stalker_1_default_59"] = "dolg_3", - ["sim_default_stalker_1_default_60"] = "csky_3", - ["sim_default_stalker_1_default_61"] = "dolg_1", - --["sim_default_stalker_1_default_62"] = "stalker_2", - ["sim_default_stalker_1_default_63"] = "dolg_1", - ["sim_default_stalker_1_default_64"] = "csky_1", - ["sim_default_stalker_1_default_65"] = "killer_1", - ["sim_default_stalker_1_default_66"] = "csky_1", - ["sim_default_stalker_1_default_67"] = "bandit_2", - ["sim_default_stalker_1_default_68"] = "freedom_1", - ["sim_default_stalker_1_default_69"] = "military_1", - --["sim_default_stalker_1_default_70"] = "stalker_2", - ["sim_default_stalker_1_default_71"] = "stalker_1", - ["sim_default_stalker_1_default_72"] = "dolg_1", - ["sim_default_stalker_1_default_73"] = "military_1", - ["sim_default_stalker_1_default_74"] = "killer_1", - ["sim_default_stalker_1_default_75"] = "csky_1", - ["sim_default_stalker_1_default_76"] = "freedom_1", - ["sim_default_stalker_1_default_77"] = "ecolog_1", - ["sim_default_stalker_1_default_78"] = "bandit_1", - --["sim_default_stalker_1_default_79"] = "stalker_2", - ["sim_default_stalker_1_default_80"] = "military_1", - --["sim_default_stalker_1_default_81"] = "stalker_3", - ["sim_default_stalker_1_default_82"] = "bandit_3", - ["sim_default_stalker_1_default_83"] = "freedom_1", - ["sim_default_stalker_1_default_84"] = "dolg_3", - ["sim_default_stalker_1_default_85"] = "killer_3", - ["sim_default_stalker_1_default_86"] = "military_3", - ["sim_default_stalker_1_default_87"] = "csky_3", - - ["sim_default_stalker_2_default_0"] = "not_greh_1", - --["sim_default_stalker_2_default_1"] = "stalker_2", - ["sim_default_stalker_2_default_2"] = "dolg_1", - ["sim_default_stalker_2_default_3"] = "military_1", - ["sim_default_stalker_2_default_4"] = "killer_1", - ["sim_default_stalker_2_default_5"] = "csky_3", - ["sim_default_stalker_2_default_6"] = "freedom_3", - ["sim_default_stalker_2_default_7"] = "ecolog_3", - ["sim_default_stalker_2_default_8"] = "bandit_4", - --["sim_default_stalker_2_default_9"] = "stalker_3", - ["sim_default_stalker_2_default_10"] = "stalker_4", - ["sim_default_stalker_2_default_11"] = "dolg_3", - ["sim_default_stalker_2_default_12"] = "military_3", - ["sim_default_stalker_2_default_13"] = "killer_3", - ["sim_default_stalker_2_default_14"] = "bandit_3", - ["sim_default_stalker_2_default_15"] = "csky_1", - ["sim_default_stalker_2_default_16"] = "ecolog_1", - ["sim_default_stalker_2_default_17"] = "csky_1", - ["sim_default_stalker_2_default_18"] = "freedom_1", - --["sim_default_stalker_2_default_19"] = "stalker_2", - ["sim_default_stalker_2_default_20"] = "dolg_1", - ["sim_default_stalker_2_default_21"] = "military_1", - ["sim_default_stalker_2_default_22"] = "killer_1", - ["sim_default_stalker_2_default_23"] = "not_greh_1", - ["sim_default_stalker_2_default_24"] = "freedom_1", - ["sim_default_stalker_2_default_25"] = "dolg_1", - ["sim_default_stalker_2_default_26"] = "csky_3", - --["sim_default_stalker_2_default_27"] = "stalker_2", - ["sim_default_stalker_2_default_28"] = "military_3", - ["sim_default_stalker_2_default_29"] = "dolg_3", - ["sim_default_stalker_2_default_30"] = "freedom_1", - ["sim_default_stalker_2_default_31"] = "military_1", - ["sim_default_stalker_2_default_32"] = "killer_3", - ["sim_default_stalker_2_default_33"] = "csky_1", - ["sim_default_stalker_2_default_34"] = "ecolog_1", - ["sim_default_stalker_2_default_35"] = "freedom_3", - ["sim_default_stalker_2_default_36"] = "bandit_3", - --["sim_default_stalker_2_default_37"] = "stalker_3", - ["sim_default_stalker_2_default_38"] = "stalker_4", - ["sim_default_stalker_2_default_39"] = "dolg_3", - ["sim_default_stalker_2_default_40"] = "killer_3", - ["sim_default_stalker_2_default_41"] = "csky_3", - ["sim_default_stalker_2_default_42"] = "freedom_1", - ["sim_default_stalker_2_default_43"] = "dolg_1", - ["sim_default_stalker_2_default_44"] = "bandit_1", - ["sim_default_stalker_2_default_45"] = "ecolog_1", - ["sim_default_stalker_2_default_46"] = "military_1", - ["sim_default_stalker_2_default_47"] = "stalker_1", - --["sim_default_stalker_2_default_48"] = "stalker_2", - ["sim_default_stalker_2_default_49"] = "freedom_3", - ["sim_default_stalker_2_default_50"] = "csky_3", - --["sim_default_stalker_2_default_51"] = "stalker_3", - ["sim_default_stalker_2_default_52"] = "stalker_4", - ["sim_default_stalker_2_default_53"] = "csky_1", - ["sim_default_stalker_2_default_54"] = "not_greh_3", - ["sim_default_stalker_2_default_55"] = "killer_3", - ["sim_default_stalker_2_default_56"] = "dolg_1", - ["sim_default_stalker_2_default_57"] = "freedom_3", - ["sim_default_stalker_2_default_58"] = "ecolog_3", - ["sim_default_stalker_2_default_59"] = "dolg_3", - ["sim_default_stalker_2_default_60"] = "stalker_4", - ["sim_default_stalker_2_default_61"] = "bandit_1", - ["sim_default_stalker_2_default_62"] = "dolg_1", - ["sim_default_stalker_2_default_63"] = "killer_3", - ["sim_default_stalker_2_default_64"] = "freedom_1", - ["sim_default_stalker_2_default_65"] = "not_greh_1", - ["sim_default_stalker_2_default_66"] = "ecolog_1", - ["sim_default_stalker_2_default_67"] = "stalker_1", - --["sim_default_stalker_2_default_68"] = "stalker_2", - ["sim_default_stalker_2_default_69"] = "dolg_1", - ["sim_default_stalker_2_default_70"] = "military_1", - ["sim_default_stalker_2_default_71"] = "killer_1", - ["sim_default_stalker_2_default_72"] = "freedom_1", - ["sim_default_stalker_2_default_73"] = "csky_1", - ["sim_default_stalker_2_default_74"] = "freedom_1", - ["sim_default_stalker_2_default_75"] = "bandit_2", - - --["sim_default_stalker_3_default_0"] = "stalker_3", - ["sim_default_stalker_3_default_1"] = "stalker_4", - ["sim_default_stalker_3_default_2"] = "ecolog_3", - ["sim_default_stalker_3_default_3"] = "military_3", - ["sim_default_stalker_3_default_4"] = "killer_3", - ["sim_default_stalker_3_default_5"] = "freedom_3", - ["sim_default_stalker_3_default_6"] = "csky_3", - ["sim_default_stalker_3_default_7"] = "ecolog_3", - ["sim_default_stalker_3_default_8"] = "bandit_2", - ["sim_default_stalker_3_default_9"] = "not_greh_3", - ["sim_default_stalker_3_default_10"] = "dolg_3", - ["sim_default_stalker_3_default_11"] = "military_3", - ["sim_default_stalker_3_default_12"] = "killer_3", - ["sim_default_stalker_3_default_13"] = "freedom_3", - ["sim_default_stalker_3_default_14"] = "csky_3", - ["sim_default_stalker_3_default_15"] = "ecolog_3", - --["sim_default_stalker_3_default_16"] = "stalker_3", - ["sim_default_stalker_3_default_17"] = "stalker_4", - ["sim_default_stalker_3_default_18"] = "dolg_3", - ["sim_default_stalker_3_default_19"] = "bandit_3", - ["sim_default_stalker_3_default_20"] = "killer_3", - ["sim_default_stalker_3_default_21"] = "csky_1", - ["sim_default_stalker_3_default_22"] = "military_1", - ["sim_default_stalker_3_default_23"] = "ecolog_1", - ["sim_default_stalker_3_default_24"] = "freedom_1", - ["sim_default_stalker_3_default_25"] = "csky_1", - ["sim_default_stalker_3_default_26"] = "freedom_1", - --["sim_default_stalker_3_default_27"] = "stalker_2", - --["sim_default_stalker_3_default_28"] = "stalker_3", - ["sim_default_stalker_3_default_29"] = "dolg_3", - ["sim_default_stalker_3_default_30"] = "military_3", - ["sim_default_stalker_3_default_31"] = "killer_3", - ["sim_default_stalker_3_default_32"] = "freedom_3", - ["sim_default_stalker_3_default_33"] = "military_3", - ["sim_default_stalker_3_default_34"] = "ecolog_3", - ["sim_default_stalker_3_default_35"] = "bandit_1", - ["sim_default_stalker_3_default_36"] = "not_greh_3", - ["sim_default_stalker_3_default_37"] = "dolg_3", - ["sim_default_stalker_3_default_38"] = "csky_3", - ["sim_default_stalker_3_default_39"] = "killer_3", - --["sim_default_stalker_3_default_40"] = "stalker_3", - ["sim_default_stalker_3_default_41"] = "dolg_3", - ["sim_default_stalker_3_default_42"] = "military_3", - ["sim_default_stalker_3_default_43"] = "killer_3", - ["sim_default_stalker_3_default_44"] = "freedom_3", - ["sim_default_stalker_3_default_45"] = "csky_3", - ["sim_default_stalker_3_default_46"] = "ecolog_3", - ["sim_default_stalker_3_default_47"] = "bandit_4", - --["sim_default_stalker_3_default_48"] = "stalker_3", - ["sim_default_stalker_3_default_49"] = "stalker_4", - ["sim_default_stalker_3_default_50"] = "dolg_3", - ["sim_default_stalker_3_default_51"] = "military_3", - ["sim_default_stalker_3_default_52"] = "killer_3", - ["sim_default_stalker_3_default_53"] = "freedom_3", - ["sim_default_stalker_3_default_54"] = "csky_3", - ["sim_default_stalker_3_default_55"] = "dolg_3", - --["sim_default_stalker_3_default_56"] = "stalker_3", - --["sim_default_stalker_3_default_57"] = "stalker_1", - ["sim_default_stalker_3_default_58"] = "killer_1", - --["sim_default_stalker_3_default_59"] = "stalker_2", - ["sim_default_stalker_3_default_60"] = "dolg_1", - - --["sim_default_stalker_4_default_0"] = "stalker_3", - ["sim_default_stalker_4_default_1"] = "stalker_4", - ["sim_default_stalker_4_default_2"] = "killer_1", - ["sim_default_stalker_4_default_3"] = "csky_3", - ["sim_default_stalker_4_default_4"] = "dolg_3", - ["sim_default_stalker_4_default_5"] = "ecolog_3", - ["sim_default_stalker_4_default_6"] = "military_3", - ["sim_default_stalker_4_default_7"] = "freedom_3", - ["sim_default_stalker_4_default_8"] = "not_greh_3", - ["sim_default_stalker_4_default_9"] = "killer_3" -} - -function on_game_start() - RegisterScriptCallback("on_specific_character_init", function(character_id, data) - if list[character_id] then - data.snd_config = "characters_voice\\human\\" .. list[character_id] .. "\\" - end - end) -end \ No newline at end of file diff --git a/mods/Redone Collection/meta.ini b/mods/Redone Collection/meta.ini index 4d4f6b58..b3af8404 100644 --- a/mods/Redone Collection/meta.ini +++ b/mods/Redone Collection/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.2.29.0 newestVersion= -category="16," +category="15," nexusFileStatus=1 installationFile=RedoneCollection_v2.1.6.zip repository= diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Hospital Helicopter/gamedata/configs/scripts/katacomb_hospital/smart/katacomb_smart_terrain.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Hospital Helicopter/gamedata/configs/scripts/katacomb_hospital/smart/katacomb_smart_terrain.ltx deleted file mode 100644 index b5dd6a50..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Hospital Helicopter/gamedata/configs/scripts/katacomb_hospital/smart/katacomb_smart_terrain.ltx +++ /dev/null @@ -1,49 +0,0 @@ -[smart_terrain] -squad_id = 1 -max_population = 3 -respawn_params = respawn@katacomb_smart_terrain -respawn_idle = 43200 - -[respawn@katacomb_smart_terrain] ;-- Type: faction {greh} = faction base -spawn_greh@veteran -spawn_greh@advanced -spawn_greh@novice -spawn_heli_strong -spawn_heli_weak - - -[spawn_greh@novice] -spawn_squads = greh_sim_squad_novice, greh_sim_squad_novice -spawn_num = {+mortal_sin -kat_greh_sabaoth_mortal_sin} 3, 0 - -[spawn_greh@advanced] -spawn_squads = greh_sim_squad_advanced, greh_sim_squad_veteran -spawn_num = {+mortal_sin -kat_greh_sabaoth_mortal_sin} 3, 0 - -[spawn_greh@veteran] -spawn_squads = greh_sim_squad_advanced, greh_sim_squad_veteran -spawn_num = {+mortal_sin -kat_greh_sabaoth_mortal_sin} 2, 0 - -[spawn_heli_strong] -spawn_helicopter = simulation_monolith_helicopter_strong -spawn_num = {!down_to_earth_functor !heli_exist_on_level} 1, 0 - -[spawn_heli_weak] -spawn_helicopter = simulation_monolith_helicopter_weak -spawn_num = {=down_to_earth_functor !heli_exist_on_level} 1, 0 - - -[exclusive] -kat_greh_sabaoth = katacomb_hospital\kat_greh_sabaoth.ltx -kat_greh_tech = katacomb_hospital\kat_greh_tech.ltx -kat_greh_trader = katacomb_hospital\kat_greh_trader.ltx -kat_greh_guide = katacomb_hospital\kat_greh_guide.ltx - -kat_hosp_z1_minigunner_excl = katacomb_hospital\katacomb_smart_terrain_logic.ltx -kat_hosp_z3_minigunner_excl = katacomb_hospital\katacomb_smart_terrain_logic.ltx -kat_greh_squad_guard_mlr_1 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx -kat_greh_squad_guard_mlr_2 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx -kat_greh_squad_guard_mlr_3 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx -kat_greh_squad_guard_mlr_4 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx -kat_greh_squad_guard_mlr_5 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx -kat_greh_squad_guard_mlr_6 = katacomb_hospital\kat_greh_mlr_characters_logic.ltx diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Limansk Helicopter/limansk/smart/lim_smart_terrain_9.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Limansk Helicopter/limansk/smart/lim_smart_terrain_9.ltx deleted file mode 100644 index 80876086..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Add Limansk Helicopter/limansk/smart/lim_smart_terrain_9.ltx +++ /dev/null @@ -1,21 +0,0 @@ -[smart_terrain] -squad_id = 10 -max_population = 3 -respawn_params = respawn@lim_smart_terrain_9 -respawn_idle = 345600 - -[respawn@lim_smart_terrain_9] ;-- Type: faction {monolith} = stronghold -spawn_heli_strong -spawn_heli_weak - - -[spawn_heli_strong] -spawn_helicopter = simulation_monolith_helicopter_strong -spawn_num = {!down_to_earth_functor !heli_exist_on_level} 1, 0 - -[spawn_heli_weak] -spawn_helicopter = simulation_monolith_helicopter_weak -spawn_num = {=down_to_earth_functor !heli_exist_on_level} 1, 0 - - -;[exclusive] \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital Arrival Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital Arrival Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx deleted file mode 100644 index 90170325..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital Arrival Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx +++ /dev/null @@ -1,42 +0,0 @@ -;Determines the spawn percentage per each anomaly and max number of them -[spawn_properties] -spawn_percent = 0.2 -anomaly_max_number = 2 -anomaly_max_active = 38 ; Unused - -;Determines the range of anomaly radius -[radius_properties] -min_radius = 1 -max_radius = 1 - -;Determines the list of anomalies that can be spawned -[anomaly_types] -;zone_mine_zharka -zone_mine_point -zone_mine_umbra -zone_mine_cdf -zone_mine_blast -zone_mine_vortex -zone_mine_gold -zone_mine_thorn -;zone_field_radioactive_weak -;zone_field_radioactive_average -;zone_field_radioactive_strong -;zone_radioactive_weak -;zone_radioactive_average -;zone_radioactive_strong -zone_mine_acidic_weak -;zone_mine_acidic_average -;zone_mine_acidic_strong -zone_mine_electric_weak -;zone_mine_electric_average -;zone_mine_electric_strong -zone_mine_thermal_weak -;zone_mine_thermal_average -;zone_mine_thermal_strong -zone_mine_gravitational_weak -zone_mine_gravitational_average - -;Determines the smarts around which anomalies will be created -[available_smarts] -katacomb_smart_terrain \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital DAO Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital DAO Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx deleted file mode 100644 index 695e2e1f..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V1 Hospital DAO Compatibility Patch/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx +++ /dev/null @@ -1,41 +0,0 @@ -;Determines the spawn percentage per each anomaly and max number of them -[spawn_properties] -spawn_percent = 0.2 -anomaly_max_number = 2 -anomaly_max_active = 38 ; Unused - -;Determines the range of anomaly radius -[radius_properties] -min_radius = 1 -max_radius = 1 - -;Determines the list of anomalies that can be spawned -[anomaly_types] -;zone_mine_zharka -zone_mine_point -zone_mine_darkness -zone_mine_radar -zone_mine_blast -zone_mine_vortex -zone_mine_gold -;zone_field_radioactive_weak -;zone_field_radioactive_average -;zone_field_radioactive_strong -;zone_radioactive_weak -;zone_radioactive_average -;zone_radioactive_strong -zone_mine_acidic_weak -;zone_mine_acidic_average -;zone_mine_acidic_strong -zone_mine_electric_weak -;zone_mine_electric_average -;zone_mine_electric_strong -zone_mine_thermal_weak -;zone_mine_thermal_average -;zone_mine_thermal_strong -zone_mine_gravitational_weak -zone_mine_gravitational_average - -;Determines the smarts around which anomalies will be created -[available_smarts] -katacomb_smart_terrain \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx deleted file mode 100644 index 90170325..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx +++ /dev/null @@ -1,42 +0,0 @@ -;Determines the spawn percentage per each anomaly and max number of them -[spawn_properties] -spawn_percent = 0.2 -anomaly_max_number = 2 -anomaly_max_active = 38 ; Unused - -;Determines the range of anomaly radius -[radius_properties] -min_radius = 1 -max_radius = 1 - -;Determines the list of anomalies that can be spawned -[anomaly_types] -;zone_mine_zharka -zone_mine_point -zone_mine_umbra -zone_mine_cdf -zone_mine_blast -zone_mine_vortex -zone_mine_gold -zone_mine_thorn -;zone_field_radioactive_weak -;zone_field_radioactive_average -;zone_field_radioactive_strong -;zone_radioactive_weak -;zone_radioactive_average -;zone_radioactive_strong -zone_mine_acidic_weak -;zone_mine_acidic_average -;zone_mine_acidic_strong -zone_mine_electric_weak -;zone_mine_electric_average -;zone_mine_electric_strong -zone_mine_thermal_weak -;zone_mine_thermal_average -;zone_mine_thermal_strong -zone_mine_gravitational_weak -zone_mine_gravitational_average - -;Determines the smarts around which anomalies will be created -[available_smarts] -katacomb_smart_terrain \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script deleted file mode 100644 index 3278c076..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital Arrival Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script +++ /dev/null @@ -1,468 +0,0 @@ - -ENABLE_DYNAMIC_RADIATION_ZONES = true -ENABLE_DYNAMIC_RADIATION_ZONES_NPP = true - -local blacklisted_smarts = { - l01_escape = { - esc_smart_terrain_3_16 = true, - esc_smart_terrain_2_12 = true, - esc_smart_terrain_5_7 = true, - esc_smart_terrain_4_9 = true - }, - y04_pole = { - }, - k00_marsh = { - mar_smart_terrain_base = true, - mar_smart_terrain_5_8 = true, - mar_smart_terrain_doc_2 = true - }, - k01_darkscape = { - ds2_domik_st = true - }, - l02_garbage = { - gar_smart_terrain_3_5 = true, - gar_smart_terrain_6_3 = true - }, - l04_darkvalley = { - val_smart_terrain_7_3 = true, - val_smart_terrain_7_4 = true, - val_smart_terrain_7_5 = true, - val_smart_terrain_8_6 = true, - val_smart_terrain_7_8 = true, --Smart Z position is too low - val_smart_terrain_8_9 = true --Smart Z position is too low - }, - l03_agroprom = { - agr_smart_terrain_1_6 = true, - agr_smart_terrain_1_6_near_1 = true, - agr_smart_terrain_1_6_near_2 = true - }, - l08_yantar = { - yan_smart_terrain_3_6 = true, - yan_smart_terrain_6_4 = true, - }, - l06_rostok = { - }, - l05_bar = { - bar_dolg_bunker = true, - bar_dolg_general = true, - bar_visitors = true, - bar_zastava = true, - bar_zastava_2 = true, - }, - k02_trucks_cemetery = { - trc_sim_20 = true - }, - l09_deadcity = { - cit_killers = true, - }, - l07_military = { - mil_smart_terrain_7_10 = true, - mil_smart_terrain_7_8 = true, - mil_smart_terrain_7_7 = true, - mil_smart_terrain_7_12 = true - }, - l10_red_forest = { - red_smart_terrain_3_2 = true - }, - l10_radar = { - }, - l10_limansk = { - }, - jupiter = { - jup_a6 = true, - jup_b41 = true - }, - l11_pripyat = { - mlr_terrain = true, - pri_monolith = true, - }, - pripyat = { - pri_a18_smart_terrain = true, - kbo_terrain = true, - pri_b306 = true, - pri_a16 = true, - pri_a16_mlr_copy = true, - pri_a28_base = true, - pri_b36_smart_terrain = true - }, - l11_hospital = { - }, - zaton = { - zat_b40_smart_terrain = true, - zat_b18 = true, - zat_stalker_base_smart = true, - zat_sim_27 = true - }, - l12_stancia = { - }, - l12_stancia_2 = { - }, - l13_generators = { - }, - l12u_sarcofag = { - sar_monolith_general = true - } -} - -local radiation_field_level_settings = { - l01_escape = { - Name = "l01_escape", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - y04_pole = { - Name = "y04_pole", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - k00_marsh = { - Name = "k00_marsh", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - k01_darkscape = { - Name = "k01_darkscape", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - l02_garbage = { - Name = "l02_garbage", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l04_darkvalley = { - Name = "l04_darkvalley", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l03_agroprom = { - Name = "l03_agroprom", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l08_yantar = { - Name = "l08_yantar", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 16 - }, - l06_rostok = { - Name = "l06_rostok", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 16 - }, - l05_bar = { - Name = "l05_bar", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 10 - }, - k02_trucks_cemetery = { - Name = "k02_trucks_cemetery", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 18 - }, - l09_deadcity = { - Name = "l09_deadcity", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 15 - }, - l07_military = { - Name = "l07_military", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 18 - }, - l10_red_forest = { - Name = "l10_red_forest", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 12 - }, - l10_radar = { - Name = "l10_radar", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 24 - }, - l10_limansk = { - Name = "l10_limansk", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 24 - }, - jupiter = { - Name = "jupiter", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 22 - }, - l11_pripyat = { - Name = "l11_pripyat", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 0, - Radius = 24 - }, - pripyat = { - Name = "pripyat", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 24 - }, - l11_hospital = { - Name = "l11_hospital", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 0, - Radius = 1 - }, - zaton = { - Name = "zaton", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 22 - }, - l12_stancia = { - Name = "l12_stancia", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - }, - l12_stancia_2 = { - Name = "l12_stancia_2", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - }, - l13_generators = { - Name = "l13_generators", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - } -} - ---Some anomlies will affect new game start point, like scientist bunker in Yantar. They should be capped. -local blacklisted_static_radiation_anomalies = { - -- l01_escape - esc_zone_field_radioactive_weak_0000 = 80, - esc_zone_field_radioactive_weak_0011 = 75, - esc_zone_field_radioactive_weak_0012 = 75, - esc_zone_field_radioactive_weak_0013 = 75, - - --k00_marsh - mar_zone_field_radioactive_weak_0007 = 80, - - --pripyat - pripyat_zone_field_radioactive_weak_0001 = 5, - - --l04_darkvalley - val_zone_field_radioactive_weak_baza_freedom_0016 = 3, - val_zone_field_radioactive_weak_baza_freedom_0018 = 3, - val_zone_field_radioactive_weak_baza_freedom_0019 = 3, - - --l03_agroprom - agr_zone_field_radioactive_average_000 = 20, - - --l07_military - mil_zone_field_radioactive_strong = 25, - mil_zone_field_radioactive_strong_3 = 50, - - --zaton - zaton_zone_field_radioactive_average_0007 = 20, - zaton_zone_field_radioactive_average_0008 = 20, - zaton_zone_field_radioactive_average_0013 = 20, - - --Name of level: l02_garbage - gar_zone_field_radioactive_weak_0001 = 50, - gar_zone_field_radioactive_weak_0002 = 40 -} - ---Underground maps should not be affected by dynamic radiations and wind behaviour -local underground_maps = { - l03u_agr_underground = true, - l08u_brainlab = true, - l10u_bunker = true, - jupiter_underground = true, - l04u_labx18 = true, - labx8 = true, - l12u_sarcofag = true, - l12u_control_monolith = true, - l13u_warlab = true -} - - ---Radiation zones the player is in -local radiation_zones = {} - ---Table for state management -local radiation_table = {} - ---Hack for a wonderful bug in the LUA interpreter itself possibly. IT IS CURSED! -environmental_radiation = 0 - ---Hack for icon removal -local ico_n_removed = false -local ico_p_removed = false - -function spawn_radiation_fields_at_new_game() - printf("spawn_radiation_fields_at_new_game()") - - for k, v in pairs (radiation_field_level_settings) do - run_script = 1 - spawn_radiation_fields_for_level(v) - end - - run_script = 0 -end - ---Creates new radiation fields for the current level -function spawn_radiation_fields_for_level(current_level_settings) - if run_script ~= 1 then - return - end - --printf("spawn_radiation_fields_for_level: "..current_level_settings.Name.." ************************************************") - - --printf("get_smart_terrains_of_level: "..current_level_settings.Name) - local smarts_of_level = get_smart_terrains_of_level(current_level_settings.Name) - - printf("get blacklisted smarts") - local blacklisted_smarts_for_level = blacklisted_smarts[current_level_settings.Name] - - printf("Iterate through smarts") - for ksmart, smart in pairs (smarts_of_level) do - - local name_of_smart = smart:name() - if (not blacklisted_smarts_for_level[name_of_smart]) then - - if (math.random(1, 100) <= current_level_settings.Chance_to_spawn) then - printf("Spawn default radiation zone for smart: "..name_of_smart) - - create_radiation_field( - current_level_settings.Radiation_field, - smart.position, - smart.m_game_vertex_id, - level.vertex_id(smart.position), - current_level_settings.Radius) - end - - else - printf("Smart: "..name_of_smart.." is black listed, skip") - end - - end -end - ---Creates a new radiation field -function create_radiation_field(anomaly_type, position, game_vertex_id, level_vertex_id, radius) - printf("create_radiation_field: "..anomaly_type.." Radius: "..radius.. " *****************") - - printf("spawn anomaly") - local se_obj = alife( ):create(anomaly_type, position, level_vertex_id, game_vertex_id) - - if (not se_obj) then - printf("NO ANOMALY WERE SPAWNED") - return - end - - local data = utils_stpk.get_anom_zone_data( se_obj ) - if (not data) then - printf( "Error: Unable to set dynamic anomaly properties" ) - return - end - - data.shapes[1] = {} - data.shapes[1].shtype = 0 - data.shapes[1].offset = vector( ):set( 0, 0, 0 ) -- Leave for compatibility with CoC 1.4.22, delete later - data.shapes[1].center = vector( ):set( 0, 0, 0 ) - data.shapes[1].radius = radius - utils_stpk.set_anom_zone_data(data, se_obj) - - printf(se_obj.id) - printf("Radiation field was spawned succesfully") -end - ---Get smart terrains if the level -function get_smart_terrains_of_level(level_name) - printf("get_smart_terrains_of_level("..level_name..")") - smarts_of_level = {} - - for id,smart in pairs(db.smart_terrain_by_id) do - cvertex = smart and game_graph():vertex(smart.m_game_vertex_id) - - if (cvertex and alife():level_name(cvertex:level_id()) == level_name) then - table.insert(smarts_of_level, smart) - end - end - - return smarts_of_level -end - - -function initialize_radiation_table() - if (not radiation_table.dosimeter_volume) then - radiation_table.dosimeter_volume = 1 - printf("INITIALIZE - dosimeter_volume") - end - - if (not radiation_table.wind_alert_state) then - --radiation_table.wind_alert_state = WIND_ALERT_STATES.NoAlert - --printf("INITIALIZE - wind_alert_state") - end -end - -function on_game_load() - --Initialize radiation_table of not initialized - initialize_radiation_table() - - if (ENABLE_DYNAMIC_RADIATION_ZONES) then - if (not radiation_table.dynamic_radiation_zones_generated) then - --spawn dynamic radiation fields - spawn_radiation_fields_at_new_game() - radiation_table.dynamic_radiation_zones_generated = true - end - end - - if (not radiation_table.static_radiation_fields_resized) then - --Resize both original and new radiation fields - --resize_radiation_fields() - radiation_table.static_radiation_fields_resized = true - end - - if (ENABLE_DYNAMIC_RADIATION_ZONES_NPP) then - if (not radiation_table.dynamic_radiation_zones_generated_npp) then - --Spawn special radiation fields for NPP interrior - spawn_radiation_fields_for_level(special_spawn_l12u_sarcofag) - radiation_table.dynamic_radiation_zones_generated_npp = true - end - end - - --Reset icon removal flags - ico_n_removed = false - ico_p_removed = false -end - - -function save_state(m_data) - m_data.radiation_table = radiation_table -end - -function load_state(m_data) - radiation_table = m_data.radiation_table or {} -end - - -function on_game_start() - RegisterScriptCallback("on_game_load", on_game_load) - RegisterScriptCallback("save_state", save_state) - RegisterScriptCallback("load_state", load_state) -end \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx deleted file mode 100644 index 695e2e1f..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/configs/hazardous_anomalies/regions/l11_hospital.ltx +++ /dev/null @@ -1,41 +0,0 @@ -;Determines the spawn percentage per each anomaly and max number of them -[spawn_properties] -spawn_percent = 0.2 -anomaly_max_number = 2 -anomaly_max_active = 38 ; Unused - -;Determines the range of anomaly radius -[radius_properties] -min_radius = 1 -max_radius = 1 - -;Determines the list of anomalies that can be spawned -[anomaly_types] -;zone_mine_zharka -zone_mine_point -zone_mine_darkness -zone_mine_radar -zone_mine_blast -zone_mine_vortex -zone_mine_gold -;zone_field_radioactive_weak -;zone_field_radioactive_average -;zone_field_radioactive_strong -;zone_radioactive_weak -;zone_radioactive_average -;zone_radioactive_strong -zone_mine_acidic_weak -;zone_mine_acidic_average -;zone_mine_acidic_strong -zone_mine_electric_weak -;zone_mine_electric_average -;zone_mine_electric_strong -zone_mine_thermal_weak -;zone_mine_thermal_average -;zone_mine_thermal_strong -zone_mine_gravitational_weak -zone_mine_gravitational_average - -;Determines the smarts around which anomalies will be created -[available_smarts] -katacomb_smart_terrain \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script deleted file mode 100644 index 3278c076..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/Optional L&H V2 Hospital DAO Compatibility Patch GAMMA/gamedata/scripts/gamma_dynamic_radiation_areas_from_arzsi.script +++ /dev/null @@ -1,468 +0,0 @@ - -ENABLE_DYNAMIC_RADIATION_ZONES = true -ENABLE_DYNAMIC_RADIATION_ZONES_NPP = true - -local blacklisted_smarts = { - l01_escape = { - esc_smart_terrain_3_16 = true, - esc_smart_terrain_2_12 = true, - esc_smart_terrain_5_7 = true, - esc_smart_terrain_4_9 = true - }, - y04_pole = { - }, - k00_marsh = { - mar_smart_terrain_base = true, - mar_smart_terrain_5_8 = true, - mar_smart_terrain_doc_2 = true - }, - k01_darkscape = { - ds2_domik_st = true - }, - l02_garbage = { - gar_smart_terrain_3_5 = true, - gar_smart_terrain_6_3 = true - }, - l04_darkvalley = { - val_smart_terrain_7_3 = true, - val_smart_terrain_7_4 = true, - val_smart_terrain_7_5 = true, - val_smart_terrain_8_6 = true, - val_smart_terrain_7_8 = true, --Smart Z position is too low - val_smart_terrain_8_9 = true --Smart Z position is too low - }, - l03_agroprom = { - agr_smart_terrain_1_6 = true, - agr_smart_terrain_1_6_near_1 = true, - agr_smart_terrain_1_6_near_2 = true - }, - l08_yantar = { - yan_smart_terrain_3_6 = true, - yan_smart_terrain_6_4 = true, - }, - l06_rostok = { - }, - l05_bar = { - bar_dolg_bunker = true, - bar_dolg_general = true, - bar_visitors = true, - bar_zastava = true, - bar_zastava_2 = true, - }, - k02_trucks_cemetery = { - trc_sim_20 = true - }, - l09_deadcity = { - cit_killers = true, - }, - l07_military = { - mil_smart_terrain_7_10 = true, - mil_smart_terrain_7_8 = true, - mil_smart_terrain_7_7 = true, - mil_smart_terrain_7_12 = true - }, - l10_red_forest = { - red_smart_terrain_3_2 = true - }, - l10_radar = { - }, - l10_limansk = { - }, - jupiter = { - jup_a6 = true, - jup_b41 = true - }, - l11_pripyat = { - mlr_terrain = true, - pri_monolith = true, - }, - pripyat = { - pri_a18_smart_terrain = true, - kbo_terrain = true, - pri_b306 = true, - pri_a16 = true, - pri_a16_mlr_copy = true, - pri_a28_base = true, - pri_b36_smart_terrain = true - }, - l11_hospital = { - }, - zaton = { - zat_b40_smart_terrain = true, - zat_b18 = true, - zat_stalker_base_smart = true, - zat_sim_27 = true - }, - l12_stancia = { - }, - l12_stancia_2 = { - }, - l13_generators = { - }, - l12u_sarcofag = { - sar_monolith_general = true - } -} - -local radiation_field_level_settings = { - l01_escape = { - Name = "l01_escape", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - y04_pole = { - Name = "y04_pole", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - k00_marsh = { - Name = "k00_marsh", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - k01_darkscape = { - Name = "k01_darkscape", - Radiation_field = "zone_radioactive_very_weak", - Chance_to_spawn = 25, - Radius = 15 - }, - l02_garbage = { - Name = "l02_garbage", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l04_darkvalley = { - Name = "l04_darkvalley", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l03_agroprom = { - Name = "l03_agroprom", - Radiation_field = "zone_radioactive_weak", - Chance_to_spawn = 30, - Radius = 16 - }, - l08_yantar = { - Name = "l08_yantar", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 16 - }, - l06_rostok = { - Name = "l06_rostok", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 16 - }, - l05_bar = { - Name = "l05_bar", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 10 - }, - k02_trucks_cemetery = { - Name = "k02_trucks_cemetery", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 18 - }, - l09_deadcity = { - Name = "l09_deadcity", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 15 - }, - l07_military = { - Name = "l07_military", - Radiation_field = "zone_radioactive_below_average", - Chance_to_spawn = 35, - Radius = 18 - }, - l10_red_forest = { - Name = "l10_red_forest", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 12 - }, - l10_radar = { - Name = "l10_radar", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 24 - }, - l10_limansk = { - Name = "l10_limansk", - Radiation_field = "zone_radioactive_average", - Chance_to_spawn = 40, - Radius = 24 - }, - jupiter = { - Name = "jupiter", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 22 - }, - l11_pripyat = { - Name = "l11_pripyat", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 0, - Radius = 24 - }, - pripyat = { - Name = "pripyat", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 24 - }, - l11_hospital = { - Name = "l11_hospital", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 0, - Radius = 1 - }, - zaton = { - Name = "zaton", - Radiation_field = "zone_radioactive_above_average", - Chance_to_spawn = 45, - Radius = 22 - }, - l12_stancia = { - Name = "l12_stancia", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - }, - l12_stancia_2 = { - Name = "l12_stancia_2", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - }, - l13_generators = { - Name = "l13_generators", - Radiation_field = "zone_radioactive_strong", - Chance_to_spawn = 50, - Radius = 28 - } -} - ---Some anomlies will affect new game start point, like scientist bunker in Yantar. They should be capped. -local blacklisted_static_radiation_anomalies = { - -- l01_escape - esc_zone_field_radioactive_weak_0000 = 80, - esc_zone_field_radioactive_weak_0011 = 75, - esc_zone_field_radioactive_weak_0012 = 75, - esc_zone_field_radioactive_weak_0013 = 75, - - --k00_marsh - mar_zone_field_radioactive_weak_0007 = 80, - - --pripyat - pripyat_zone_field_radioactive_weak_0001 = 5, - - --l04_darkvalley - val_zone_field_radioactive_weak_baza_freedom_0016 = 3, - val_zone_field_radioactive_weak_baza_freedom_0018 = 3, - val_zone_field_radioactive_weak_baza_freedom_0019 = 3, - - --l03_agroprom - agr_zone_field_radioactive_average_000 = 20, - - --l07_military - mil_zone_field_radioactive_strong = 25, - mil_zone_field_radioactive_strong_3 = 50, - - --zaton - zaton_zone_field_radioactive_average_0007 = 20, - zaton_zone_field_radioactive_average_0008 = 20, - zaton_zone_field_radioactive_average_0013 = 20, - - --Name of level: l02_garbage - gar_zone_field_radioactive_weak_0001 = 50, - gar_zone_field_radioactive_weak_0002 = 40 -} - ---Underground maps should not be affected by dynamic radiations and wind behaviour -local underground_maps = { - l03u_agr_underground = true, - l08u_brainlab = true, - l10u_bunker = true, - jupiter_underground = true, - l04u_labx18 = true, - labx8 = true, - l12u_sarcofag = true, - l12u_control_monolith = true, - l13u_warlab = true -} - - ---Radiation zones the player is in -local radiation_zones = {} - ---Table for state management -local radiation_table = {} - ---Hack for a wonderful bug in the LUA interpreter itself possibly. IT IS CURSED! -environmental_radiation = 0 - ---Hack for icon removal -local ico_n_removed = false -local ico_p_removed = false - -function spawn_radiation_fields_at_new_game() - printf("spawn_radiation_fields_at_new_game()") - - for k, v in pairs (radiation_field_level_settings) do - run_script = 1 - spawn_radiation_fields_for_level(v) - end - - run_script = 0 -end - ---Creates new radiation fields for the current level -function spawn_radiation_fields_for_level(current_level_settings) - if run_script ~= 1 then - return - end - --printf("spawn_radiation_fields_for_level: "..current_level_settings.Name.." ************************************************") - - --printf("get_smart_terrains_of_level: "..current_level_settings.Name) - local smarts_of_level = get_smart_terrains_of_level(current_level_settings.Name) - - printf("get blacklisted smarts") - local blacklisted_smarts_for_level = blacklisted_smarts[current_level_settings.Name] - - printf("Iterate through smarts") - for ksmart, smart in pairs (smarts_of_level) do - - local name_of_smart = smart:name() - if (not blacklisted_smarts_for_level[name_of_smart]) then - - if (math.random(1, 100) <= current_level_settings.Chance_to_spawn) then - printf("Spawn default radiation zone for smart: "..name_of_smart) - - create_radiation_field( - current_level_settings.Radiation_field, - smart.position, - smart.m_game_vertex_id, - level.vertex_id(smart.position), - current_level_settings.Radius) - end - - else - printf("Smart: "..name_of_smart.." is black listed, skip") - end - - end -end - ---Creates a new radiation field -function create_radiation_field(anomaly_type, position, game_vertex_id, level_vertex_id, radius) - printf("create_radiation_field: "..anomaly_type.." Radius: "..radius.. " *****************") - - printf("spawn anomaly") - local se_obj = alife( ):create(anomaly_type, position, level_vertex_id, game_vertex_id) - - if (not se_obj) then - printf("NO ANOMALY WERE SPAWNED") - return - end - - local data = utils_stpk.get_anom_zone_data( se_obj ) - if (not data) then - printf( "Error: Unable to set dynamic anomaly properties" ) - return - end - - data.shapes[1] = {} - data.shapes[1].shtype = 0 - data.shapes[1].offset = vector( ):set( 0, 0, 0 ) -- Leave for compatibility with CoC 1.4.22, delete later - data.shapes[1].center = vector( ):set( 0, 0, 0 ) - data.shapes[1].radius = radius - utils_stpk.set_anom_zone_data(data, se_obj) - - printf(se_obj.id) - printf("Radiation field was spawned succesfully") -end - ---Get smart terrains if the level -function get_smart_terrains_of_level(level_name) - printf("get_smart_terrains_of_level("..level_name..")") - smarts_of_level = {} - - for id,smart in pairs(db.smart_terrain_by_id) do - cvertex = smart and game_graph():vertex(smart.m_game_vertex_id) - - if (cvertex and alife():level_name(cvertex:level_id()) == level_name) then - table.insert(smarts_of_level, smart) - end - end - - return smarts_of_level -end - - -function initialize_radiation_table() - if (not radiation_table.dosimeter_volume) then - radiation_table.dosimeter_volume = 1 - printf("INITIALIZE - dosimeter_volume") - end - - if (not radiation_table.wind_alert_state) then - --radiation_table.wind_alert_state = WIND_ALERT_STATES.NoAlert - --printf("INITIALIZE - wind_alert_state") - end -end - -function on_game_load() - --Initialize radiation_table of not initialized - initialize_radiation_table() - - if (ENABLE_DYNAMIC_RADIATION_ZONES) then - if (not radiation_table.dynamic_radiation_zones_generated) then - --spawn dynamic radiation fields - spawn_radiation_fields_at_new_game() - radiation_table.dynamic_radiation_zones_generated = true - end - end - - if (not radiation_table.static_radiation_fields_resized) then - --Resize both original and new radiation fields - --resize_radiation_fields() - radiation_table.static_radiation_fields_resized = true - end - - if (ENABLE_DYNAMIC_RADIATION_ZONES_NPP) then - if (not radiation_table.dynamic_radiation_zones_generated_npp) then - --Spawn special radiation fields for NPP interrior - spawn_radiation_fields_for_level(special_spawn_l12u_sarcofag) - radiation_table.dynamic_radiation_zones_generated_npp = true - end - end - - --Reset icon removal flags - ico_n_removed = false - ico_p_removed = false -end - - -function save_state(m_data) - m_data.radiation_table = radiation_table -end - -function load_state(m_data) - radiation_table = m_data.radiation_table or {} -end - - -function on_game_start() - RegisterScriptCallback("on_game_load", on_game_load) - RegisterScriptCallback("save_state", save_state) - RegisterScriptCallback("load_state", load_state) -end \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Credits.txt b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Credits.txt deleted file mode 100644 index 2c6ae29a..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Credits.txt +++ /dev/null @@ -1,2 +0,0 @@ -Credits go to the author CS Eden who made and these Optionals. - diff --git a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Optional DAO-Arrival.txt b/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Optional DAO-Arrival.txt deleted file mode 100644 index 841bd831..00000000 --- a/mods/Redone Limansk and Hospital/Optional/Optional Limansk & Hospital/README Optional DAO-Arrival.txt +++ /dev/null @@ -1,16 +0,0 @@ -Install the required optional matching your installation: -Arrival - Semitone -Dynamic Anomalies Overhaul - MrDemonized -Do NOT use both at the same time since they would overlap each other and are not the exact same. Load it after Arrival/DAO so the patch overwrites the default file. - -Patch to hopefully prevent any dynamic anomalies spawned by these two addons from hindering the player while trying to speak to the Sin NPCs in the Hospital. - -In case this still doesn't work, open the l11_hospital.ltx file using any sort of notepad, and change the following values - -spawn_percent = 0.2 ---> spawn_percent = 0.0 -anomaly_max_number = 2 ---> anomaly_max_number = 0 -min_radius = 1 ---> min_radius = 0 -max_radius = 1 ---> max_radius = 0 - -This will deactivate the anomalies spawn for this map and this map only. This solution is a failsafe for people who still want to enjoy Arrival OR DAO -while having the Re:Done Hospital addon active. \ No newline at end of file diff --git a/mods/Redone Limansk and Hospital/README Optional.txt b/mods/Redone Limansk and Hospital/README Optional.txt deleted file mode 100644 index ea59ebd5..00000000 --- a/mods/Redone Limansk and Hospital/README Optional.txt +++ /dev/null @@ -1,2 +0,0 @@ -To install: Open Optional folder and move over gamedata to install folder. - diff --git a/mods/Redone Limansk and Hospital/meta.ini b/mods/Redone Limansk and Hospital/meta.ini index 209d976d..e96fb305 100644 --- a/mods/Redone Limansk and Hospital/meta.ini +++ b/mods/Redone Limansk and Hospital/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.2.13.0 newestVersion= -category="16," +category="15," nexusFileStatus=1 installationFile=E:/Modding/Modlists/Divergent/downloads/Redone_Limansk_Hospital_0.9.1.2.zip repository=Nexus diff --git a/mods/Redone Pripyat and Juipiter/meta.ini b/mods/Redone Pripyat and Juipiter/meta.ini index 6e5b98bb..a3c592bd 100644 --- a/mods/Redone Pripyat and Juipiter/meta.ini +++ b/mods/Redone Pripyat and Juipiter/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.3.7.0 newestVersion= -category="16," +category="15," nexusFileStatus=1 installationFile=E:/Modding/Modlists/Divergent/downloads/Redone_Pripyat_Jupiter_0.9.1.1.2.zip repository=Nexus diff --git a/mods/Redone Radar and Red Forest/meta.ini b/mods/Redone Radar and Red Forest/meta.ini index de015234..5d66788d 100644 --- a/mods/Redone Radar and Red Forest/meta.ini +++ b/mods/Redone Radar and Red Forest/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.2.13.0 newestVersion= -category="16," +category="15," nexusFileStatus=1 installationFile=E:/Modding/Modlists/Divergent/downloads/Redone_Radar_Red_Forest_0.9.1.5.zip repository=Nexus diff --git a/mods/[DEV] Custom Traders/gamedata/configs/creatures/spawn_sections_custom_traders.ltx b/mods/[DEV] Custom Traders/gamedata/configs/creatures/spawn_sections_custom_traders.ltx new file mode 100644 index 00000000..af7e20ea --- /dev/null +++ b/mods/[DEV] Custom Traders/gamedata/configs/creatures/spawn_sections_custom_traders.ltx @@ -0,0 +1,4 @@ +[artem_trader]:stalker_strong +character_profile = artem_trader +community = stalker +story_id = artem_trader \ No newline at end of file diff --git a/mods/[DEV] Custom Traders/gamedata/scripts/custom_traders.script b/mods/[DEV] Custom Traders/gamedata/scripts/custom_traders.script new file mode 100644 index 00000000..a04228c5 --- /dev/null +++ b/mods/[DEV] Custom Traders/gamedata/scripts/custom_traders.script @@ -0,0 +1,15 @@ +function actor_on_first_update() + artem_trader_init() +end + +function on_game_start() + RegisterScriptCallback("actor_on_first_update",actor_on_first_update) + RegisterScriptCallback("npc_on_net_spawn", npc_on_net_spawn_1) +end + +function artem_trader_init() + if HI("bar_deactivate_radar_done") then + local pos = vector():set( -7.0992422103882,23.103616714478,245.94242858887 ) + local se_obj = alife_create( "artem_trader", pos, 703991, 4556 ) + end +end diff --git a/mods/[DEV] Custom Traders/meta.ini b/mods/[DEV] Custom Traders/meta.ini new file mode 100644 index 00000000..55a1c1d9 --- /dev/null +++ b/mods/[DEV] Custom Traders/meta.ini @@ -0,0 +1,9 @@ +[General] +modid=0 +version= +newestVersion= +category=0 +installationFile= + +[installedFiles] +size=0 diff --git a/mods/[REQUIRED] Modpack Data/appdata/divergent.ltx b/mods/[REQUIRED] Modpack Data/appdata/divergent.ltx new file mode 100644 index 00000000..ab1f5036 --- /dev/null +++ b/mods/[REQUIRED] Modpack Data/appdata/divergent.ltx @@ -0,0 +1,384 @@ +_preset Default +ai_aim_max_angle 25. +ai_aim_min_angle 20. +ai_aim_min_speed 2.5 +ai_aim_predict_time 0.15 +ai_aim_use_smooth_aim 1 +ai_die_in_anomaly 0 +ai_use_old_vision 0 +ai_use_torch_dynamic_lights on +default_controls +bind left kLEFT +bind right kRIGHT +bind up kUP +bind down kDOWN +bind jump kSPACE +bind crouch kC +bind accel kUNLABELED +bind sprint_toggle kLSHIFT +bind forward kW +bind back kS +bind lstrafe kA +bind rstrafe kD +bind llookout kQ +bind rlookout kE +bind cam_2 kKANJI +bind cam_3 kNOCONVERT +bind cam_zoom_out kLBRACKET +bind torch kL +bind show_detector kO +bind wpn_1 k1 +bind wpn_2 k2 +bind wpn_3 k3 +bind wpn_4 k4 +bind wpn_5 k5 +bind wpn_6 k6 +bind wpn_fire mouse1 +bind wpn_zoom mouse2 +bind wpn_reload kR +bind wpn_func kSCROLL +bind wpn_firemode_prev k9 +bind wpn_firemode_next k0 +bind pause kPAUSE +bind drop kRBRACKET +bind use kF +bind scores kY +bind screenshot kF12 +bind quit kESCAPE +bind console kGRAVE +bind inventory kTAB +bind active_jobs kF14 +bind quick_use_1 kF1 +bind quick_use_2 kF2 +bind quick_use_3 kF3 +bind quick_use_4 kF4 +bind quick_save kF5 +bind quick_load kF9 +bind custom1 kNUMPAD1 +bind custom2 kNUMPAD2 +bind custom3 kNUMPAD3 +bind custom4 kNUMPAD4 +bind custom5 kNUMPAD5 +bind custom14 k8 +bind custom15 kAPOSTROPHE +bind custom17 kF7 +bind safemode mouse4 +bind freelook kLMENU +cam_inert 0. +cam_slide_inert 0.25 +cl_cod_pickup_mode on +cl_dynamiccrosshair on +con_sensitive 0.15 +crash_save 1 +crash_save_count 10 +discord_status on +discord_update_rate 0.5 +first_person_death 1 +first_person_death_direction_offset (0.000000, 0.000000, 0.000000) +first_person_death_direction_smoothing 12 +first_person_death_near_plane_offset 0. +first_person_death_position_offset (0.000000, 0.000000, 0.000000) +first_person_death_position_smoothing 6 +fov 74. +freelook_cam_limit 0.7 +g_3d_pda on +g_always_active off +g_autopickup on +g_backrun on +g_crosshair_color (255, 255, 255, 255) +g_crouch_toggle on +g_dead_body_collision actor_only +g_dispersion_base 0. +g_dispersion_factor 3. +g_dynamic_music off +g_end_modif 0. +g_feel_grenade off +g_firepos off +g_freelook_toggle off +g_game_difficulty gd_novice +g_god on +g_hit_pwr_modif 1. +g_important_save on +g_ironsights_zoom_factor 1.25 +g_lookout_toggle off +g_multi_item_pickup off +g_simple_pda on +g_sleep_time 6 +g_sprint_toggle off +g_unlimitedammo off +g_use_tracers on +g_walk_toggle on +head_bob_factor 1. +heat_vision_args_1 (0.000000, 0.000000, 0.000000, 0.000000) +heat_vision_args_2 (0.000000, 0.000000, 0.000000, 0.000000) +heat_vision_blurring (15.000000, 4.000000, 60.000000, 0.000000) +heat_vision_mode 0. +heat_vision_steps (0.450000, 0.650000, 0.760000, 0.000000) +hud_crosshair off +hud_crosshair_dist off +hud_draw off +hud_fov 0.57 +hud_info on +hud_weapon on +keyboard_buffer_size 128 +keypress_on_start on +load_last_save stalker - quicksave_5 +log_missing_ini off +log_timestamps 0 +lua_gcstep 400 +monster_stuck_fix 0 +mouse_buffer_size 1024 +mouse_invert off +mouse_sens 0.071 +mouse_sens_aim 1. +mouse_wheel_change_weapon 1 +mouse_wheel_invert_zoom 0 +new_zoom_enable off +particle_update_mod 1. +pda_map_zoom_in_to_mouse 1 +pda_map_zoom_out_to_mouse 1 +ph_frequency 100.00000 +ph_gravity 19.62 +ph_iterations 18 +power_loss_bias 0.2 +power_loss_factor 0.5 +pseudogiant_can_damage_objects_on_stomp 1 +r1_detail_textures on +r1_dlights on +r1_dlights_clip 40. +r1_fog_luminance 1.1 +r1_glows_per_frame 16 +r1_lmodel_lerp 0.1 +r1_pps_u 0. +r1_pps_v 0. +r1_software_skinning 0 +r1_ssa_lod_a 64. +r1_ssa_lod_b 48. +r2_aa off +r2_aa_break (0.800000, 0.100000, 0.000000) +r2_aa_kernel 0.5 +r2_aa_weight (0.250000, 0.250000, 0.000000) +r2_allow_r1_lights off +r2_detail_bump on +r2_dof -1.000000,0.000000,800.000000 +r2_dof_enable on +r2_dof_radius 0.25 +r2_dof_sky 30. +r2_drops_control (0.000000, 0.000000, 0.000000) +r2_exp_donttest_shad off +r2_gi off +r2_gi_clip 0.001 +r2_gi_depth 1 +r2_gi_photons 16 +r2_gi_refl 0.9 +r2_gloss_factor 0.001 +r2_gloss_min 0.56 +r2_ls_bloom_fast off +r2_ls_bloom_kernel_b 0.1 +r2_ls_bloom_kernel_g 1. +r2_ls_bloom_kernel_scale 0.05 +r2_ls_bloom_speed 100. +r2_ls_bloom_threshold 0. +r2_ls_depth_bias -0.00005 +r2_ls_depth_scale 1.00001 +r2_ls_dsm_kernel 0.7 +r2_ls_psm_kernel 0.7 +r2_ls_squality 1.4 +r2_ls_ssm_kernel 0.7 +r2_mask_control (0.000000, 0.000000, 0.000000, 0.000000) +r2_mblur 0. +r2_mblur_enabled on +r2_parallax_h 0. +r2_qsync 0 +r2_shadow_cascede_old off +r2_slight_fade 0.5 +r2_smaa high +r2_soft_particles on +r2_soft_water on +r2_ss_sunshafts_length 1. +r2_ss_sunshafts_radius 1. +r2_ssa_lod_a 32. +r2_ssa_lod_b 32. +r2_ssao st_opt_off +r2_ssao_blur off +r2_ssao_half_data off +r2_ssao_hbao off +r2_ssao_hdao off +r2_ssao_mode disabled +r2_ssao_opt_data off +r2_steep_parallax off +r2_sun on +r2_sun_depth_far_bias -0.00002 +r2_sun_depth_far_scale 1. +r2_sun_depth_near_bias 0.00007 +r2_sun_depth_near_scale 1. +r2_sun_details on +r2_sun_far 100. +r2_sun_focus on +r2_sun_lumscale 1.8 +r2_sun_lumscale_amb 1.8 +r2_sun_lumscale_hemi 1.2 +r2_sun_near 15. +r2_sun_near_border 0.75 +r2_sun_quality st_opt_medium +r2_sun_tsm on +r2_sun_tsm_bias -0.01 +r2_sun_tsm_proj 0.3 +r2_sunshafts_min 0.24 +r2_sunshafts_mode volumetric +r2_sunshafts_quality st_opt_low +r2_sunshafts_value 0.6 +r2_terrain_z_prepass off +r2_tnmp_a 0.15 +r2_tnmp_b 0.5 +r2_tnmp_c 0.1 +r2_tnmp_d 0.2 +r2_tnmp_e 0.2 +r2_tnmp_exposure 0.16033 +r2_tnmp_f 0.3 +r2_tnmp_gamma 0.76667 +r2_tnmp_onoff 0. +r2_tnmp_w 1.12 +r2_tonemap on +r2_tonemap_adaptation 3. +r2_tonemap_amount 0.7 +r2_tonemap_lowlum 0.5 +r2_tonemap_middlegray 1.2 +r2_volumetric_lights on +r2_wait_sleep 0 +r2_water_reflections on +r2_zfill off +r2_zfill_depth 0.25 +r2em 0. +r3_dynamic_wet_surfaces on +r3_dynamic_wet_surfaces_far 30. +r3_dynamic_wet_surfaces_near 70. +r3_dynamic_wet_surfaces_sm_res 128 +r3_minmax_sm off +r3_msaa 2x +r3_msaa_alphatest st_opt_off +r3_use_dx10_1 on +r3_volumetric_smoke on +r4_enable_tessellation off +r4_wireframe off +r__actor_shadow off +r__bloom_thresh (0.700000, 0.800000, 0.900000, 0.000000) +r__bloom_weight (0.330000, 0.330000, 0.330000, 0.000000) +r__clear_models_on_unload off +r__color_grading (0.500000, 0.500000, 0.500000) +r__detail_density 0.55 +r__detail_height 1. +r__detail_radius 100 +r__dtex_range 50. +r__enable_grass_shadow off +r__exposure 1.097 +r__fakescope 1 +r__framelimit 164 +r__gamma 0.97 +r__geometry_lod 1. +r__heatvision 0 +r__lens_flares on +r__nightvision 0 +r__no_ram_textures on +r__no_scale_on_fade off +r__optimize_dynamic_geom 1 +r__optimize_shadow_geom on +r__optimize_static_geom 1 +r__saturation 1.35 +r__supersample 1 +r__tf_aniso 8 +r__tf_mipbias -0.5 +r__use_precompiled_shaders off +r__wallmark_ttl 50. +r_screenshot_mode jpg +renderer renderer_r4 +rs_c_brightness 0.985 +rs_c_contrast 0.92 +rs_c_gamma 1. +rs_cam_pos off +rs_refresh_60hz off +rs_screenmode borderless +rs_skeleton_update 32 +rs_stats off +rs_v_sync on +rs_vis_distance 1. +scope_2dtexactive 0 +scope_blur_inner 0.1 +scope_blur_outer 1. +scope_brightness 1. +scope_ca 0.003 +scope_factor 1. +scope_fog_interp 0.15 +scope_fog_radius 1.25 +scope_fog_sharp 4. +scope_fog_swayAim 0.66 +scope_fog_swayMove 0.25 +scope_fog_travel 0.25 +scope_radius 0. +sds_enable on +sds_speed_enable on +sds_zoom_enable on +shader_param_1 (1.000000, 1.000000, 1.000000, 0.100000) +shader_param_2 (0.000000, 0.000000, 0.000000, 0.000000) +shader_param_3 (0.838000, 0.847000, 0.852000, -0.005000) +shader_param_4 (1.120000, 1.120000, 1.130000, -0.420000) +shader_param_5 (1.000000, 0.000000, 0.000000, 0.000000) +shader_param_6 (0.000000, 0.000000, 2.700000, 0.600000) +shader_param_7 (1.000000, 0.550000, 0.000000, 0.000000) +shader_param_8 (0.000000, 10.100000, 100.000000, 10.000000) +slot_0 medkit +slot_1 bandage +slot_2 medkit_army +slot_3 stimpack +snd_acceleration on +snd_cache_size 256 +snd_device OpenAL Soft +snd_doppler_power 1.8 +snd_doppler_smoothing 15 +snd_efx off +snd_targets 1024 +snd_volume_eff 0.8 +snd_volume_music 0.3 +ssfx_blood_decals (0.600000, 0.600000, 0.000000, 0.000000) +ssfx_florafixes_1 (0.150000, 0.180000, 0.140000, 0.150000) +ssfx_florafixes_2 (2.000000, 1.000000, 0.000000, 0.000000) +ssfx_gloss_factor 0.192 +ssfx_gloss_method 1 +ssfx_gloss_minmax (0.200000, 0.640000, 0.000000) +ssfx_grass_interactive (1.000000, 8.000000, 2000.000000, 1.000000) +ssfx_grass_shadows (1.000000, 0.350000, 30.000000, 0.000000) +ssfx_hud_drops_1 (0.000000, 0.000000, 30.000000, 0.050000) +ssfx_hud_drops_2 (0.225000, 1.130000, 0.000000, 2.000000) +ssfx_int_grass_params_1 (1.000000, 1.000000, 1.000000, 25.000000) +ssfx_int_grass_params_2 (1.000000, 5.000000, 0.300000, 2.000000) +ssfx_is_underground 0 +ssfx_lightsetup_1 (0.500000, 0.600000, 0.000000, 0.000000) +ssfx_lut (1.000000, 23.000000, 0.000000, 0.000000) +ssfx_rain_1 (1.000000, 0.050000, 1.200000, 2.000000) +ssfx_rain_2 (0.840000, 0.090000, 1.500000, 0.500000) +ssfx_rain_3 (0.500000, 1.000000, 0.000000, 0.000000) +ssfx_shadow_bias (0.400000, 0.030000, 0.000000) +ssfx_shadow_cascades (20.000000, 60.000000, 160.000000) +ssfx_shadows (128.000000, 2048.000000, 0.000000) +ssfx_ssr (1.000000, 0.110000, 0.600000, 0.000000) +ssfx_ssr_2 (0.000000, 1.300000, 1.000000, 0.015000) +ssfx_ssr_quality 0 +ssfx_terrain_offset (-0.130000, -0.130000, -0.130000, -0.130000) +ssfx_terrain_quality (6.000000, 0.000000, 0.000000, 0.000000) +ssfx_volumetric (0.000000, 1.200000, 3.000000, 2.500000) +ssfx_wetness_multiplier (1.400000, 0.500000, 0.000000) +ssfx_wetsurfaces_1 (0.500000, 1.400000, 0.700000, 1.250000) +ssfx_wetsurfaces_2 (0.800000, 1.500000, 0.200000, 0.350000) +ssfx_wind_grass (9.500000, 1.400000, 1.500000, 0.400000) +ssfx_wind_trees (11.000000, 0.150000, 0.500000, 0.150000) +ssfx_wpn_dof_1 (0.150000, 0.400000, 0.000000, 0.600000) +ssfx_wpn_dof_2 0.15 +string_table_error_msg 0 +texture_lod 2 +time_factor 1.000000 +use_english_text_for_missing_translations 1 +vid_mode 2560x1440 +weapon_sway on +wpn_aim_toggle off +wpn_degradation 0.5 +zoom_step_count 3. diff --git a/mods/[REQUIRED] Modpack Data/appdata/user.ltx b/mods/[REQUIRED] Modpack Data/appdata/user.ltx index d1e04caa..612c4614 100644 --- a/mods/[REQUIRED] Modpack Data/appdata/user.ltx +++ b/mods/[REQUIRED] Modpack Data/appdata/user.ltx @@ -13,8 +13,8 @@ bind right kRIGHT bind up kUP bind down kDOWN bind jump kSPACE -bind crouch kLCONTROL -bind accel kCAPITAL +bind crouch kC +bind accel kUNLABELED bind sprint_toggle kLSHIFT bind forward kW bind back kS @@ -22,10 +22,10 @@ bind lstrafe kA bind rstrafe kD bind llookout kQ bind rlookout kE -bind cam_zoom_in kT +bind cam_2 kKANJI +bind cam_3 kNOCONVERT bind cam_zoom_out kLBRACKET bind torch kL -bind night_vision kN bind show_detector kO bind wpn_1 k1 bind wpn_2 k2 @@ -33,22 +33,21 @@ bind wpn_3 k3 bind wpn_4 k4 bind wpn_5 k5 bind wpn_6 k6 -bind wpn_next kY bind wpn_fire mouse1 bind wpn_zoom mouse2 bind wpn_reload kR -bind wpn_func kV +bind wpn_func kSCROLL bind wpn_firemode_prev k9 bind wpn_firemode_next k0 bind pause kPAUSE bind drop kRBRACKET bind use kF -bind scores kH +bind scores kY bind screenshot kF12 bind quit kESCAPE bind console kGRAVE bind inventory kTAB -bind active_jobs kP +bind active_jobs kF14 bind quick_use_1 kF1 bind quick_use_2 kF2 bind quick_use_3 kF3 @@ -60,12 +59,9 @@ bind custom2 kNUMPAD2 bind custom3 kNUMPAD3 bind custom4 kNUMPAD4 bind custom5 kNUMPAD5 -bind custom6 kNUMPAD0 -bind custom13 k7 bind custom14 k8 bind custom15 kAPOSTROPHE bind custom17 kF7 -bind custom18 mouse3 bind safemode mouse4 bind freelook kLMENU cam_inert 0. @@ -83,8 +79,8 @@ first_person_death_direction_smoothing 12 first_person_death_near_plane_offset 0. first_person_death_position_offset (0.000000, 0.000000, 0.000000) first_person_death_position_smoothing 6 -fov 78. -freelook_cam_limit 0.66 +fov 74. +freelook_cam_limit 0.7 g_3d_pda on g_always_active off g_autopickup on @@ -93,19 +89,23 @@ g_crosshair_color (255, 255, 255, 255) g_crouch_toggle on g_dead_body_collision actor_only g_dispersion_base 0. -g_dispersion_factor 1. +g_dispersion_factor 3. g_dynamic_music off +g_end_modif 0. g_feel_grenade off +g_firepos off g_freelook_toggle off g_game_difficulty gd_novice +g_god on g_hit_pwr_modif 1. g_important_save on g_ironsights_zoom_factor 1.25 g_lookout_toggle off g_multi_item_pickup off g_simple_pda on -g_sleep_time 1 +g_sleep_time 6 g_sprint_toggle off +g_unlimitedammo off g_use_tracers on g_walk_toggle on head_bob_factor 1. @@ -116,12 +116,13 @@ heat_vision_mode 0. heat_vision_steps (0.450000, 0.650000, 0.760000, 0.000000) hud_crosshair off hud_crosshair_dist off -hud_draw on -hud_fov 0.54 +hud_draw off +hud_fov 0.57 hud_info on hud_weapon on keyboard_buffer_size 128 keypress_on_start on +log_missing_ini off log_timestamps 0 lua_gcstep 400 monster_stuck_fix 0 @@ -136,11 +137,12 @@ particle_update_mod 1. pda_map_zoom_in_to_mouse 1 pda_map_zoom_out_to_mouse 1 ph_frequency 100.00000 +ph_gravity 19.62 ph_iterations 18 power_loss_bias 0.2 power_loss_factor 0.5 pseudogiant_can_damage_objects_on_stomp 1 -r1_detail_textures off +r1_detail_textures on r1_dlights on r1_dlights_clip 40. r1_fog_luminance 1.1 @@ -158,7 +160,7 @@ r2_aa_weight (0.250000, 0.250000, 0.000000) r2_allow_r1_lights off r2_detail_bump on r2_dof -1.000000,0.000000,800.000000 -r2_dof_enable off +r2_dof_enable on r2_dof_radius 0.25 r2_dof_sky 30. r2_drops_control (0.000000, 0.000000, 0.000000) @@ -180,12 +182,12 @@ r2_ls_depth_bias -0.00005 r2_ls_depth_scale 1.00001 r2_ls_dsm_kernel 0.7 r2_ls_psm_kernel 0.7 -r2_ls_squality 1. +r2_ls_squality 1.4 r2_ls_ssm_kernel 0.7 r2_mask_control (0.000000, 0.000000, 0.000000, 0.000000) r2_mblur 0. -r2_mblur_enabled off -r2_parallax_h 0.02 +r2_mblur_enabled on +r2_parallax_h 0. r2_qsync 0 r2_shadow_cascede_old off r2_slight_fade 0.5 @@ -194,37 +196,37 @@ r2_soft_particles on r2_soft_water on r2_ss_sunshafts_length 1. r2_ss_sunshafts_radius 1. -r2_ssa_lod_a 64. -r2_ssa_lod_b 48. -r2_ssao st_opt_high +r2_ssa_lod_a 32. +r2_ssa_lod_b 32. +r2_ssao st_opt_off r2_ssao_blur off r2_ssao_half_data off r2_ssao_hbao off r2_ssao_hdao off -r2_ssao_mode default +r2_ssao_mode disabled r2_ssao_opt_data off -r2_steep_parallax on +r2_steep_parallax off r2_sun on r2_sun_depth_far_bias -0.00002 -r2_sun_depth_far_scale 0.99978 -r2_sun_depth_near_bias 0.00001 -r2_sun_depth_near_scale 0.9997 -r2_sun_details off +r2_sun_depth_far_scale 1. +r2_sun_depth_near_bias 0.00007 +r2_sun_depth_near_scale 1. +r2_sun_details on r2_sun_far 100. r2_sun_focus on -r2_sun_lumscale 2.96 -r2_sun_lumscale_amb 1.32 -r2_sun_lumscale_hemi 1.5 -r2_sun_near 20. +r2_sun_lumscale 1.8 +r2_sun_lumscale_amb 1.8 +r2_sun_lumscale_hemi 1.2 +r2_sun_near 15. r2_sun_near_border 0.75 r2_sun_quality st_opt_medium r2_sun_tsm on r2_sun_tsm_bias -0.01 r2_sun_tsm_proj 0.3 -r2_sunshafts_min 0. -r2_sunshafts_mode combined -r2_sunshafts_quality st_opt_medium -r2_sunshafts_value 0.75 +r2_sunshafts_min 0.24 +r2_sunshafts_mode volumetric +r2_sunshafts_quality st_opt_low +r2_sunshafts_value 0.6 r2_terrain_z_prepass off r2_tnmp_a 0.15 r2_tnmp_b 0.5 @@ -252,27 +254,27 @@ r3_dynamic_wet_surfaces_far 30. r3_dynamic_wet_surfaces_near 70. r3_dynamic_wet_surfaces_sm_res 128 r3_minmax_sm off -r3_msaa st_opt_off +r3_msaa 2x r3_msaa_alphatest st_opt_off -r3_use_dx10_1 off +r3_use_dx10_1 on r3_volumetric_smoke on -r4_enable_tessellation on +r4_enable_tessellation off r4_wireframe off -r__actor_shadow on +r__actor_shadow off r__bloom_thresh (0.700000, 0.800000, 0.900000, 0.000000) r__bloom_weight (0.330000, 0.330000, 0.330000, 0.000000) r__clear_models_on_unload off -r__color_grading (0.440000, 0.440000, 0.500000) -r__detail_density 0.6 +r__color_grading (0.500000, 0.500000, 0.500000) +r__detail_density 0.55 r__detail_height 1. -r__detail_radius 150 +r__detail_radius 100 r__dtex_range 50. r__enable_grass_shadow off -r__exposure 1. +r__exposure 1.097 r__fakescope 1 r__framelimit 164 r__gamma 0.97 -r__geometry_lod 0.75 +r__geometry_lod 1. r__heatvision 0 r__lens_flares on r__nightvision 0 @@ -281,7 +283,7 @@ r__no_scale_on_fade off r__optimize_dynamic_geom 1 r__optimize_shadow_geom on r__optimize_static_geom 1 -r__saturation 0.93 +r__saturation 1.35 r__supersample 1 r__tf_aniso 8 r__tf_mipbias -0.5 @@ -298,7 +300,7 @@ rs_screenmode borderless rs_skeleton_update 32 rs_stats off rs_v_sync on -rs_vis_distance 1.2 +rs_vis_distance 1. scope_2dtexactive 0 scope_blur_inner 0.1 scope_blur_outer 1. @@ -319,10 +321,10 @@ shader_param_1 (1.000000, 1.000000, 1.000000, 0.100000) shader_param_2 (0.000000, 0.000000, 0.000000, 0.000000) shader_param_3 (0.838000, 0.847000, 0.852000, -0.005000) shader_param_4 (1.120000, 1.120000, 1.130000, -0.420000) -shader_param_5 (0.000000, 0.000000, 0.000000, 0.000000) -shader_param_6 (0.000000, 1.000000, 0.000000, 0.000000) -shader_param_7 (0.000000, 0.000000, 1.000000, 0.000000) -shader_param_8 (0.000000, 0.000000, 0.000000, 0.000000) +shader_param_5 (1.000000, 0.000000, 0.000000, 0.000000) +shader_param_6 (0.000000, 0.000000, 2.700000, 0.600000) +shader_param_7 (1.000000, 0.550000, 0.000000, 0.000000) +shader_param_8 (0.000000, 10.100000, 100.000000, 10.000000) slot_0 medkit slot_1 bandage slot_2 medkit_army @@ -334,44 +336,44 @@ snd_doppler_power 1.8 snd_doppler_smoothing 15 snd_efx off snd_targets 1024 -snd_volume_eff 0.1 -snd_volume_music 1. +snd_volume_eff 0.8 +snd_volume_music 0.3 ssfx_blood_decals (0.600000, 0.600000, 0.000000, 0.000000) ssfx_florafixes_1 (0.150000, 0.180000, 0.140000, 0.150000) ssfx_florafixes_2 (2.000000, 1.000000, 0.000000, 0.000000) -ssfx_gloss_factor 0.576 +ssfx_gloss_factor 0.192 ssfx_gloss_method 1 -ssfx_gloss_minmax (0.600000, 0.920000, 0.000000) +ssfx_gloss_minmax (0.200000, 0.640000, 0.000000) ssfx_grass_interactive (1.000000, 8.000000, 2000.000000, 1.000000) -ssfx_grass_shadows (0.000000, 0.350000, 30.000000, 0.000000) +ssfx_grass_shadows (1.000000, 0.350000, 30.000000, 0.000000) ssfx_hud_drops_1 (0.000000, 0.000000, 30.000000, 0.050000) ssfx_hud_drops_2 (0.225000, 1.130000, 0.000000, 2.000000) ssfx_int_grass_params_1 (1.000000, 1.000000, 1.000000, 25.000000) ssfx_int_grass_params_2 (1.000000, 5.000000, 0.300000, 2.000000) ssfx_is_underground 0 ssfx_lightsetup_1 (0.500000, 0.600000, 0.000000, 0.000000) -ssfx_lut (1.000000, 20.000000, 0.000000, 0.000000) -ssfx_rain_1 (2.000000, 0.100000, 0.600000, 2.000000) -ssfx_rain_2 (0.650000, 0.120000, 1.500000, 0.500000) +ssfx_lut (1.000000, 23.000000, 0.000000, 0.000000) +ssfx_rain_1 (1.000000, 0.050000, 1.200000, 2.000000) +ssfx_rain_2 (0.840000, 0.090000, 1.500000, 0.500000) ssfx_rain_3 (0.500000, 1.000000, 0.000000, 0.000000) ssfx_shadow_bias (0.400000, 0.030000, 0.000000) ssfx_shadow_cascades (20.000000, 60.000000, 160.000000) -ssfx_shadows (256.000000, 2048.000000, 0.000000) +ssfx_shadows (128.000000, 2048.000000, 0.000000) ssfx_ssr (1.000000, 0.110000, 0.600000, 0.000000) ssfx_ssr_2 (0.000000, 1.300000, 1.000000, 0.015000) ssfx_ssr_quality 0 -ssfx_terrain_offset (-0.070000, -0.050000, 0.000000, -0.050000) +ssfx_terrain_offset (-0.130000, -0.130000, -0.130000, -0.130000) ssfx_terrain_quality (6.000000, 0.000000, 0.000000, 0.000000) -ssfx_volumetric (0.000000, 0.020000, 1.500000, 7.142857) +ssfx_volumetric (0.000000, 1.200000, 3.000000, 2.500000) ssfx_wetness_multiplier (1.400000, 0.500000, 0.000000) ssfx_wetsurfaces_1 (0.500000, 1.400000, 0.700000, 1.250000) ssfx_wetsurfaces_2 (0.800000, 1.500000, 0.200000, 0.350000) ssfx_wind_grass (9.500000, 1.400000, 1.500000, 0.400000) -ssfx_wind_trees (11.000000, 0.150000, 0.500000, 0.100000) -ssfx_wpn_dof_1 (0.150000, 0.400000, 0.000000, 1.100000) +ssfx_wind_trees (11.000000, 0.150000, 0.500000, 0.150000) +ssfx_wpn_dof_1 (0.150000, 0.400000, 0.000000, 0.600000) ssfx_wpn_dof_2 0.15 string_table_error_msg 0 -texture_lod 1 +texture_lod 2 time_factor 1.000000 use_english_text_for_missing_translations 1 vid_mode 2560x1440 diff --git a/mods/[REQUIRED] Modpack Data/gamedata/configs/axr_options.ltx b/mods/[REQUIRED] Modpack Data/gamedata/configs/axr_options.ltx index db6249b5..c3f64ca4 100644 --- a/mods/[REQUIRED] Modpack Data/gamedata/configs/axr_options.ltx +++ b/mods/[REQUIRED] Modpack Data/gamedata/configs/axr_options.ltx @@ -1102,7 +1102,7 @@ pawsys/pawgen/disable_mcmups = false pawsys/pawgen/enabled = true pawsys/pawgen/mcm_update_throttle = - pawsys/pawgen/mcm_ver = 2.0.2 + pawsys/pawgen/mcm_ver = 2.1.2 pawsys/pawgen/mwheel_poll_interval = pawsys/pawgen/pin_far_fade_dist = 100 pawsys/pawgen/pin_far_hide_dist = 150 @@ -1119,7 +1119,10 @@ pawsys/pawgen/welcome_msg_shown = true pawsys/pawgen/wipe_all = false pawsys/pawgen/wp_clear_dist = 5 + pawsys/pawgen/wp_far_fade_dist = 100 + pawsys/pawgen/wp_far_hide_dist = 150 pawsys/pawgen/wp_hud_icon_enabled = true + pawsys/pawgen/wp_near_fade_dist = 5 pawsys/pawhud/active_theme = minimal_v pawsys/pawhud/autohide = 5 pawsys/pawhud/custompos = true @@ -1129,7 +1132,9 @@ pawsys/pawhud/preview_aspect = 16_9 pawsys/pawhud/widget_enable = true pawsys/pawmenu/cm_dbg = + pawsys/pawmenu/convert_to_pin = 2 pawsys/pawmenu/hide_all_pins = 2 + pawsys/pawmenu/hide_label = 4 pawsys/pawmenu/hud_vis_off = 4 pawsys/pawmenu/hud_vis_on = 4 pawsys/pawmenu/lock_pin = 2 @@ -1139,19 +1144,22 @@ pawsys/pawmenu/pn_clr = 0 pawsys/pawmenu/pn_del = 4 pawsys/pawmenu/pn_ren = 4 + pawsys/pawmenu/pn_settings = 4 pawsys/pawmenu/show_all_pins = 2 + pawsys/pawmenu/show_label = 2 pawsys/pawmenu/unlock_pin = 4 pawsys/pawmenu/waypoint_redesc = 2 pawsys/pawmenu/waypoint_rename = 2 pawsys/pawmenu/wp_del = 4 pawsys/pawmenu/wp_mov = 4 pawsys/pawmenu/wp_set = 4 + pawsys/pawmenu/wp_settings = 4 pawsys/pawpins/custom_pin_icon = user_defined pawsys/pawpins/milpda_body_icon = bodyoff pawsys/pawpins/patch_res = badge_hr pawsys/pawpins/pin_icon_group = bwhr pawsys/pawpins/poi_icon_bodies = death_small - pawsys/pawpins/poi_icon_bwhr = bwhr_info + pawsys/pawpins/poi_icon_bwhr = bwhr_stash pawsys/pawpins/poi_icon_faves = bwhr_magn pawsys/pawpins/poi_icon_npcs = diamond_friendly pawsys/pawpins/poi_icon_patches = stalker @@ -1224,8 +1232,8 @@ scop/scop_fov = 0.4 scop/scope_fov = 0.4 selfkill/keybind_mcm = 14 - session_id = 332 - session_start = 1710911434000 + session_id = 335 + session_start = 1710922823000 sleep_timelapse/alifeOptimize = true sleep_timelapse/alifeSleepRadius = 75 sleep_timelapse/camUpdateTotalTime = 2500 @@ -1417,7 +1425,7 @@ the_collector/minimum_objects_for_income = 5 the_collector/money_per_object = 50 the_collector/scale_by_quality = true - tmmr/npc_wounded_anim_fix/handle_weapon = 0 + tmmr/npc_wounded_anim_fix/handle_weapon = 2 toggle_scope/key_bind_toggle = 22 ui_popup_messages/apm_main/animate_style = BackEaseOutQuadratic ui_popup_messages/apm_main/animation_time = 500 @@ -2629,7 +2637,7 @@ alife/warfare/zombied/target_stronger_priority = 1 alife/warfare/zombied/target_weaker_priority = 0 alife/warfare/zombied/territory_priority = -5 - control/general/aim_toggle = false + control/general/aim_toggle = true control/general/crouch_toggle = true control/general/disassembly_warning = true control/general/mouse_sens = 0.071 diff --git a/mods/[REQUIRED] Weapon Repositions/gamedata/configs/mod_system_ewr_smgs.ltx b/mods/[REQUIRED] Weapon Repositions/gamedata/configs/mod_system_ewr_smgs.ltx index 0325ec7c..7c978c90 100644 --- a/mods/[REQUIRED] Weapon Repositions/gamedata/configs/mod_system_ewr_smgs.ltx +++ b/mods/[REQUIRED] Weapon Repositions/gamedata/configs/mod_system_ewr_smgs.ltx @@ -32,6 +32,12 @@ aim_hud_offset_pos_16x9 = -0.039867, 0.028554, -0.0585 aim_hud_offset_rot = 0.022429, 0.011248, -0.135888 aim_hud_offset_rot_16x9 = 0.022429, 0.011248, -0.135888 + +![wpn_ak74u_tac_1p76_hud] + aim_hud_offset_pos = -0.04723, 0.015552, -0.0585 + aim_hud_offset_pos_16x9 = -0.04723, 0.015552, -0.0585 + aim_hud_offset_rot = -0.002522, 0.003505, -0.135888 + aim_hud_offset_rot_16x9 = -0.002522, 0.003505, -0.135888 ![wpn_aks74_1p29] position = -0.026, -0.175, 0 diff --git a/mods/bhsro_surgerykit/meta.ini b/mods/bhsro_surgerykit/meta.ini index b0bdedc4..ae734271 100644 --- a/mods/bhsro_surgerykit/meta.ini +++ b/mods/bhsro_surgerykit/meta.ini @@ -3,7 +3,7 @@ gameName=stalkeranomaly modid=0 version=d2024.3.16.0 newestVersion= -category="-1," +category="16," nexusFileStatus=1 installationFile=bhsro_surgerykit.zip repository=Nexus diff --git a/profiles/Default/modlist.txt b/profiles/Default/modlist.txt index 15cae85b..f17d07e3 100644 --- a/profiles/Default/modlist.txt +++ b/profiles/Default/modlist.txt @@ -1,5 +1,6 @@ # This file was automatically generated by Mod Organizer. -Unmanaged_separator +-[DEV] Custom Traders -[DEV] Brotherhood -[DEV] Backpack Drops -[DEV] Weapon Repositions @@ -34,10 +35,6 @@ +Enhanced Shaders and Color Grading +Aydins Grass Tweaks - SSS Terrain LOD Compatiblity +Aydin's Grass Tweaks -+Redone Radar and Red Forest -+Redone Limansk and Hospital -+Redone Pripyat and Juipiter -+Redone Collection +Enhanced Graphical User Interface +bhsro_surgerykit +Body Health System Realistic Overhaul @@ -46,6 +43,10 @@ -Last Load and Overrides_separator +Usable Bar Doors +Alternate Fake Start ++Redone Radar and Red Forest ++Redone Limansk and Hospital ++Redone Pripyat and Juipiter ++Redone Collection +New Levels - UI Fixes +New Levels -Locations and Levels_separator diff --git a/profiles/Development/modlist.txt b/profiles/Development/modlist.txt index f3352549..06697335 100644 --- a/profiles/Development/modlist.txt +++ b/profiles/Development/modlist.txt @@ -1,5 +1,5 @@ -# This file was automatically generated by Mod Organizer. -Unmanaged_separator +-[DEV] Custom Traders +[DEV] Brotherhood -[DEV] Backpack Drops -[DEV] Weapon Repositions @@ -34,10 +34,6 @@ -Enhanced Shaders and Color Grading -Aydins Grass Tweaks - SSS Terrain LOD Compatiblity -Aydin's Grass Tweaks --Redone Radar and Red Forest --Redone Limansk and Hospital --Redone Pripyat and Juipiter --Redone Collection -Enhanced Graphical User Interface -bhsro_surgerykit -Body Health System Realistic Overhaul @@ -46,6 +42,10 @@ -Last Load and Overrides_separator -Usable Bar Doors -Alternate Fake Start +-Redone Radar and Red Forest +-Redone Limansk and Hospital +-Redone Pripyat and Juipiter +-Redone Collection -New Levels - UI Fixes -New Levels -Locations and Levels_separator