Merge branch 'master' into digileg-runtime

This commit is contained in:
Poojawa
2018-03-19 21:33:50 -05:00
committed by GitHub
1329 changed files with 2726 additions and 1986 deletions
+2 -6
View File
@@ -43,9 +43,7 @@
/datum/brain_trauma/mild/dumbness/on_gain()
owner.add_trait(TRAIT_DUMB, TRAUMA_TRAIT)
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("dumb", /datum/mood_event/oblivious)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "dumb", /datum/mood_event/oblivious)
..()
/datum/brain_trauma/mild/dumbness/on_life()
@@ -59,9 +57,7 @@
/datum/brain_trauma/mild/dumbness/on_lose()
owner.remove_trait(TRAIT_DUMB, TRAUMA_TRAIT)
owner.derpspeech = 0
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.clear_event("dumb")
owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "dumb")
..()
/datum/brain_trauma/mild/speech_impediment
+35
View File
@@ -0,0 +1,35 @@
/datum/component/beauty
var/beauty = 0
/datum/component/beauty/Initialize(beautyamount)
if(!ismovableatom(parent))
. = COMPONENT_INCOMPATIBLE
CRASH("Someone put a beauty component on a non-atom/movable, not everything can be pretty.")
beauty = beautyamount
RegisterSignal(COMSIG_ENTER_AREA, .proc/enter_area)
RegisterSignal(COMSIG_EXIT_AREA, .proc/exit_area)
var/area/A = get_area(parent)
if(!A || A.outdoors)
return
A.totalbeauty += beauty
A.update_beauty()
/datum/component/beauty/proc/enter_area(area/A)
if(A.outdoors) //Fuck the outside.
return FALSE
A.totalbeauty += beauty
A.update_beauty()
/datum/component/beauty/proc/exit_area(area/A)
if(A.outdoors) //Fuck the outside.
return FALSE
A.totalbeauty -= beauty
A.update_beauty()
/datum/component/beauty/Destroy()
. = ..()
var/area/A = get_area(parent)
if(!A || A.outdoors)
return
A.totalbeauty -= beauty
A.update_beauty()
+1 -1
View File
@@ -30,7 +30,7 @@
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
return
var/picked_def_zone = pick("l_leg", "r_leg")
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone)
if(!istype(O))
return
+3 -1
View File
@@ -89,7 +89,9 @@
var/obj/item/stack/S = I
to_chat(user, "<span class='notice'>You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent].</span>")
if(!QDELETED(I))
user.put_in_active_hand(I)
if(!user.put_in_hands(I))
stack_trace("Warning: User could not put object back in hand during material container insertion, line [__LINE__]! This can lead to issues.")
I.forceMove(user.drop_location())
else
to_chat(user, "<span class='notice'>You insert a material total of [inserted] into [parent].</span>")
qdel(I)
+117 -20
View File
@@ -1,10 +1,12 @@
/datum/component/mood
var/mood //Real happiness
var/sanity = 100 //Current sanity
var/shown_mood //Shown happiness, this is what others can see when they try to examine you, prevents antag checking by noticing traitors are always very happy.
var/mood_level //To track what stage of moodies they're on
var/mood_level = 5 //To track what stage of moodies they're on
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
var/datum/mood_event/list/mood_events = list()
var/mob/living/owner
var/datum/looping_sound/reverse_bear_trap/slow/soundloop //Insanity ticking
/datum/component/mood/Initialize()
if(!isliving(parent))
@@ -12,16 +14,61 @@
CRASH("Some good for nothing loser put a mood component on something that isn't even a living mob.")
START_PROCESSING(SSmood, src)
owner = parent
soundloop = new(list(owner), FALSE, TRUE)
RegisterSignal(COMSIG_ADD_MOOD_EVENT, .proc/add_event)
RegisterSignal(COMSIG_CLEAR_MOOD_EVENT, .proc/clear_event)
RegisterSignal(COMSIG_ENTER_AREA, .proc/update_beauty)
/datum/component/mood/Destroy()
STOP_PROCESSING(SSmood, src)
QDEL_NULL(soundloop)
return ..()
/datum/component/mood/proc/print_mood()
var/msg = "<span class='info'>*---------*\n<EM>Your current mood</EM>\n"
for(var/i in mood_events)
var/datum/mood_event/event = mood_events[i]
msg += event.description
msg += "<span class='notice'>My mental status: </span>" //Long term
switch(sanity)
if(SANITY_GREAT to INFINITY)
msg += "<span class='nicegreen'>My mind feels like a temple!<span>\n"
if(SANITY_NEUTRAL to SANITY_GREAT)
msg += "<span class='nicegreen'>I have been feeling great lately!<span>\n"
if(SANITY_DISTURBED to SANITY_NEUTRAL)
msg += "<span class='nicegreen'>I have felt quite decent lately.<span>\n"
if(SANITY_UNSTABLE to SANITY_DISTURBED)
msg += "<span class='warning'>I'm feeling a little bit unhinged...</span>\n"
if(SANITY_CRAZY to SANITY_UNSTABLE)
msg += "<span class='boldwarning'>I'm freaking out!!</span>\n"
if(SANITY_INSANE to SANITY_CRAZY)
msg += "<span class='boldwarning'>AHAHAHAHAHAHAHAHAHAH!!</span>\n"
msg += "<span class='notice'>My current mood: </span>" //Short term
switch(mood_level)
if(1)
msg += "<span class='boldwarning'>I wish I was dead!<span>\n"
if(2)
msg += "<span class='boldwarning'>I feel terrible...<span>\n"
if(3)
msg += "<span class='boldwarning'>I feel very upset.<span>\n"
if(4)
msg += "<span class='boldwarning'>I'm a bit sad.<span>\n"
if(5)
msg += "<span class='nicegreen'>I'm alright.<span>\n"
if(6)
msg += "<span class='nicegreen'>I feel pretty okay.<span>\n"
if(7)
msg += "<span class='nicegreen'>I feel pretty good.<span>\n"
if(8)
msg += "<span class='nicegreen'>I feel amazing!<span>\n"
if(9)
msg += "<span class='nicegreen'>I love life!<span>\n"
msg += "<span class='notice'>Moodlets:\n</span>"//All moodlets
if(mood_events.len)
for(var/i in mood_events)
var/datum/mood_event/event = mood_events[i]
msg += event.description
else
msg += "<span class='nicegreen'>Nothing special has happend to me lately!<span>\n"
to_chat(owner, msg)
/datum/component/mood/proc/update_mood() //Called whenever a mood event is added or removed
@@ -54,41 +101,87 @@
mood_level = 8
if(MOOD_LEVEL_HAPPY4 to INFINITY)
mood_level = 9
update_mood_icon()
/datum/component/mood/proc/update_mood_icon()
if(owner.client && owner.hud_used)
owner.hud_used.mood.icon_state = "mood[mood_level]"
if(sanity < 25)
owner.hud_used.mood.icon_state = "mood_insane"
else
owner.hud_used.mood.icon_state = "mood[mood_level]"
/datum/component/mood/process() //Called on SSmood process
switch(mood)
if(-INFINITY to MOOD_LEVEL_SAD4)
switch(sanity)
if(SANITY_INSANE to SANITY_CRAZY)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 3)
if(MOOD_LEVEL_SAD4 to MOOD_LEVEL_SAD3)
update_mood_icon()
if(prob(7))
owner.playsound_local(null, pick(CREEPY_SOUNDS), 100, 1)
soundloop.start()
if(SANITY_INSANE to SANITY_UNSTABLE)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 2)
if(MOOD_LEVEL_SAD3 to MOOD_LEVEL_SAD2)
if(prob(3))
owner.playsound_local(null, pick(CREEPY_SOUNDS), 60, 1)
soundloop.stop()
if(SANITY_UNSTABLE to SANITY_DISTURBED)
owner.overlay_fullscreen("depression", /obj/screen/fullscreen/depression, 1)
if(MOOD_LEVEL_SAD2 to INFINITY)
soundloop.stop()
if(SANITY_DISTURBED to SANITY_GREAT)
owner.clear_fullscreen("depression")
soundloop.stop()
switch(mood_level)
if(1)
DecreaseSanity(0.4)
if(2)
DecreaseSanity(0.25)
if(3)
DecreaseSanity(0.15)
if(4)
DecreaseSanity(0.05)
if(5)
IncreaseSanity(0.1)
if(6)
IncreaseSanity(0.15)
if(7)
IncreaseSanity(0.20)
if(8)
IncreaseSanity(0.25, 125)
if(9)
IncreaseSanity(0.4, 125)
if(owner.has_trait(TRAIT_DEPRESSION))
if(prob(0.1))
if(prob(0.05))
add_event("depression", /datum/mood_event/depression)
clear_event("jolly")
if(owner.has_trait(TRAIT_JOLLY))
if(prob(0.1))
if(prob(0.05))
add_event("jolly", /datum/mood_event/jolly)
clear_event("depression")
var/area/A = get_area(owner)
if(A)
update_beauty(A)
/datum/component/mood/proc/DecreaseSanity(amount)
sanity = max(0, sanity - amount)
/datum/component/mood/proc/IncreaseSanity(amount, limit = 99)
if(sanity > limit)
DecreaseSanity(-0.5) //Removes some sanity to go back to our current limit.
else
sanity = min(limit, sanity + amount)
/datum/component/mood/proc/add_event(category, type, param) //Category will override any events in the same category, should be unique unless the event is based on the same thing like hunger.
var/datum/mood_event/the_event
if(mood_events[category])
the_event = mood_events[category]
if(the_event.type != type)
clear_event(category)
return .()
else
return 0 //Don't have to update the event.
else
the_event = new type(src, param)
the_event = new type(src, param)
mood_events[category] = the_event
update_mood()
@@ -105,18 +198,22 @@
qdel(event)
update_mood()
/datum/component/mood/proc/update_beauty(var/area/A)
/datum/component/mood/proc/update_beauty(area/A)
if(A.outdoors) //if we're outside, we don't care.
clear_event("area_beauty")
return FALSE
switch(A.beauty)
if(-INFINITY to BEAUTY_LEVEL_HORRID)
add_event("area_beauty", /datum/mood_event/disgustingroom)
add_event("area_beauty", /datum/mood_event/horridroom)
if(BEAUTY_LEVEL_HORRID to BEAUTY_LEVEL_BAD)
add_event("area_beauty", /datum/mood_event/grossroom)
if(BEAUTY_LEVEL_BAD to BEAUTY_LEVEL_GOOD)
add_event("area_beauty", /datum/mood_event/badroom)
if(BEAUTY_LEVEL_BAD to BEAUTY_LEVEL_MEH)
add_event("area_beauty", /datum/mood_event/mehroom)
if(BEAUTY_LEVEL_MEH to BEAUTY_LEVEL_DECENT)
clear_event("area_beauty")
if(BEAUTY_LEVEL_DECENT to BEAUTY_LEVEL_GOOD)
add_event("area_beauty", /datum/mood_event/decentroom)
if(BEAUTY_LEVEL_GOOD to BEAUTY_LEVEL_GREAT)
add_event("area_beauty", /datum/mood_event/niceroom)
add_event("area_beauty", /datum/mood_event/goodroom)
if(BEAUTY_LEVEL_GREAT to INFINITY)
add_event("area_beauty", /datum/mood_event/greatroom)
+23 -6
View File
@@ -21,17 +21,17 @@
for(var/i in WF.time_left_list)
add_wet(text2num(i), WF.time_left_list[i])
/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, permanent = FALSE)
/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE)
if(!isopenturf(parent))
. = COMPONENT_INCOMPATIBLE
CRASH("Wet floor component attempted to be applied to a non open turf!")
add_wet(strength, duration_minimum, duration_add, duration_maximum)
RegisterSignal(COMSIG_TURF_IS_WET, .proc/is_wet)
RegisterSignal(COMSIG_TURF_MAKE_DRY, .proc/dry)
permanent = _permanent
if(!permanent)
START_PROCESSING(SSwet_floors, src)
if(gc())
stack_trace("Warning: Wet floor component added and immediately deleted! What a waste of time!")
addtimer(CALLBACK(src, .proc/gc, TRUE), 1) //GC after initialization.
/datum/component/wet_floor/Destroy()
STOP_PROCESSING(SSwet_floors, src)
@@ -140,10 +140,23 @@
var/turf/T = to_datum
T.add_overlay(current_overlay)
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME)
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE)
var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST)
if(!duration_minimum || duration_minimum < 0 || !type || !(type in allowed_types))
if(duration_minimum <= 0 || !type)
return FALSE
if(type in allowed_types)
return _do_add_wet(type, duration_minimum, duration_add, duration_maximum)
else
. = NONE
for(var/i in allowed_types)
if(!(type & i))
continue
. |= _do_add_wet(i, duration_minimum, duration_add, duration_maximum)
if(_permanent)
permanent = TRUE
STOP_PROCESSING(SSwet_floors, src)
/datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum)
var/time = 0
if(LAZYACCESS(time_left_list, "[type]"))
time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum)
@@ -153,10 +166,14 @@
check(TRUE)
return TRUE
/datum/component/wet_floor/proc/gc()
/datum/component/wet_floor/proc/gc(on_init = FALSE)
if(!LAZYLEN(time_left_list))
if(on_init)
var/turf/T = parent
stack_trace("Warning: Wet floor component gc'd right initializatoin! What a waste of time and CPU! Type = [T? T.type : "ERROR - NO PARENT"], Coords = [istype(T)? COORD(T) : "ERROR - INVALID PARENT"].")
qdel(src)
return TRUE
return FALSE
/datum/component/wet_floor/proc/check(force_update = FALSE)
var/changed = FALSE
+2 -2
View File
@@ -1178,9 +1178,9 @@
var/edit_action = input(usr, "What would you like to do?","Modify Body Part") as null|anything in list("add","remove", "augment")
if(!edit_action)
return
var/list/limb_list = list("head", "l_arm", "r_arm", "l_leg", "r_leg")
var/list/limb_list = list(BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
if(edit_action == "augment")
limb_list += "chest"
limb_list += BODY_ZONE_CHEST
var/result = input(usr, "Please choose which body part to [edit_action]","[capitalize(edit_action)] Body Part") as null|anything in limb_list
if(!C)
+3 -3
View File
@@ -47,13 +47,13 @@
if(satiety>0 && prob(satiety/10)) // positive satiety makes it harder to contract the disease.
return
if(!target_zone)
target_zone = pick(head_ch;"head",body_ch;"body",hands_ch;"hands",feet_ch;"feet")
target_zone = pick(head_ch;BODY_ZONE_HEAD,body_ch;"body",hands_ch;"hands",feet_ch;"feet")
if(ishuman(src))
var/mob/living/carbon/human/H = src
switch(target_zone)
if("head")
if(BODY_ZONE_HEAD)
if(isobj(H.head) && !istype(H.head, /obj/item/paper))
Cl = H.head
passed = prob((Cl.permeability_coefficient*100) - 1)
@@ -90,7 +90,7 @@
else if(ismonkey(src))
var/mob/living/carbon/monkey/M = src
switch(target_zone)
if("head")
if(BODY_ZONE_HEAD)
if(M.wear_mask && isobj(M.wear_mask))
Cl = M.wear_mask
passed = prob((Cl.permeability_coefficient*100) - 1)
@@ -45,7 +45,7 @@ BONUS
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
var/picked_bodypart = pick("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
var/picked_bodypart = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
var/obj/item/bodypart/bodypart = M.get_bodypart(picked_bodypart)
if(bodypart && bodypart.status == BODYPART_ORGANIC && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall
var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart)
+8 -7
View File
@@ -19,7 +19,7 @@
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustToxLoss(5)
affected_mob.adjustFireLoss(5)
affected_mob.updatehealth()
if(prob(1))
to_chat(affected_mob, "<span class='danger'>You feel strange...</span>")
@@ -31,15 +31,16 @@
else if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel the need to chick chicky boom...</span>")
if(4)
if(prob(10))
affected_mob.emote("gasp")
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
if(prob(20))
affected_mob.adjustToxLoss(5)
affected_mob.updatehealth()
if (prob(50))
affected_mob.adjust_fire_stacks(2)
affected_mob.IgniteMob()
else
affected_mob.emote("gasp")
to_chat(affected_mob, "<span class='danger'>You feel a burning beat inside...</span>")
if(5)
to_chat(affected_mob, "<span class='danger'>Your body is unable to contain the Rhumba Beat...</span>")
if(prob(50))
affected_mob.gib()
explosion(get_turf(affected_mob), -1, 0, 2, 3, 0, 2) // This is equivalent to a lvl 1 fireball
else
return
@@ -41,6 +41,12 @@
mid_length = 3.5
volume = 25
/datum/looping_sound/reverse_bear_trap/slow
mid_sounds = list('sound/effects/clock_tick.ogg')
mid_length = 10
volume = 40
/datum/looping_sound/reverse_bear_trap_beep
mid_sounds = list('sound/machines/beep.ogg')
mid_length = 60
+2 -2
View File
@@ -42,8 +42,8 @@
D.visible_message("<span class='danger'>[A] [atk_verb] [D]!</span>", \
"<span class='userdanger'>[A] [atk_verb] you!</span>")
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 40, 1, -1)
D.apply_damage(rand(5,10), BRUTE, "head")
A.apply_damage(rand(5,10), BRUTE, "head")
D.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
A.apply_damage(rand(5,10), BRUTE, BODY_ZONE_HEAD)
if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat))
D.adjustBrainLoss(5)
A.Stun(rand(10,45))
+4 -4
View File
@@ -42,7 +42,7 @@
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.emote("scream")
D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return 1
add_logs(A, D, "wrist wrenched (Sleeping Carp)")
@@ -78,7 +78,7 @@
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
"<span class='userdanger'>[A] kicks you in the jaw!</span>")
D.apply_damage(20, BRUTE, "head")
D.apply_damage(20, BRUTE, BODY_ZONE_HEAD)
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
@@ -93,7 +93,7 @@
"<span class='userdanger'>[A] piledrives you with their elbow!</span>")
if(D.stat)
D.death() //FINISH HIM!
D.apply_damage(50, BRUTE, "chest")
D.apply_damage(50, BRUTE, BODY_ZONE_CHEST)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1)
return 1
add_logs(A, D, "elbow dropped (Sleeping Carp)")
@@ -202,7 +202,7 @@
user.Knockdown(60)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, "head")
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
else
user.take_bodypart_damage(2*force)
return
+23
View File
@@ -0,0 +1,23 @@
/datum/mood_event/horridroom
description = "<span class='boldwarning'>This room looks terrible!</span>\n"
mood_change = -5
/datum/mood_event/badroom
description = "<span class='warning'>This room looks really bad.</span>\n"
mood_change = -3
/datum/mood_event/mehroom
description = "<span class='warning'>This room doesn't look great.</span>\n"
mood_change = -1
/datum/mood_event/decentroom
description = "<span class='nicegreen'>This room looks alright.</span>\n"
mood_change = 2
/datum/mood_event/goodroom
description = "<span class='nicegreen'>This room looks really pretty!</span>\n"
mood_change = 4
/datum/mood_event/greatroom
description = "<span class='nicegreen'>This room is beautiful!</span>\n"
mood_change = 7
@@ -49,7 +49,7 @@
/datum/mood_event/depression
description = "<span class='warning'>I feel sad for no particular reason.</span>\n"
mood_change = -6
mood_change = -9
timeout = 1200
/datum/mood_event/shameful_suicide //suicide_acts that return SHAME, like sord
@@ -64,7 +64,7 @@
/datum/mood_event/noshoes
description = "<span class='warning'>I am a disgrace to comedy everywhere!</span>\n"
mood_change = -3
mood_change = -5
/datum/mood_event/tased
description = "<span class='warning'>There's no \"z\" in \"taser\". It's in the zap.</span>\n"
@@ -73,13 +73,22 @@
/datum/mood_event/embedded
description = "<span class='boldwarning'>Pull it out!</span>\n"
mood_change = -6
mood_change = -7
/datum/mood_event/table
description = "<span class='warning'>Someone threw me on a table!</span>\n"
mood_change = -2
timeout = 1200
/datum/mood_event/table/add_effects()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(iscatperson(H))
H.startTailWag()
addtimer(CALLBACK(H, /mob/living/carbon/human.proc/endTailWag), 30)
description = "<span class='nicegreen'>They want to play on the table!</span>\n"
mood_change = 2
/datum/mood_event/brain_damage
mood_change = -3
@@ -96,15 +105,6 @@
mood_change = -3
timeout = 3000
/datum/mood_event/grossroom
description = "<span class='warning'>This room is kind of dirty...</span>\n"
mood_change = -3
/datum/mood_event/disgustingroom
description = "<span class='warning'>This room is disgusting!</span>\n"
mood_change = -5
//These are unused so far but I want to remember them to use them later
/datum/mood_event/cloned_corpse
description = "<span class='boldwarning'>I recently saw my own corpse...</span>\n"
@@ -37,11 +37,6 @@
description = "<span class='nicegreen'>What a lovely day.</span>\n"
mood_change = 3
/datum/mood_event/happytable
description = "<span class='nicegreen'>They want to play on the table!</span>\n"
mood_change = 2
timeout = 1200
/datum/mood_event/jolly
description = "<span class='nicegreen'>I feel happy for no particular reason.</span>\n"
mood_change = 6
@@ -61,11 +56,3 @@
description = "<span class='nicegreen'>I have seen the truth, praise the almighty one!</span>\n"
mood_change = 40 //maybe being a cultist isnt that bad after all
hidden = TRUE
/datum/mood_event/niceroom
description = "<span class='nicegreen'>This room looks really pretty!</span>\n"
mood_change = 4
/datum/mood_event/greatroom
description = "<span class='nicegreen'>This room is beautiful!</span>\n"
mood_change = 7
+1 -3
View File
@@ -11,9 +11,7 @@
owner.visible_message("<span class='danger'>[owner] starts having a seizure!</span>", "<span class='userdanger'>You have a seizure!</span>")
owner.Unconscious(200)
owner.Jitter(1000)
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("epilepsy", /datum/mood_event/epilepsy)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy)
addtimer(CALLBACK(src, .proc/jitter_less, owner), 90)
/datum/mutation/human/epilepsy/proc/jitter_less(mob/living/carbon/human/owner)
+3 -7
View File
@@ -14,9 +14,7 @@
owner.add_trait(TRAIT_STUNIMMUNE, TRAIT_HULK)
owner.add_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK)
owner.update_body_parts()
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.add_event("hulk", /datum/mood_event/hulk)
owner.SendSignal(COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk)
/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target, proximity)
if(proximity) //no telekinetic hulk attack
@@ -33,10 +31,8 @@
owner.remove_trait(TRAIT_STUNIMMUNE, TRAIT_HULK)
owner.remove_trait(TRAIT_PUSHIMMUNE, TRAIT_HULK)
owner.update_body_parts()
GET_COMPONENT_FROM(mood, /datum/component/mood, owner)
if(mood)
mood.clear_event("hulk")
owner.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hulk")
/datum/mutation/human/hulk/say_mod(message)
if(message)
message = "[uppertext(replacetext(message, ".", "!"))]!!"
+1 -1
View File
@@ -60,7 +60,7 @@
dna_block = NON_SCANNABLE
text_gain_indication = "<span class='notice'>You feel pressure building up behind your eyes.</span>"
layer_used = FRONT_MUTATIONS_LAYER
limb_req = "head"
limb_req = BODY_ZONE_HEAD
/datum/mutation/human/laser_eyes/New()
..()
+1 -1
View File
@@ -5,7 +5,7 @@
get_chance = 20
lowest_value = 256 * 12
text_gain_indication = "<span class='notice'>You feel smarter!</span>"
limb_req = "head"
limb_req = BODY_ZONE_HEAD
/datum/mutation/human/telekinesis/New()
..()
+2 -2
View File
@@ -499,11 +499,11 @@
if(!itemUser.has_hand_for_held_index(hand))
//If user does not have the corresponding hand anymore, give them one and return the rod to their hand
if(((hand % 2) == 0))
var/obj/item/bodypart/L = itemUser.newBodyPart("r_arm", FALSE, FALSE)
var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_R_ARM, FALSE, FALSE)
L.attach_limb(itemUser)
itemUser.put_in_hand(newRod, hand, forced = TRUE)
else
var/obj/item/bodypart/L = itemUser.newBodyPart("l_arm", FALSE, FALSE)
var/obj/item/bodypart/L = itemUser.newBodyPart(BODY_ZONE_L_ARM, FALSE, FALSE)
L.attach_limb(itemUser)
itemUser.put_in_hand(newRod, hand, forced = TRUE)
to_chat(itemUser, "<span class='notice'>Your arm suddenly grows back with the Rod of Asclepius still attached!</span>")
+4 -4
View File
@@ -130,11 +130,11 @@
if(GLOB.ratvar_awakens)
owner.Knockdown(20)
if(iscultist(owner))
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "l_leg")
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "r_leg")
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_L_LEG)
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
else
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "l_leg")
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "r_leg")
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, BODY_ZONE_L_LEG)
owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
if(owner.m_intent != MOVE_INTENT_WALK)
if(!iscultist(owner))
to_chat(owner, "<span class='warning'>Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!</span>")
+16 -5
View File
@@ -11,6 +11,17 @@
lose_text = "<span class='notice'>You feel awake again.</span>"
medical_record_text = "Patient has abnormal sleep study results and is difficult to wake up."
/datum/trait/brainproblems
name = "Brain Tumor"
desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!"
value = -2
gain_text = "<span class='danger'>You feel smooth.</span>"
lose_text = "<span class='notice'>You feel wrinkled again.</span>"
medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death."
/datum/trait/brainproblems/on_process()
trait_holder.adjustBrainLoss(0.2)
/datum/trait/nearsighted //t. errorage
@@ -74,21 +85,21 @@
var/slot_string = "limb"
/datum/trait/prosthetic_limb/on_spawn()
var/limb_slot = pick("l_arm", "r_arm", "l_leg", "r_leg")
var/limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
var/mob/living/carbon/human/H = trait_holder
var/obj/item/bodypart/old_part = H.get_bodypart(limb_slot)
var/obj/item/bodypart/prosthetic
switch(limb_slot)
if("l_arm")
if(BODY_ZONE_L_ARM)
prosthetic = new/obj/item/bodypart/l_arm/robot/surplus(trait_holder)
slot_string = "left arm"
if("r_arm")
if(BODY_ZONE_R_ARM)
prosthetic = new/obj/item/bodypart/r_arm/robot/surplus(trait_holder)
slot_string = "right arm"
if("l_leg")
if(BODY_ZONE_L_LEG)
prosthetic = new/obj/item/bodypart/l_leg/robot/surplus(trait_holder)
slot_string = "left leg"
if("r_leg")
if(BODY_ZONE_R_LEG)
prosthetic = new/obj/item/bodypart/r_leg/robot/surplus(trait_holder)
slot_string = "right leg"
prosthetic.replace_limb(H)