Merge remote-tracking branch 'upstream/master' into fairylights

This commit is contained in:
Dahlular
2022-04-02 18:43:01 -06:00
910 changed files with 114448 additions and 126508 deletions
@@ -25,6 +25,9 @@
dat += "<a href='byond://?src=[REF(src)];container=1'>Fill container</A>"
dat += "(Use a container in your hand to collect your seminal fluid.)<BR>"
dat += "<a href='byond://?src=[REF(src)];climaxself=1'>Climax on self</A>"
dat += "(Stimulate a sexual organ to climax onto yourself.)<BR>"
var/mob/living/carbon/human/C = usr
if(C && C.w_uniform || C.wear_suit) //if they are wearing cloths
dat += "<a href='byond://?src=[REF(src)];clothesplosion=1'>Explode out of clothes</A>"
@@ -160,6 +163,14 @@
to_chat(usr, "<span class='warning'>You aren't aroused enough for that! </span>")
return
if(href_list["climaxself"])
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
H.climaxself()
return
else
to_chat(usr, "<span class='warning'>You aren't aroused enough for that! </span>")
return
if(href_list["climax"])
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
H.climaxalone(FALSE)
@@ -340,17 +351,14 @@ obj/screen/arousal/proc/kiss()
/mob/living/carbon/human/proc/kisstarget(mob/living/L)
src << browse(null, "window=arousal") //closes the arousal window, if its open, mainly to stop spam
if(isliving(L)) //is your target living? Living people can resist your advances if they want to via moving.
if(iscarbon(L))
src.visible_message("<span class='notice'>[src] is about to kiss [L]!</span>", \
"<span class='notice'>You're attempting to kiss [L]!</span>", \
"<span class='notice'>You're attempting to kiss with something!</span>")
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "kissed", /datum/mood_event/kiss) //how cute, affection is nice.
//Well done you kissed it/them!
L.adjustPainLoss(-5, 0) //mommas kisses always stop alittle pain..
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "kissed", /datum/mood_event/kiss) //how cute, affection is nice.
src.visible_message("<span class='notice'>[src] kisses [L]!</span>", \
"<span class='notice'>You kiss [L]!</span>", \
"<span class='notice'>You kiss something!</span>")
/mob/living/carbon/human/proc/climaxalone()
//we dont need hands to climax alone, its hands free!
var/obj/item/organ/genital/picked_organ
@@ -503,4 +511,29 @@ obj/screen/arousal/proc/kiss()
cut_overlay(mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi', "cum_large"))
if(cum_splatter_icon)
cut_overlay(cum_splatter_icon)
return TRUE
return TRUE
/mob/living/carbon/human/proc/climaxself()
if(restrained(TRUE))
to_chat(src, "<span class='warning'>You can't do that while restrained!</span>")
return
var/free_hands = get_num_arms()
if(!free_hands)
to_chat(src, "<span class='warning'>You need at least one free arm.</span>")
return
for(var/helditem in held_items)
if(isobj(helditem))
free_hands--
if(free_hands <= 0)
to_chat(src, "<span class='warning'>You're holding too many things.</span>")
return
//We got hands, let's pick an organ
var/obj/item/organ/genital/picked_organ
picked_organ = pick_masturbate_genitals()
if(picked_organ)
src << browse(null, "window=arousal") //closes the window
mob_masturbate(picked_organ, cover = TRUE)
return
else //They either lack organs that can masturbate, or they didn't pick one.
to_chat(src, "<span class='warning'>You cannot climax without choosing genitals.</span>")
return
@@ -326,7 +326,7 @@
Most stable colonies, stations, civilizations, planets, or anywhere on the spectrum is often backed by the firm hand of Kinaris- underneath one rule: \
Be Radiant."
history = ""
work = "Weave-research, conversion, and colony management"
work = "Weave-research, conversion, uplifting, and colony management"
headquarters = "Holy City of Radiant Hearth, Myril"
motto = "Be Radiant"
@@ -361,6 +361,7 @@
"Salis Major orbit",
"a megastructure at Kappa Andromedae",
"Radiant Hearth",
"a dockyard at Procella, Tremora",
"sector command at Vivida Laetus",
"a dissonant tear at RR Lyra",
"a city-station at Kappa Andromedae",
@@ -414,6 +415,7 @@
"a ringworld at Incandesce Seconda",
"Salis Major orbit",
"a megastructure at Kappa Andromedae",
"a dockyard at Procella, Tremora",
"the rings of Layenia",
"Dzar metalworking at Loto",
"a metalworking site at Salis Major",
@@ -454,4 +456,56 @@
ship_prefixes = list("ZCO" = "transportation", "ZC" = "patrol")
autogenerate_destination_names = TRUE
autogenerate_destination_names = TRUE
//Thanks Hellcelot for this one!
/datum/lore/organization/titanceramics
name = "Titan Piezoelectrics and Ceramics"
short_name = "Titan Ceramics"
desc = "Titan Ceramics was the primary source of prominent electrical power on Tremora for it's lifespan, with extravagent materials and unique ceramic mixes that supported \
incredibly efficient production of energy in bulk. Not only did they provide energy for a once-struggling civilization, they brought upon artistic desire and talent for those \
who would seek their ceramics. Value in energy is equal to value in art in their eyes, with only the finest materials and expertly-tested conditions to meet the quality of \
their work. Despite the overwhelming size difference of the housing species, value is still sought from both sides, resulting in multi-size accomodations for their ceramics. \
When cheap yet efficient power is required without the Weave, Titan Ceramics is there."
history = ""
work = "Production of power-efficient piezoelectric ceramics and craft"
headquarters = "The Storm Capitol of Procella, Tremora"
motto = ""
ship_prefixes = list("TC" = "transportation", "TCF" = "freight", "TCR" = "research")
ship_names = list(
"Noki",
"Moyai",
"Megalodon",
"Mako",
"Minnow",
"Tsunami",
"North Star",
"Tempest",
"Eye of the Storm",
"Aquarius",
"Marinia",
"Thalassus",
"Stormwind"
)
autogenerate_destination_names = TRUE
/datum/lore/organization/syntech
name = "Synergized Technology"
short_name = "SynTech"
desc = "Synergized Technology- commonly known as SynTech- is a company which leads the complex solutions in any galaxy's biggest problem: accomodating for the size of life. \
As civilization grew more welcoming to different ideals and lifestyles, it became more difficult and disasterous to deal with the extreme size difference from one alien \
species to the other. Not only did this spark an incredible amount of regulations from AzureGov, but Kinaris's interest was piqued to keep peace over all; and that included \
accomodating for any species, whether or not they stood above a mountain, or below an ant hill. The high demand of multi-size rights and technology was driven into SynTech's \
hands, where they would provide and assist in regulating consistent and meaningful products to ease interaction from one to the next. Not only do they supply incredibly \
advanced, highly-regulated technology, they also help in consistent planning and regulation in most cities to keep traffic from most differently-sized species without \
havoc. Without SynTech, galaxies would look like a fairly bland place, where one size rules above all."
history = ""
work = "Production and selling of size-altering technology, as well as accomodating the planning of infrastructure to support many sizes."
headquarters = "The City-Planet of Jovias, Nembus"
motto = "Modern solutions, big and small"
ship_prefixes = list("SYT" = "transportation", "SYTF" = "freight", "XSYT" = "scaler", "SYT-I" = "constructor")
autogenerate_destination_names = TRUE
@@ -0,0 +1,34 @@
/datum/round_event_control/crystalloid_entities
name = "Crystal Invasion"
typepath = /datum/round_event/crystalloid_entities
weight = 10 //decreased weight from 15 to 10
min_players = 2 //increased min players from 2 to 5 to reduce chances of half the crew dying in a carp breach
earliest_start = 10 MINUTES
max_occurrences = 2
/datum/round_event/crystalloid_entities
announceWhen = 3
startWhen = 50
/datum/round_event/crystalloid_entities/setup()
startWhen = rand(40, 60)
/datum/round_event/crystalloid_entities/announce(fake)
if(prob(70))
priority_announce("Unknown inorganic entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", 'sound/ai/crystal.ogg')
else
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
for(var/obj/machinery/computer/communications/C in GLOB.machines)
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
var/obj/item/paper/P = new(C.loc)
P.name = "Crystalloid entities"
P.info = "Unknown inorganic entities have been detected near [station_name()], you may wish to break out arms."
P.update_icon()
/datum/round_event/crystalloid_entities/start()
for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
if(prob(60)) //dont spawn them EVERYWHERE, they are tougher than carps.
new /mob/living/simple_animal/hostile/crystal(C.loc)
@@ -0,0 +1,399 @@
/*
from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm:
/datum/sprite_accessory
var/extra = FALSE
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
var/extra2 = FALSE
var/extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
var/extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi'
var/extra2_color_src = MUTCOLORS3
var/list/ckeys_allowed
we use the "citadel" versions of mutant/species parts, which usually (but not always)
begins with "mam_" somewhere. stuff that's built for only humans/lizards in other parts
of the code are from TG, don't use those.
keep everything in alphabetical order, please!
*/
// TODO: code it so that we don't have to type in "icon = 'hyperstation/icons/mob/etc'"
// manually for hyperstation parts
/*
SNOUTS
==========================================================
*/
/datum/sprite_accessory/mam_snouts/bigmandible // sarcoph @ hyperstation, march 2022
name = "Big Mandibles (Hyper)"
icon_state = "bigmandible"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/proboscis // sarcoph @ hyperstation, march 2022
name = "Proboscis (Hyper)"
icon_state = "proboscis"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/rhinobeetle // sarcoph @ hyperstation, march 2022
name = "Rhino Beetle (Hyper)"
icon_state = "rhinobeetle"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/scarab // sarcoph @ hyperstation, march 2022
name = "Scarab Beetle (Hyper)"
icon_state = "scarab"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/smallmandible // sarcoph @ hyperstation, march 2022
name = "Small Mandibles (Hyper)"
icon_state = "smallmandible"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/spider // sarcoph @ hyperstation, march 2022
name = "Spider (Hyper)"
icon_state = "spider"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_snouts/tarantula // sarcoph @ hyperstation, march 2022
name = "Tarantula (Hyper)"
icon_state = "tarantula"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
recommended_species = list("insect")
/*
EARS
==========================================================
*/
/datum/sprite_accessory/mam_ears/faceant // sarcoph @ hyperstation, march 2022
name = "Face Antennae (Hyper)"
icon_state = "faceant"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_ears/faceant2 // sarcoph @ hyperstation, march 2022
name = "Face Antennae 2 (Hyper)"
icon_state = "faceant2"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_ears/moth
name = "Moth Antennae (Hyper)"
icon_state = "moth"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_ears/plumeant // sarcoph @ hyperstation, march 2022
name = "Plume Antennae (Hyper)"
icon_state = "plumeant"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_ears/roundant // sarcoph @ hyperstation, march 2022
name = "Round Antennae (Hyper)"
icon_state = "roundant"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_ears/thinant // sarcoph @ hyperstation, march 2022
name = "Thin Antennae (Hyper)"
icon_state = "thinant"
icon = 'hyperstation/icons/mob/char_ears.dmi'
recommended_species = list("insect")
/*
WINGS
==========================================================
*/
/datum/sprite_accessory/deco_wings/beetle // sarcoph @ hyperstation, march 2022
name = "Beetle (Hyper)"
icon_state = "beetle"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/moth_wings/beetle
name = "Beetle (Hyper)"
icon_state = "beetle"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/deco_wings/beetle2 // sarcoph @ hyperstation, march 2022
name = "Beetle - 2-toned (Hyper)"
icon_state = "beetle2"
icon = 'hyperstation/icons/mob/char_wings.dmi'
color_src = MATRIXED
/datum/sprite_accessory/moth_wings/beetle2
name = "Beetle - 2-toned (Hyper)"
icon_state = "beetle2"
icon = 'hyperstation/icons/mob/char_wings.dmi'
color_src = MATRIXED
/datum/sprite_accessory/deco_wings/insect // sarcoph @ hyperstation, march 2022
name = "Insect (Hyper)"
icon_state = "insect"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/moth_wings/insect
name = "Insect (Hyper)"
icon_state = "insect"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/deco_wings/minibat // sarcoph @ hyperstation, march 2022
name = "Mini Bat (Hyper)"
icon_state = "minibat"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/deco_wings/minifeather // sarcoph @ hyperstation, march 2022
name = "Mini Feather (Hyper)"
icon_state = "minifeather"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/deco_wings/tinybat // sarcoph @ hyperstation, march 2022
name = "Tiny Bat (Hyper)"
icon_state = "tinybat"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/datum/sprite_accessory/deco_wings/tinyfeather // sarcoph @ hyperstation, march 2022
name = "Tiny Feather (Hyper)"
icon_state = "tinyfeather"
icon = 'hyperstation/icons/mob/char_wings.dmi'
/*
TAILS + ANIMATED TAILS
==========================================================
*/
/datum/sprite_accessory/mam_tails/bee // sarcoph @ hyperstation, march 2022
name = "Bee (Hyper)"
icon_state = "bee"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails_animated/bee
name = "Bee (Hyper)"
icon_state = "bee"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails/bee2 // sarcoph @ hyperstation, march 2022
name = "Bee w/ Stinger (Hyper)"
icon_state = "bee2"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails_animated/bee2
name = "Bee w/ Stinger (Hyper)"
icon_state = "bee2"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
// "fan" bird tail, short
/datum/sprite_accessory/mam_tails/shorthawk // sarcoph @ hyperstation, jan 2022
name = "Hawk - Short (Hyper)"
icon_state = "shorthawk"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails_animated/shorthawk
name = "Hawk - Short (Hyper)"
icon_state = "shorthawk"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails/insect // sarcoph @ hyperstation, march 2022
name = "Insect (Hyper)"
icon_state = "insect"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails_animated/insect
name = "Insect (Hyper)"
icon_state = "insect"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails/bug2tone // sarcoph @ hyperstation, march 2022
name = "Insect - 2-tone (Hyper)"
icon_state = "bug2tone"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_tails_animated/bug2tone
name = "Insect - 2-tone (Hyper)"
icon_state = "bug2tone"
icon = 'hyperstation/icons/mob/char_tails.dmi'
recommended_species = list("insect")
// "narrow" bird tail, long
/datum/sprite_accessory/mam_tails/longpigeon // sarcoph @ hyperstation, jan 2022
name = "Pigeon - Long (Hyper)"
icon_state = "longpigeon"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails_animated/longpigeon
name = "Pigeon - Long (Hyper)"
icon_state = "longpigeon"
icon = 'hyperstation/icons/mob/char_tails.dmi'
// "narrow" bird tail, short
/datum/sprite_accessory/mam_tails/shortpigeon // sarcoph @ hyperstation, jan 2022
name = "Pigeon - Short (Hyper)"
icon_state = "shortpigeon"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails_animated/shortpigeon
name = "Pigeon - Short (Hyper)"
icon_state = "shortpigeon"
icon = 'hyperstation/icons/mob/char_tails.dmi'
// "forked" bird tail, long
/datum/sprite_accessory/mam_tails/swallow // sarcoph @ hyperstation, jan 2022
name = "Swallow (Hyper)"
icon_state = "swallow"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails_animated/swallow
name = "Swallow (Hyper)"
icon_state = "swallow"
icon = 'hyperstation/icons/mob/char_tails.dmi'
// forked bird tail, long; special stripe markings
/datum/sprite_accessory/mam_tails/swallowstriped // sarcoph @ hyperstation, jan 2022
name = "Swallow - Striped (Hyper)"
icon_state = "swallowstriped"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/datum/sprite_accessory/mam_tails_animated/swallowstriped
name = "Swallow - Striped (Hyper)"
icon_state = "swallowstriped"
icon = 'hyperstation/icons/mob/char_tails.dmi'
/*
BODY MARKINGS
==========================================================
*/
/*
from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm:
/datum/sprite_accessory/mam_body_markings
extra = FALSE
extra2 = FALSE
color_src = MATRIXED
gender_specific = 0
icon = 'modular_citadel/icons/mob/mam_markings.dmi'
recommended_species = list("mammal", "xeno", "slimeperson", "podweak", "avian", "aquatic")
*/
/datum/sprite_accessory/mam_body_markings/bee // sarcoph @ hyperstation, march 2022
name = "Bee (Hyper)"
icon_state = "bee"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_body_markings/bee_fluff // sarcoph @ hyperstation, march 2022
name = "Bee - Fluffy (Hyper)"
icon_state = "bee_fluff"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_body_markings/bug3tone // sarcoph @ hyperstation, march 2022
name = "Beetle - 3-tone (Hyper)"
icon_state = "bug3tone"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_body_markings/moth // sarcoph @ hyperstation, jan 2022
name = "Moth (Hyper)"
icon_state = "moth"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("insect")
/datum/sprite_accessory/mam_body_markings/empty
name = "None (Hyper)"
icon_state = "empty"
recommended_species = list("podweak", /*"mammal",*/ "avian", "aquatic", "insect", "xeno", "synthliz", "slimeperson")
// mammals are cursed to no empty markings until they get their heads fixed.
/datum/sprite_accessory/mam_body_markings/pigeon // sarcoph @ hyperstation, jan 2022
name = "Pigeon (Hyper)"
icon_state = "pigeon"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("avian")
/datum/sprite_accessory/mam_body_markings/shrike // sarcoph @ hyperstation, jan 2022
name = "Shrike (Hyper)"
icon_state = "shrike"
icon = 'hyperstation/icons/mob/char_markings.dmi'
recommended_species = list("avian")
/*
TAUR BODIES
==========================================================
*/
/*
from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm:
/datum/sprite_accessory/taur
icon = 'modular_citadel/icons/mob/mam_taur.dmi'
extra_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
extra = TRUE
extra2_icon = 'modular_citadel/icons/mob/mam_taur.dmi'
extra2 = TRUE
center = TRUE
dimension_x = 64
var/taur_mode = NOT_TAURIC
color_src = MATRIXED
recommended_species = list("human", "lizard", "insect", "mammal", "xeno", "jelly", "slimeperson", "podweak", "avian", "aquatic")
*/
/*
HAIRSTYLES
==========================================================
*/
/*
from code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm:
/datum/sprite_accessory/hair
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
// please make sure they're sorted alphabetically and, where needed, categorized
// try to capitalize the names please~
// try to spell
// you do not need to define _s or _l sub-states, game automatically does this for you
*/
/datum/sprite_accessory/hair/aviancrest
name = "Avian Crest (Hyper)"
icon_state = "hair_aviancrest"
icon = 'hyperstation/icons/mob/char_hair.dmi'
/datum/sprite_accessory/hair/curtains
name = "Curtains (Hyper)"
icon_state = "hair_curtains"
/datum/sprite_accessory/hair/mommy
name = "Hairfre (Hyper)"
icon_state = "hair_hairfre"
/datum/sprite_accessory/hair/sidehair
name = "Side Hair (Hyper)"
icon_state = "hair_tailhair2"
/datum/sprite_accessory/hair/hsglamour
name = "Glamour (Hyper)"
icon_state = "hair_glamourh"
/datum/sprite_accessory/hair/emoh
name = "Emo (Hyper)"
icon_state = "hair_emoh"
@@ -0,0 +1,122 @@
/mob/living/carbon
var/total_pain = 0
var/pain_effect = 0
var/pain_cooldown = 0 //for defibs/surgry!
//pain
/mob/living/carbon/adjustPainLoss(amount, updating_health = TRUE, forced = FALSE, affected_zone = BODY_ZONE_CHEST)
if(!forced && (status_flags & GODMODE))
return FALSE
apply_damage(amount > 0 ? amount : amount, PAIN, affected_zone)
return amount
/mob/living/carbon/handle_status_effects()
..()
handle_pain()
/mob/living/carbon/proc/handle_pain()
var/pain_amount = 0
pain_effect += 1
if (pain_cooldown)
pain_cooldown -= 1
pain_effect = 0 //ignore pain for now, you got adrenaline running through your body.
//build up pain in the system from all your limbs and natrually heal pain if its attached to a live body.
for(var/obj/item/bodypart/BP in bodyparts)
pain_amount += BP.pain_dam
var/pain_target = (BP.brute_dam + BP.burn_dam)*0.8
//natural healing of pain, capped at current damage * 0.8, if the pain is lower, slowly bring up the pain. this will let people "get used, to it."
if (BP.pain_dam > (pain_target))
BP.pain_dam -= 1 //bring down to the pain_level.
else
BP.pain_dam += 1 //slowly bring pain back, from pain killers.
//just make sure its zero'd
if (BP.pain_dam < 0)
BP.pain_dam = 0
continue //dont need to do the rest, your fine.
if (BP.pain_dam && pain_effect > 5 && (stat == 0))
var pain_level = (round(BP.pain_dam / 10))
switch(pain_level) //for every 10 points of damage minor -> major
if(1)//start at 10 just so it doesnt get annoying with micro damage
to_chat(src, "<span class='warning'>You feel minor pain in your [BP.name].</span>")
if(2)
to_chat(src, "<span class='warning'>You feel pain in your [BP.name].</span>")
if(3)
to_chat(src, "<span class='warning'>You feel severe pain in your [BP.name].</span>")
if(4 to 99)
to_chat(src, "<span class='warning'>You feel overwhelming pain in your [BP.name].</span>")
jitteriness += 2
stuttering += 2
total_pain = pain_amount
//handle onscreen alert
if (pain_effect > 5)
switch(total_pain)
if(-100 to 25)
clear_alert("pain")
if(25 to 69)
throw_alert("pain", /obj/screen/alert/pain)
if(70 to 99)
throw_alert("pain", /obj/screen/alert/painmajor)
if(100 to 999)
throw_alert("pain", /obj/screen/alert/painshock)
if (pain_effect > 5)
pain_effect = 0 //reset the timer 5 seconds.
if(stat == 0) //awake, not dead or asleep
//status effects for pain..
var/mob/living/H = src
if (total_pain > 50 && total_pain < 80)
if(HAS_TRAIT(H, TRAIT_MASO)) //just because your into it doesnt give you a advantage..
to_chat(src, "<span class='love'>You love this pain, it excites you...</span>")
H.adjustArousalLoss(6)
else
to_chat(src, "<span class='warning'>You cant handle the pain...</span>")
if(prob(20))
emote("scream")
do_jitter_animation() //basic shake.
stuttering += 3 //stutter words, your in pain bro.
if (total_pain > 80) //your in trouble. fainting..
if(HAS_TRAIT(H, TRAIT_MASO))
to_chat(src, "<span class='love'>You love this intense pain, it excites you...</span>")
H.adjustArousalLoss(12)
else
to_chat(src, "<span class='big warning'>You cant handle the intense pain...</span>")
if(prob(20)) //chance of fainting..
visible_message("<span class='danger'>[src] collapses!</span>")
Unconscious(100)
jitteriness += 3 //shake
stuttering += 3 //stutter words
//if they are asleep, this wont trigger.
if (total_pain > 110 && stat == 0) //taking 77 all damage at once from full health, will put you into shock and kill you. This cant be achived with chip damage (or fist fights), because youll die before you reach this pain level.
if(prob(50))
emote("scream")//scream
to_chat(src, "<span class='big warning'>You give into the pain...</span>")
visible_message("<span class='danger'>[src] goes into neurogenic shock!</span>")
Unconscious(200)
if (can_heartattack()) //check if they can
set_heartattack(1) //heart stopped!
//HS Pain heal
/mob/living/carbon/adjustPainLoss(amount, updating_health = TRUE, forced = FALSE)
if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL))
return FALSE
if(!forced && (status_flags & GODMODE))
return FALSE
//all attached limbs get pain damage
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
BP.pain_dam += amount
return amount
@@ -607,10 +607,10 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
ui_interact(user)
/obj/machinery/computer/reactor/control_rods/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state)
/obj/machinery/computer/reactor/control_rods/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/tgui_state/state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "rbmkcontrolrods", name, 300, 300, master_ui, state)
ui = new(user, src, ui_key, "RbmkControlRods", name, 300, 300, master_ui, state)
ui.open()
/obj/machinery/computer/reactor/control_rods/ui_act(action, params)
@@ -648,7 +648,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
. = ..()
ui_interact(user)
/obj/machinery/computer/reactor/stats/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state)
/obj/machinery/computer/reactor/stats/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/tgui_state/state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "RbmkStats", name, 350, 500, master_ui, state)
@@ -803,7 +803,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
transfer_access = ACCESS_CONSTRUCTION
network_destination = "rbmk monitoring system"
size = 2
tgui_id = "ntosrbmkstats"
tgui_id = "NtosRbmkStats"
ui_x = 350
ui_y = 550
var/active = TRUE //Easy process throttle