From cd9730a0fff7946a49b88570fa5db11c6f862721 Mon Sep 17 00:00:00 2001 From: Cameron Lennox Date: Thu, 4 Jun 2026 08:08:03 -0400 Subject: [PATCH] Fix promie shock mechanic & enables additional footsteps (#19500) * Shock Absorb flag * Cleans up unused species var * Update species.dm * FOotsteps * Update footsteps.dm * Update footsteps.dm * Flash fix * Update flash.dm * Update human_powers.dm * Gets rid of unused var * Unused variable * Update gun.dm * Unused var * grr * Get rid of duplicate define This was overwritten by the 70 below. * Consolidate these * Update species_helpers.dm --- code/__defines/footsteps.dm | 37 +++++++++++---- code/__defines/species_flags.dm | 1 + code/_helpers/global_lists.dm | 5 ++- code/datums/elements/footstep.dm | 8 ++-- code/game/objects/items/devices/flash.dm | 6 ++- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_powers.dm | 2 +- .../living/carbon/human/species/species.dm | 3 -- .../carbon/human/species/species_helpers.dm | 9 +++- .../human/species/station/prometheans.dm | 6 +-- .../carbon/human/species/station/station.dm | 4 -- code/modules/power/power.dm | 7 +-- code/modules/projectiles/gun.dm | 12 +---- .../projectiles/guns/energy/nuclear.dm | 6 +-- .../guns/magnetic/magnetic_railgun.dm | 30 ++++++------- .../projectiles/guns/projectile/automatic.dm | 42 +++++++++--------- .../guns/projectile/automatic_vr.dm | 4 +- .../projectiles/guns/projectile/pistol.dm | 4 +- code/modules/projectiles/guns/toy.dm | 4 +- code/modules/projectiles/guns/vox.dm | 6 +-- code/modules/projectiles/projectile/energy.dm | 16 +------ sound/effects/footstep/slime2.ogg | Bin 0 -> 11976 bytes sound/effects/footstep/slime3.ogg | Bin 0 -> 12136 bytes 23 files changed, 110 insertions(+), 104 deletions(-) create mode 100644 sound/effects/footstep/slime2.ogg create mode 100644 sound/effects/footstep/slime3.ogg diff --git a/code/__defines/footsteps.dm b/code/__defines/footsteps.dm index b952da958b2..3ad6b23bb65 100644 --- a/code/__defines/footsteps.dm +++ b/code/__defines/footsteps.dm @@ -236,10 +236,19 @@ GLOBAL_LIST_INIT(lightclawfootstep, list( )) //heavy footsteps list -GLOBAL_LIST_INIT(heavyfootstep, list( +GLOBAL_LIST_INIT(heavyaltfootstep, list( + FOOTSTEP_WOOD_BAREFOOT = list(list( + 'sound/effects/footstep/heavy1.ogg', + 'sound/effects/footstep/heavy2.ogg'), 50, 2), + FOOTSTEP_HARD_BAREFOOT = list(list( + 'sound/effects/footstep/heavy1.ogg', + 'sound/effects/footstep/heavy2.ogg'), 50, 2), + FOOTSTEP_CARPET_BAREFOOT = list(list( + 'sound/effects/footstep/heavy1.ogg', + 'sound/effects/footstep/heavy2.ogg'), 50, 2), FOOTSTEP_GENERIC_HEAVY = list(list( 'sound/effects/footstep/heavy1.ogg', - 'sound/effects/footstep/heavy2.ogg'), 100, 2), + 'sound/effects/footstep/heavy2.ogg'), 50, 2), FOOTSTEP_WATER = list(list( 'sound/effects/footstep/water1.ogg', 'sound/effects/footstep/water2.ogg', @@ -253,8 +262,8 @@ GLOBAL_LIST_INIT(heavyfootstep, list( 'sound/effects/meatslap.ogg'), 100, 0), )) -//heavy alt footsteps list -GLOBAL_LIST_INIT(heavyaltfootstep, list( +//heavy footsteps list +GLOBAL_LIST_INIT(heavyfootstep, list( FOOTSTEP_WOOD_BAREFOOT = list(list( 'sound/mob/footstep_large.ogg', 'sound/mob/footstep_large2.ogg'), 90, 1), @@ -310,13 +319,25 @@ GLOBAL_LIST_INIT(mechfootstep, list( //slime footsteps list GLOBAL_LIST_INIT(slimefootstep, list( FOOTSTEP_WOOD_BAREFOOT = list(list( - 'sound/effects/footstep/slime1.ogg'), 90, 1), + 'sound/effects/footstep/slime1.ogg', + 'sound/effects/footstep/slime2.ogg', + 'sound/effects/footstep/slime3.ogg' + ), 25, 1), FOOTSTEP_HARD_BAREFOOT = list(list( - 'sound/effects/footstep/slime1.ogg'), 90, 1), + 'sound/effects/footstep/slime1.ogg', + 'sound/effects/footstep/slime2.ogg', + 'sound/effects/footstep/slime3.ogg' + ), 25, 1), FOOTSTEP_CARPET_BAREFOOT = list(list( - 'sound/effects/footstep/slime1.ogg'), 75, -2), + 'sound/effects/footstep/slime1.ogg', + 'sound/effects/footstep/slime2.ogg', + 'sound/effects/footstep/slime3.ogg' + ), 25, -2), FOOTSTEP_GRASS = list(list( - 'sound/effects/footstep/slime1.ogg'), 75, 0), + 'sound/effects/footstep/slime1.ogg', + 'sound/effects/footstep/slime2.ogg', + 'sound/effects/footstep/slime3.ogg' + ), 25, 0), FOOTSTEP_WATER = list(list( 'sound/effects/footstep/water1.ogg', 'sound/effects/footstep/water2.ogg', diff --git a/code/__defines/species_flags.dm b/code/__defines/species_flags.dm index 1cb97f1012f..4e062c54909 100644 --- a/code/__defines/species_flags.dm +++ b/code/__defines/species_flags.dm @@ -13,6 +13,7 @@ #define NO_DEFIB 0x800 // Don't allow them to be defibbed #define NO_DNA 0x1000 // Cannot have mutations or have their dna changed by genetics/radiation/genome-stolen. #define THICK_SKIN 0x2000 // Needles have a chain to fail when attempted to be used on them. +#define SHOCK_ABSORB 0x4000 // Absorbs shock and converts it into energy that can be used on later attacks. // unused: 0x8000 - higher than this will overflow // Species EMP vuln for carbons diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index f923a3bd2c4..a80bb6df6cd 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -347,7 +347,10 @@ GLOBAL_LIST_INIT(selectable_footstep, list( "Light Claw" = FOOTSTEP_MOB_TESHARI, "Slither" = FOOTSTEP_MOB_SLITHER, "Mech" = FOOTSTEP_MOB_MECHY, - "Heavy" = FOOTSTEP_MOB_HEAVY_ALT + "Heavy" = FOOTSTEP_MOB_HEAVY, + "Heavy Alt" = FOOTSTEP_MOB_HEAVY_ALT, + "Slime" = FOOTSTEP_MOB_SLIME, + )) // Put any artifact effects that are duplicates, unique, or otherwise unwated in here! This prevents them from spawning via RNG. diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index 57c58ddc7b0..9dd3e94a1c4 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -43,16 +43,16 @@ footstep_ret = GLOB.lightclawfootstep if(FOOTSTEP_MOB_CLAW) footstep_ret = GLOB.clawfootstep - if(FOOTSTEP_MOB_HEAVY) - footstep_ret = GLOB.heavyfootstep + if(FOOTSTEP_MOB_HEAVY_ALT) + footstep_ret = GLOB.heavyaltfootstep if(FOOTSTEP_MOB_SHOE) footstep_ret = GLOB.footstep if(FOOTSTEP_MOB_SLIME) footstep_ret = GLOB.slimefootstep if(FOOTSTEP_MOB_SLITHER) footstep_ret = GLOB.slitherfootstep - if(FOOTSTEP_MOB_HEAVY_ALT) - footstep_ret = GLOB.heavyaltfootstep + if(FOOTSTEP_MOB_HEAVY) + footstep_ret = GLOB.heavyfootstep if(FOOTSTEP_MOB_MECHY) footstep_ret = GLOB.mechfootstep else diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 7d1e28aef3e..90c551c00e7 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -48,6 +48,9 @@ /obj/item/flash/Initialize(mapload) . = ..() power_supply = new cell_type(src) + if(can_repair) + description_info = "If the device 'clicks' it has either been used too much recently or is out of charge - requiring a recharger. If the bulb is burnt out or broken, it needs to be repaired using a screwdriver." + /obj/item/flash/attackby(obj/item/W, mob/user) if(W.has_tool_quality(TOOL_SCREWDRIVER) && broken) @@ -58,8 +61,9 @@ broken = FALSE update_icon() playsound(src, W.usesound, 50, 1) - else user.visible_message(span_infoplain(span_bold("\The [user]") + " fails to repair \the [src].")) + else + user.visible_message(span_infoplain(span_bold("\The [user]") + " stops attempting to repair \the [src].")) else ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2982cf65b5a..11e744dbf86 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -387,7 +387,7 @@ if (!def_zone) def_zone = pick(BP_L_HAND, BP_R_HAND) - if(species.siemens_coefficient == -1) + if(species.siemens_coefficient <= 0 && (species.flags & SHOCK_ABSORB)) if(GLOB.stored_shock_by_ref["\ref[src]"]) GLOB.stored_shock_by_ref["\ref[src]"] += shock_damage else diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index f272e4f766c..6756a6b135a 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -316,7 +316,7 @@ var/limb_path = organ_data["path"] var/obj/item/organ/O = new limb_path(src) organ_data["descriptor"] = O.name - to_chat(src, span_notice("You feel a slithering sensation as your [O.name] reform.")) + to_chat(src, span_notice("You feel a slithering sensation as your [O.name] reforms.")) var/agony_to_apply = round(0.66 * O.max_damage) // 66% of the limb's health is converted into pain. src.apply_damage(agony_to_apply, HALLOSS) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 0bc5f0d4fa9..2a674c69602 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -99,7 +99,6 @@ var/death_volume = 50 // Self-explanatory, define this separately on your species if the sound files are louder. // var/species_sounds_herm // If you want a custom sound played for other genders, just add them like so - var/footstep = FOOTSTEP_MOB_HUMAN var/list/special_step_sounds = null // Combat/health/chem/etc. vars. @@ -403,8 +402,6 @@ update_sort_hint() -/datum/species/proc/get_footsep_sounds() - return footstep /datum/species/proc/update_sort_hint() if(spawn_flags & SPECIES_IS_RESTRICTED) diff --git a/code/modules/mob/living/carbon/human/species/species_helpers.dm b/code/modules/mob/living/carbon/human/species/species_helpers.dm index b62d98b9fa0..3b3532197f4 100644 --- a/code/modules/mob/living/carbon/human/species/species_helpers.dm +++ b/code/modules/mob/living/carbon/human/species/species_helpers.dm @@ -2,5 +2,12 @@ GLOBAL_LIST_EMPTY(stored_shock_by_ref) /mob/living/proc/apply_stored_shock_to(mob/living/target) if(GLOB.stored_shock_by_ref["\ref[src]"]) - target.electrocute_act(GLOB.stored_shock_by_ref["\ref[src]"]*0.9, src) + if(GLOB.stored_shock_by_ref["\ref[src]"] > 200) + GLOB.stored_shock_by_ref["\ref[src]"] = 200 + target.stun_effect_act(agony_amount = GLOB.stored_shock_by_ref["\ref[src]"]*0.40, electric = TRUE) GLOB.stored_shock_by_ref["\ref[src]"] = 0 + /* //TODO: Clean up spark system and make it so colors can be set on sparks. + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, target) + s.start() + */ diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index d4fe1f53bd4..8ae89cefbd9 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -23,7 +23,7 @@ mob_size = MOB_MEDIUM push_flags = ~HEAVY swap_flags = ~HEAVY - flags = NO_DNA | NO_SLEEVE | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_DEFIB + flags = NO_DNA | NO_SLEEVE | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_DEFIB | SHOCK_ABSORB appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR spawn_flags = SPECIES_CAN_JOIN health_hud_intensity = 2 @@ -74,7 +74,7 @@ body_temperature = T20C // Room temperature rarity_value = 5 - siemens_coefficient = 0.8 + siemens_coefficient = 0 water_resistance = 0 water_damage_mod = 0 @@ -135,8 +135,6 @@ /datum/decl/emote/visible/vibrate ) - footstep = FOOTSTEP_MOB_SLIME - /datum/species/shapeshifter/promethean/equip_survival_gear(mob/living/carbon/human/H) var/boxtype = pick(list(/obj/item/storage/toolbox/lunchbox, /obj/item/storage/toolbox/lunchbox/heart, diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index a1188e62d7d..0f4110c43c1 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -196,8 +196,6 @@ /datum/decl/emote/human/stopsway ) - footstep = FOOTSTEP_MOB_CLAW - inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) wikilink="https://wiki.vore-station.net/Unathi" @@ -1231,8 +1229,6 @@ /datum/decl/emote/audible/teshtrill ) - footstep = FOOTSTEP_MOB_TESHARI - /datum/species/teshari/equip_survival_gear(mob/living/carbon/human/H) ..() if(!(H.client?.prefs?.shoe_hater)) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index a9c1abb5c2a..ce85c7f8526 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -306,11 +306,12 @@ PN.trigger_warning(5) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species.siemens_coefficient <= 0) + if(H.species.siemens_coefficient <= 0 && !(H.species.flags & SHOCK_ABSORB)) //If we're shock immune, don't try the shock. If we absorb shock, shock us! return - if(H.gloves) + else if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves - if(G.siemens_coefficient == 0) return 0 //to avoid spamming with insulated glvoes on + if(G.siemens_coefficient == 0) + return 0 //to avoid spamming with insulated glvoes on //Checks again. If we are still here subject will be shocked, trigger standard 20 tick warning //Since this one is longer it will override the original one. diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 243162a77bf..aef7be2d54a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -55,7 +55,6 @@ var/burst = 1 var/fire_delay = 6 //delay after shooting before the gun can be used again var/burst_delay = 2 //delay between shots, if firing in bursts - var/move_delay = 1 var/fire_sound = null // This is handled by projectile.dm's fire_sound var now, but you can override the projectile's fire_sound with this one if you want to. var/fire_sound_text = "gunshot" var/fire_anim = null @@ -72,7 +71,6 @@ var/wielded_item_state var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand. var/atom/movable/screen/auto_target/auto_target - var/shooting = 0 var/next_fire_time = 0 var/sel_mode = 1 //index of the currently selected mode @@ -275,7 +273,7 @@ */ /obj/item/gun/attack(mob/living/A, mob/living/user, target_zone, attack_modifier) - if (A == user && user.zone_sel.selecting == O_MOUTH && !mouthshoot) + if (A == user && user.zone_sel.selecting == O_MOUTH) handle_suicide(user) return ITEM_INTERACT_SUCCESS else if(user.a_intent == I_HURT) //point blank shooting @@ -712,19 +710,14 @@ else playsound(src, shot_sound, 50, 1) -//Suicide handling. -/obj/item/gun/var/mouthshoot = 0 //To stop people from suiciding twice... >.> - /obj/item/gun/proc/handle_suicide(mob/living/user) if(!ishuman(user)) return var/mob/living/carbon/human/M = user - mouthshoot = 1 M.visible_message(span_red("[user] sticks their gun in their mouth, ready to pull the trigger...")) if(!do_after(user, 4 SECONDS, target = src)) M.visible_message(span_blue("[user] decided life was worth living")) - mouthshoot = 0 return var/obj/item/projectile/in_chamber = consume_next_projectile() if (istype(in_chamber)) @@ -732,7 +725,6 @@ play_fire_sound(M, in_chamber) if(istype(in_chamber, /obj/item/projectile/beam/lasertag)) user.show_message(span_warning("You feel rather silly, trying to commit suicide with a toy.")) - mouthshoot = 0 return in_chamber.on_hit(M) @@ -744,11 +736,9 @@ to_chat(user, span_notice("Ow...")) user.apply_effect(110,AGONY,0) qdel(in_chamber) - mouthshoot = 0 return else handle_click_empty(user) - mouthshoot = 0 return /obj/item/gun/proc/toggle_scope(zoom_amount=2.0) diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 20f01ae38b8..c7059bc5f86 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -60,9 +60,9 @@ firemodes = list( list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", charge_cost = 100), - list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), + list(mode_name="stun burst", burst=3, fire_delay=null, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun"), list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill", charge_cost = 200), - list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), + list(mode_name="lethal burst", burst=3, fire_delay=null, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"), ) /* @@ -86,7 +86,7 @@ firemodes = list( list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 200), - list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), + list(mode_name="lethal burst", burst=4, fire_delay=null, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser), ) /* diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm index 167d3110183..ed12d108e96 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm @@ -66,9 +66,9 @@ w_class = ITEMSIZE_NO_CONTAINER firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null), - list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), - list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_handed_penalty=30, burst_accuracy=list(0,-15,-15,-15,-30), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)), + list(mode_name="semiauto", burst=1, fire_delay=0.1, one_handed_penalty=15, burst_accuracy=null, dispersion=null), + list(mode_name="short bursts", burst=3, fire_delay=null, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="long bursts", burst=6, fire_delay=null, one_handed_penalty=30, burst_accuracy=list(0,-15,-15,-15,-30), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)), ) /obj/item/gun/magnetic/railgun/automatic/examine(mob/user) @@ -100,8 +100,8 @@ empty_sound = 'sound/weapons/smg_empty_alarm.ogg' firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null), - list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="semiauto", burst=1, fire_delay=0.1, one_handed_penalty=15, burst_accuracy=null, dispersion=null), + list(mode_name="short bursts", burst=3, fire_delay=null, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), ) /obj/item/gun/magnetic/railgun/flechette/pistol @@ -132,8 +132,8 @@ empty_sound = 'sound/weapons/smg_empty_alarm.ogg' firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null), - list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="semiauto", burst=1, fire_delay=0.1, one_handed_penalty=15, burst_accuracy=null, dispersion=null), + list(mode_name="short bursts", burst=3, fire_delay=null, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), ) /obj/item/gun/magnetic/railgun/heater @@ -163,8 +163,8 @@ empty_sound = 'sound/weapons/smg_empty_alarm.ogg' firemodes = list( - list(mode_name="high power", power_cost = 400, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, move_delay=null, one_handed_penalty=15), - list(mode_name="low power", power_cost = 150, projectile_type = /obj/item/projectile/bullet/magnetic/heated/weak, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=15), + list(mode_name="high power", power_cost = 400, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, one_handed_penalty=15), + list(mode_name="low power", power_cost = 150, projectile_type = /obj/item/projectile/bullet/magnetic/heated/weak, burst=1, fire_delay=5, one_handed_penalty=15), ) /obj/item/gun/magnetic/railgun/heater/pistol @@ -185,8 +185,8 @@ slot_flags = SLOT_BELT|SLOT_HOLSTER firemodes = list( - list(mode_name="lethal", power_cost = 500, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=10, move_delay=null, one_handed_penalty=0), - list(mode_name="stun", power_cost = 350, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=7, move_delay=null, one_handed_penalty=0), + list(mode_name="lethal", power_cost = 500, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=10, one_handed_penalty=0), + list(mode_name="stun", power_cost = 350, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=7, one_handed_penalty=0), ) /obj/item/gun/magnetic/railgun/heater/pistol/hos @@ -197,8 +197,8 @@ description_antag = "This weapon starts with a DNA locking chip attached. Using an EMAG on the weapon will disarm it, and allow you to use the chip as your own." firemodes = list( - list(mode_name="lethal", power_cost = 400, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, move_delay=null, one_handed_penalty=0), - list(mode_name="stun", power_cost = 300, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=0), + list(mode_name="lethal", power_cost = 400, projectile_type = /obj/item/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, one_handed_penalty=0), + list(mode_name="stun", power_cost = 300, projectile_type = /obj/item/projectile/energy/electrode/strong, burst=1, fire_delay=5, one_handed_penalty=0), ) /obj/item/gun/magnetic/railgun/flechette/sif @@ -220,6 +220,6 @@ empty_sound = 'sound/weapons/smg_empty_alarm.ogg' firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, one_handed_penalty=15, burst_accuracy=null, dispersion=null), - list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="semiauto", burst=1, fire_delay=0.1, one_handed_penalty=15, burst_accuracy=null, dispersion=null), + list(mode_name="short bursts", burst=3, fire_delay=null, one_handed_penalty=30, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), ) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index a6c3f32b895..74a81014fc7 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -13,8 +13,8 @@ //Burst accuracy is the accuracy of each bullet fired in the burst. Dispersion is how much the bullets will 'spread' away from where you aimed. firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0))) /* * Advanced SMG @@ -32,8 +32,8 @@ allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced, /obj/item/ammo_magazine/m9mm) firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-10,-10), dispersion=list(0.0, 0.3, 0.6)) ) /obj/item/gun/projectile/automatic/advanced_smg/update_icon() @@ -106,8 +106,8 @@ one_handed_penalty = 30 firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) ) /obj/item/gun/projectile/automatic/sts35/update_icon(ignore_inhands) @@ -135,8 +135,8 @@ allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced) firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) ) /obj/item/gun/projectile/automatic/pdw/update_icon(ignore_inhands) @@ -200,9 +200,9 @@ burst_delay = 4 firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, use_launcher=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)), - list(mode_name="fire grenades", burst=null, fire_delay=null, move_delay=null, use_launcher=1, burst_accuracy=null, dispersion=null) + list(mode_name="semiauto", burst=1, fire_delay=0.1, use_launcher=null, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, use_launcher=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)), + list(mode_name="fire grenades", burst=null, fire_delay=null, use_launcher=1, burst_accuracy=null, dispersion=null) ) var/use_launcher = 0 @@ -277,9 +277,9 @@ var/cover_open = 0 firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), - list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="short bursts", burst=5, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) ) special_weapon_handling = TRUE @@ -357,7 +357,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0.1), - list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.0, 0.6, 0.6)) + list(mode_name="3-round bursts", burst=3, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.0, 0.6, 0.6)) ) /obj/item/gun/projectile/automatic/as24/update_icon() @@ -386,7 +386,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0.1), - list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0)) + list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0)) ) /obj/item/gun/projectile/automatic/mini_uzi/update_icon() @@ -414,7 +414,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0.1), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) ) /obj/item/gun/projectile/automatic/p90/update_icon() @@ -438,7 +438,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0.1), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)) ) /obj/item/gun/projectile/automatic/tommygun/update_icon() @@ -471,8 +471,8 @@ one_handed_penalty = 45 firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=null, burst_accuracy=list(0,-15), dispersion=list(0.0, 0.6)) ) /obj/item/gun/projectile/automatic/bullpup/update_icon(ignore_inhands) @@ -504,7 +504,7 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0.1), - list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) + list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6)) ) /obj/item/gun/projectile/automatic/combatsmg/update_icon() diff --git a/code/modules/projectiles/guns/projectile/automatic_vr.dm b/code/modules/projectiles/guns/projectile/automatic_vr.dm index 6fb9baf3c43..c081a984aad 100644 --- a/code/modules/projectiles/guns/projectile/automatic_vr.dm +++ b/code/modules/projectiles/guns/projectile/automatic_vr.dm @@ -58,8 +58,8 @@ multi_aim = 1 burst_delay = 2 firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), ) /obj/item/gun/projectile/automatic/sol/proc/update_charge() diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index a195ad0d7e2..1d6f1206ea6 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -447,8 +447,8 @@ icon_state = "olivawcivil" item_state = "giskardcivil" firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)), + list(mode_name="semiauto", burst=1, fire_delay=1.2, burst_accuracy=null, dispersion=null), + list(mode_name="2-round bursts", burst=2, fire_delay=0.2, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)), ) /obj/item/gun/projectile/giskard/olivaw/update_icon() diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index a23fbb8a259..3038e6fc3df 100644 --- a/code/modules/projectiles/guns/toy.dm +++ b/code/modules/projectiles/guns/toy.dm @@ -195,8 +195,8 @@ recoil = null //it's a toy firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0.1, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=2, burst_accuracy=list(0,-2,-2), dispersion=null) + list(mode_name="semiauto", burst=1, fire_delay=0.1, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, burst_accuracy=list(0,-2,-2), dispersion=null) ) /obj/item/gun/projectile/automatic/toy/riot diff --git a/code/modules/projectiles/guns/vox.dm b/code/modules/projectiles/guns/vox.dm index 6a1b53fedd0..9cf1d9992d2 100644 --- a/code/modules/projectiles/guns/vox.dm +++ b/code/modules/projectiles/guns/vox.dm @@ -64,9 +64,9 @@ accuracy = 30 firemodes = list( - list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300), - list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 400), - list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300), + list(mode_name="stunning", burst=1, fire_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300), + list(mode_name="focused", burst=1, fire_delay=null, burst_accuracy=list(30), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 400), + list(mode_name="scatter burst", burst=8, fire_delay=null, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300), ) /obj/item/projectile/beam/stun/darkmatter diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index c826c7ba144..8b244774172 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -21,7 +21,7 @@ hitsound_wall = null damage = 5 range = 15 //if the shell hasn't hit anything after travelling this far it just explodes. - var/flash_range = 0 + var/flash_range = 1 var/brightness = 7 var/light_colour = "#ffffff" hud_state = "grenade_dummy" @@ -59,7 +59,7 @@ /obj/item/projectile/energy/flash/flare fire_sound = 'sound/weapons/grenade_launcher.ogg' damage = 10 - flash_range = 1 + flash_range = 2 brightness = 15 flash_strength = 20 hud_state = "grenade_dummy" @@ -84,10 +84,6 @@ hud_state = "taser" //Damage will be handled on the MOB side, to prevent window shattering. -/obj/item/projectile/energy/electrode/strong - agony = 55 - hud_state = "taser" - /obj/item/projectile/energy/electrode/stunshot name = "stunshot" damage = 5 @@ -315,10 +311,6 @@ flash_strength = 10 hud_state = "taser" -/obj/item/projectile/energy/flash - flash_range = 1 - hud_state = "grenade_dummy" - /obj/item/projectile/energy/flash/strong name = "chemical shell" icon_state = "bullet" @@ -328,10 +320,6 @@ brightness = 15 hud_state = "grenade_dummy" -/obj/item/projectile/energy/flash/flare - flash_range = 2 - hud_state = "grenade_dummy" - /obj/item/projectile/energy/anomaly name = "anomaly emitter projectile" light_color = "#be008f" diff --git a/sound/effects/footstep/slime2.ogg b/sound/effects/footstep/slime2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c87fa94cd4d0053c022530209c71edf1b78852bb GIT binary patch literal 11976 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

SmqQ0k0>J$B!hzGX%4nu>#aa9P{+W8 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 a-$(qUQTbKh?;2r7;kU~)yZ3Ve@BaleCd@Pd literal 0 HcmV?d00001