April sync (#360)
* Maps and things no code/icons * helpers defines globalvars * Onclick world.dm orphaned_procs * subsystems Round vote and shuttle autocall done here too * datums * Game folder * Admin - chatter modules * clothing - mining * modular computers - zambies * client * mob level 1 * mob stage 2 + simple_animal * silicons n brains * mob stage 3 + Alien/Monkey * human mobs * icons updated * some sounds * emitter y u no commit * update tgstation.dme * compile fixes * travis fixes Also removes Fast digest mode, because reasons. * tweaks for travis Mentors are broke again Also fixes Sizeray guns * oxygen loss fix for vore code. * removes unused code * some code updates * bulk fixes * further fixes * outside things * whoops. * Maint bar ported * GLOBs.
This commit is contained in:
@@ -20,9 +20,6 @@
|
||||
user.visible_message("[user] severs [L]'s [parse_zone(target_zone)]!", "<span class='notice'>You sever [L]'s [parse_zone(target_zone)].</span>")
|
||||
if(surgery.operated_bodypart)
|
||||
var/obj/item/bodypart/target_limb = surgery.operated_bodypart
|
||||
var/obj/item/held_item = L.get_item_for_held_index(target_limb.held_index)
|
||||
target_limb.drop_limb()
|
||||
if(held_item && held_item.flags & NODROP)
|
||||
qdel(target_limb) // arm is ruined
|
||||
|
||||
return 1
|
||||
@@ -20,6 +20,7 @@
|
||||
var/max_damage = 0
|
||||
var/list/embedded_objects = list()
|
||||
var/held_index = 0 //are we a hand? if so, which one!
|
||||
var/is_pseudopart = FALSE //For limbs that don't really exist, eg chainsaws
|
||||
|
||||
//Coloring and proper item icon update
|
||||
var/skin_tone = ""
|
||||
@@ -554,4 +555,4 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "severedtail"
|
||||
color = "#161"
|
||||
var/markings = "Smooth"
|
||||
var/markings = "Smooth"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/turf/location = C.loc
|
||||
if(istype(location))
|
||||
C.add_splatter_floor(location)
|
||||
var/direction = pick(cardinal)
|
||||
var/direction = pick(GLOB.cardinal)
|
||||
var/t_range = rand(2,max(throw_range/2, 2))
|
||||
var/turf/target_turf = get_turf(src)
|
||||
for(var/i in 1 to t_range-1)
|
||||
@@ -86,6 +86,7 @@
|
||||
var/mob/living/carbon/C = owner
|
||||
update_limb(1)
|
||||
C.bodyparts -= src
|
||||
|
||||
if(held_index)
|
||||
C.dropItemToGround(owner.get_item_for_held_index(held_index), 1)
|
||||
C.hand_bodyparts[held_index] = null
|
||||
@@ -125,6 +126,9 @@
|
||||
C.update_body()
|
||||
C.update_hair()
|
||||
C.update_canmove()
|
||||
if(is_pseudopart)
|
||||
drop_organs(C) //Psuedoparts shouldn't have organs, but just in case
|
||||
qdel(src)
|
||||
|
||||
|
||||
//when a limb is dropped, the internal organs are removed from the mob and put into the limb
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
if(status != BODYPART_ROBOTIC) //having a robotic head hides certain features.
|
||||
//facial hair
|
||||
if(facial_hair_style)
|
||||
S = facial_hair_styles_list[facial_hair_style]
|
||||
S = GLOB.facial_hair_styles_list[facial_hair_style]
|
||||
if(S)
|
||||
var/image/img_facial = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH)
|
||||
img_facial.color = "#" + facial_hair_color
|
||||
@@ -143,7 +143,7 @@
|
||||
standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained", "layer" = -HAIR_LAYER, "dir"=SOUTH)
|
||||
else
|
||||
if(hair_style)
|
||||
S = hair_styles_list[hair_style]
|
||||
S = GLOB.hair_styles_list[hair_style]
|
||||
if(S)
|
||||
var/image/img_hair = image("icon" = S.icon, "icon_state" = "[S.icon_state]", "layer" = -HAIR_LAYER, "dir"=SOUTH)
|
||||
img_hair.color = "#" + hair_color
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
/obj/item/bodypart/l_arm/robot
|
||||
name = "cyborg left arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
@@ -186,4 +188,4 @@
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon_state = "surplus_r_leg"
|
||||
max_damage = 20
|
||||
max_damage = 20
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
current_surgery = S
|
||||
|
||||
if(!current_surgery)
|
||||
var/list/all_surgeries = surgeries_list.Copy()
|
||||
var/list/all_surgeries = GLOB.surgeries_list.Copy()
|
||||
var/list/available_surgeries = list()
|
||||
|
||||
for(var/datum/surgery/S in all_surgeries)
|
||||
@@ -31,6 +31,8 @@
|
||||
continue
|
||||
if(S.requires_organic_bodypart && affecting.status == BODYPART_ROBOTIC)
|
||||
continue
|
||||
if(S.requires_real_bodypart && affecting.is_pseudopart)
|
||||
continue
|
||||
else if(C && S.requires_bodypart) //mob with no limb in surgery zone when we need a limb
|
||||
continue
|
||||
if(!S.can_start(user, M))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
/////AUGMENTATION SURGERIES//////
|
||||
|
||||
|
||||
@@ -42,6 +43,7 @@
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/add_limb)
|
||||
species = list(/mob/living/carbon/human)
|
||||
possible_locs = list("r_arm","l_arm","r_leg","l_leg","chest","head")
|
||||
requires_real_bodypart = TRUE
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
|
||||
@@ -58,4 +60,4 @@
|
||||
add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>")
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
/datum/surgery_step/incise, /datum/surgery_step/manipulate_organs)
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list("chest", "head")
|
||||
requires_organic_bodypart = 0
|
||||
requires_organic_bodypart = FALSE
|
||||
requires_real_bodypart = TRUE
|
||||
|
||||
/datum/surgery/organ_manipulation/soft
|
||||
possible_locs = list("groin", "eyes", "mouth", "l_arm", "r_arm")
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
/obj/item/organ/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0)
|
||||
..()
|
||||
if(HUD_type)
|
||||
var/datum/atom_hud/H = huds[HUD_type]
|
||||
var/datum/atom_hud/H = GLOB.huds[HUD_type]
|
||||
H.add_hud_to(M)
|
||||
M.permanent_huds |= H
|
||||
|
||||
/obj/item/organ/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0)
|
||||
if(HUD_type)
|
||||
var/datum/atom_hud/H = huds[HUD_type]
|
||||
var/datum/atom_hud/H = GLOB.huds[HUD_type]
|
||||
M.permanent_huds ^= H
|
||||
H.remove_hud_from(M)
|
||||
..()
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
return
|
||||
crit_fail = TRUE
|
||||
addtimer(CALLBACK(src, .proc/reboot), 90 / severity)
|
||||
..()
|
||||
|
||||
/obj/item/organ/cyberimp/brain/anti_stun/proc/reboot()
|
||||
crit_fail = FALSE
|
||||
@@ -144,28 +145,19 @@
|
||||
//BOX O' IMPLANTS
|
||||
|
||||
/obj/item/weapon/storage/box/cyber_implants
|
||||
name = "boxed cybernetic implant"
|
||||
name = "boxed cybernetic implants"
|
||||
desc = "A sleek, sturdy box."
|
||||
icon_state = "cyber_implants"
|
||||
|
||||
/obj/item/weapon/storage/box/cyber_implants/New(loc, implant)
|
||||
..()
|
||||
new /obj/item/device/autoimplanter(src)
|
||||
if(ispath(implant))
|
||||
new implant(src)
|
||||
|
||||
/obj/item/weapon/storage/box/cyber_implants/bundle
|
||||
name = "boxed cybernetic implants"
|
||||
var/list/boxed = list(
|
||||
/obj/item/organ/eyes/robotic/xray,
|
||||
/obj/item/organ/eyes/robotic/thermals,
|
||||
/obj/item/organ/cyberimp/brain/anti_stun,
|
||||
/obj/item/organ/cyberimp/chest/reviver)
|
||||
/obj/item/device/autosurgeon/thermal_eyes,
|
||||
/obj/item/device/autosurgeon/xray_eyes,
|
||||
/obj/item/device/autosurgeon/anti_stun,
|
||||
/obj/item/device/autosurgeon/reviver)
|
||||
var/amount = 5
|
||||
|
||||
/obj/item/weapon/storage/box/cyber_implants/bundle/New()
|
||||
..()
|
||||
var/implant
|
||||
while(contents.len <= amount + 1) // +1 for the autoimplanter.
|
||||
while(contents.len <= amount)
|
||||
implant = pick(boxed)
|
||||
new implant(src)
|
||||
|
||||
84
code/modules/surgery/organs/autosurgeon.dm
Normal file
84
code/modules/surgery/organs/autosurgeon.dm
Normal file
@@ -0,0 +1,84 @@
|
||||
#define INFINITE -1
|
||||
|
||||
/obj/item/device/autosurgeon
|
||||
name = "autosurgeon"
|
||||
desc = "A device that automatically inserts an implant or organ into the user without the hassle of extensive surgery. It has a slot to insert implants/organs and a screwdriver slot for removing accidentally added items."
|
||||
icon_state = "autoimplanter"
|
||||
item_state = "walkietalkie"//left as this so as to intentionally not have inhands
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/obj/item/organ/storedorgan
|
||||
var/organ_type = /obj/item/organ
|
||||
var/uses = INFINITE
|
||||
var/starting_organ
|
||||
|
||||
/obj/item/device/autosurgeon/Initialize(mapload)
|
||||
..()
|
||||
if(starting_organ)
|
||||
insert_organ(new starting_organ(src))
|
||||
|
||||
/obj/item/device/autosurgeon/proc/insert_organ(var/obj/item/I)
|
||||
storedorgan = I
|
||||
I.forceMove(src)
|
||||
name = "[initial(name)] ([storedorgan.name])"
|
||||
|
||||
/obj/item/device/autosurgeon/attack_self(mob/user)//when the object it used...
|
||||
if(!uses)
|
||||
to_chat(user, "<span class='warning'>[src] has already been used. The tools are dull and won't reactivate.</span>")
|
||||
return
|
||||
else if(!storedorgan)
|
||||
to_chat(user, "<span class='notice'>[src] currently has no implant stored.</span>")
|
||||
return
|
||||
storedorgan.Insert(user)//insert stored organ into the user
|
||||
user.visible_message("<span class='notice'>[user] presses a button on [src], and you hear a short mechanical noise.</span>", "<span class='notice'>You feel a sharp sting as [src] plunges into your body.</span>")
|
||||
playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1)
|
||||
storedorgan = null
|
||||
name = initial(name)
|
||||
if(uses != INFINITE)
|
||||
uses--
|
||||
if(!uses)
|
||||
desc = "[initial(desc)] Looks like it's been used up."
|
||||
|
||||
/obj/item/device/autosurgeon/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, organ_type))
|
||||
if(storedorgan)
|
||||
to_chat(user, "<span class='notice'>[src] already has an implant stored.</span>")
|
||||
return
|
||||
else if(!uses)
|
||||
to_chat(user, "<span class='notice'>[src] has already been used up.</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
I.forceMove(src)
|
||||
storedorgan = I
|
||||
to_chat(user, "<span class='notice'>You insert the [I] into [src].</span>")
|
||||
else if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(!storedorgan)
|
||||
to_chat(user, "<span class='notice'>There's no implant in [src] for you to remove.</span>")
|
||||
else
|
||||
var/turf/open/floorloc = get_turf(user)
|
||||
floorloc.contents += contents
|
||||
to_chat(user, "<span class='notice'>You remove the [storedorgan] from [src].</span>")
|
||||
playsound(get_turf(user), I.usesound, 50, 1)
|
||||
storedorgan = null
|
||||
if(uses != INFINITE)
|
||||
uses--
|
||||
if(!uses)
|
||||
desc = "[initial(desc)] Looks like it's been used up."
|
||||
|
||||
/obj/item/device/autosurgeon/cmo
|
||||
desc = "A single use autosurgeon that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in."
|
||||
uses = 1
|
||||
starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical
|
||||
|
||||
|
||||
/obj/item/device/autosurgeon/thermal_eyes
|
||||
starting_organ = /obj/item/organ/eyes/robotic/thermals
|
||||
|
||||
/obj/item/device/autosurgeon/xray_eyes
|
||||
starting_organ = /obj/item/organ/eyes/robotic/xray
|
||||
|
||||
/obj/item/device/autosurgeon/anti_stun
|
||||
starting_organ = /obj/item/organ/cyberimp/brain/anti_stun
|
||||
|
||||
/obj/item/device/autosurgeon/reviver
|
||||
starting_organ = /obj/item/organ/cyberimp/chest/reviver
|
||||
@@ -12,13 +12,17 @@
|
||||
var/vital = 0
|
||||
|
||||
|
||||
/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
if(!iscarbon(M) || owner == M)
|
||||
return
|
||||
|
||||
var/obj/item/organ/replaced = M.getorganslot(slot)
|
||||
if(replaced)
|
||||
replaced.Remove(M, special = 1)
|
||||
if(drop_if_replaced)
|
||||
replaced.forceMove(get_turf(src))
|
||||
else
|
||||
qdel(replaced)
|
||||
|
||||
owner = M
|
||||
M.internal_organs |= src
|
||||
@@ -62,7 +66,6 @@
|
||||
S.icon_state = icon_state
|
||||
S.origin_tech = origin_tech
|
||||
S.w_class = w_class
|
||||
S.color = color
|
||||
|
||||
return S
|
||||
|
||||
@@ -227,7 +230,7 @@
|
||||
colour = "red"
|
||||
|
||||
#define HUMAN_MAX_OXYLOSS 3
|
||||
#define HUMAN_CRIT_MAX_OXYLOSS (SSmob.wait/30)
|
||||
#define HUMAN_CRIT_MAX_OXYLOSS (SSmobs.wait/30)
|
||||
#define HEAT_GAS_DAMAGE_LEVEL_1 2
|
||||
#define HEAT_GAS_DAMAGE_LEVEL_2 4
|
||||
#define HEAT_GAS_DAMAGE_LEVEL_3 8
|
||||
@@ -454,7 +457,7 @@
|
||||
if(H && H.dna && H.dna.species && H.dna.species.species_traits)
|
||||
species_traits = H.dna.species.species_traits
|
||||
|
||||
if(!(mutations_list[COLDRES] in H.dna.mutations) && !(RESISTCOLD in species_traits)) // COLD DAMAGE
|
||||
if(!(GLOB.mutations_list[COLDRES] in H.dna.mutations) && !(RESISTCOLD in species_traits)) // COLD DAMAGE
|
||||
switch(breath.temperature)
|
||||
if(-INFINITY to 120)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head")
|
||||
@@ -509,9 +512,18 @@
|
||||
zone = "mouth"
|
||||
slot = "tongue"
|
||||
attack_verb = list("licked", "slobbered", "slapped", "frenched", "tongued")
|
||||
var/list/languages_possible
|
||||
var/say_mod = null
|
||||
var/taste_sensitivity = 15 // lower is more sensitive.
|
||||
|
||||
/obj/item/organ/tongue/Initialize(mapload)
|
||||
..()
|
||||
languages_possible = typecacheof(list(
|
||||
/datum/language/common,
|
||||
/datum/language/monkey,
|
||||
/datum/language/ratvar
|
||||
))
|
||||
|
||||
/obj/item/organ/tongue/get_spans()
|
||||
return list()
|
||||
|
||||
@@ -528,6 +540,9 @@
|
||||
if(say_mod && M.dna && M.dna.species)
|
||||
M.dna.species.say_mod = initial(M.dna.species.say_mod)
|
||||
|
||||
/obj/item/organ/tongue/can_speak_in_language(datum/language/dt)
|
||||
. = is_type_in_typecache(dt, languages_possible)
|
||||
|
||||
/obj/item/organ/tongue/lizard
|
||||
name = "forked tongue"
|
||||
desc = "A thin and long muscle typically found in reptilian races, apparently moonlights as a nose."
|
||||
@@ -569,7 +584,7 @@
|
||||
//Hacks
|
||||
var/mob/living/carbon/human/user = usr
|
||||
var/rendered = "<span class='abductor'><b>[user.name]:</b> [message]</span>"
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
|
||||
var/obj/item/organ/tongue/T = H.getorganslot("tongue")
|
||||
if(!T || T.type != type)
|
||||
continue
|
||||
@@ -579,7 +594,7 @@
|
||||
if(Ayy.team != Byy.team)
|
||||
continue
|
||||
to_chat(H, rendered)
|
||||
for(var/mob/M in dead_mob_list)
|
||||
for(var/mob/M in GLOB.dead_mob_list)
|
||||
var/link = FOLLOW_LINK(M, user)
|
||||
to_chat(M, "[link] [rendered]")
|
||||
return ""
|
||||
@@ -614,6 +629,14 @@
|
||||
say_mod = "hisses"
|
||||
taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED
|
||||
|
||||
/obj/item/organ/tongue/alien/Initialize(mapload)
|
||||
..()
|
||||
languages_possible = typecacheof(list(
|
||||
/datum/language/xenocommon,
|
||||
/datum/language/common,
|
||||
/datum/language/ratvar,
|
||||
/datum/language/monkey))
|
||||
|
||||
/obj/item/organ/tongue/alien/TongueSpeech(var/message)
|
||||
playsound(owner, "hiss", 25, 1, 1)
|
||||
return message
|
||||
@@ -652,10 +675,6 @@
|
||||
if("papyrus")
|
||||
. |= SPAN_PAPYRUS
|
||||
|
||||
/obj/item/organ/tongue/bone/chatter
|
||||
name = "chattering bone \"tongue\""
|
||||
chattering = TRUE
|
||||
|
||||
/obj/item/organ/tongue/robot
|
||||
name = "robotic voicebox"
|
||||
desc = "A voice synthesizer that can interface with organic lifeforms."
|
||||
@@ -665,6 +684,17 @@
|
||||
attack_verb = list("beeped", "booped")
|
||||
taste_sensitivity = 25 // not as good as an organic tongue
|
||||
|
||||
/obj/item/organ/tongue/robot/Initialize(mapload)
|
||||
..()
|
||||
languages_possible = typecacheof(list(
|
||||
/datum/language/xenocommon,
|
||||
/datum/language/common,
|
||||
/datum/language/ratvar,
|
||||
/datum/language/monkey,
|
||||
/datum/language/drone,
|
||||
/datum/language/machine,
|
||||
/datum/language/swarmer))
|
||||
|
||||
/obj/item/organ/tongue/robot/get_spans()
|
||||
return ..() | SPAN_ROBOT
|
||||
|
||||
@@ -754,6 +784,7 @@
|
||||
var/old_eye_color = "fff"
|
||||
var/flash_protect = 0
|
||||
var/see_invisible = SEE_INVISIBLE_LIVING
|
||||
var/lighting_alpha
|
||||
|
||||
/obj/item/organ/eyes/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
@@ -781,26 +812,27 @@
|
||||
name = "shadow eyes"
|
||||
desc = "A spooky set of eyes that can see in the dark."
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
actions_types = list(/datum/action/item_action/organ_action/use)
|
||||
var/night_vision = TRUE
|
||||
|
||||
/obj/item/organ/eyes/night_vision/ui_action_click()
|
||||
if(night_vision)
|
||||
see_in_dark = 4
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
night_vision = FALSE
|
||||
else
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
night_vision = TRUE
|
||||
switch(lighting_alpha)
|
||||
if (LIGHTING_PLANE_ALPHA_VISIBLE)
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE)
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE)
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
|
||||
else
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
|
||||
owner.update_sight()
|
||||
|
||||
/obj/item/organ/eyes/night_vision/alien
|
||||
name = "alien eyes"
|
||||
desc = "It turned out they had them after all!"
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
sight_flags = SEE_MOBS
|
||||
|
||||
|
||||
@@ -834,7 +866,7 @@
|
||||
eye_color = "FC0"
|
||||
origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1"
|
||||
sight_flags = SEE_MOBS
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
flash_protect = -1
|
||||
see_in_dark = 8
|
||||
|
||||
|
||||
@@ -1,48 +1,3 @@
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
var/static/regex/weaken_words = regex("drop|fall|trip|weaken")
|
||||
var/static/regex/sleep_words = regex("sleep|slumber")
|
||||
var/static/regex/vomit_words = regex("vomit|throw up")
|
||||
var/static/regex/silence_words = regex("shut up|silence|ssh|quiet|hush")
|
||||
var/static/regex/hallucinate_words = regex("see the truth|hallucinate")
|
||||
var/static/regex/wakeup_words = regex("wake up|awaken")
|
||||
var/static/regex/heal_words = regex("live|heal|survive|mend|heroes never die")
|
||||
var/static/regex/hurt_words = regex("die|suffer|hurt|pain")
|
||||
var/static/regex/bleed_words = regex("bleed|there will be blood")
|
||||
var/static/regex/burn_words = regex("burn|ignite")
|
||||
var/static/regex/hot_words = regex("heat|hot|hell")
|
||||
var/static/regex/cold_words = regex("cold|cool down|chill|freeze")
|
||||
var/static/regex/repulse_words = regex("shoo|go away|leave me alone|begone|flee|fus ro dah|get away|repulse")
|
||||
var/static/regex/attract_words = regex("come here|come to me|get over here|attract")
|
||||
var/static/regex/whoareyou_words = regex("who are you|say your name|state your name|identify")
|
||||
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
|
||||
var/static/regex/knockknock_words = regex("knock knock")
|
||||
var/static/regex/statelaws_words = regex("state laws|state your laws")
|
||||
var/static/regex/move_words = regex("move|walk")
|
||||
var/static/regex/left_words = regex("left|west|port")
|
||||
var/static/regex/right_words = regex("right|east|starboard")
|
||||
var/static/regex/up_words = regex("up|north|fore")
|
||||
var/static/regex/down_words = regex("down|south|aft")
|
||||
var/static/regex/walk_words = regex("slow down")
|
||||
var/static/regex/run_words = regex("run")
|
||||
var/static/regex/helpintent_words = regex("help|hug")
|
||||
var/static/regex/disarmintent_words = regex("disarm")
|
||||
var/static/regex/grabintent_words = regex("grab")
|
||||
var/static/regex/harmintent_words = regex("harm|fight|punch")
|
||||
var/static/regex/throwmode_words = regex("throw|catch")
|
||||
var/static/regex/flip_words = regex("flip|rotate|revolve|roll|somersault")
|
||||
var/static/regex/speak_words = regex("speak|say something")
|
||||
var/static/regex/rest_words = regex("rest")
|
||||
var/static/regex/getup_words = regex("get up")
|
||||
var/static/regex/sit_words = regex("sit")
|
||||
var/static/regex/stand_words = regex("stand")
|
||||
var/static/regex/dance_words = regex("dance")
|
||||
var/static/regex/jump_words = regex("jump")
|
||||
var/static/regex/salute_words = regex("salute")
|
||||
var/static/regex/deathgasp_words = regex("play dead")
|
||||
var/static/regex/clap_words = regex("clap|applaud")
|
||||
var/static/regex/honk_words = regex("ho+nk") //hooooooonk
|
||||
var/static/regex/multispin_words = regex("like a record baby|right round")
|
||||
|
||||
#define COOLDOWN_STUN 1200
|
||||
#define COOLDOWN_DAMAGE 600
|
||||
#define COOLDOWN_MEME 300
|
||||
@@ -170,7 +125,7 @@ var/static/regex/multispin_words = regex("like a record baby|right round")
|
||||
if(user.mind.assigned_role == "Chaplain")
|
||||
power_multiplier *= 2
|
||||
//Command staff has authority
|
||||
if(user.mind.assigned_role in command_positions)
|
||||
if(user.mind.assigned_role in GLOB.command_positions)
|
||||
power_multiplier *= 1.4
|
||||
//Why are you speaking
|
||||
if(user.mind.assigned_role == "Mime")
|
||||
@@ -218,6 +173,51 @@ var/static/regex/multispin_words = regex("like a record baby|right round")
|
||||
power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on
|
||||
message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1)
|
||||
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
var/static/regex/weaken_words = regex("drop|fall|trip|weaken")
|
||||
var/static/regex/sleep_words = regex("sleep|slumber")
|
||||
var/static/regex/vomit_words = regex("vomit|throw up")
|
||||
var/static/regex/silence_words = regex("shut up|silence|ssh|quiet|hush")
|
||||
var/static/regex/hallucinate_words = regex("see the truth|hallucinate")
|
||||
var/static/regex/wakeup_words = regex("wake up|awaken")
|
||||
var/static/regex/heal_words = regex("live|heal|survive|mend|heroes never die")
|
||||
var/static/regex/hurt_words = regex("die|suffer|hurt|pain")
|
||||
var/static/regex/bleed_words = regex("bleed|there will be blood")
|
||||
var/static/regex/burn_words = regex("burn|ignite")
|
||||
var/static/regex/hot_words = regex("heat|hot|hell")
|
||||
var/static/regex/cold_words = regex("cold|cool down|chill|freeze")
|
||||
var/static/regex/repulse_words = regex("shoo|go away|leave me alone|begone|flee|fus ro dah|get away|repulse")
|
||||
var/static/regex/attract_words = regex("come here|come to me|get over here|attract")
|
||||
var/static/regex/whoareyou_words = regex("who are you|say your name|state your name|identify")
|
||||
var/static/regex/saymyname_words = regex("say my name|who am i|whoami")
|
||||
var/static/regex/knockknock_words = regex("knock knock")
|
||||
var/static/regex/statelaws_words = regex("state laws|state your laws")
|
||||
var/static/regex/move_words = regex("move|walk")
|
||||
var/static/regex/left_words = regex("left|west|port")
|
||||
var/static/regex/right_words = regex("right|east|starboard")
|
||||
var/static/regex/up_words = regex("up|north|fore")
|
||||
var/static/regex/down_words = regex("down|south|aft")
|
||||
var/static/regex/walk_words = regex("slow down")
|
||||
var/static/regex/run_words = regex("run")
|
||||
var/static/regex/helpintent_words = regex("help|hug")
|
||||
var/static/regex/disarmintent_words = regex("disarm")
|
||||
var/static/regex/grabintent_words = regex("grab")
|
||||
var/static/regex/harmintent_words = regex("harm|fight|punch")
|
||||
var/static/regex/throwmode_words = regex("throw|catch")
|
||||
var/static/regex/flip_words = regex("flip|rotate|revolve|roll|somersault")
|
||||
var/static/regex/speak_words = regex("speak|say something")
|
||||
var/static/regex/rest_words = regex("rest")
|
||||
var/static/regex/getup_words = regex("get up")
|
||||
var/static/regex/sit_words = regex("sit")
|
||||
var/static/regex/stand_words = regex("stand")
|
||||
var/static/regex/dance_words = regex("dance")
|
||||
var/static/regex/jump_words = regex("jump")
|
||||
var/static/regex/salute_words = regex("salute")
|
||||
var/static/regex/deathgasp_words = regex("play dead")
|
||||
var/static/regex/clap_words = regex("clap|applaud")
|
||||
var/static/regex/honk_words = regex("ho+nk") //hooooooonk
|
||||
var/static/regex/multispin_words = regex("like a record baby|right round")
|
||||
|
||||
//STUN
|
||||
if(findtext(message, stun_words))
|
||||
cooldown = COOLDOWN_STUN
|
||||
@@ -371,7 +371,7 @@ var/static/regex/multispin_words = regex("like a record baby|right round")
|
||||
for(var/i=1, i<=(5*power_multiplier), i++)
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
step(L, direction ? direction : pick(cardinal))
|
||||
step(L, direction ? direction : pick(GLOB.cardinal))
|
||||
sleep(10)
|
||||
|
||||
//WALK
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
return 1
|
||||
else
|
||||
target.regenerate_limb(target_zone)
|
||||
var/obj/item/bodypart/L = target.get_bodypart(target_zone)
|
||||
L.is_pseudopart = TRUE
|
||||
user.visible_message("[user] finishes attaching [tool]!", "<span class='notice'>You attach [tool].</span>")
|
||||
qdel(tool)
|
||||
if(istype(tool, /obj/item/weapon/twohanded/required/chainsaw))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/obj/item/bodypart/operated_bodypart //Operable body part
|
||||
var/requires_bodypart = TRUE //Surgery available only when a bodypart is present, or only when it is missing.
|
||||
var/success_multiplier = 0 //Step success propability multiplier
|
||||
|
||||
var/requires_real_bodypart = 0 //Some surgeries don't work on limbs that don't really exist
|
||||
|
||||
/datum/surgery/New(surgery_target, surgery_location, surgery_bodypart)
|
||||
..()
|
||||
@@ -54,7 +54,7 @@
|
||||
return new step_type
|
||||
|
||||
/datum/surgery/proc/complete()
|
||||
feedback_add_details("surgeries_completed", type)
|
||||
feedback_add_details("surgeries_completed", "[type]")
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -94,4 +94,4 @@
|
||||
|
||||
//RESOLVED ISSUES //"Todo" jobs that have been completed
|
||||
//combine hands/feet into the arms - Hands/feet were removed - RR
|
||||
//surgeries (not steps) that can be initiated on any body part (corresponding with damage locations) - Call this one done, see possible_locs var - c0
|
||||
//surgeries (not steps) that can be initiated on any body part (corresponding with damage locations) - Call this one done, see possible_locs var - c0
|
||||
|
||||
Reference in New Issue
Block a user