diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index ead081d05f3..7fe6cd624c8 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -65,6 +65,7 @@ SUBSYSTEM_DEF(input) macroset_classic_input["\"Ctrl+[key]+UP\""] = "\"KeyUp [istext(classic_ctrl_override_keys[key])? classic_ctrl_override_keys[key] : key]\"" // Misc macroset_classic_input["Ctrl+Tab"] = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_HOTKEYS] map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"" + macroset_classic_input["Ctrl"] = null macroset_classic_input["Escape"] = "\".winset \\\"input.text=\\\"\\\"\\\"\"" // FINALLY, WE CAN DO SOMETHING MORE NORMAL FOR THE SNOWFLAKE-BUT-LESS KEYSET. @@ -73,6 +74,7 @@ SUBSYSTEM_DEF(input) "Any" = "\"KeyDown \[\[*\]\]\"", "Any+UP" = "\"KeyUp \[\[*\]\]\"", "Ctrl+Tab" = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_INPUT] input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", + "Ctrl" = null, "Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", ) @@ -82,6 +84,7 @@ SUBSYSTEM_DEF(input) "Any" = "\"KeyDown \[\[*\]\]\"", "Any+UP" = "\"KeyUp \[\[*\]\]\"", "Ctrl+Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", + "Ctrl" = null, "Escape" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", ) diff --git a/code/controllers/subsystem/monster_wave.dm b/code/controllers/subsystem/monster_wave.dm index a6f300a59c7..6623862642f 100644 --- a/code/controllers/subsystem/monster_wave.dm +++ b/code/controllers/subsystem/monster_wave.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(monster_wave) /// How long it takes from when the spawnermob thing spawns to when it turns into a nest var/spawn_delay = 15 MINUTES /// how long after being blocked will we hold off on trying to spawn stuff there? - var/spawn_block_delay = 5 MINUTES + var/spawn_block_delay = 1 MINUTES /// coords of spawn blocker devices per Z level var/list/spawn_blockers = list() // list(/obj/structure/respawner_blocker) var/num_spawned = 0 @@ -209,11 +209,10 @@ SUBSYSTEM_DEF(monster_wave) /mob/living/simple_animal/nest_spawn_hole_guy/proc/deploy_if_ready(do_it_now) if(!nest_seed) return - if(SSmonster_wave.is_spawn_blocked(src)) - death() - return if(!COOLDOWN_FINISHED(src, spawn_after) && !do_it_now) return + if(SSmonster_wave.is_spawn_blocked(src)) + return if(locate(/obj/structure/nest) in get_turf(src)) death() return TRUE @@ -235,10 +234,11 @@ SUBSYSTEM_DEF(monster_wave) if(shhh_im_dead) return for(var/obj/structure/respawner_blocker/RB in SSmonster_wave.spawn_blockers) + if(RB.z != z) + continue if(get_dist(src, RB) <= RB.protection_radius) - if(RB.killing_something) + if(!RB.killmeplease(src)) // kill me, daddy continue - RB.killmeplease(src) // kill me, daddy return /mob/living/simple_animal/nest_spawn_hole_guy/proc/unbirth() @@ -306,9 +306,10 @@ SUBSYSTEM_DEF(monster_wave) my_bean.Start() playsound(src, 'sound/machines/shoot_respawn_killer.ogg', 100, FALSE) playsound(NSHG, 'sound/machines/shoot_respawn_killer.ogg', 100, FALSE) + return TRUE /obj/structure/respawner_blocker/proc/kill_it() - if(!killing_something || killing_something.shhh_im_dead != src) + if(!killing_something) return my_bean.End() my_bean = null diff --git a/code/controllers/subsystem/recoil.dm b/code/controllers/subsystem/recoil.dm index 886b9e8e17a..fbd66bb7d9b 100644 --- a/code/controllers/subsystem/recoil.dm +++ b/code/controllers/subsystem/recoil.dm @@ -42,7 +42,7 @@ SUBSYSTEM_DEF(recoil) // var/recoil_equation_subtract = 0 // var/recoil_equation_multiply = 0.98 // var/recoil_equation_exponent = 0.98 - // var/recoil_equation_fuck_it_just_gauss_it = 1 + // var/recoil_equation_frick_it_just_gauss_it = 1 // var/list/recoil_equation = list() // var/recoil_index = 1 /// forewarning: statistics are hard @@ -86,9 +86,9 @@ SUBSYSTEM_DEF(recoil) var/recoil_offset_premult = 80 var/recoil_offset_postmult = 0.01 - var/recoil_wielded_reward = 0.5 + var/recoil_wielded_reward = 0.85 - var/turbofuck_threshold = 10 + var/turbofrick_threshold = 5 /// GLobal multiplier to converting recoil into spread var/recoil_to_spread_mult = 1 @@ -109,7 +109,7 @@ SUBSYSTEM_DEF(recoil) /datum/controller/subsystem/recoil/Initialize(start_timeofday) if(!generate_recoil_datum()) // generate a recoil datum we can rely on always being there for us - message_admins("Recoil system failed to initialize! Shit's broken!") + message_admins("Recoil system failed to initialize! shoot's broken!") for(var/i in 1 to (1 << RECOIL_DTIME_SHIFT)) delta_time_list += wait //generate_recoil_equation() @@ -159,24 +159,27 @@ SUBSYSTEM_DEF(recoil) /datum/controller/subsystem/recoil/proc/get_output_offset(spread, mob/living/shotter, obj/item/gun/shoot) spread += get_offset(shotter, FALSE, TRUE) spread = clamp(spread, 0, recoil_max_spread) - if(spread <= recoil_offset_low_spread_threshold) // low spread is tightened up a bit - return (rand(-spread * recoil_offset_premult, spread * recoil_offset_premult) * recoil_offset_postmult) var/mean = spread * recoil_equation_gauss_mean_mult var/std = spread * recoil_equation_gauss_std_mult - var/turbofuck_unwielded_spread = FALSE + var/turbofrick_unwielded_spread = FALSE var/turboreward_wielded_spread = FALSE + var/pro_shooter = isatom(shotter) && HAS_TRAIT(shotter,TRAIT_NICE_SHOT) if(istype(shoot)) var/datum/gun_recoil/gunshoot = get_gun_recoil_datum(shoot.recoil_tag) - if(spread > turbofuck_threshold && istype(shoot)) - if(!shoot.wielded && gunshoot.unwielded_recoil_mod > 1 && gunshoot.scoot > 0) - turbofuck_unwielded_spread = TRUE // hodl it right - mean = spread - std = spread //fuck you wield it - else if(shoot.wielded) // yay you wielded it! - turboreward_wielded_spread = TRUE - /// turns out this proc is cheap as fuck + if(!pro_shooter && !shoot.wielded && gunshoot.unwielded_recoil_mod > 1 && gunshoot.scoot > 0) + turbofrick_unwielded_spread = TRUE // hodl it right + mean = spread + std = spread //frick you wield it + else if(shoot.wielded) // yay you wielded it! + turboreward_wielded_spread = TRUE + if(!recoil_max_spread && spread <= recoil_offset_low_spread_threshold) // low spread is tightened up a bit + return (rand(-spread * recoil_offset_premult, spread * recoil_offset_premult) * recoil_offset_postmult) + if(pro_shooter && !turbofrick_unwielded_spread) + std /= 4 // lucky number 7 + mean *= 0.5 + /// turns out this proc is cheap as frick var/my_angle = gaussian(mean, std) * pick(1, -1) - if(turbofuck_unwielded_spread) // and tack on some extra spread, just for good measure + if(!pro_shooter && turbofrick_unwielded_spread) // and tack on some extra spread, just for good measure my_angle += (rand(1,15) * SIGN(my_angle)) if(turboreward_wielded_spread) // give em a boost for wielding it my_angle *= recoil_wielded_reward @@ -189,11 +192,11 @@ SUBSYSTEM_DEF(recoil) if(HAS_TRAIT(shotter,TRAIT_LIGHT_SENSITIVITY)) // Light hurts! my_angle *= 4 // Pack tactics wont save your aim here. if(HAS_TRAIT(shotter,TRAIT_FEV)) //You really shouldn't try this at home. - my_angle *= 5 //YOU AINT HITTING SHIT BROTHA. REALLY. + my_angle *= 5 //YOU AINT HITTING shoot BROTHA. REALLY. if(HAS_TRAIT(shotter,TRAIT_PHOBIC)) // Panicking! my_angle *= 6 // RUN OR SHOOT?!?1 - return round(clamp(my_angle, 0, recoil_max_spread), 0.1) + return round(clamp(my_angle, -recoil_max_spread, recoil_max_spread), 0.1) ////////////// MOB RECOIL STUFF ////////////// /datum/controller/subsystem/recoil/proc/kickback(mob/living/user, atom/my_weapon, recoil_tag = RECOIL_TAG_DEFAULT, recoil_in = 1) @@ -831,34 +834,34 @@ SUBSYSTEM_DEF(recoil) // /datum/controller/subsystem/recoil/proc/generate_recoil_equation() // recoil_equation = list() -// if(recoil_equation_fuck_it_just_gauss_it) +// if(recoil_equation_frick_it_just_gauss_it) // possibly_the_worst_implementation_of_gaussian_distribution_known_to_furries() // return // for(var/offset in 1 to MAX_ACCURACY_OFFSET) -// var/list/fucksmall_list_of_numbers = list() +// var/list/fricksmall_list_of_numbers = list() // for(var/i in 1 to offset) // var/random_ass_angle = (offset + 1) - i // random_ass_angle -= recoil_equation_subtract // random_ass_angle *= recoil_equation_multiply // random_ass_angle = random_ass_angle ** recoil_equation_exponent -// fucksmall_list_of_numbers += random_ass_angle -// fucksmall_list_of_numbers += -random_ass_angle -// recoil_equation += fucksmall_list_of_numbers +// fricksmall_list_of_numbers += random_ass_angle +// fricksmall_list_of_numbers += -random_ass_angle +// recoil_equation += fricksmall_list_of_numbers -// /// Generates a fuckton of numbers through gaussian distribution, truncates the result to, oh, a decimal, and arranges them in a list -// /// Then, stuffs them into a list to be used as a weighted probability bullshit. Numbers above the list will be clamped to the list of the list +// /// Generates a frickton of numbers through gaussian distribution, truncates the result to, oh, a decimal, and arranges them in a list +// /// Then, stuffs them into a list to be used as a weighted probability bullshoot. Numbers above the list will be clamped to the list of the list // /datum/controller/subsystem/recoil/proc/possibly_the_worst_implementation_of_gaussian_distribution_known_to_furries() // var/time_now = world.time // message_admins("Running an expensive gaussian distribution proc, like, a million times.") // recoil_equation = list() // recoil_equation.len = MAX_ACCURACY_OFFSET // for(var/offset in 1 to MAX_ACCURACY_OFFSET) -// var/list/fuckhuge_list_of_numbers = list() +// var/list/frickhuge_list_of_numbers = list() // for(var/i in 1 to (2000)) // lol // var/randum_number = gaussian(offset * recoil_equation_gauss_mean_mult, offset * recoil_equation_gauss_std_mult) -// fuckhuge_list_of_numbers += randum_number -// fuckhuge_list_of_numbers += -randum_number -// recoil_equation[offset] = fuckhuge_list_of_numbers -// message_admins("That fucking proc took [(world.time - time_now)*0.1] seconds.") // wow it only took 0.3 seconds, I am legit impresed byond +// frickhuge_list_of_numbers += randum_number +// frickhuge_list_of_numbers += -randum_number +// recoil_equation[offset] = frickhuge_list_of_numbers +// message_admins("That fricking proc took [(world.time - time_now)*0.1] seconds.") // wow it only took 0.3 seconds, I am legit impresed byond diff --git a/code/datums/components/crafting/recipes/recipes_forge.dm b/code/datums/components/crafting/recipes/recipes_forge.dm index 40f7f29cb8e..d85df178fa2 100644 --- a/code/datums/components/crafting/recipes/recipes_forge.dm +++ b/code/datums/components/crafting/recipes/recipes_forge.dm @@ -20,7 +20,7 @@ result = /obj/item/sharpener reqs = list( /obj/item/ingot/titanium = 1, - /obj/item/stack/sheet/plasteel = 10, + /obj/item/stack/sheet/plasteel = 1, /obj/item/stack/sheet/mineral/diamond = 1, ) tools = list(TOOL_WORKBENCH) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index 367d6d71e2b..f09ea476af0 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -96,7 +96,17 @@ * Honestly this is mostly just a rehash of [/obj/item/ammo_casing/proc/fire_casing()] for pellet counts > 1, except this lets us tamper with the pellets and hook onto them for tracking purposes. * The arguments really don't matter, this proc is triggered by COMSIG_PELLET_CLOUD_INIT which is only for this really, it's just a big mess of the state vars we need for doing the stuff over here. */ -/datum/component/pellet_cloud/proc/create_casing_pellets(obj/item/ammo_casing/shell, atom/target, mob/living/user, fired_from, randomspread, spread, zone_override, params, distro) +/datum/component/pellet_cloud/proc/create_casing_pellets( + obj/item/ammo_casing/shell, + atom/target, + mob/living/user, + fired_from, + randomspread, + spread, + zone_override, + params, + distro +) shooter = user var/targloc = get_turf(target) if(!zone_override) @@ -104,11 +114,11 @@ for(var/i in 1 to num_pellets) shell.ready_proj(target, user, SUPPRESSED_VERY, zone_override, fired_from) - var/angle_out = clamp(distro, -MAX_ACCURACY_OFFSET, MAX_ACCURACY_OFFSET) + var/angle_out = clamp(spread, -MAX_ACCURACY_OFFSET, MAX_ACCURACY_OFFSET) /// Distro is the angle offset the whole thing will be centered on /// spread is the max deviation from that center the pellets can be if(randomspread) - angle_out += rand(-spread, spread) * 0.5 + angle_out += rand(-distro, distro) * 0.5 else //Smart spread angle_out = round((i / num_pellets - 0.5) * max(distro, 1)) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index fe53761b109..578761700f8 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -1688,7 +1688,7 @@ GLOBAL_LIST_INIT(security_expert, list( desc = "You're a better than average shot." value = 44 category = "Ranged Quirks" - mechanics = "Your accuracy degrades much slower from movement, firing, or anything else." + mechanics = "Adjusts various accuracy equations to be more in your favor. In general, you're about twice as accurate with guns, and suffer less penalties from one-handing two-hand guns." conflicts = list( /datum/quirk/clumsy, /datum/quirk/deadeye, diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm index ddd1ae2807b..54b86147983 100644 --- a/code/modules/cargo/packs/materials.dm +++ b/code/modules/cargo/packs/materials.dm @@ -13,90 +13,6 @@ ///////////////////////////// Materials ////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// -/datum/supply_pack/materials/cardboard50 - goody = PACK_GOODY_PUBLIC - name = "50 Cardboard Sheets" - desc = "Create a bunch of boxes." - cost = 400 //thrice their export value - contains = list(/obj/item/stack/sheet/cardboard/fifty) - -/datum/supply_pack/materials/glass50 - goody = PACK_GOODY_PUBLIC - name = "50 Glass Sheets" - desc = "Let some nice light in with fifty glass sheets!" - cost = 400 //double their export value - contains = list(/obj/item/stack/sheet/glass/fifty) - -/datum/supply_pack/materials/metal50 - goody = PACK_GOODY_PUBLIC - name = "50 Metal Sheets" - desc = "Any construction project begins with a good stack of fifty metal sheets!" - cost = 400 //double their export value - contains = list(/obj/item/stack/sheet/metal/fifty) - -/datum/supply_pack/materials/brick50 - goody = PACK_GOODY_PUBLIC - name = "50 Bricks" - desc = "Set a nice foundation with brick and mortar!" - cost = 400 //double their export value - contains = list(/obj/item/stack/sheet/mineral/brick/fifty) - -/datum/supply_pack/materials/plasteel20 - goody = PACK_GOODY_PUBLIC - name = "20 Plasteel Sheets" - desc = "Reinforce the station's integrity with twenty plasteel sheets!" - cost = 4000 - contains = list(/obj/item/stack/sheet/plasteel/twenty) - -/datum/supply_pack/materials/plastic50 - goody = PACK_GOODY_PUBLIC - name = "50 Plastic Sheets" - desc = "Build a limitless amount of toys with fifty plastic sheets!" - cost = 400 // double their export - contains = list(/obj/item/stack/sheet/plastic/twenty) - -/datum/supply_pack/materials/sandstone30 - goody = PACK_GOODY_PUBLIC - name = "30 Sandstone Blocks" - desc = "Neither sandy nor stoney, these thirty blocks will still get the job done." - cost = 400 // five times their export - contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) - -/datum/supply_pack/materials/wood50 - goody = PACK_GOODY_PUBLIC - name = "50 Wood Planks" - desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty wooden planks!" - cost = 400 // 6-7 planks shy from having equal import/export prices - contains = list(/obj/item/stack/sheet/mineral/wood/twenty) - -/datum/supply_pack/materials/prewaralloyingot - goody = PACK_GOODY_PUBLIC - name = "1 Ultrasteel Ingot" - desc = "Ingots salvaged from a Pre-War factory, valuable in the right hands." - cost = 2000 - contains = list(/obj/item/ingot/adamantine - ) - -/datum/supply_pack/materials/rosesteelingot - goody = PACK_GOODY_PUBLIC - name = "1 Rose Steel Ingot" - desc = "Ingots salvaged from a Pre-War factory, valuable in the right hands." - cost = 1000 - contains = list(/obj/item/ingot/mythril - ) - -/datum/supply_pack/materials/deathclawhide - goody = PACK_GOODY_PUBLIC - name = "Five Deathclaw Hides" - desc = "Intimidate your enemies by modifying your kit with some deathclaw skin!" - cost = 6000 - contains = list(/obj/item/stack/sheet/animalhide/deathclaw, - /obj/item/stack/sheet/animalhide/deathclaw, - /obj/item/stack/sheet/animalhide/deathclaw, - /obj/item/stack/sheet/animalhide/deathclaw, - /obj/item/stack/sheet/animalhide/deathclaw - ) - /* disabled pending rework of advcrafting lootdrop /datum/supply_pack/materials/weaponparts goody = PACK_GOODY_PUBLIC diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 258c696fc61..122eecb7c69 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -405,6 +405,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// How fast the mob wobbles side to side. var/side_waddle_time = 2 + /// Button to switch from input bar to hotkey mode. + var/input_mode_hotkey = "Ctrl+Tab" + /datum/preferences/New(client/C) parent = C @@ -1344,6 +1347,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(GAME_PREFERENCES_TAB) // Game Preferences dat += "
"
dat += "General Settings" + dat += "Input Mode Hotkey: [input_mode_hotkey]" dat += "UI Style: [UI_style] " dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"] " dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"] " @@ -3614,6 +3618,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (!isnull(desiredfps)) clientfps = desiredfps parent.fps = desiredfps + if("input_mode_hotkey") + if(input_mode_hotkey == "Tab") + input_mode_hotkey = "Ctrl+Tab" + else + input_mode_hotkey = "Tab" + parent.change_input_toggle_key(input_mode_hotkey) + if("ui") var/pickedui = input(user, "Choose your UI style.", "Character Preference", UI_style) as null|anything in GLOB.available_ui_styles if(pickedui) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 2cf4dbebf59..edd4d5bf4d1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -213,6 +213,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //general preferences S["ooccolor"] >> ooccolor S["lastchangelog"] >> lastchangelog + S["input_mode_hotkey"] >> input_mode_hotkey S["UI_style"] >> UI_style S["hotkeys"] >> hotkeys S["chat_on_map"] >> chat_on_map @@ -291,6 +292,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) genital_whitelist = sanitize_text(genital_whitelist, initial(genital_whitelist)) + input_mode_hotkey = sanitize_text(input_mode_hotkey, initial(input_mode_hotkey)) UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys)) chat_on_map = sanitize_integer(chat_on_map, 0, 1, initial(chat_on_map)) @@ -395,6 +397,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //general preferences WRITE_FILE(S["ooccolor"], ooccolor) WRITE_FILE(S["lastchangelog"], lastchangelog) + WRITE_FILE(S["input_mode_hotkey"], input_mode_hotkey) WRITE_FILE(S["UI_style"], UI_style) WRITE_FILE(S["hotkeys"], hotkeys) WRITE_FILE(S["chat_on_map"], chat_on_map) diff --git a/code/modules/fallout/obj/structures/lootable/_lootable.dm b/code/modules/fallout/obj/structures/lootable/_lootable.dm index 7eacf126053..def39264af8 100644 --- a/code/modules/fallout/obj/structures/lootable/_lootable.dm +++ b/code/modules/fallout/obj/structures/lootable/_lootable.dm @@ -376,8 +376,8 @@ GLOBAL_LIST_INIT(lootable_types, list( /obj/structure/lootable/hidden_stash name = "hidden stash" desc = "Maybe I can find something to wear in here..." - icon = 'icons/fallout/objects/decals.dmi' - icon_state = "ventrusty" + icon = 'modular_coyote/icons/objects/paxilmaniacpak/loot_structures.dmi' + icon_state = "cache" loot_tier = LOOT_TIER_MID loot_type = LOOT_HIDDEN_STASH var/randomize_loot_tier = TRUE diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 7e4818ae254..b3f674ae538 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -57,6 +57,7 @@ /client/proc/ensure_keys_set(datum/preferences/prefs_override = prefs) if(SSinput.initialized) full_macro_assert(prefs_override) + change_input_toggle_key(prefs.input_mode_hotkey) /client/proc/full_macro_assert(datum/preferences/prefs_override = prefs) INVOKE_ASYNC(src,PROC_REF(do_full_macro_assert), prefs_override) // winget sleeps. @@ -185,3 +186,36 @@ if(!KB.clientside) continue .[key] = KB.clientside + +/client/proc/change_input_toggle_key(key_to_set) + set name = "Change Input Toggle Key" + set desc = "Switch input toggle between tab and ctrl+tab." + set category = "OOC" + + // figure out what key we're using + if(!(key_to_set in list("Tab", "Ctrl+Tab"))) + to_chat(src, span_warning("Invalid key [key_to_set] sent to change_input_toggle_key()")) + return + var/list/classic_hotkeys_temp = SSinput.macroset_classic_hotkey + var/key_to_remove = key_to_set == "Tab" ? "Ctrl+Tab" : "Tab" + + // set it in classic hotkey mode + classic_hotkeys_temp[key_to_set] = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_INPUT] input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"" + classic_hotkeys_temp[key_to_remove] = null + + // set it in hotkey mode + var/list/hotkeys_temp = SSinput.macroset_hotkey + hotkeys_temp[key_to_set] = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"" + hotkeys_temp[key_to_remove] = null + + // set it in classic input mode + var/list/classic_temp = SSinput.macroset_classic_input + classic_temp[key_to_set] = "\".winset \\\"mainwindow.macro=[SKIN_MACROSET_CLASSIC_HOTKEYS] map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"" + classic_temp[key_to_remove] = null + + // apply the key sets to the client + src.apply_macro_set(SKIN_MACROSET_CLASSIC_HOTKEYS, classic_hotkeys_temp) + src.apply_macro_set(SKIN_MACROSET_HOTKEYS, hotkeys_temp) + src.apply_macro_set(SKIN_MACROSET_CLASSIC_INPUT, classic_temp) + + to_chat(src, "Setting input mode toggle to [key_to_set].") diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index ab88b8e295f..da6606c0bc8 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -6,7 +6,19 @@ * BB.spread - Inaccuracy of the projectile being fired, also added to spread * Final spread out, for shotguns, is the angle that the spray pattern will be centered on */ -/obj/item/ammo_casing/proc/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, damage_multiplier = 1, penetration_multiplier = 1, projectile_speed_multiplier = 1, atom/fired_from) +/obj/item/ammo_casing/proc/fire_casing( + atom/target, + mob/living/user, + params, + distro, + quiet, + zone_override, + spread, + damage_multiplier = 1, + penetration_multiplier = 1, + projectile_speed_multiplier = 1, + atom/fired_from +) var/angle_out = calc_spread(user, spread, distro, (pellets == 1 ? variance : 0), fired_from) var/targloc = get_turf(target) @@ -20,7 +32,20 @@ if(isnull(BB)) return FALSE AddComponent(/datum/component/pellet_cloud, projectile_type, pellets) - SEND_SIGNAL(src, COMSIG_PELLET_CLOUD_INIT, target, user, fired_from, randomspread, (variance * HAS_TRAIT(user,TRAIT_CRIT_SHOT) ? 0.5 : 1), zone_override, params, angle_out) + var/varaiance_multiplier = 1 + if(HAS_TRAIT(user, TRAIT_NICE_SHOT)) + varaiance_multiplier = 0.65 + SEND_SIGNAL( + src,\ + COMSIG_PELLET_CLOUD_INIT,\ + target,\ + user,\ + fired_from,\ + randomspread,\ + angle_out,\ + zone_override,\ + params,\ + (variance * varaiance_multiplier)) // great googly moogly Ive had this backwards for HOW many years? if(istype(user)) user.DelayNextAction(considered_action = TRUE, immediate = FALSE) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4a1fd684057..6df20e62276 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -599,6 +599,8 @@ if(!isliving(target) || !LAZYLEN(faction)) return var/mob/living/maybehit = target + if(maybehit.shoot_me) + return FALSE return LAZYLEN(maybehit.faction & faction) @@ -654,8 +656,8 @@ var/list/mob/living/possible_mobs = typecache_filter_list(T, GLOB.typecache_mob) var/list/mob/mobs = list() for(var/mob/living/M in possible_mobs) - if(M.shoot_me && is_player_projectile) - return M + // if(M.shoot_me && is_player_projectile) + // return M if(!can_hit_target(M, permutated, M == original, TRUE)) continue mobs += M diff --git a/code/modules/supplykit/supplykit_items/supplykit_energy.dm b/code/modules/supplykit/supplykit_items/supplykit_energy.dm index d544e0a792c..0f978bc26a2 100644 --- a/code/modules/supplykit/supplykit_items/supplykit_energy.dm +++ b/code/modules/supplykit/supplykit_items/supplykit_energy.dm @@ -108,13 +108,13 @@ name = "Covenant Plasma Pistol" desc = "An alien looking plasma pistol with an internal self charging battery." item = /obj/item/gun/energy/laser/plasma/covpistol - cost = 40 + cost = 20 /datum/supplykit_item/energy/plasmarifle name = "Covenant Plasma Rifle" desc = "An alien looking plasma rifle with an internal self charging battery." item = /obj/item/gun/energy/laser/plasma/plasmacov - cost = 40 + cost = 20 /datum/supplykit_item/energy/repeater name = "Repeating Blaster" diff --git a/modular_coyote/icons/objects/paxilmaniacpak/ammo (1).dmi b/modular_coyote/icons/objects/paxilmaniacpak/ammo (1).dmi new file mode 100644 index 00000000000..f671b307528 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/ammo (1).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/ammo (2).dmi b/modular_coyote/icons/objects/paxilmaniacpak/ammo (2).dmi new file mode 100644 index 00000000000..89e7d90f56d Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/ammo (2).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/ammo (3).dmi b/modular_coyote/icons/objects/paxilmaniacpak/ammo (3).dmi new file mode 100644 index 00000000000..6474afdbe43 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/ammo (3).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/ammo (4).dmi b/modular_coyote/icons/objects/paxilmaniacpak/ammo (4).dmi new file mode 100644 index 00000000000..cb733806546 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/ammo (4).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/ammo.dmi b/modular_coyote/icons/objects/paxilmaniacpak/ammo.dmi new file mode 100644 index 00000000000..ddd2fe3989a Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/ammo.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/biogenerator.dmi b/modular_coyote/icons/objects/paxilmaniacpak/biogenerator.dmi new file mode 100644 index 00000000000..5fd87ee0ace Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/biogenerator.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/cases.dmi b/modular_coyote/icons/objects/paxilmaniacpak/cases.dmi new file mode 100644 index 00000000000..d639b8b4d86 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/cases.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/epic_loot.dmi b/modular_coyote/icons/objects/paxilmaniacpak/epic_loot.dmi new file mode 100644 index 00000000000..452d82405e9 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/epic_loot.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns32x (1).dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (1).dmi new file mode 100644 index 00000000000..067d79a810b Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (1).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns32x (2).dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (2).dmi new file mode 100644 index 00000000000..f4660689ae4 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (2).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns32x (3).dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (3).dmi new file mode 100644 index 00000000000..ab37134e185 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns32x (3).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns32x.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns32x.dmi new file mode 100644 index 00000000000..84f2df32322 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns32x.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns40x.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns40x.dmi new file mode 100644 index 00000000000..1e6e33762aa Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns40x.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns48x (1).dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns48x (1).dmi new file mode 100644 index 00000000000..c892df5dbdb Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns48x (1).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns48x.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns48x.dmi new file mode 100644 index 00000000000..e7e5c519f71 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns48x.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns_32.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns_32.dmi new file mode 100644 index 00000000000..88f2a23b843 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns_32.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns_48.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns_48.dmi new file mode 100644 index 00000000000..fdcbfa196bc Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns_48.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/guns_64.dmi b/modular_coyote/icons/objects/paxilmaniacpak/guns_64.dmi new file mode 100644 index 00000000000..14ad4187cd3 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/guns_64.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/imported_quick_foods.dmi b/modular_coyote/icons/objects/paxilmaniacpak/imported_quick_foods.dmi new file mode 100644 index 00000000000..4249a5f4f0a Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/imported_quick_foods.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/imported_vendors.dmi b/modular_coyote/icons/objects/paxilmaniacpak/imported_vendors.dmi new file mode 100644 index 00000000000..d26e14e5a38 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/imported_vendors.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/injectors.dmi b/modular_coyote/icons/objects/paxilmaniacpak/injectors.dmi new file mode 100644 index 00000000000..af5232f05b4 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/injectors.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/loot_structures.dmi b/modular_coyote/icons/objects/paxilmaniacpak/loot_structures.dmi new file mode 100644 index 00000000000..695b17ce21a Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/loot_structures.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/medstation.dmi b/modular_coyote/icons/objects/paxilmaniacpak/medstation.dmi new file mode 100644 index 00000000000..2de94bc420a Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/medstation.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/melee.dmi b/modular_coyote/icons/objects/paxilmaniacpak/melee.dmi new file mode 100644 index 00000000000..1df7316f97f Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/melee.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mech_bay.dmi b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mech_bay.dmi new file mode 100644 index 00000000000..fd4932235c6 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mech_bay.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha.dmi b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha.dmi new file mode 100644 index 00000000000..0de7554b792 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha_equipment.dmi b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha_equipment.dmi new file mode 100644 index 00000000000..ed4a4edf471 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/notsopaxilmaniac/mecha_equipment.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/projectiles (1).dmi b/modular_coyote/icons/objects/paxilmaniacpak/projectiles (1).dmi new file mode 100644 index 00000000000..0a871ca1720 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/projectiles (1).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/projectiles.dmi b/modular_coyote/icons/objects/paxilmaniacpak/projectiles.dmi new file mode 100644 index 00000000000..11b8155ff19 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/projectiles.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/propaganda (1).dmi b/modular_coyote/icons/objects/paxilmaniacpak/propaganda (1).dmi new file mode 100644 index 00000000000..9438b887628 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/propaganda (1).dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/propaganda.dmi b/modular_coyote/icons/objects/paxilmaniacpak/propaganda.dmi new file mode 100644 index 00000000000..4ddf2216e7c Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/propaganda.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/stack_items.dmi b/modular_coyote/icons/objects/paxilmaniacpak/stack_items.dmi new file mode 100644 index 00000000000..947d1a088d5 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/stack_items.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/storage.dmi b/modular_coyote/icons/objects/paxilmaniacpak/storage.dmi new file mode 100644 index 00000000000..516e7cd30a7 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/storage.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/storage_items.dmi b/modular_coyote/icons/objects/paxilmaniacpak/storage_items.dmi new file mode 100644 index 00000000000..0358448001c Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/storage_items.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/telegraph_96x96.dmi b/modular_coyote/icons/objects/paxilmaniacpak/telegraph_96x96.dmi new file mode 100644 index 00000000000..8596bce378d Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/telegraph_96x96.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/tools.dmi b/modular_coyote/icons/objects/paxilmaniacpak/tools.dmi new file mode 100644 index 00000000000..2e2f9a413f9 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/tools.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/trade_machine.dmi b/modular_coyote/icons/objects/paxilmaniacpak/trade_machine.dmi new file mode 100644 index 00000000000..c0d9214f771 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/trade_machine.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/vendor.dmi b/modular_coyote/icons/objects/paxilmaniacpak/vendor.dmi new file mode 100644 index 00000000000..906191c451b Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/vendor.dmi differ diff --git a/modular_coyote/icons/objects/paxilmaniacpak/worn.dmi b/modular_coyote/icons/objects/paxilmaniacpak/worn.dmi new file mode 100644 index 00000000000..3705fdb63f4 Binary files /dev/null and b/modular_coyote/icons/objects/paxilmaniacpak/worn.dmi differ diff --git a/modular_sand/code/controllers/subsystem/interactions.dm b/modular_sand/code/controllers/subsystem/interactions.dm index bdc2ff3049b..4ab90b2eaed 100644 --- a/modular_sand/code/controllers/subsystem/interactions.dm +++ b/modular_sand/code/controllers/subsystem/interactions.dm @@ -2,7 +2,7 @@ #define ASKED_ASKER 2 SUBSYSTEM_DEF(interactions) - name = "Interactions" + name = "MERP" flags = SS_NO_FIRE init_order = INIT_ORDER_INTERACTIONS var/list/interactions = list() diff --git a/modular_sand/code/datums/interactions/_interaction.dm b/modular_sand/code/datums/interactions/_interaction.dm index c452cb4bbbf..55538e03ee3 100644 --- a/modular_sand/code/datums/interactions/_interaction.dm +++ b/modular_sand/code/datums/interactions/_interaction.dm @@ -303,7 +303,8 @@ for(var/mob/squish in ppl | user) if(!squish.client) continue - if(!(squish in view(15, user))) + var/list/whobez = view(15, user) | viewers(15, user) | hearers(15, user) + if(!(squish in whobez)) continue // if(!CHECK_PREFS(squish, NOTMERP_LEWD_WORDS)) // they already consented, what more do you want??? // continue |