diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 7c54614aa7..4074230d8d 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -38,7 +38,7 @@ ..() new /obj/item/clothing/suit/bio_suit/security(src) new /obj/item/clothing/head/bio_hood/security(src) - + new /obj/item/weapon/gun/energy/taser/xeno/sec(src) /obj/structure/closet/l3closet/janitor icon_state = "bio_janitor" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a8c12ed082..c28580fe6f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -17,6 +17,8 @@ var/can_defib = 1 //Horrible damage (like beheadings) will prevent defibbing organics. var/hiding = 0 // If the mob is hiding or not. Makes them appear under tables and the like. + var/active_regen = FALSE //Used for the regenerate proc in human_powers.dm + var/active_regen_delay = 300 /mob/living/carbon/human/New(var/new_loc, var/new_species = null) @@ -1343,7 +1345,13 @@ return 0 /mob/living/carbon/human/slip(var/slipped_on, stun_duration=8) - if((species.flags & NO_SLIP) || (shoes && (shoes.item_flags & NOSLIP))) + var/list/equipment = list(src.w_uniform,src.wear_suit,src.shoes) + var/footcoverage_check = FALSE + for(var/obj/item/clothing/C in equipment) + if(C.body_parts_covered & FEET) + footcoverage_check = TRUE + break + if((species.flags & NO_SLIP && !footcoverage_check) || (shoes && (shoes.item_flags & NOSLIP))) //Footwear negates a species' natural traction. return 0 if(..(slipped_on,stun_duration)) return 1 diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index f1ece7f6e7..445d06a802 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -235,36 +235,50 @@ /mob/living/carbon/human/proc/regenerate() set name = "Regenerate" - set desc = "Allows you to regrow limbs and heal organs." + set desc = "Allows you to regrow limbs and heal organs after a period of rest." set category = "Abilities" if(nutrition < 250) - to_chat(src, "You lack the biomass regrow anything!") + to_chat(src, "You lack the biomass to begin regeneration!") return - nutrition -= 200 + if(active_regen) + to_chat(src, "You are already regenerating tissue!") + return + else + active_regen = TRUE + src.visible_message("[src]'s flesh begins to mend...") - for(var/obj/item/organ/I in internal_organs) - if(I.damage > 0) - I.damage = 0 - to_chat(src, "You feel a soothing sensation within your [I.name]...") + var/delay_length = round(active_regen_delay * species.active_regen_mult) + if(do_after(src,delay_length)) + nutrition -= 200 - // Replace completely missing limbs. - for(var/limb_type in src.species.has_limbs) - var/obj/item/organ/external/E = src.organs_by_name[limb_type] - if(E && E.disfigured) - E.disfigured = 0 - if(E && (E.is_stump() || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD|ORGAN_MUTATED)))) - E.removed() - qdel(E) - E = null - if(!E) - var/list/organ_data = src.species.has_limbs[limb_type] - var/limb_path = organ_data["path"] - var/obj/item/organ/O = new limb_path(src) - organ_data["descriptor"] = O.name - to_chat(src, "You feel a slithering sensation as your [O.name] reform.") - update_icons_all() + for(var/obj/item/organ/I in internal_organs) + if(I.damage > 0) + I.damage = max(I.damage - 30, 0) //Repair functionally half of a dead internal organ. + to_chat(src, "You feel a soothing sensation within your [I.name]...") + + // Replace completely missing limbs. + for(var/limb_type in src.species.has_limbs) + var/obj/item/organ/external/E = src.organs_by_name[limb_type] + if(E && E.disfigured) + E.disfigured = 0 + if(E && (E.is_stump() || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD|ORGAN_MUTATED)))) + E.removed() + qdel(E) + E = null + if(!E) + var/list/organ_data = src.species.has_limbs[limb_type] + var/limb_path = organ_data["path"] + var/obj/item/organ/O = new limb_path(src) + organ_data["descriptor"] = O.name + to_chat(src, "You feel a slithering sensation as your [O.name] reform.") + update_icons_all() + active_regen = FALSE + else + to_chat(src, "Your regeneration is interrupted!") + nutrition -= 75 + active_regen = FALSE /mob/living/carbon/human/proc/hide_humanoid() set name = "Hide" @@ -281,4 +295,4 @@ else layer = MOB_LAYER hiding = 0 - to_chat(src, "You have stopped hiding.") \ No newline at end of file + to_chat(src, "You have stopped hiding.") diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 1986b8416a..f91633f22a 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -42,6 +42,7 @@ var/blood_volume = 560 // Initial blood volume. var/bloodloss_rate = 1 // Multiplier for how fast a species bleeds out. Higher = Faster var/hunger_factor = 0.05 // Multiplier for hunger. + var/active_regen_mult = 1 // Multiplier for 'Regenerate' power speed, in human_powers.dm var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes. 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 3704b2f912..3eb801dc9d 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -39,7 +39,7 @@ var/datum/species/shapeshifter/promethean/prometheans virus_immune = 1 blood_volume = 560 min_age = 1 - max_age = 5 + max_age = 10 brute_mod = 0.75 burn_mod = 2 oxy_mod = 0 @@ -56,7 +56,7 @@ var/datum/species/shapeshifter/promethean/prometheans body_temperature = 310.15 - siemens_coefficient = 0.3 + siemens_coefficient = 0.4 rarity_value = 5 genders = list(MALE, FEMALE, NEUTER, PLURAL) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 17e6fe252c..96fee9bb51 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -511,6 +511,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/melee/baton/robot(src) src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) + src.modules += new /obj/item/weapon/gun/energy/taser/xeno/sec/robot(src) src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) diff --git a/code/modules/xenobio/items/weapons.dm b/code/modules/xenobio/items/weapons.dm index a1aba76dab..d06ab9fdd3 100644 --- a/code/modules/xenobio/items/weapons.dm +++ b/code/modules/xenobio/items/weapons.dm @@ -56,20 +56,33 @@ name = "xeno taser gun" desc = "Straight out of NT's testing laboratories, this small gun is used to subdue non-humanoid xeno life forms. \ While marketed towards handling slimes, it may be useful for other creatures." - desc = "An easy to use weapon designed by NanoTrasen, for NanoTrasen. This weapon is designed to subdue lesser \ - xeno lifeforms at a distance. It is ineffective at stunning larger lifeforms such as humanoids." icon_state = "taserold" fire_sound = 'sound/weapons/taser2.ogg' charge_cost = 120 // Twice as many shots. projectile_type = /obj/item/projectile/beam/stun/xeno accuracy = 2 // Make it a bit easier to hit the slimes. description_info = "This gun will stun a slime or other lesser lifeform for about two seconds, if hit with the projectile it fires." + description_fluff = "An easy to use weapon designed by NanoTrasen, for NanoTrasen. This weapon is designed to subdue lesser \ + xeno lifeforms at a distance. It is ineffective at stunning larger lifeforms such as humanoids." /obj/item/weapon/gun/energy/taser/xeno/robot // Borg version self_recharge = 1 use_external_power = 1 recharge_time = 3 +/obj/item/weapon/gun/energy/taser/xeno/sec //NT's corner-cutting option for their on-station security. + desc = "An NT Mk30 NL retrofitted to fire beams for subduing non-humanoid xeno life forms." + icon_state = "taserblue" + item_state = "taser" + projectile_type = /obj/item/projectile/beam/stun/xeno/weak + charge_cost = 240 + accuracy = 0 //Same accuracy as a normal Sec taser. + description_fluff = "An NT Mk30 NL retrofitted after the events that occurred aboard the NRS Prometheus." + +/obj/item/weapon/gun/energy/taser/xeno/sec/robot //Cyborg variant of the security xeno-taser. + self_recharge = 1 + use_external_power = 1 + recharge_time = 3 /obj/item/projectile/beam/stun/xeno icon_state = "omni" @@ -83,7 +96,10 @@ tracer_type = /obj/effect/projectile/laser_omni/tracer impact_type = /obj/effect/projectile/laser_omni/impact -/obj/item/projectile/beam/stun/xeno/on_hit(var/atom/target, var/blocked = 0) +/obj/item/projectile/beam/stun/xeno/weak //Weaker variant for non-research equipment, turrets, or rapid fire types. + agony = 3 + +/obj/item/projectile/beam/stun/xeno/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) if(istype(target, /mob/living)) var/mob/living/L = target @@ -91,15 +107,15 @@ if(istype(L, /mob/living/simple_animal/slime)) var/mob/living/simple_animal/SA = L if(SA.intelligence_level <= SA_ANIMAL) // So it doesn't stun hivebots or syndies. - SA.Weaken(2) // Less powerful since its ranged, and therefore safer. + SA.Weaken(round(agony/2)) // Less powerful since its ranged, and therefore safer. if(isslime(SA)) var/mob/living/simple_animal/slime/S = SA - S.adjust_discipline(2) + S.adjust_discipline(round(agony/2)) // Prometheans. if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.species && H.species.name == "Promethean") - var/agony_to_apply = 60 - agony - H.apply_damage(agony_to_apply, HALLOSS) - ..() \ No newline at end of file + if(agony == initial(agony)) + agony = round((14 * agony) - agony) //60-4 = 56, 56 / 4 = 14. Prior was flat 60 - agony of the beam to equate to 60. + ..() diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 4bb7b955a0..06490a3cb4 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ