modules
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
name = "Man-Machine Interface"
|
||||
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity, that nevertheless has become standard-issue on Nanotrasen stations."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "mmi_empty"
|
||||
icon_state = "mmi_off"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/braintype = "Cyborg"
|
||||
var/obj/item/device/radio/radio = null //Let's give it a radio.
|
||||
@@ -15,21 +15,19 @@
|
||||
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
|
||||
|
||||
/obj/item/device/mmi/update_icon()
|
||||
if(brain)
|
||||
if(istype(brain, /obj/item/organ/brain/alien))
|
||||
if(brainmob && brainmob.stat == DEAD)
|
||||
icon_state = "mmi_alien_dead"
|
||||
else
|
||||
icon_state = "mmi_alien"
|
||||
braintype = "Xenoborg" //HISS....Beep.
|
||||
else
|
||||
if(brainmob && brainmob.stat == DEAD)
|
||||
icon_state = "mmi_dead"
|
||||
else
|
||||
icon_state = "mmi_full"
|
||||
braintype = "Cyborg"
|
||||
if(!brain)
|
||||
icon_state = "mmi_off"
|
||||
return
|
||||
if(istype(brain, /obj/item/organ/brain/alien))
|
||||
icon_state = "mmi_brain_alien"
|
||||
braintype = "Xenoborg" //HISS....Beep.
|
||||
else
|
||||
icon_state = "mmi_empty"
|
||||
icon_state = "mmi_brain"
|
||||
braintype = "Cyborg"
|
||||
if(brainmob && brainmob.stat != DEAD)
|
||||
add_overlay("mmi_alive")
|
||||
else
|
||||
add_overlay("mmi_dead")
|
||||
|
||||
/obj/item/device/mmi/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -213,6 +213,8 @@
|
||||
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, override = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
|
||||
if(tesla_shock && (flags_2 & TESLA_IGNORE_2))
|
||||
return FALSE
|
||||
if(has_trait(TRAIT_SHOCKIMMUNE))
|
||||
return FALSE
|
||||
shock_damage *= siemens_coeff
|
||||
if(dna && dna.species)
|
||||
shock_damage *= dna.species.siemens_coeff
|
||||
|
||||
@@ -121,13 +121,13 @@
|
||||
var/datum/action/innate/swap_body/swap_body
|
||||
|
||||
/datum/species/jelly/slime/on_species_loss(mob/living/carbon/C)
|
||||
if(slime_split)
|
||||
/* if(slime_split)
|
||||
slime_split.Remove(C)
|
||||
if(swap_body)
|
||||
swap_body.Remove(C)
|
||||
bodies -= C // This means that the other bodies maintain a link
|
||||
// so if someone mindswapped into them, they'd still be shared.
|
||||
bodies = null
|
||||
bodies = null */
|
||||
C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL)
|
||||
..()
|
||||
|
||||
@@ -146,26 +146,28 @@
|
||||
|
||||
/datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(slime_split)
|
||||
var/datum/mind/M
|
||||
for(var/mob/living/L in bodies)
|
||||
if(L.mind && L.mind.active)
|
||||
M = L.mind
|
||||
if(!M || M != H.mind)
|
||||
if(!H.mind || !H.mind.active)
|
||||
return
|
||||
|
||||
var/list/available_bodies = (bodies - H)
|
||||
for(var/mob/living/L in available_bodies)
|
||||
if(!swap_body.can_swap(L))
|
||||
available_bodies -= L
|
||||
|
||||
if(!LAZYLEN(available_bodies))
|
||||
return
|
||||
swap_body.swap_to_dupe(M, pick(available_bodies))
|
||||
|
||||
swap_body.swap_to_dupe(H.mind, pick(available_bodies))
|
||||
|
||||
//If you're cloned you get your body pool back
|
||||
/datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species)
|
||||
bodies = old_species.bodies
|
||||
|
||||
/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H)
|
||||
/* if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
||||
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
|
||||
if(prob(5))
|
||||
to_chat(H, "<span class='notice'>You feel very bloated!</span>")*/
|
||||
if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
|
||||
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
H.blood_volume += 3
|
||||
H.nutrition -= 2.5
|
||||
|
||||
@@ -222,7 +224,7 @@
|
||||
spare.domutcheck()
|
||||
spare.Move(get_step(H.loc, pick(NORTH,SOUTH,EAST,WEST)))
|
||||
|
||||
H.blood_volume = BLOOD_VOLUME_SAFE
|
||||
H.blood_volume *= 0.45
|
||||
H.notransform = 0
|
||||
|
||||
var/datum/species/jelly/slime/origin_datum = H.dna.species
|
||||
@@ -286,24 +288,31 @@
|
||||
stat = "Unconscious"
|
||||
if(DEAD)
|
||||
stat = "Dead"
|
||||
var/current = body.mind
|
||||
var/is_conscious = (body.stat == CONSCIOUS)
|
||||
var/occupied
|
||||
if(body == H)
|
||||
occupied = "owner"
|
||||
else if(body.mind && body.mind.active)
|
||||
occupied = "stranger"
|
||||
else
|
||||
occupied = "available"
|
||||
|
||||
L["status"] = stat
|
||||
L["exoticblood"] = body.blood_volume
|
||||
L["name"] = body.name
|
||||
L["ref"] = "[REF(body)]"
|
||||
L["is_current"] = current
|
||||
L["occupied"] = occupied
|
||||
var/button
|
||||
if(current)
|
||||
if(occupied == "owner")
|
||||
button = "selected"
|
||||
else if(is_conscious)
|
||||
else if(occupied == "stranger")
|
||||
button = "danger"
|
||||
else if(can_swap(body))
|
||||
button = null
|
||||
else
|
||||
button = "disabled"
|
||||
|
||||
L["swap_button_state"] = button
|
||||
L["swappable"] = !current && is_conscious
|
||||
L["swappable"] = (occupied == "available") && can_swap(body)
|
||||
|
||||
data["bodies"] += list(L)
|
||||
|
||||
@@ -315,32 +324,47 @@
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!isslimeperson(owner))
|
||||
return
|
||||
var/datum/species/jelly/slime/SS = H.dna.species
|
||||
|
||||
var/datum/mind/M
|
||||
for(var/mob/living/L in SS.bodies)
|
||||
if(L.mind && L.mind.active)
|
||||
M = L.mind
|
||||
if(!M)
|
||||
if(!H.mind || !H.mind.active)
|
||||
return
|
||||
if(!isslimeperson(M.current))
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("swap")
|
||||
var/mob/living/carbon/human/selected = locate(params["ref"])
|
||||
if(!(selected in SS.bodies))
|
||||
if(!can_swap(selected))
|
||||
return
|
||||
if(!selected || QDELETED(selected) || !isslimeperson(selected))
|
||||
SS.bodies -= selected
|
||||
return
|
||||
if(M.current == selected)
|
||||
return
|
||||
if(selected.stat != CONSCIOUS)
|
||||
return
|
||||
swap_to_dupe(M, selected)
|
||||
SStgui.close_uis(src)
|
||||
swap_to_dupe(H.mind, selected)
|
||||
|
||||
/datum/action/innate/swap_body/proc/can_swap(mob/living/carbon/human/dupe)
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!isslimeperson(H))
|
||||
return FALSE
|
||||
var/datum/species/jelly/slime/SS = H.dna.species
|
||||
|
||||
if(QDELETED(dupe)) //Is there a body?
|
||||
SS.bodies -= dupe
|
||||
return FALSE
|
||||
|
||||
if(!isslimeperson(dupe)) //Is it a slimeperson?
|
||||
SS.bodies -= dupe
|
||||
return FALSE
|
||||
|
||||
if(dupe.stat == DEAD) //Is it alive?
|
||||
return FALSE
|
||||
|
||||
if(dupe.stat != CONSCIOUS) //Is it awake?
|
||||
return FALSE
|
||||
|
||||
if(dupe.mind && dupe.mind.active) //Is it unoccupied?
|
||||
return FALSE
|
||||
|
||||
if(!(dupe in SS.bodies)) //Do we actually own it?
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/action/innate/swap_body/proc/swap_to_dupe(datum/mind/M, mob/living/carbon/human/dupe)
|
||||
if(!can_swap(dupe)) //sanity check
|
||||
return
|
||||
if(M.current.stat == CONSCIOUS)
|
||||
M.current.visible_message("<span class='notice'>[M.current] \
|
||||
stops moving and starts staring vacantly into space.</span>",
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
speedmod = 1
|
||||
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
|
||||
var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much
|
||||
disliked_food = NONE
|
||||
liked_food = NONE
|
||||
disliked_food = FRUIT
|
||||
liked_food = VEGETABLES
|
||||
|
||||
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
|
||||
@@ -8,12 +8,10 @@
|
||||
attack_sound = 'sound/weapons/slice.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
burnmod = 1.25
|
||||
heatmod = 1.55
|
||||
heatmod = 1.5
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
disliked_food = NONE
|
||||
liked_food = NONE
|
||||
toxic_food = NONE
|
||||
|
||||
disliked_food = MEAT | DAIRY
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
@@ -36,21 +34,18 @@
|
||||
if(H.nutrition > NUTRITION_LEVEL_FULL)
|
||||
H.nutrition = NUTRITION_LEVEL_FULL
|
||||
if(light_amount > 0.2) //if there's enough light, heal
|
||||
H.heal_overall_damage(0.75,0)
|
||||
H.adjustOxyLoss(-0.5)
|
||||
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 55)
|
||||
H.adjustOxyLoss(5) //can eat to negate this unfortunately
|
||||
H.adjustToxLoss(3)
|
||||
H.heal_overall_damage(1,1)
|
||||
H.adjustToxLoss(-1)
|
||||
H.adjustOxyLoss(-1)
|
||||
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||
H.take_overall_damage(2,0)
|
||||
|
||||
/datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
if(chem.id == "plantbgone")
|
||||
H.adjustToxLoss(5)
|
||||
H.adjustToxLoss(3)
|
||||
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
|
||||
H.confused = max(H.confused, 1)
|
||||
return TRUE
|
||||
|
||||
return 1
|
||||
|
||||
/datum/species/pod/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
switch(P.type)
|
||||
|
||||
@@ -303,6 +303,8 @@
|
||||
/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
|
||||
if(tesla_shock && (flags_2 & TESLA_IGNORE_2))
|
||||
return FALSE
|
||||
if(has_trait(TRAIT_SHOCKIMMUNE))
|
||||
return FALSE
|
||||
if(shock_damage > 0)
|
||||
if(!illusion)
|
||||
adjustFireLoss(shock_damage)
|
||||
|
||||
@@ -381,4 +381,4 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
if(.)
|
||||
return .
|
||||
|
||||
. = ..()
|
||||
. = ..()
|
||||
@@ -552,6 +552,16 @@
|
||||
can_be_pushed = FALSE
|
||||
hat_offset = 3
|
||||
|
||||
/obj/item/robot_module/syndicate/rebuild_modules()
|
||||
..()
|
||||
var/mob/living/silicon/robot/Syndi = loc
|
||||
Syndi.faction -= "silicon" //ai turrets
|
||||
|
||||
/obj/item/robot_module/syndicate/remove_module(obj/item/I, delete_after)
|
||||
..()
|
||||
var/mob/living/silicon/robot/Syndi = loc
|
||||
Syndi.faction += "silicon" //ai is your bff now!
|
||||
|
||||
/obj/item/robot_module/syndicate_medical
|
||||
name = "Syndicate Medical"
|
||||
basic_modules = list(
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
/mob/living/silicon/Initialize()
|
||||
. = ..()
|
||||
GLOB.silicon_mobs += src
|
||||
faction += "silicon"
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.add_to_hud(src)
|
||||
diag_hud_set_status()
|
||||
|
||||
@@ -37,12 +37,28 @@
|
||||
var/seeking = FALSE
|
||||
var/can_repair_constructs = FALSE
|
||||
var/can_repair_self = FALSE
|
||||
var/runetype
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/Initialize()
|
||||
. = ..()
|
||||
update_health_hud()
|
||||
var/spellnum = 1
|
||||
for(var/spell in construct_spells)
|
||||
AddSpell(new spell(null))
|
||||
var/the_spell = new spell(null)
|
||||
AddSpell(the_spell)
|
||||
var/obj/effect/proc_holder/spell/S = mob_spell_list[spellnum]
|
||||
var/pos = 2+spellnum*31
|
||||
if(construct_spells.len >= 4)
|
||||
pos -= 31*(construct_spells.len - 4)
|
||||
S.action.button.screen_loc = "6:[pos],4:-2"
|
||||
S.action.button.moved = "6:[pos],4:-2"
|
||||
spellnum++
|
||||
if(runetype)
|
||||
var/datum/action/innate/cult/create_rune/CR = new runetype(src)
|
||||
CR.Grant(src)
|
||||
var/pos = 2+spellnum*31
|
||||
CR.button.screen_loc = "6:[pos],4:-2"
|
||||
CR.button.moved = "6:[pos],4:-2"
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/Login()
|
||||
..()
|
||||
@@ -104,22 +120,24 @@
|
||||
desc = "A massive, armored construct built to spearhead attacks and soak up enemy fire."
|
||||
icon_state = "behemoth"
|
||||
icon_living = "behemoth"
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
response_harm = "harmlessly punches"
|
||||
harm_intent_damage = 0
|
||||
obj_damage = 90
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attacktext = "smashes their armored gauntlet into"
|
||||
speed = 3
|
||||
speed = 2.5
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
attack_sound = 'sound/weapons/punch3.ogg'
|
||||
status_flags = 0
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
force_threshold = 11
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
||||
playstyle_string = "<span class='big bold'>You are a Juggernaut.</span><b> Though slow, your shell can withstand extreme punishment, \
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult,
|
||||
/obj/effect/proc_holder/spell/dumbfire/juggernaut)
|
||||
runetype = /datum/action/innate/cult/create_rune/wall
|
||||
playstyle_string = "<b>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \
|
||||
create shield walls, rip apart enemies and walls alike, and even deflect energy weapons.</b>"
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things
|
||||
@@ -164,15 +182,17 @@
|
||||
desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines."
|
||||
icon_state = "floating"
|
||||
icon_living = "floating"
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
maxHealth = 65
|
||||
health = 65
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
retreat_distance = 2 //AI wraiths will move in and out of combat
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
|
||||
playstyle_string = "<span class='big bold'>You are a Wraith.</span><b> Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing.</b>"
|
||||
runetype = /datum/action/innate/cult/create_rune/tele
|
||||
playstyle_string = "<b>You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing.</b>"
|
||||
|
||||
var/attack_refund = 10 //1 second per attack
|
||||
var/crit_refund = 50 //5 seconds when putting a target into critical
|
||||
var/kill_refund = 250 //full refund on kills
|
||||
@@ -226,7 +246,9 @@
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone,
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
|
||||
/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
|
||||
playstyle_string = "<span class='big bold'>You are an Artificer.</span><b> You are incredibly weak and fragile, but you are able to construct fortifications, \
|
||||
runetype = /datum/action/innate/cult/create_rune/revive
|
||||
playstyle_string = "<b>You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \
|
||||
|
||||
use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \
|
||||
<i>and, most important of all,</i> create new constructs by producing soulstones to capture souls, \
|
||||
and shells to place those soulstones into.</b>"
|
||||
@@ -299,9 +321,9 @@
|
||||
attacktext = "butchers"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion,
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
||||
playstyle_string = "<span class='big bold'>You are a Harvester.</span><b> You are incapable of directly killing humans, but your attacks will remove their limbs: \
|
||||
Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly.</b>"
|
||||
/obj/effect/proc_holder/spell/targeted/forcewall/cult)
|
||||
playstyle_string = "<B>You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \
|
||||
Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly.</B>"
|
||||
can_repair_constructs = TRUE
|
||||
|
||||
|
||||
@@ -376,7 +398,7 @@
|
||||
|
||||
if(summon_objective.check_completion())
|
||||
the_construct.master = C.cult_team.blood_target
|
||||
|
||||
|
||||
if(!the_construct.master)
|
||||
to_chat(the_construct, "<span class='cult italic'>You have no master to seek!</span>")
|
||||
the_construct.seeking = FALSE
|
||||
|
||||
@@ -43,12 +43,13 @@
|
||||
/mob/living/simple_animal/mouse/death(gibbed, toast)
|
||||
if(!ckey)
|
||||
..(1)
|
||||
var/obj/item/reagent_containers/food/snacks/deadmouse/M = new(loc)
|
||||
M.icon_state = icon_dead
|
||||
M.name = name
|
||||
if(toast)
|
||||
M.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY)
|
||||
M.desc = "It's toast."
|
||||
if(!gibbed)
|
||||
var/obj/item/reagent_containers/food/snacks/deadmouse/M = new(loc)
|
||||
M.icon_state = icon_dead
|
||||
M.name = name
|
||||
if(toast)
|
||||
M.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY)
|
||||
M.desc = "It's toast."
|
||||
qdel(src)
|
||||
else
|
||||
..(gibbed)
|
||||
|
||||
@@ -14,7 +14,7 @@ If it fails to warp to a target, it may summon up to 6 slaughterlings from the b
|
||||
If it does not summon all 6 slaughterlings, it will instead charge at its target, dealing massive damage to anything it hits and spraying a stream of blood.
|
||||
At half health, it will either charge three times or warp, then charge, instead of doing a single charge.
|
||||
|
||||
When Bubblegum dies, it leaves behind a chest that can contain three things:
|
||||
When Bubblegum dies, it leaves behind a H.E.C.K. mining suit as well as a chest that can contain three things:
|
||||
1. A bottle that, when activated, drives everyone nearby into a frenzy
|
||||
2. A contract that marks for death the chosen target
|
||||
3. A spellblade that can slice off limbs at range
|
||||
@@ -25,7 +25,7 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum
|
||||
name = "bubblegum"
|
||||
desc = "In what passes for a heirarchy among slaughter demons, this one is king."
|
||||
desc = "In what passes for a hierarchy among slaughter demons, this one is king."
|
||||
health = 2500
|
||||
maxHealth = 2500
|
||||
attacktext = "rends"
|
||||
|
||||
@@ -366,7 +366,7 @@
|
||||
r_pocket = /obj/item/restraints/legcuffs/bola/cult
|
||||
l_pocket = /obj/item/melee/cultblade/dagger
|
||||
glasses = /obj/item/clothing/glasses/night/cultblind
|
||||
backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/unholywater = 1, /obj/item/device/cult_shift = 1, /obj/item/device/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
|
||||
backpack_contents = list(/obj/item/reagent_containers/glass/beaker/unholywater = 1, /obj/item/device/cult_shift = 1, /obj/item/device/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
|
||||
. = ..()
|
||||
|
||||
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
healable = 0
|
||||
gender = NEUTER
|
||||
|
||||
nutrition = 700
|
||||
|
||||
see_in_dark = 8
|
||||
|
||||
verb_say = "blorbles"
|
||||
@@ -93,6 +91,7 @@
|
||||
create_reagents(100)
|
||||
set_colour(new_colour)
|
||||
. = ..()
|
||||
nutrition = 700
|
||||
|
||||
/mob/living/simple_animal/slime/Destroy()
|
||||
for (var/A in actions)
|
||||
|
||||
@@ -68,32 +68,35 @@
|
||||
return S.duration - world.time
|
||||
return 0
|
||||
|
||||
/mob/living/proc/Sleeping(amount, updating = TRUE) //Can't go below remaining duration
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
S.duration = max(world.time + amount, S.duration)
|
||||
else if(amount > 0)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
|
||||
/mob/living/proc/SetSleeping(amount, updating = TRUE) //Sets remaining duration
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(amount <= 0)
|
||||
/mob/living/proc/Sleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Can't go below remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
qdel(S)
|
||||
else if(S)
|
||||
S.duration = world.time + amount
|
||||
else
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
S.duration = max(world.time + amount, S.duration)
|
||||
else if(amount > 0)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
|
||||
/mob/living/proc/AdjustSleeping(amount, updating = TRUE) //Adds to remaining duration
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
S.duration += amount
|
||||
else if(amount > 0)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
/mob/living/proc/SetSleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Sets remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(amount <= 0)
|
||||
if(S)
|
||||
qdel(S)
|
||||
else if(S)
|
||||
S.duration = world.time + amount
|
||||
else
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
|
||||
/mob/living/proc/AdjustSleeping(amount, updating = TRUE, ignore_sleepimmune = FALSE) //Adds to remaining duration
|
||||
if((!has_trait(TRAIT_SLEEPIMMUNE)) || ignore_sleepimmune)
|
||||
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
|
||||
if(S)
|
||||
S.duration += amount
|
||||
else if(amount > 0)
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
|
||||
/////////////////////////////////// RESTING ////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user