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:
Mechoid
2018-02-08 12:58:17 -08:00
committed by Anewbe
parent 4e4ba35444
commit 251297a2ba
8 changed files with 76 additions and 36 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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>")

View File

@@ -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.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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