mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Promethean Balancing, Lore-compliant Modification of Security Equipment (#4722)
* Works on Balancing Prometheans * Reorganize from Master Merge * Tries to fix that gun conflict that the DMI merger apparently did fine?
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, "<span class='warning'>You lack the biomass regrow anything!</span>")
|
||||
to_chat(src, "<span class='warning'>You lack the biomass to begin regeneration!</span>")
|
||||
return
|
||||
|
||||
nutrition -= 200
|
||||
if(active_regen)
|
||||
to_chat(src, "<span class='warning'>You are already regenerating tissue!</span>")
|
||||
return
|
||||
else
|
||||
active_regen = TRUE
|
||||
src.visible_message("<B>[src]</B>'s flesh begins to mend...")
|
||||
|
||||
for(var/obj/item/organ/I in internal_organs)
|
||||
if(I.damage > 0)
|
||||
I.damage = 0
|
||||
to_chat(src, "<span class='notice'>You feel a soothing sensation within your [I.name]...</span>")
|
||||
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, "<span class='notice'>You feel a slithering sensation as your [O.name] reform.</span>")
|
||||
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, "<span class='notice'>You feel a soothing sensation within your [I.name]...</span>")
|
||||
|
||||
// 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, "<span class='notice'>You feel a slithering sensation as your [O.name] reform.</span>")
|
||||
update_icons_all()
|
||||
active_regen = FALSE
|
||||
else
|
||||
to_chat(src, "<span class='critical'>Your regeneration is interrupted!</span>")
|
||||
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, "<font color='blue'>You have stopped hiding.</font>")
|
||||
to_chat(src, "<font color='blue'>You have stopped hiding.</font>")
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
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.
|
||||
..()
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB |
Reference in New Issue
Block a user