Merge branch 'master' into Dispencer-UI-change
This commit is contained in:
@@ -38,7 +38,7 @@
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_ROBELESS]'>Robeless</A><BR>"
|
||||
dat += "<I>Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.</I><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_MARTIAL]'>Martial Artist</a><BR>"
|
||||
dat += "<I>Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist.</I><BR>"
|
||||
dat += "<I>Your apprentice is training in ancient martial arts. They know an Inner Mantra and the Nuclear Fist technique.</I><BR>"
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
@@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
|
||||
build_path = /obj/item/abductor_machine_beacon/chem_dispenser
|
||||
category = "Advanced Gear"
|
||||
|
||||
/*
|
||||
/datum/abductor_gear/shrink_ray
|
||||
name = "Shrink Ray Blaster"
|
||||
description = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \
|
||||
@@ -77,3 +78,4 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
|
||||
cost = 2
|
||||
build_path = /obj/item/gun/energy/shrink_ray
|
||||
category = "Advanced Gear"
|
||||
*/
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
return
|
||||
flick("blob_resource_glow", src)
|
||||
if(overmind)
|
||||
overmind.add_points(1)
|
||||
overmind.add_points(2)
|
||||
resource_delay = world.time + 40 + overmind.resource_blobs.len * 2.5 //4 seconds plus a quarter second for each resource blob the overmind has
|
||||
else
|
||||
resource_delay = world.time + 40
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
set category = "Blob"
|
||||
set name = "Create Factory Blob (60)"
|
||||
set desc = "Create a spore tower that will spawn spores to harass your enemies."
|
||||
createSpecial(60, /obj/structure/blob/factory, 7, 1)
|
||||
createSpecial(60, /obj/structure/blob/factory, 5, 1)
|
||||
|
||||
/mob/camera/blob/verb/create_blobbernaut()
|
||||
set category = "Blob"
|
||||
@@ -195,6 +195,7 @@
|
||||
to_chat(blobber, "The <b><font color=\"[blobstrain.color]\">[blobstrain.name]</b></font> reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You could not conjure a sentience for your blobbernaut. Your points have been refunded. Try again later.</span>")
|
||||
B.naut = FALSE
|
||||
add_points(40)
|
||||
|
||||
/mob/camera/blob/verb/relocate_core()
|
||||
|
||||
@@ -348,9 +348,9 @@
|
||||
L.dust()
|
||||
else if(L.health > min_drain_health)
|
||||
if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS)
|
||||
vitality_drained = L.adjustToxLoss(1, forced = TRUE)
|
||||
vitality_drained = L.adjustToxLoss(1, forced = TRUE, toxins_type = TOX_OMNI)
|
||||
else
|
||||
vitality_drained = L.adjustToxLoss(1.5, forced = TRUE)
|
||||
vitality_drained = L.adjustToxLoss(1.5, forced = TRUE, toxins_type = TOX_OMNI)
|
||||
if(vitality_drained)
|
||||
GLOB.clockwork_vitality += vitality_drained
|
||||
else
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
if(totaldamage)
|
||||
L.heal_overall_damage(brutedamage, burndamage, only_organic = FALSE) //Maybe a machine god shouldn't murder augmented followers instead of healing them
|
||||
L.adjustOxyLoss(-oxydamage)
|
||||
L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE)
|
||||
L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE, toxins_type = TOX_OMNI)
|
||||
clockwork_say(ranged_ability_user, text2ratvar("[has_holy_water ? "Heal tainted" : "Mend wounded"] flesh!"))
|
||||
log_combat(ranged_ability_user, L, "healed with Sentinel's Compromise")
|
||||
L.visible_message("<span class='warning'>A blue light washes over [L], [has_holy_water ? "causing [L.p_them()] to briefly glow as it mends" : " mending"] [L.p_their()] bruises and burns!</span>", \
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert")
|
||||
notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [get_area_name(src)] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay)
|
||||
INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 10, null, FALSE, 0)
|
||||
SSpersistence.station_was_destroyed = TRUE
|
||||
|
||||
/obj/structure/destructible/clockwork/massive/ratvar/Destroy()
|
||||
GLOB.ratvar_awakens--
|
||||
|
||||
@@ -717,9 +717,9 @@
|
||||
uses = 0
|
||||
ratio *= -1
|
||||
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0)
|
||||
H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0)
|
||||
H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0)
|
||||
H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0, toxins_type = TOX_OMNI)
|
||||
H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0, only_organic = FALSE)
|
||||
H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0, only_organic = FALSE)
|
||||
H.updatehealth()
|
||||
playsound(get_turf(H), 'sound/magic/staff_healing.ogg', 25)
|
||||
new /obj/effect/temp_visual/cult/sparks(get_turf(H))
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
if(L.health != L.maxHealth)
|
||||
new /obj/effect/temp_visual/heal(get_turf(src), "#960000")
|
||||
if(ishuman(L))
|
||||
L.adjustBruteLoss(-1, 0)
|
||||
L.adjustFireLoss(-1, 0)
|
||||
L.adjustBruteLoss(-1, 0, only_organic = FALSE)
|
||||
L.adjustFireLoss(-1, 0, only_organic = FALSE)
|
||||
L.updatehealth()
|
||||
if(isshade(L) || isconstruct(L))
|
||||
var/mob/living/simple_animal/M = L
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
/datum/antagonist/heretic/on_gain()
|
||||
var/mob/living/current = owner.current
|
||||
owner.teach_crafting_recipe(/datum/crafting_recipe/heretic/codex)
|
||||
owner.special_role = ROLE_HERETIC
|
||||
if(ishuman(current))
|
||||
forge_primary_objectives()
|
||||
gain_knowledge(/datum/eldritch_knowledge/spell/basic)
|
||||
@@ -49,7 +50,7 @@
|
||||
for(var/X in researched_knowledge)
|
||||
var/datum/eldritch_knowledge/EK = researched_knowledge[X]
|
||||
EK.on_lose(owner.current)
|
||||
|
||||
owner.special_role = null
|
||||
if(!silent)
|
||||
to_chat(owner.current, "<span class='userdanger'>Your mind begins to flare as the otherwordly knowledge escapes your grasp!</span>")
|
||||
owner.current.log_message("has renounced the cult of the old ones!", LOG_ATTACK, color="#960000")
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
/obj/screen,
|
||||
/obj/singularity,
|
||||
/mob/living/simple_animal/hostile/morph,
|
||||
/obj/effect))
|
||||
/obj/effect,
|
||||
/mob/camera
|
||||
))
|
||||
|
||||
var/playstyle_string = "<span class='big bold'>You are a morph,</span></b> an abomination of science created primarily with changeling cells. \
|
||||
You may take the form of anything nearby by shift-clicking it. This process will alert any nearby \
|
||||
|
||||
@@ -617,9 +617,12 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
var/fake = FALSE
|
||||
var/turf/lastlocation
|
||||
var/last_disk_move
|
||||
var/process_tick = 0
|
||||
|
||||
/obj/item/disk/nuclear/Initialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/bed_tuckable, 6, -6, 0)
|
||||
|
||||
if(!fake)
|
||||
GLOB.poi_list |= src
|
||||
last_disk_move = world.time
|
||||
@@ -630,11 +633,25 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
AddComponent(/datum/component/stationloving, !fake)
|
||||
|
||||
/obj/item/disk/nuclear/process()
|
||||
++process_tick
|
||||
if(fake)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck")
|
||||
var/turf/newturf = get_turf(src)
|
||||
|
||||
if(newturf && lastlocation == newturf)
|
||||
|
||||
// How comfy is disky?
|
||||
var/disk_comfort_level = 0
|
||||
|
||||
// Checking for items that make disky comfy
|
||||
for(var/obj/comfort_item in loc)
|
||||
if(istype(comfort_item, /obj/item/bedsheet) || istype(comfort_item, /obj/structure/bed))
|
||||
disk_comfort_level++
|
||||
|
||||
if(disk_comfort_level >= 2) //Sleep tight, disky.
|
||||
if(process_tick % 30)
|
||||
visible_message("<span class='notice'>[src] sleeps soundly. Sleep tight, disky.</span>")
|
||||
if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
|
||||
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
|
||||
if(istype(loneop) && loneop.occurrences < loneop.max_occurrences)
|
||||
|
||||
@@ -189,6 +189,10 @@
|
||||
name = "Mutate"
|
||||
spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate
|
||||
|
||||
/datum/spellbook_entry/mantra
|
||||
name = "Inner Mantra"
|
||||
spell_type = /obj/effect/proc_holder/spell/self/mantra
|
||||
|
||||
/datum/spellbook_entry/jaunt
|
||||
name = "Ethereal Jaunt"
|
||||
spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt
|
||||
|
||||
@@ -181,8 +181,8 @@
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
|
||||
if(APPRENTICE_MARTIAL)
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null))
|
||||
H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.")
|
||||
owner.AddSpell(new /obj/effect/proc_holder/spell/self/mantra(null))
|
||||
to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned to control your Inner Mantra. You are also able to use the Nuclear Fist at will.")
|
||||
|
||||
/datum/antagonist/wizard/apprentice/create_objectives()
|
||||
var/datum/objective/protect/new_objective = new /datum/objective/protect
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
to_chat(owner, "<span class='warning'>You feel your breasts shrinking away from your body as your chest flattens out.</span>")
|
||||
QDEL_IN(src, 1)
|
||||
return
|
||||
var/enlargement = FALSE
|
||||
switch(rounded_cached)
|
||||
if(0) //flatchested
|
||||
size = "flat"
|
||||
@@ -96,16 +95,8 @@
|
||||
size = breast_values[rounded_cached]
|
||||
if(9 to 15) //massive
|
||||
size = breast_values[rounded_cached]
|
||||
enlargement = TRUE
|
||||
if(16 to INFINITY) //rediculous
|
||||
size = "huge"
|
||||
enlargement = TRUE
|
||||
if(owner)
|
||||
var/status_effect = owner.has_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
|
||||
if(enlargement && !status_effect)
|
||||
owner.apply_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
|
||||
else if(!enlargement && status_effect)
|
||||
owner.remove_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
|
||||
|
||||
if(rounded_cached < 16 && owner)//Because byond doesn't count from 0, I have to do this.
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
@@ -39,27 +39,16 @@
|
||||
return
|
||||
var/rounded_length = round(length)
|
||||
var/new_size
|
||||
var/enlargement = FALSE
|
||||
var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
|
||||
switch(rounded_length)
|
||||
if(0 to 6) //If modest size
|
||||
new_size = 1
|
||||
if(7 to 11) //If large
|
||||
new_size = 2
|
||||
if(12 to max_D) //If massive
|
||||
if(12 to 36) //If massive
|
||||
new_size = 3
|
||||
if(max_D + 1 to max_D+13) //If massive and due for large effects, modified in case some server owner running recent citcode decides to be insane with dick sizes in the config
|
||||
new_size = 3
|
||||
enlargement = TRUE
|
||||
if(max_D+14 to INFINITY) //If comical
|
||||
if(37 to INFINITY) //If comical
|
||||
new_size = 4 //no new sprites for anything larger yet
|
||||
enlargement = TRUE
|
||||
if(owner)
|
||||
var/status_effect = owner.has_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
|
||||
if(enlargement && !status_effect)
|
||||
owner.apply_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
|
||||
else if(!enlargement && status_effect)
|
||||
owner.remove_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
|
||||
|
||||
if(linked_organ)
|
||||
linked_organ.size = clamp(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX)
|
||||
linked_organ.update()
|
||||
|
||||
@@ -123,6 +123,7 @@ obj/item/dildo/flared/huge
|
||||
desc = "THIS THING IS HUGE!"
|
||||
dildo_size = 4
|
||||
force = 10
|
||||
hitsound = 'sound/weapons/klonk.ogg'
|
||||
|
||||
obj/item/dildo/custom
|
||||
name = "customizable dildo"
|
||||
|
||||
@@ -179,6 +179,10 @@
|
||||
if((pack.hidden && !(obj_flags & EMAGGED)) || (pack.contraband && !contraband) || pack.DropPodOnly)
|
||||
return
|
||||
|
||||
if(self_paid && !pack.can_private_buy)
|
||||
say("This cannot be bought privately.")
|
||||
return
|
||||
|
||||
var/name = "*None Provided*"
|
||||
var/rank = "*None Provided*"
|
||||
var/ckey = usr.ckey
|
||||
|
||||
@@ -17,7 +17,7 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
if(!(prefs.toggles & CHAT_OOC))
|
||||
if(!(prefs.chat_toggles & CHAT_OOC))
|
||||
to_chat(src, "<span class='danger'> You have OOC muted.</span>")
|
||||
return
|
||||
if(jobban_isbanned(mob, "OOC"))
|
||||
@@ -63,14 +63,14 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
|
||||
if (isobserver(M))
|
||||
continue //Also handled later.
|
||||
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
if(C.prefs.chat_toggles & CHAT_OOC)
|
||||
if(GLOB.LOOC_COLOR)
|
||||
to_chat(C, "<font color='[GLOB.LOOC_COLOR]'><b><span class='prefix'>LOOC:</span> <EM>[src.mob.name]:</EM> <span class='message'>[msg]</span></b></font>")
|
||||
else
|
||||
to_chat(C, "<span class='looc'><span class='prefix'>LOOC:</span> <EM>[src.mob.name]:</EM> <span class='message'>[msg]</span></span>")
|
||||
|
||||
for(var/client/C in GLOB.admins)
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
if(C.prefs.chat_toggles & CHAT_OOC)
|
||||
var/prefix = "(R)LOOC"
|
||||
if (C.mob in heard)
|
||||
prefix = "LOOC"
|
||||
|
||||
@@ -510,12 +510,12 @@ Contains:
|
||||
name = "paramedic EVA suit"
|
||||
icon_state = "paramedic-eva"
|
||||
item_state = "paramedic-eva"
|
||||
desc = "A deep blue space suit decorated with red and white crosses to indicate that the wearer is trained emergency medical personnel."
|
||||
desc = "A deep blue space suit decorated with medical insignia to indicate that the wearer is trained emergency medical personnel."
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/roller)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/paramedic
|
||||
name = "paramedic EVA helmet"
|
||||
desc = "A deep blue space helmet with a large red cross on the faceplate to designate the wearer as trained emergency medical personnel."
|
||||
desc = "A deep blue space helmet decorated with medical insignia to designate the wearer as trained emergency medical personnel."
|
||||
icon_state = "paramedic-eva-helmet"
|
||||
item_state = "paramedic-eva-helmet"
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
var/fraction = min(gulp_size/reagents.total_volume, 1)
|
||||
checkLiked(fraction, M)
|
||||
reagents.reaction(M, INGEST, fraction)
|
||||
reagents.trans_to(M, gulp_size)
|
||||
reagents.trans_to(M, gulp_size, log = TRUE)
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
return 1
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
return
|
||||
|
||||
var/refill = reagents.get_master_reagent_id()
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] units of the solution to [target].</span>")
|
||||
|
||||
if(iscyborg(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
|
||||
@@ -92,7 +92,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the contents of [target].</span>")
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
var/fraction = min(10/reagents.total_volume, 1)
|
||||
reagents.reaction(M, INGEST, fraction)
|
||||
reagents.trans_to(M, 10)
|
||||
reagents.trans_to(M, 10, log = TRUE)
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
return 1
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] is full!</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the contents of [target].</span>")
|
||||
|
||||
//Something like a glass or a food item. Player probably wants to transfer TO it.
|
||||
@@ -84,7 +84,7 @@
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
to_chat(user, "<span class='warning'>you can't add anymore to [target]!</span>")
|
||||
return
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] units of the condiment to [target].</span>")
|
||||
|
||||
/obj/item/reagent_containers/food/condiment/on_reagent_change(changetype)
|
||||
@@ -270,7 +270,7 @@
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You tear open [src] above [target] and the condiments drip onto it.</span>")
|
||||
src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
src.reagents.trans_to(target, amount_per_transfer_from_this, log = TRUE)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/condiment/pack/on_reagent_change(changetype)
|
||||
|
||||
@@ -160,7 +160,7 @@ All foods are distributed among various categories. Use common sense.
|
||||
SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user)
|
||||
var/fraction = min(bitesize / reagents.total_volume, 1)
|
||||
reagents.reaction(M, INGEST, fraction)
|
||||
reagents.trans_to(M, bitesize)
|
||||
reagents.trans_to(M, bitesize, log = TRUE)
|
||||
bitecount++
|
||||
On_Consume(M)
|
||||
checkLiked(fraction, M)
|
||||
@@ -359,7 +359,7 @@ All foods are distributed among various categories. Use common sense.
|
||||
if(!M.is_drainable())
|
||||
to_chat(user, "<span class='warning'>[M] is unable to be dunked in!</span>")
|
||||
return
|
||||
if(M.reagents.trans_to(src, dunk_amount)) //if reagents were transfered, show the message
|
||||
if(M.reagents.trans_to(src, dunk_amount, log = TRUE)) //if reagents were transfered, show the message
|
||||
to_chat(user, "<span class='notice'>You dunk the [M].</span>")
|
||||
return
|
||||
if(!M.reagents.total_volume)
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
foodtype = GRAIN
|
||||
dunkable = TRUE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/proc/bread_teleport()
|
||||
// you did WHAT?
|
||||
new /mob/living/simple_animal/hostile/bread(get_turf(src))
|
||||
visible_message("<span class='warning'>[src] begins to deform and grow grotesque tumors!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/breadslice
|
||||
icon = 'icons/obj/food/burgerbread.dmi'
|
||||
bitesize = 2
|
||||
@@ -228,3 +234,25 @@
|
||||
/obj/item/reagent_containers/food/snacks/butterdog/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 80)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/tumor_bread
|
||||
name = "dead tumor bread"
|
||||
desc = "It's still within its expiration date, right?"
|
||||
icon_state = "tumorbread"
|
||||
slice_path = /obj/item/reagent_containers/food/snacks/breadslice/tumor_bread
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/toxin = 10)
|
||||
foodtype = GROSS | GRAIN
|
||||
tastes = list("wheat and tumors" = 10)
|
||||
|
||||
//teleporting tumor bread kills it
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/tumor_bread/bread_teleport()
|
||||
visible_message(src, "<span class='warning'>[src] explodes in a horrible mess of tumor and flour!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/tumor_bread
|
||||
name = "tumor bread slice"
|
||||
desc = "A slice of bread filled with tumors!"
|
||||
icon_state = "tumorbreadslice"
|
||||
filling_color = "#B2D72C"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/toxin = 2)
|
||||
foodtype = GROSS | GRAIN
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
H.visible_message("<span class='warning'>[H] is creamed by [src]!</span>", "<span class='userdanger'>You've been creamed by [src]!</span>")
|
||||
playsound(H, "desceration", 50, TRUE)
|
||||
if(!H.is_mouth_covered())
|
||||
reagents.trans_to(H,15) //Cream pie combat
|
||||
reagents.trans_to(H, 15, log = TRUE) //Cream pie combat
|
||||
if(!H.creamed) // one layer at a time
|
||||
H.add_overlay(creamoverlay)
|
||||
H.creamed = TRUE
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
/obj/item/weldingtool = 3,
|
||||
/obj/item/wirecutters = 2,
|
||||
/obj/item/wrench = 4,
|
||||
/obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1,
|
||||
/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/geiger_counter = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 5,
|
||||
/obj/item/assembly/infra = 1,
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
reagents.remove_any(min(0.5, nutridrain))
|
||||
else
|
||||
reagents.remove_any(nutridrain)
|
||||
|
||||
|
||||
// Lack of nutrients hurts non-weeds
|
||||
if(reagents.total_volume <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
|
||||
adjustHealth(-rand(1,3))
|
||||
@@ -501,7 +501,7 @@
|
||||
if(visi_msg)
|
||||
visible_message("<span class='notice'>[visi_msg].</span>")
|
||||
|
||||
|
||||
|
||||
for(var/obj/machinery/hydroponics/H in trays)
|
||||
//cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener
|
||||
//This was originally in apply_chemicals, but due to apply_chemicals only holding nutrients, we handle it here now.
|
||||
@@ -675,7 +675,7 @@
|
||||
idle_power_usage = 0
|
||||
self_sustaining = FALSE
|
||||
update_icon()
|
||||
|
||||
|
||||
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
|
||||
/obj/machinery/hydroponics/proc/adjustWater(adjustamt)
|
||||
waterlevel = clamp(waterlevel + adjustamt, 0, maxwater)
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
var/map_name = "Box Station"
|
||||
var/map_path = "map_files/BoxStation"
|
||||
var/map_file = "BoxStation.dmm"
|
||||
/// Persistence key: Defaults to ckey(map_name). If set to "NO_PERSIST", this map will have NO persistence.
|
||||
var/persistence_key
|
||||
|
||||
var/traits = null
|
||||
var/space_ruin_levels = 4
|
||||
@@ -99,6 +101,16 @@
|
||||
map_path = json["map_path"]
|
||||
|
||||
map_file = json["map_file"]
|
||||
|
||||
persistence_key = ckey(map_name)
|
||||
|
||||
var/json_persistence_key = json["persistence_key"]
|
||||
if(json_persistence_key)
|
||||
if(json_persistence_key == "NO_PERSIST")
|
||||
persistence_key = null
|
||||
else
|
||||
persistence_key = json_persistence_key
|
||||
|
||||
// "map_file": "BoxStation.dmm"
|
||||
if (istext(map_file))
|
||||
if (!fexists("_maps/[map_path]/[map_file]"))
|
||||
|
||||
@@ -1104,7 +1104,7 @@
|
||||
if(1)
|
||||
new /obj/item/mayhem(src)
|
||||
if(2)
|
||||
new /obj/item/gun/ballistic/revolver/doublebarrel/super(src)
|
||||
new /obj/item/book/granter/spell/asura(src)
|
||||
if(3)
|
||||
new /obj/item/guardiancreator(src)
|
||||
|
||||
@@ -1187,6 +1187,13 @@
|
||||
unique_reskin = null
|
||||
sawn_off = TRUE
|
||||
|
||||
/obj/item/book/granter/spell/asura
|
||||
spell = /obj/effect/proc_holder/spell/self/asura
|
||||
spellname = "asuras wrath"
|
||||
icon_state = "bookasura"
|
||||
desc = "This crimson novel emanates rage incarnate."
|
||||
remarks = list("Kaio-What?", "It can only be sustained for a short time...", "It's like a massive upsurge of energy...", "Takes a heavy toll on the user's body...?", "Extra arms not included...", "There's stronger levels? Why aren't they in the book...")
|
||||
|
||||
//Colossus
|
||||
/obj/structure/closet/crate/necropolis/colossus
|
||||
name = "colossus chest"
|
||||
|
||||
@@ -243,6 +243,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
@@ -271,6 +275,10 @@
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/featherymoth
|
||||
name = "Feathery Moth"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -291,18 +299,22 @@
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
@@ -311,6 +323,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -325,4 +341,4 @@
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
icon_state = "witchwing"
|
||||
@@ -58,9 +58,7 @@
|
||||
dimension_y = 34
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
//nonmoth wings
|
||||
|
||||
/datum/sprite_accessory/deco_wings/bat
|
||||
name = "Bat"
|
||||
@@ -70,18 +68,76 @@
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
/datum/sprite_accessory/deco_wings/bee2
|
||||
name = "Small Bee"
|
||||
icon_state = "beewings"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/dragon
|
||||
name = "Dragon"
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/dragonfly
|
||||
name = "Dragonfly"
|
||||
icon_state = "dragonfly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/feathery
|
||||
/datum/sprite_accessory/deco_wings/featheredwing
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featheredwingmedium
|
||||
name = "Medium Feathered"
|
||||
icon_state = "feathered3"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featheredwinglarge
|
||||
name = "Large Feathered"
|
||||
icon_state = "feathered2"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/harpywings
|
||||
name = "Harpy"
|
||||
icon_state = "harpywings"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/roboticwing
|
||||
name = "Robotic"
|
||||
icon_state = "drago"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubusblack
|
||||
name = "Succubus Black"
|
||||
icon_state = "succubusblack"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubuspurple
|
||||
name = "Succubus Purple"
|
||||
icon_state = "succubuspurple"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/succubusred
|
||||
name = "Succubus Red"
|
||||
icon_state = "succubusred"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/xenobackplate
|
||||
name = "Xenomorph Backplate"
|
||||
icon_state = "snagbackplate"
|
||||
|
||||
//moth wings
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/featherymoth
|
||||
name = "Feathery Moth Wings"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -90,6 +146,10 @@
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
@@ -106,10 +166,18 @@
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
@@ -126,6 +194,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -138,18 +210,10 @@
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
//INSECT WINGS
|
||||
|
||||
/datum/sprite_accessory/insect_wings
|
||||
@@ -157,6 +221,69 @@
|
||||
color_src = WINGCOLOR
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
|
||||
|
||||
//non insect wings
|
||||
/datum/sprite_accessory/deco_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee2
|
||||
name = "Small Bee"
|
||||
icon_state = "beewings"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/dragon
|
||||
name = "Dragon"
|
||||
icon_state = "dragon"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/dragonfly
|
||||
name = "Dragonfly"
|
||||
icon_state = "dragonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwing
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwingmedium
|
||||
name = "Medium Feathered"
|
||||
icon_state = "feathered3"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/featheredwinglarge
|
||||
name = "Large Feathered"
|
||||
icon_state = "feathered2"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/harpywings
|
||||
name = "Harpy"
|
||||
icon_state = "harpywings"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/roboticwing
|
||||
name = "Robotic"
|
||||
icon_state = "drago"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubusblack
|
||||
name = "Succubus Black"
|
||||
icon_state = "succubusblack"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubuspurple
|
||||
name = "Succubus Purple"
|
||||
icon_state = "succubuspurple"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/succubusred
|
||||
name = "Succubus Red"
|
||||
icon_state = "succubusred"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/xenobackplate
|
||||
name = "Xenomorph Backplate"
|
||||
icon_state = "snagbackplate"
|
||||
|
||||
//moth wings
|
||||
|
||||
/datum/sprite_accessory/insect_wings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
@@ -166,25 +293,17 @@
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bee
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
/datum/sprite_accessory/insect_wings/brown
|
||||
name = "Brown"
|
||||
icon_state = "brown"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/feathery
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
/datum/sprite_accessory/insect_wings/featherymoth
|
||||
name = "Feathery Moth Wings"
|
||||
icon_state = "featherymoth"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/firewatch
|
||||
name = "Firewatch"
|
||||
@@ -222,6 +341,10 @@
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/plasmafire
|
||||
name = "Plasma Fire"
|
||||
icon_state = "plasmafire"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
@@ -238,6 +361,10 @@
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/rosy
|
||||
name = "Rosy"
|
||||
icon_state = "rosy"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
@@ -265,45 +392,25 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_markings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/punished
|
||||
name = "Punished"
|
||||
icon_state = "punished"
|
||||
/datum/sprite_accessory/insect_markings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
/datum/sprite_accessory/insect_markings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
/datum/sprite_accessory/insect_markings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
/datum/sprite_accessory/insect_markings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/moonfly
|
||||
name = "Moon Fly"
|
||||
@@ -313,10 +420,42 @@
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
/datum/sprite_accessory/insect_markings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/punished
|
||||
name = "Punished"
|
||||
icon_state = "punished"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_markings/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
//DONATOR WINGS
|
||||
|
||||
/datum/sprite_accessory/deco_wings/eyestalks
|
||||
name = "gazer eyestalks"
|
||||
icon_state = "eyestalks"
|
||||
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
|
||||
|
||||
/datum/sprite_accessory/insect_wings/eyestalks
|
||||
name = "gazer eyestalks"
|
||||
icon_state = "eyestalks"
|
||||
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
amount += BP.burn_dam
|
||||
return amount
|
||||
|
||||
|
||||
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//In both these procs, only_organic / only_robotic are only used for healing, not for damaging. For now at least.
|
||||
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL))
|
||||
return FALSE
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
@@ -71,10 +71,10 @@
|
||||
if(amount > 0)
|
||||
take_overall_damage(amount, 0, 0, updating_health)
|
||||
else
|
||||
heal_overall_damage(abs(amount), 0, 0, FALSE, TRUE, updating_health)
|
||||
heal_overall_damage(abs(amount), 0, 0, only_robotic, only_organic, updating_health)
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally.
|
||||
return FALSE
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
@@ -82,7 +82,7 @@
|
||||
if(amount > 0)
|
||||
take_overall_damage(0, amount, 0, updating_health)
|
||||
else
|
||||
heal_overall_damage(0, abs(amount), 0, FALSE, TRUE, updating_health)
|
||||
heal_overall_damage(0, abs(amount), 0, only_robotic, only_organic, updating_health)
|
||||
return amount
|
||||
|
||||
|
||||
|
||||
@@ -80,10 +80,11 @@
|
||||
if("shortlimbdisable")
|
||||
var/disabled_type = pick(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG))
|
||||
ADD_TRAIT(src, disabled_type, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
addtimer(CALLBACK(src, .proc/reenable_limb, disabled_type), 5 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Error - Limb control subsystem partially shutdown, rebooting.</span>")
|
||||
if("shortblind")
|
||||
ADD_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
become_blind(CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_vision), 5 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Visual receptor shutdown detected - Initiating reboot.</span>")
|
||||
if("shortstun")
|
||||
@@ -105,10 +106,11 @@
|
||||
if("longlimbdisable")
|
||||
var/disabled_type = pick(list(TRAIT_PARALYSIS_L_ARM, TRAIT_PARALYSIS_R_ARM, TRAIT_PARALYSIS_L_LEG, TRAIT_PARALYSIS_R_LEG))
|
||||
ADD_TRAIT(src, disabled_type, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
addtimer(CALLBACK(src, .proc/reenable_limb, disabled_type), 25 SECONDS)
|
||||
to_chat(src, "<span class='warning'>Fatal error in limb control subsystem - rebooting.</span>")
|
||||
if("blindmutedeaf")
|
||||
ADD_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
become_blind(CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_vision), (rand(10, 25)) SECONDS)
|
||||
ADD_TRAIT(src, TRAIT_DEAF, CORRUPTED_SYSTEM)
|
||||
addtimer(CALLBACK(src, .proc/reenable_hearing), (rand(15, 35)) SECONDS)
|
||||
@@ -140,6 +142,7 @@
|
||||
|
||||
/mob/living/carbon/proc/reenable_limb(disabled_limb)
|
||||
REMOVE_TRAIT(src, disabled_limb, CORRUPTED_SYSTEM)
|
||||
update_disabled_bodyparts()
|
||||
to_chat(src, "<span class='notice'>Limb control subsystem successfully rebooted.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_hearing()
|
||||
@@ -147,7 +150,7 @@
|
||||
to_chat(src, "<span class='notice'>Hearing restored.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_vision()
|
||||
REMOVE_TRAIT(src, TRAIT_BLIND, CORRUPTED_SYSTEM)
|
||||
cure_blind(CORRUPTED_SYSTEM)
|
||||
to_chat(src, "<span class='notice'>Visual receptors back online.</span>")
|
||||
|
||||
/mob/living/carbon/proc/reenable_speech()
|
||||
|
||||
@@ -411,15 +411,18 @@
|
||||
if(isrobotic(src))
|
||||
apply_status_effect(/datum/status_effect/no_combat_mode/robotic_emp, severity / 20)
|
||||
severity *= 0.5
|
||||
var/do_not_stun = FALSE
|
||||
if(HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM))
|
||||
severity *= 0.5 //Robotpeople take less limb damage, but instead suffer system corruption (see carbon emp_act)
|
||||
do_not_stun = TRUE
|
||||
for(var/obj/item/bodypart/L in src.bodyparts)
|
||||
if(L.is_robotic_limb())
|
||||
if(!informed)
|
||||
to_chat(src, "<span class='userdanger'>You feel a sharp pain as your robotic limbs overload.</span>")
|
||||
informed = TRUE
|
||||
L.receive_damage(0,severity/10)
|
||||
Stun(severity*2)
|
||||
if(!do_not_stun) //Tiny bit better than checking for the trait another six times in succession
|
||||
Stun(severity*2)
|
||||
|
||||
/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit)
|
||||
var/list/damaged = list()
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
block_parry_data = /datum/block_parry_data/unarmed/human
|
||||
default_block_parry_data = /datum/block_parry_data/unarmed/human
|
||||
causes_dirt_buildup_on_floor = TRUE
|
||||
|
||||
//Hair colour and style
|
||||
var/hair_color = "000"
|
||||
|
||||
@@ -100,3 +100,8 @@
|
||||
if(dna.species.space_move(src))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/dirt_buildup(strength)
|
||||
if(!shoes || !(shoes.body_parts_covered & FEET))
|
||||
return // barefoot advantage
|
||||
return ..()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
override_bp_icon = 'icons/mob/arachnid_parts.dmi'
|
||||
say_mod = "chitters"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(LIPS, NOEYES, NO_UNDERWEAR)
|
||||
species_traits = list(LIPS, NOEYES, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
|
||||
mutant_bodyparts = list("arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain")
|
||||
attack_verb = "slash"
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
name = "Xenobiological Slime Entity"
|
||||
id = SPECIES_SLIME
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 150
|
||||
@@ -404,7 +404,7 @@
|
||||
id = SPECIES_SLIME_HYBRID
|
||||
limbs_id = SPECIES_SLIME
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None", "legs" = "Plantigrade")
|
||||
say_mod = "says"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_LIZARD
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
|
||||
mutanttongue = /obj/item/organ/tongue/lizard
|
||||
mutanttail = /obj/item/organ/tail/lizard
|
||||
@@ -48,7 +48,7 @@
|
||||
name = "Ash Walker"
|
||||
id = SPECIES_ASHWALKER
|
||||
limbs_id = SPECIES_LIZARD
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
inherent_traits = list(TRAIT_CHUNKYFINGERS)
|
||||
mutantlungs = /obj/item/organ/lungs/ashwalker
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/datum/species/pod/pseudo_weak
|
||||
name = "Anthromorphic Plant"
|
||||
id = SPECIES_POD_WEAK
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS)
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
|
||||
limbs_id = SPECIES_POD
|
||||
light_nutrition_gain_factor = 3
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_XENOHYBRID
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
|
||||
@@ -141,7 +141,8 @@
|
||||
/mob/living/proc/getBruteLoss()
|
||||
return bruteloss
|
||||
|
||||
/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//only_robotic and only_organic arg only relevant for carbons
|
||||
/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
@@ -215,7 +216,8 @@
|
||||
/mob/living/proc/getFireLoss()
|
||||
return fireloss
|
||||
|
||||
/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
//only_robotic and only_organic arg only relevant for carbons
|
||||
/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
//Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects.
|
||||
var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas
|
||||
//and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt
|
||||
/// Do we make floors dirty as we move?
|
||||
var/causes_dirt_buildup_on_floor = FALSE
|
||||
|
||||
var/list/roundstart_quirks = list()
|
||||
|
||||
|
||||
@@ -101,7 +101,30 @@
|
||||
|
||||
if(lying && !buckled && prob(getBruteLoss()*200/maxHealth))
|
||||
makeTrail(newloc, T, old_direction)
|
||||
if(causes_dirt_buildup_on_floor && (movement_type & GROUND))
|
||||
dirt_buildup()
|
||||
|
||||
/**
|
||||
* Attempts to make the floor dirty.
|
||||
*/
|
||||
/mob/living/proc/dirt_buildup(strength = 1)
|
||||
var/turf/open/T = loc
|
||||
if(!istype(T) || !T.dirt_buildup_allowed)
|
||||
return
|
||||
var/area/A = T.loc
|
||||
if(!A.dirt_buildup_allowed)
|
||||
return
|
||||
var/multiplier = CONFIG_GET(number/turf_dirty_multiplier)
|
||||
strength *= multiplier
|
||||
var/obj/effect/decal/cleanable/dirt/D = locate() in T
|
||||
if(D)
|
||||
D.dirty(strength)
|
||||
else
|
||||
T.dirtyness += strength
|
||||
if(T.dirtyness >= (isnull(T.dirt_spawn_threshold)? CONFIG_GET(number/turf_dirt_threshold) : T.dirt_spawn_threshold))
|
||||
D = new /obj/effect/decal/cleanable/dirt(T)
|
||||
D.dirty(T.dirt_spawn_threshold - T.dirtyness)
|
||||
T.dirtyness = 0 // reset.
|
||||
|
||||
/mob/living/Move_Pulled(atom/A)
|
||||
. = ..()
|
||||
|
||||
@@ -81,10 +81,10 @@
|
||||
to_chat(src, "<span class='userdanger'>The impact degrades your holochassis!</span>")
|
||||
return amount
|
||||
|
||||
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
return take_holo_damage(amount)
|
||||
|
||||
/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
return take_holo_damage(amount)
|
||||
|
||||
/mob/living/silicon/pai/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, toxins_type = TOX_DEFAULT)
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
updatehealth()
|
||||
return amount
|
||||
|
||||
/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(forced)
|
||||
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[BRUTE])
|
||||
. = adjustHealth(amount * damage_coeff[BRUTE] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(forced)
|
||||
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[BURN])
|
||||
|
||||
69
code/modules/mob/living/simple_animal/hostile/bread.dm
Normal file
69
code/modules/mob/living/simple_animal/hostile/bread.dm
Normal file
@@ -0,0 +1,69 @@
|
||||
//funny reference to the video 'Expiration Date'
|
||||
|
||||
/mob/living/simple_animal/hostile/bread
|
||||
name = "tumor bread"
|
||||
desc = "I have done nothing but teleport bread for three days."
|
||||
icon_state = "tumorbread"
|
||||
health = 1
|
||||
maxHealth = 1
|
||||
turns_per_move = 5 //this isn't player speed =|
|
||||
speed = 2 //this is player speed
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
obj_damage = 0
|
||||
loot = list(/obj/item/reagent_containers/food/snacks/store/bread/tumor_bread)
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 270
|
||||
maxbodytemp = INFINITY
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_TINY
|
||||
response_help_continuous = "pokes"
|
||||
response_help_simple = "poke"
|
||||
response_disarm_continuous = "shoos"
|
||||
response_disarm_simple = "shoo"
|
||||
response_harm_continuous = "punches"
|
||||
response_harm_simple = "punch"
|
||||
speak_emote = list("growls")
|
||||
mouse_opacity = 2
|
||||
density = TRUE
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
verb_say = "growls"
|
||||
verb_ask = "growls inquisitively"
|
||||
verb_exclaim = "growls loudly"
|
||||
verb_yell = "growls loudly"
|
||||
del_on_death = TRUE
|
||||
|
||||
/mob/living/simple_animal/bread/hostile/Initialize()
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("A tumor bread has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_dnr_observers = TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/bread/attack_ghost(mob/user)
|
||||
if(key) //please stop using src. without a good reason.
|
||||
return
|
||||
if(CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||
if(!isnum(user.client.player_age))
|
||||
return
|
||||
if(isobserver(user))
|
||||
var/mob/dead/observer/O = user
|
||||
if(!O.can_reenter_round())
|
||||
return
|
||||
if(!SSticker.mode)
|
||||
to_chat(user, "Can't become a tumor bread before the game has started.")
|
||||
return
|
||||
var/be_bread = alert("Become a tumor bread? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(be_bread == "No" || QDELETED(src) || !isobserver(user))
|
||||
return
|
||||
if(key)
|
||||
to_chat(user, "<span class='notice'>Someone else already took this tumor bread.</span>")
|
||||
return
|
||||
sentience_act()
|
||||
user.transfer_ckey(src, FALSE)
|
||||
density = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/bread/ex_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/bread/start_pulling()
|
||||
return FALSE
|
||||
@@ -225,7 +225,7 @@
|
||||
. += "Power Level: [powerlevel]"
|
||||
|
||||
|
||||
/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
|
||||
if(!forced)
|
||||
amount = -abs(amount)
|
||||
return ..() //Heals them
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
computer.visible_message("<span class='notice'>\The [computer] prints out paper.</span>")
|
||||
if(ticket_count >= 1)
|
||||
new /obj/item/stack/arcadeticket((get_turf(computer)), 1)
|
||||
to_chat(usr, "<span class='notice'>[src] dispenses a ticket!</span>")
|
||||
to_chat(usr, "<span class='notice'>[computer] dispenses a ticket!</span>")
|
||||
ticket_count -= 1
|
||||
printer.stored_paper -= 1
|
||||
else
|
||||
|
||||
@@ -141,6 +141,8 @@
|
||||
var/mob/living/L = target
|
||||
if(!(L.mobility_flags & MOBILITY_STAND))
|
||||
return
|
||||
if(iscyborg(target))
|
||||
return max(1, existing - 1)
|
||||
var/static/datum/config_entry/number/movedelay/sprint_max_tiles_increase/SMTI
|
||||
if(!SMTI)
|
||||
SMTI = CONFIG_GET_ENTRY(number/movedelay/sprint_max_tiles_increase)
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
set_security_level("delta")
|
||||
SSshuttle.registerHostileEnvironment(src)
|
||||
SSshuttle.lockdown = TRUE
|
||||
SSpersistence.station_was_destroyed = TRUE
|
||||
sleep(600)
|
||||
if(resolved == FALSE)
|
||||
resolved = TRUE
|
||||
|
||||
@@ -373,7 +373,6 @@
|
||||
sawn_off = TRUE
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course.
|
||||
clumsy_check = 0
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
pump()
|
||||
return TRUE
|
||||
|
||||
// DOUBLE BARRELED SHOTGUN and IMPROVISED SHOTGUN are in revolver.dm
|
||||
//due to code weirdness, and the fact that a refactor is coming soon anyway, the barman's shotgun and maint shotgun are in revolver.dm
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/doublebarrel/hook
|
||||
name = "hook modified sawn-off shotgun"
|
||||
|
||||
@@ -272,6 +272,7 @@
|
||||
say("Not enough energy to complete operation!")
|
||||
return
|
||||
R.add_reagent(reagent, actual)
|
||||
log_reagent("DISPENSER: ([COORD(src)]) ([REF(src)]) [key_name(usr)] dispensed [actual] of [reagent] to [beaker] ([REF(beaker)]).")
|
||||
|
||||
work_animation()
|
||||
else
|
||||
@@ -293,11 +294,14 @@
|
||||
var/list/chemicals_to_dispense = saved_recipes[params["recipe"]]
|
||||
if(!LAZYLEN(chemicals_to_dispense))
|
||||
return
|
||||
var/list/logstring = list()
|
||||
var/earlyabort = FALSE
|
||||
for(var/key in chemicals_to_dispense)
|
||||
var/reagent = GLOB.name2reagent[translate_legacy_chem_id(key)]
|
||||
var/dispense_amount = chemicals_to_dispense[key]
|
||||
logstring += "[reagent] = [dispense_amount]"
|
||||
if(!dispensable_reagents.Find(reagent))
|
||||
return
|
||||
break
|
||||
if(!recording_recipe)
|
||||
if(!beaker)
|
||||
return
|
||||
@@ -307,11 +311,15 @@
|
||||
if(actual)
|
||||
if(!cell.use(actual / powerefficiency))
|
||||
say("Not enough energy to complete operation!")
|
||||
return
|
||||
earlyabort = TRUE
|
||||
break
|
||||
R.add_reagent(reagent, actual)
|
||||
work_animation()
|
||||
else
|
||||
recording_recipe[key] += dispense_amount
|
||||
logstring = logstring.Join(", ")
|
||||
if(!recording_recipe)
|
||||
log_reagent("DISPENSER: [key_name(usr)] dispensed recipe [params["recipe"]] with chemicals [logstring] to [beaker] ([REF(beaker)])[earlyabort? " (aborted early)":""]")
|
||||
. = TRUE
|
||||
if("clear_recipes")
|
||||
if(!is_operational())
|
||||
@@ -334,15 +342,19 @@
|
||||
if(saved_recipes[name] && alert("\"[name]\" already exists, do you want to overwrite it?",, "Yes", "No") == "No")
|
||||
return
|
||||
if(name && recording_recipe)
|
||||
var/list/logstring = list()
|
||||
for(var/reagent in recording_recipe)
|
||||
var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent)]
|
||||
logstring += "[reagent_id] = [recording_recipe[reagent]]"
|
||||
if(!dispensable_reagents.Find(reagent_id))
|
||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='hear'>You hear a faint buzz.</span>")
|
||||
to_chat(usr, "<span class ='danger'>[src] cannot find <b>[reagent]</b>!</span>")
|
||||
playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE)
|
||||
return
|
||||
saved_recipes[name] = recording_recipe
|
||||
logstring = logstring.Join(", ")
|
||||
recording_recipe = null
|
||||
log_reagent("DISPENSER: [key_name(usr)] recorded recipe [name] with chemicals [logstring]")
|
||||
. = TRUE
|
||||
if("cancel_recording")
|
||||
if(!is_operational())
|
||||
|
||||
@@ -1126,7 +1126,7 @@
|
||||
if(istype(O, /obj/item/stack/medical/gauze))
|
||||
var/obj/item/stack/medical/gauze/G = O
|
||||
reac_volume = min((reac_volume / 10), G.amount)
|
||||
new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
|
||||
new /obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
|
||||
G.use(reac_volume)
|
||||
|
||||
|
||||
|
||||
@@ -455,7 +455,7 @@
|
||||
grinded.on_grind()
|
||||
reagents.add_reagent_list(grinded.grind_results)
|
||||
if(grinded.reagents) //food and pills
|
||||
grinded.reagents.trans_to(src, grinded.reagents.total_volume)
|
||||
grinded.reagents.trans_to(src, grinded.reagents.total_volume, log = "mortar powdering")
|
||||
to_chat(user, "<span class='notice'>You break [grinded] into powder.</span>")
|
||||
QDEL_NULL(grinded)
|
||||
return
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(M.reagents)
|
||||
var/trans = 0
|
||||
if(!infinite)
|
||||
trans = reagents.trans_to(M, amount_per_transfer_from_this)
|
||||
trans = reagents.trans_to(M, amount_per_transfer_from_this, log = TRUE)
|
||||
else
|
||||
trans = reagents.copy_to(M, amount_per_transfer_from_this)
|
||||
|
||||
@@ -427,7 +427,7 @@
|
||||
|
||||
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
|
||||
vial.reagents.reaction(L, method, fraction)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this, log = TRUE)
|
||||
var/long_sound = vial.amount_per_transfer_from_this >= 15
|
||||
playsound(loc, long_sound ? 'sound/items/hypospray_long.ogg' : pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You [fp_verb] [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
|
||||
reagents.reaction(L, apply_type, fraction)
|
||||
reagents.trans_to(L, amount_per_transfer_from_this)
|
||||
reagents.trans_to(L, amount_per_transfer_from_this, log = TRUE)
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/medspray/styptic
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
log_combat(user, M, "fed", reagents.log_list())
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
reagents.trans_to(M, reagents.total_volume, log = TRUE)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
@@ -76,7 +76,8 @@
|
||||
|
||||
user.visible_message("<span class='warning'>[user] slips something into [target]!</span>",
|
||||
"<span class='notice'>You dissolve [src] in [target].</span>", vision_distance = 2)
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
log_combat(user, target, "spiked", src, reagents.log_list())
|
||||
reagents.trans_to(target, reagents.total_volume, log = TRUE)
|
||||
qdel(src)
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
C.visible_message("<span class='danger'>[user] is trying to smother \the [C] with \the [src]!</span>", "<span class='userdanger'>[user] is trying to smother you with \the [src]!</span>", "<span class='italics'>You hear some struggling and muffled cries of surprise.</span>")
|
||||
if(do_after(user, 20, target = C))
|
||||
reagents.reaction(C, INGEST)
|
||||
reagents.trans_to(C, 5)
|
||||
reagents.trans_to(C, 5, log = TRUE)
|
||||
C.visible_message("<span class='danger'>[user] has smothered \the [C] with \the [src]!</span>", "<span class='userdanger'>[user] has smothered you with \the [src]!</span>", "<span class='italics'>You hear some struggling and a heavy breath taken.</span>")
|
||||
log_combat(user, C, "smothered", log_object)
|
||||
else
|
||||
@@ -107,7 +107,7 @@
|
||||
reagents.clear_reagents()
|
||||
else
|
||||
msg += "'s liquids into \the [target]"
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
reagents.trans_to(target, reagents.total_volume, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>[msg].</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -81,6 +81,10 @@
|
||||
else
|
||||
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
|
||||
D.color = mix_color_from_reagents(D.reagents.reagent_list)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
log_reagent("SPRAY: [key_name(usr)] fired [src] ([REF(src)]) [COORD(T)] at [A] ([REF(A)]) [COORD(A)] (chempuff: [D.reagents.log_list()])")
|
||||
var/wait_step = max(round(2+ spray_delay * INVERSE(range)), 2)
|
||||
last_spray = world.time
|
||||
INVOKE_ASYNC(src, .proc/do_spray, A, wait_step, D, range, puff_reagent_left)
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
to_chat(user, "<span class='warning'>You cannot directly remove reagents from [target]!</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, log = TRUE) // transfer from, transfer to - who cares?
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.</span>")
|
||||
if (round(reagents.total_volume, 0.1) >= reagents.maximum_volume)
|
||||
@@ -158,7 +158,7 @@
|
||||
L.log_message("injected themselves ([contained]) with [src.name]", LOG_ATTACK, color="orange")
|
||||
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
|
||||
reagents.reaction(L, INJECT, fraction)
|
||||
reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
reagents.trans_to(target, amount_per_transfer_from_this, log = TRUE)
|
||||
to_chat(user, "<span class='notice'>You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.</span>")
|
||||
if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
|
||||
mode = SYRINGE_DRAW
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel))
|
||||
to_chat(user, "<span class='warning'>Your [W.name] is already full!</span>")
|
||||
return
|
||||
reagents.trans_to(W, W.max_fuel)
|
||||
reagents.trans_to(W, W.max_fuel, log = TRUE)
|
||||
user.visible_message("<span class='notice'>[user] refills [user.p_their()] [W.name].</span>", "<span class='notice'>You refill [W].</span>")
|
||||
playsound(src, 'sound/effects/refill.ogg', 50, 1)
|
||||
W.update_icon()
|
||||
|
||||
@@ -74,12 +74,12 @@
|
||||
build_path = /obj/item/restraints/handcuffs
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/rifle_receiver
|
||||
name = "Rifle Receiver"
|
||||
id = "rifle_receiver"
|
||||
/datum/design/reciever
|
||||
name = "Modular Receiver"
|
||||
id = "modular_receiver"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/iron = 24000)
|
||||
build_path = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
|
||||
build_path = /obj/item/weaponcrafting/receiver
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/shotgun_slug
|
||||
|
||||
@@ -282,10 +282,3 @@
|
||||
build_path = /obj/item/vending_refill/custom
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/trigger_assembly
|
||||
name = "Trigger Assembly"
|
||||
id = "trigger_assembly"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/iron = 6500, /datum/material/glass = 50)
|
||||
build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
|
||||
category = list("initial", "Misc")
|
||||
|
||||
@@ -161,3 +161,11 @@
|
||||
build_path = /obj/item/circuitboard/machine/circuit_imprinter
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/explosive_compressor
|
||||
name = "Explosive Compressor (Machine Board)"
|
||||
desc = "The circuit board for an explosive compressor, used to compress raw into finished anomaly cores."
|
||||
id = "explosive_compressor"
|
||||
build_path = /obj/item/circuitboard/machine/explosive_compressor
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
|
||||
build_path = /obj/item/disk/medical/defib_heal
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_shock
|
||||
@@ -319,7 +319,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
|
||||
build_path = /obj/item/disk/medical/defib_shock
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_decay
|
||||
@@ -330,7 +330,7 @@
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 16000, /datum/material/silver = 6000, /datum/material/titanium = 2000)
|
||||
build_path = /obj/item/disk/medical/defib_decay
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defib_speed
|
||||
@@ -341,7 +341,7 @@
|
||||
build_path = /obj/item/disk/medical/defib_speed
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 8000, /datum/material/gold = 26000, /datum/material/silver = 26000)
|
||||
construction_time = 10
|
||||
category = list("Misc")
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator_compact
|
||||
@@ -637,20 +637,20 @@
|
||||
name = "Cybernetic Liver"
|
||||
desc = "A cybernetic liver"
|
||||
id = "cybernetic_liver"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/liver/cybernetic
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_heart
|
||||
name = "Cybernetic Heart"
|
||||
desc = "A cybernetic heart"
|
||||
id = "cybernetic_heart"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/heart/cybernetic
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_heart_u
|
||||
@@ -668,40 +668,40 @@
|
||||
name = "Upgraded Cybernetic Liver"
|
||||
desc = "An upgraded cybernetic liver"
|
||||
id = "cybernetic_liver_u"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/liver/cybernetic/upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_lungs
|
||||
name = "Cybernetic Lungs"
|
||||
desc = "A pair of cybernetic lungs."
|
||||
id = "cybernetic_lungs"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/lungs/cybernetic
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_lungs_u
|
||||
name = "Upgraded Cybernetic Lungs"
|
||||
desc = "A pair of upgraded cybernetic lungs."
|
||||
id = "cybernetic_lungs_u"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 500)
|
||||
build_path = /obj/item/organ/lungs/cybernetic/upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_tongue
|
||||
name = "Cybernetic tongue"
|
||||
desc = "A fancy cybernetic tongue."
|
||||
id = "cybernetic_tongue"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/tongue/cybernetic
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_ears
|
||||
@@ -925,88 +925,88 @@
|
||||
name = "Surplus prosthetic left arm"
|
||||
desc = "Basic outdated and fragile prosthetic left arm."
|
||||
id = "basic_l_arm"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500)
|
||||
construction_time = 20
|
||||
build_path = /obj/item/bodypart/l_arm/robot/surplus
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/basic_r_arm
|
||||
name = "Surplus prosthetic right arm"
|
||||
desc = "Basic outdated and fragile prosthetic left arm."
|
||||
id = "basic_r_arm"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500)
|
||||
construction_time = 20
|
||||
build_path = /obj/item/bodypart/r_arm/robot/surplus
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/basic_l_leg
|
||||
name = "Surplus prosthetic left leg"
|
||||
desc = "Basic outdated and fragile prosthetic left leg."
|
||||
id = "basic_l_leg"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500)
|
||||
construction_time = 20
|
||||
build_path = /obj/item/bodypart/l_leg/robot/surplus
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/basic_r_leg
|
||||
name = "Surplus prosthetic right leg"
|
||||
desc = "Basic outdated and fragile prosthetic right leg."
|
||||
id = "basic_r_leg"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500)
|
||||
construction_time = 20
|
||||
build_path = /obj/item/bodypart/r_leg/robot/surplus
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/adv_r_leg
|
||||
name = "Advanced prosthetic right leg"
|
||||
desc = "A renforced prosthetic right leg."
|
||||
id = "adv_r_leg"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 3500, /datum/material/gold = 500, /datum/material/titanium = 800)
|
||||
construction_time = 40
|
||||
build_path = /obj/item/bodypart/r_leg/robot/surplus_upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/adv_l_leg
|
||||
name = "Advanced prosthetic left leg"
|
||||
desc = "A renforced prosthetic left leg."
|
||||
id = "adv_l_leg"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 3500, /datum/material/gold = 500, /datum/material/titanium = 800)
|
||||
construction_time = 40
|
||||
build_path = /obj/item/bodypart/l_leg/robot/surplus_upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/adv_l_arm
|
||||
name = "Advanced prosthetic left arm"
|
||||
desc = "A renforced prosthetic left arm."
|
||||
id = "adv_l_arm"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 3500, /datum/material/gold = 500, /datum/material/titanium = 800)
|
||||
construction_time = 40
|
||||
build_path = /obj/item/bodypart/l_arm/robot/surplus_upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/adv_r_arm
|
||||
name = "Advanced prosthetic right arm"
|
||||
desc = "A renforced prosthetic right arm."
|
||||
id = "adv_r_arm"
|
||||
build_type = PROTOLATHE
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 3500, /datum/material/gold = 500, /datum/material/titanium = 800)
|
||||
construction_time = 40
|
||||
build_path = /obj/item/bodypart/r_arm/robot/surplus_upgraded
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
|
||||
@@ -481,7 +481,7 @@
|
||||
build_path = /obj/item/holosign_creator/atmos
|
||||
category = list("Tool Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/*
|
||||
/datum/design/holosignfirelock
|
||||
name = "ATMOS Holofirelock Projector"
|
||||
desc = "A holographic projector that creates holographic barriers that prevent changes in temperature conditions."
|
||||
@@ -491,7 +491,7 @@
|
||||
build_path = /obj/item/holosign_creator/firelock
|
||||
category = list("Tool Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
*/
|
||||
/datum/design/holosigncombifan
|
||||
name = "ATMOS Holo-Combifan Projector"
|
||||
desc = "A holographic projector that creates holographic barriers that prevent changes in atmospheric and temperature conditions."
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
display_name = "Anomaly Research"
|
||||
description = "Unlock the potential of the mysterious anomalies that appear on station."
|
||||
prereq_ids = list("adv_engi", "practical_bluespace")
|
||||
design_ids = list("reactive_armour", "anomaly_neutralizer")
|
||||
design_ids = list("reactive_armour", "anomaly_neutralizer", "explosive_compressor")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
|
||||
|
||||
/datum/techweb_node/high_efficiency
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
display_name = "Electromagnetic Theory"
|
||||
description = "Study into usage of frequencies in the electromagnetic spectrum."
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("holosign", "holosignsec", "holosignengi", "holosignatmos", "holosignfirelock", "inducer", "tray_goggles", "holopad")
|
||||
design_ids = list("holosign", "holosignsec", "holosignengi", "holosignatmos",/* "holosignfirelock",*/ "inducer", "tray_goggles", "holopad")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
|
||||
/datum/techweb_node/emp_adv
|
||||
@@ -75,15 +75,14 @@
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("sticky_tape")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
starting_node = TRUE
|
||||
|
||||
// Can be researched after getting the basic sticky technology from the BEPIS major reward
|
||||
// now a BEPIS locked thing
|
||||
/datum/techweb_node/sticky_advanced
|
||||
id = "sticky_advanced"
|
||||
display_name = "Advanced Sticky Technology"
|
||||
description = "Taking a good joke too far? Nonsense!"
|
||||
prereq_ids = list("sticky_basic")
|
||||
design_ids = list("super_sticky_tape", "pointy_tape")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
hidden = TRUE
|
||||
experimental = TRUE
|
||||
|
||||
@@ -884,6 +884,7 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
/datum/status_effect/stabilized/oil/tick()
|
||||
if(owner.stat == DEAD)
|
||||
explosion(get_turf(owner),1,2,4,flame_range = 5)
|
||||
owner.remove_status_effect(/datum/status_effect/stabilized/oil)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/black
|
||||
|
||||
@@ -136,10 +136,13 @@
|
||||
return
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
|
||||
"<span class='boldannounce'>[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't.</span>")
|
||||
if(!(NOTRANSSTING in H.dna.species.species_traits))
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
|
||||
"<span class='boldannounce'>[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You are unable to transform into [H]!</span>")
|
||||
|
||||
39
code/modules/spells/spell_types/togglebuff.dm
Normal file
39
code/modules/spells/spell_types/togglebuff.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/obj/effect/proc_holder/spell/self/mantra
|
||||
name = "Inner Mantra"
|
||||
desc = "Control your Inner Mantra, gaining strength and durability for a cost."
|
||||
clothes_req = NONE
|
||||
mobs_whitelist = list(/mob/living/carbon/human)
|
||||
charge_max = 100
|
||||
antimagic_allowed = TRUE
|
||||
invocation = "SU'UP'AH S'EI YEN"
|
||||
invocation_type = "shout"
|
||||
level_max = 0
|
||||
cooldown_min = 100
|
||||
action_icon = 'icons/obj/magic.dmi'
|
||||
action_icon_state = "iconmantra"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/mantra/cast(mob/living/carbon/human/user)
|
||||
if(user.has_status_effect(STATUS_EFFECT_MANTRA))
|
||||
user.remove_status_effect(STATUS_EFFECT_MANTRA)
|
||||
else
|
||||
user.apply_status_effect(STATUS_EFFECT_MANTRA)
|
||||
|
||||
/obj/effect/proc_holder/spell/self/asura
|
||||
name = "Asura's Wrath"
|
||||
desc = "Unleash your rage as corrosive power fills your muscles."
|
||||
clothes_req = NONE
|
||||
mobs_whitelist = list(/mob/living/carbon/human)
|
||||
charge_max = 100
|
||||
antimagic_allowed = TRUE
|
||||
invocation = "KYE Y'O'KEN"
|
||||
invocation_type = "shout"
|
||||
level_max = 0
|
||||
cooldown_min = 100
|
||||
action_icon = 'icons/obj/magic.dmi'
|
||||
action_icon_state = "iconasura"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/asura/cast(mob/living/carbon/human/user)
|
||||
if(user.has_status_effect(STATUS_EFFECT_ASURA))
|
||||
user.remove_status_effect(STATUS_EFFECT_ASURA)
|
||||
else
|
||||
user.apply_status_effect(STATUS_EFFECT_ASURA)
|
||||
@@ -36,6 +36,6 @@
|
||||
log_combat(owner, null, "swallowed an implanted pill", target)
|
||||
if(target.reagents.total_volume)
|
||||
target.reagents.reaction(owner, INGEST)
|
||||
target.reagents.trans_to(owner, target.reagents.total_volume)
|
||||
target.reagents.trans_to(owner, target.reagents.total_volume, log = TRUE)
|
||||
qdel(target)
|
||||
return 1
|
||||
|
||||
62
code/modules/surgery/emergency_reboot.dm
Normal file
62
code/modules/surgery/emergency_reboot.dm
Normal file
@@ -0,0 +1,62 @@
|
||||
//Emergency Reboot: A surgery that allows for revival of Synthetics without the need for a defib. Doesn't all all the organs like the Revival surgery though.
|
||||
|
||||
/datum/surgery/emergency_reboot
|
||||
name = "Emergency Reboot"
|
||||
desc = "A surgery forcing the posibrain of a robot to begin it's reboot procedure, if their body can sustain its operation."
|
||||
possible_locs = list(BODY_ZONE_HEAD)
|
||||
requires_bodypart_type = BODYPART_ROBOTIC //If you are a Synth with a organic head (somehow), this won't work.
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/open_hatch, /datum/surgery_step/mechanic_unwrench, /datum/surgery_step/force_reboot, /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close)
|
||||
|
||||
/datum/surgery/emergency_reboot/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(target.stat != DEAD)
|
||||
return FALSE
|
||||
if(target.suiciding || HAS_TRAIT(target, TRAIT_NOCLONE) || target.hellbound)
|
||||
return FALSE
|
||||
if(!HAS_TRAIT(target, TRAIT_ROBOTIC_ORGANISM))
|
||||
return FALSE
|
||||
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B || !istype(B, /obj/item/organ/brain/ipc))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/force_reboot
|
||||
name = "initiate system reboot"
|
||||
implements = list(TOOL_MULTITOOL = 100, /obj/item/borg/upgrade/restart = 100)
|
||||
time = 100
|
||||
|
||||
/datum/surgery_step/force_reboot/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You prepare to begin rebooting [target]'s posibrain.</span>",
|
||||
"[user] prepares to reboot [target]'s posibrain with [tool].",
|
||||
"[user] prepares to reboot [target]'s posibrain with [tool].")
|
||||
target.notify_ghost_cloning("Someone is trying to reboot you! Re-enter your corpse if you want to be revived!", source = target)
|
||||
|
||||
/datum/surgery_step/force_reboot/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You successfully initiate a reboot in [target]'s posibrain...</span>",
|
||||
"[user] initiates a reboot in [target]'s posibrain...",
|
||||
"[user] initiates a reboot in [target]'s posibrain...")
|
||||
target.adjustOxyLoss(-50, 0)
|
||||
target.updatehealth()
|
||||
var/tplus = world.time - target.timeofdeath
|
||||
if(target.revive())
|
||||
target.visible_message("...[target]'s posibrain flickers to life once again!")
|
||||
target.emote("ping")
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
if(policy)
|
||||
to_chat(target, policy)
|
||||
target.log_message("revived using surgical revival, [tplus] deciseconds from time of death, considered [late? "late" : "memory-intact"] revival under configured policy limits.", LOG_GAME)
|
||||
return TRUE
|
||||
else
|
||||
target.visible_message("...[target]'s posibrain flickers a few times, before the lights fade yet again...")
|
||||
return FALSE
|
||||
|
||||
/datum/surgery_step/force_reboot/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You attempt to reboot [target]'s posibrain, but [target.p_they()] doesn't react.</span>",
|
||||
"[user] attempts to reboot [target]'s posibrain, but [target.p_they()] doesn't react.",
|
||||
"[user] attempts to reboot [target]'s posibrain, but [target.p_they()] doesn't react")
|
||||
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 199)
|
||||
return FALSE
|
||||
@@ -31,6 +31,12 @@
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
requires_real_bodypart = TRUE
|
||||
|
||||
//The augmentation surgery for synthetic limbs
|
||||
/datum/surgery/augmentation/synth
|
||||
requires_bodypart_type = BODYPART_HYBRID
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/pry_off_plating, /datum/surgery_step/cut_wires, /datum/surgery_step/prepare_electronics, /datum/surgery_step/replace_limb)
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
|
||||
if(L)
|
||||
|
||||
@@ -114,7 +114,7 @@ obj/item/organ/heart/slime
|
||||
var/last_pump = 0
|
||||
var/add_colour = TRUE //So we're not constantly recreating colour datums
|
||||
var/pump_delay = 30 //you can pump 1 second early, for lag, but no more (otherwise you could spam heal)
|
||||
var/blood_loss = 100 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
|
||||
var/blood_loss = 50 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
|
||||
|
||||
//How much to heal per pump, negative numbers would HURT the player
|
||||
var/heal_brute = 0
|
||||
@@ -123,7 +123,11 @@ obj/item/organ/heart/slime
|
||||
|
||||
|
||||
/obj/item/organ/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
|
||||
|
||||
if(H == user && istype(H))
|
||||
if(NOBLOOD in H.dna.species.species_traits)
|
||||
to_chat(user, "<span class='danger'>[src] refuses to become one with [H]")
|
||||
return
|
||||
playsound(user,'sound/effects/singlebeat.ogg',40,1)
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
Insert(user)
|
||||
@@ -137,6 +141,8 @@ obj/item/organ/heart/slime
|
||||
if(world.time > (last_pump + pump_delay))
|
||||
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(NOBLOOD in H.dna.species.species_traits) //Otherwise people without will be eternally stuck red
|
||||
return
|
||||
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
|
||||
H.blood_volume = max(H.blood_volume - blood_loss, 0)
|
||||
to_chat(H, "<span class = 'userdanger'>You have to keep pumping your blood!</span>")
|
||||
@@ -156,6 +162,8 @@ obj/item/organ/heart/slime
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/organ_action/cursed_heart
|
||||
check_flags = AB_CHECK_ALIVE //We wanna be able to do this always, else thisll just stupidly kill whoever has it
|
||||
required_mobility_flags = NONE
|
||||
name = "Pump your blood"
|
||||
|
||||
//You are now brea- pumping blood manually
|
||||
@@ -175,7 +183,8 @@ obj/item/organ/heart/slime
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H))
|
||||
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
|
||||
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_MAXIMUM)
|
||||
if(H.blood_volume < BLOOD_VOLUME_NORMAL) //We don't need to go too high, otherwise we get annoying messages.
|
||||
H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_MAXIMUM)
|
||||
H.remove_client_colour(/datum/client_colour/cursed_heart_blood)
|
||||
cursed_heart.add_colour = TRUE
|
||||
H.adjustBruteLoss(-cursed_heart.heal_brute)
|
||||
@@ -184,7 +193,7 @@ obj/item/organ/heart/slime
|
||||
|
||||
|
||||
/datum/client_colour/cursed_heart_blood
|
||||
priority = 100 //it's an indicator you're dieing, so it's very high priority
|
||||
priority = 100 //it's an indicator you're dying, so it's very high priority
|
||||
colour = "red"
|
||||
|
||||
/obj/item/organ/heart/cybernetic
|
||||
|
||||
@@ -2,11 +2,17 @@
|
||||
name = "removal of embedded objects"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/remove_object)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
|
||||
/datum/surgery/embedded_removal/robot
|
||||
requires_bodypart_type = BODYPART_ROBOTIC
|
||||
steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/open_hatch, /datum/surgery_step/remove_object)
|
||||
|
||||
/datum/surgery_step/remove_object
|
||||
name = "remove embedded objects"
|
||||
time = 32
|
||||
accept_hand = 1
|
||||
var/obj/item/bodypart/L = null
|
||||
|
||||
/datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
L = surgery.operated_bodypart
|
||||
if(L)
|
||||
|
||||
@@ -250,3 +250,11 @@
|
||||
cost = 2
|
||||
item = /obj/item/clothing/shoes/magboots/crushing
|
||||
restricted_roles = list("Chief Engineer", "Station Engineer", "Atmospheric Technician")
|
||||
|
||||
/datum/uplink_item/role_restricted/turretbox
|
||||
name = "Disposable Sentry Gun"
|
||||
desc = "A disposable sentry gun deployment system cleverly disguised as a toolbox, apply wrench for functionality."
|
||||
item = /obj/item/storage/toolbox/emergency/turret
|
||||
cost = 11
|
||||
restricted_roles = list("Station Engineer")
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
|
||||
/obj/vehicle/sealed/car/clowncar/twitch_plays
|
||||
key_type = null
|
||||
explode_on_death = FALSE
|
||||
|
||||
/obj/vehicle/sealed/car/clowncar/twitch_plays/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/vehicle/sealed
|
||||
enclosed = TRUE // you're in a sealed vehicle dont get dinked idiot
|
||||
var/enter_delay = 20
|
||||
var/explode_on_death = TRUE
|
||||
flags_1 = BLOCK_FACE_ATOM_1
|
||||
|
||||
/obj/vehicle/sealed/generate_actions()
|
||||
@@ -87,7 +88,8 @@
|
||||
|
||||
/obj/vehicle/sealed/Destroy()
|
||||
DumpMobs()
|
||||
explosion(loc, 0, 1, 2, 3, 0)
|
||||
if(explode_on_death)
|
||||
explosion(loc, 0, 1, 2, 3, 0)
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/sealed/proc/DumpMobs(randomstep = TRUE)
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
|
||||
vend_reply = "Thank you for using the SecDrobe!"
|
||||
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 2,
|
||||
/obj/item/storage/backpack/security = 2,
|
||||
/obj/item/storage/backpack/satchel/sec = 2,
|
||||
/obj/item/storage/backpack/security = 3,
|
||||
/obj/item/storage/backpack/satchel/sec = 3,
|
||||
/obj/item/storage/backpack/duffelbag/sec = 3,
|
||||
/obj/item/clothing/under/rank/security/officer = 5,
|
||||
/obj/item/clothing/shoes/jackboots = 5,
|
||||
@@ -88,9 +88,9 @@
|
||||
vend_reply = "Thank you for using the MediDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/clothing/head/beret/med = 5,
|
||||
/obj/item/storage/backpack/duffelbag/med = 5,
|
||||
/obj/item/storage/backpack/medic = 5,
|
||||
/obj/item/storage/backpack/satchel/med = 5,
|
||||
/obj/item/storage/backpack/duffelbag/med = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/medical = 5,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/paramedic = 2,
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse = 5,
|
||||
@@ -131,9 +131,9 @@
|
||||
vend_reply = "Thank you for using the EngiDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
|
||||
/obj/item/clothing/head/beret/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
|
||||
/obj/item/clothing/under/rank/engineering/engineer = 5,
|
||||
/obj/item/clothing/under/rank/engineering/engineer/skirt = 5,
|
||||
@@ -162,9 +162,9 @@
|
||||
vend_reply = "Thank you for using the AtmosDrobe!"
|
||||
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
|
||||
/obj/item/clothing/head/beret/atmos = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/industrial = 3,
|
||||
/obj/item/storage/backpack/satchel/eng = 3,
|
||||
/obj/item/storage/backpack/duffelbag/engineering = 3,
|
||||
/obj/item/clothing/head/hardhat/weldhat/dblue = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3,
|
||||
/obj/item/clothing/under/rank/engineering/atmospheric_technician = 5,
|
||||
@@ -238,6 +238,7 @@
|
||||
/obj/item/clothing/head/beret/sci = 3,
|
||||
/obj/item/storage/backpack/science = 3,
|
||||
/obj/item/storage/backpack/satchel/tox = 3,
|
||||
/obj/item/storage/backpack/duffelbag = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
|
||||
/obj/item/clothing/under/rank/rnd/scientist = 4,
|
||||
/obj/item/clothing/under/rank/rnd/scientist/util = 4,
|
||||
@@ -261,7 +262,9 @@
|
||||
product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!"
|
||||
vend_reply = "Thank you for using the Hydrobe!"
|
||||
products = list(/obj/item/storage/backpack/botany = 3,
|
||||
/obj/item/storage/backpack = 3,
|
||||
/obj/item/storage/backpack/satchel/hyd = 3,
|
||||
/obj/item/storage/backpack/duffelbag = 3,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro = 2,
|
||||
/obj/item/clothing/suit/apron = 3,
|
||||
/obj/item/clothing/suit/apron/overalls = 5,
|
||||
@@ -468,7 +471,7 @@
|
||||
/obj/item/storage/backpack/chemistry = 3,
|
||||
/obj/item/storage/backpack/satchel/chem = 3,
|
||||
/obj/item/storage/bag/chemistry = 3,
|
||||
/obj/item/fermichem/pHbooklet = 3)//pH indicator)
|
||||
/obj/item/fermichem/pHbooklet = 3)
|
||||
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
|
||||
payment_department = ACCOUNT_MED
|
||||
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
|
||||
|
||||
Reference in New Issue
Block a user