Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into Drill

This commit is contained in:
warior4356
2018-11-08 01:58:53 -08:00
182 changed files with 3485 additions and 943 deletions
+2 -2
View File
@@ -1540,13 +1540,13 @@
var/helptype = "ADMINHELP"
if(is_mhelp)
helptype = "MENTORHELP"
var/take_msg = "<span class='notice'><b>[helptype]</b>: <b>[key_name(usr.client)]</b> is attending to <b>[key_name(M)]'s</b> question.</span>"
var/take_msg = "<span class='notice'><b>[helptype]</b>: <b>[key_name_hidden(usr.client)]</b> is attending to <b>[key_name(M)]'s</b> question.</span>"
for(var/client/X in GLOB.admins)
if(check_rights(R_ADMIN, 0, X.mob))
to_chat(X, take_msg)
else if(is_mhelp && check_rights(R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, take_msg)
to_chat(M, "<span class='notice'><b>Your question is being attended to by [key_name(usr.client, null, 0)]. Thanks for your patience!</b></span>")
to_chat(M, "<span class='notice'><b>Your question is being attended to by [key_name_hidden(usr.client, null, 0)]. Thanks for your patience!</b></span>")
else
to_chat(usr, "<span class='warning'>Unable to locate mob.</span>")
-2
View File
@@ -104,7 +104,6 @@ var/global/list/frozen_mob_list = list()
M.can_move = 0
M.overlays += adminomaly
if(M.occupant)
M.removeVerb(/obj/mecha/verb/eject)
to_chat(M.occupant, "<b><font color= red>You have been frozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
message_admins("<span class='notice'>[key_name_admin(usr)] froze [key_name(M.occupant)] in a [M.name]</span>")
log_admin("[key_name(usr)] froze [key_name(M.occupant)] in a [M.name]")
@@ -115,7 +114,6 @@ var/global/list/frozen_mob_list = list()
M.can_move = 1
M.overlays -= adminomaly
if(M.occupant)
M.addVerb(/obj/mecha/verb/eject)
to_chat(M.occupant, "<b><font color= red>You have been unfrozen by <a href='?priv_msg=[usr.client.UID()]'>[key]</a></b></font>")
message_admins("<span class='notice'>[key_name_admin(usr)] unfroze [key_name(M.occupant)] in a [M.name]</span>")
log_admin("[key_name(usr)] unfroze [key_name(M.occupant)] in a [M.name]")
+1 -1
View File
@@ -35,7 +35,7 @@ client/proc/one_click_antag()
if((M.mind.assigned_role in temp.restricted_jobs) || (M.client.prefs.species in temp.protected_species))
return FALSE
if(role) // Don't even bother evaluating if there's no role
if(player_old_enough_antag(M.client,role) && (role in M.client.prefs.be_special) && (!jobban_isbanned(M, role)))
if(player_old_enough_antag(M.client,role) && (role in M.client.prefs.be_special) && !M.client.skip_antag && (!jobban_isbanned(M, role)))
return TRUE
else
return FALSE
+2 -2
View File
@@ -646,8 +646,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/atom/A = D
var/coords = istype(A) ? "at ([A.x], [A.y], [A.z])" : ""
if(alert(src, "Are you sure you want to delete:\n[D]\n[coords]?", "Confirmation", "Yes", "No") == "Yes")
log_admin("[key_name(usr)] deleted [D][coords]")
message_admins("[key_name_admin(usr)] deleted [D][coords]", 1)
log_admin("[key_name(usr)] deleted [D] [coords]")
message_admins("[key_name_admin(usr)] deleted [D] [coords]", 1)
feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
if(isturf(D))
var/turf/T = D
+1 -1
View File
@@ -79,7 +79,7 @@ var/global/datum/prizes/global_prizes = new
/datum/prize_item/cards
name = "Deck of Cards"
desc = "Anyone fancy a game of 52-card Pickup?"
typepath = /obj/item/toy/cards/deck
typepath = /obj/item/deck/cards
cost = 25
/datum/prize_item/crayons
+10 -7
View File
@@ -6,6 +6,8 @@
/obj/effect/mob_spawn
name = "Unknown"
density = TRUE
anchored = TRUE
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
var/mob_type = null
@@ -26,13 +28,12 @@
var/datum/disease/disease = null //Do they start with a pre-spawned disease?
var/mob_color //Change the mob's color
var/assignedrole
density = TRUE
anchored = TRUE
var/banType = "lavaland"
var/ghost_usable = TRUE
/obj/effect/mob_spawn/attack_ghost(mob/user)
if(ticker.current_state != GAME_STATE_PLAYING || !loc)
if(ticker.current_state != GAME_STATE_PLAYING || !loc || !ghost_usable)
return
if(!uses)
to_chat(user, "<span class='warning'>This spawner is out of charges!</span>")
@@ -40,6 +41,8 @@
if(jobban_isbanned(user, banType))
to_chat(user, "<span class='warning'>You are jobanned!</span>")
return
if(QDELETED(src) || QDELETED(user))
return
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
if(ghost_role == "No" || !loc)
return
@@ -50,7 +53,7 @@
. = ..()
if(instant || roundstart) //at some point we should probably re-introduce the (ticker && ticker.current_state > GAME_STATE_SETTING_UP) portion of this check, but for now it was preventing the corpses from spawning at roundstart and resulting in ghost role spawners that made dead bodies.
create()
else
else if(ghost_usable)
GLOB.poi_list |= src
LAZYADD(GLOB.mob_spawners[name], src)
@@ -305,7 +308,7 @@
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
flavour_text = "You are a space doctor!"
flavour_text = "<span class='big bold'>You are a space doctor!</span>"
assignedrole = "Space Doctor"
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
@@ -436,7 +439,7 @@
name = "bartender sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
flavour_text = "You are a space bartender!"
flavour_text = "<span class='big bold'>You are a space bartender!</span><b> Time to mix drinks and change lives.</b>"
assignedrole = "Space Bartender"
/datum/outfit/spacebartender
@@ -556,4 +559,4 @@
back = /obj/item/storage/backpack
shoes = /obj/item/clothing/shoes/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
glasses = /obj/item/clothing/glasses/sunglasses/reagent
@@ -0,0 +1,475 @@
// items
/obj/item/storage/firstaid/ancient
icon_state = "firstaid"
desc = "A first aid kit with the ability to heal common types of injuries."
/obj/item/storage/firstaid/ancient/New()
..()
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/ointment(src)
/obj/item/card/id/away/old
name = "A perfectly retrograde identification card"
desc = "A perfectly retrograde identification card. Looks like it could use some flavor."
icon = 'icons/obj/card.dmi'
icon_state = "retro"
access = list(access_away01)
/obj/item/card/id/away/old/sec
name = "Security Officer ID"
desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the Security Dept."
icon_state = "retro_security"
/obj/item/card/id/away/old/sci
name = "Scientist ID"
desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the Science Dept."
icon_state = "retro_research"
/obj/item/card/id/away/old/med
name = "Medical ID"
desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the Medical Dept."
icon_state = "retro_medical"
/obj/item/card/id/away/old/eng
name = "Engineer ID"
desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the Engineering Dept."
icon_state = "retro_engineering"
/obj/item/card/id/away/old/apc
name = "APC Access ID"
desc = "A special ID card that allows access to APC terminals."
icon_state = "centcom_old"
access = list(access_engine_equip)
/obj/item/storage/backpack/old
max_combined_w_class = 12
// Equipment
/obj/item/clothing/head/helmet/space/nasavoid/old
name = "Engineering Void Helmet"
desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done."
icon_state = "void-red"
item_state = "void"
/obj/item/clothing/suit/space/nasavoid/old
name = "Engineering Voidsuit"
icon_state = "void-red"
item_state = "void"
desc = "A CentCom engineering dark red space suit. Age has degraded the suit making is difficult to move around in."
slowdown = 4
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/multitool)
/obj/item/clothing/head/helmet/old
name = "degrading helmet"
desc = "Standard issue security helmet. Due to degradation the helmet's visor obstructs the users ability to see long distances."
tint = 2
/obj/item/clothing/suit/armor/vest/old
name = "degrading armor vest"
desc = "Older generation Type 1 armored vest. Due to degradation over time the vest is far less maneuverable to move in."
icon_state = "armor"
item_state = "armor"
slowdown = 1
/obj/item/gun/energy/laser/retro/old
name ="laser gun"
icon_state = "retro"
desc = "First generation lasergun, developed by Nanotrasen. Suffers from ammo issues but its unique ability to recharge its ammo without the need of a magazine helps compensate. You really hope someone has developed a better lasergun while you were in cryo."
ammo_type = list(/obj/item/ammo_casing/energy/lasergun/old)
ammo_x_offset = 3
/obj/item/ammo_casing/energy/lasergun/old
projectile_type = /obj/item/projectile/beam/laser
e_cost = 200
select_name = "kill"
/obj/item/gun/energy/e_gun/old
name = "prototype energy gun"
desc = "NT-P:01 Prototype Energy Gun. Early stage development of a unique laser rifle that has multifaceted energy lens allowing the gun to alter the form of projectile it fires on command."
icon_state = "protolaser"
ammo_x_offset = 2
ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/electrode/old)
/obj/item/ammo_casing/energy/electrode/old
e_cost = 1000
// Papers
/obj/item/paper/fluff/ruins/oldstation
name = "Cryo Awakening Alert"
info = "<B>**WARNING**</B><BR><BR>Catastrophic damage sustained to station. Powernet exhausted to reawaken crew.<BR><BR>Immediate Objectives<br><br>1: Activate emergency power generator<br>2: Lift station lockdown on the bridge<br><br>Please locate the 'Damage Report' on the bridge for a detailed situation report."
/obj/item/paper/fluff/ruins/oldstation/damagereport
name = "Damage Report"
info = "<b>*Damage Report*</b><br><br><b>Alpha Station</b> - Destroyed<br><br><b>Beta Station</b> - Catastrophic Damage. Medical, destroyed. Atmospherics, partially destroyed. Engine Core, destroyed.<br><br><b>Charlie Station</b> - Intact. Loss of oxygen to eastern side of main corridor.<br><br><b>Delta Station</b> - Intact. <b>WARNING</b>: Unknown force occupying Delta Station. Intent unknown. Species unknown. Numbers unknown.<br><br>Recommendation - Reestablish station powernet via solar array. Reestablish station atmospherics system to restore air."
/obj/item/paper/fluff/ruins/oldstation/protosuit
name = "B01-RIG Hardsuit Report"
info = "<b>*Prototype Hardsuit*</b><br><br>The B01-RIG Hardsuit is a prototype powered exoskeleton. Based off of a recovered pre-void war era united Earth government powered military \
exosuit, the RIG Hardsuit is a breakthrough in Hardsuit technology, and is the first post-void war era Hardsuit that can be safely used by an operator.<br><br>The B01 however suffers \
a myriad of constraints. It is slow and bulky to move around, it lacks any significant armor plating against direct attacks and its internal heads up display is unfinished, \
resulting in the user being unable to see long distances.<br><br>The B01 is unlikely to see any form of mass production, but will serve as a base for future Hardsuit developments."
/obj/item/paper/fluff/ruins/oldstation/protohealth
name = "Health Analyser Report"
info = "<b>*Health Analyser*</b><br><br>The portable Health Analyser is essentially a handheld variant of a health analyser. Years of research have concluded with this device which is \
capable of diagnosing even the most critical, obscure or technical injuries any humanoid entity is suffering in an easy to understand format that even a non-trained health professional \
can understand.<br><br>The health analyser is expected to go into full production as standard issue medical kit."
/obj/item/paper/fluff/ruins/oldstation/protogun
name = "K14 Energy Gun Report"
info = "<b>*K14-Multiphase Energy Gun*</b><br><br>The K14 Prototype Energy Gun is the first Energy Rifle that has been successfully been able to not only hold a larger ammo charge \
than other gun models, but is capable of swapping between different energy projectile types on command with no incidents.<br><br>The weapon still suffers several drawbacks, its alternative, \
non laser fire mode, can only fire one round before exhausting the energy cell, the weapon also remains prohibitively expensive, nonetheless NT Market Research fully believe this weapon \
will form the backbone of our Energy weapon catalogue.<br><br>The K14 is expected to undergo revision to fix the ammo issues, the K15 is expected to replace the 'stun' setting with a \
'disable' setting in an attempt to bypass the ammo issues."
/obj/item/paper/fluff/ruins/oldstation/protosing
name = "Singularity Generator"
info = "<b>*Singularity Generator*</b><br><br>Modern power generation typically comes in two forms, a Fusion Generator or a Fission Generator. Fusion provides the best space to power \
ratio, and is typically seen on military or high security ships and stations, however Fission reactors require the usage of expensive, and rare, materials in its construction.. Fission generators are massive and bulky, and require a large reserve of uranium to power, however they are extremely cheap to operate and oft need little maintenance once \
operational.<br><br>The Singularity aims to alter this, a functional Singularity is essentially a controlled Black Hole, a Black Hole that generates far more power than Fusion or Fission \
generators can ever hope to produce. "
/obj/item/paper/fluff/ruins/oldstation/protoinv
name = "Laboratory Inventory"
info = "<b>*Inventory*</b><br><br>(1) Prototype Hardsuit<br><br>(1)Health Analyser<br><br>(1)Prototype Energy Gun<br><br>(1)Singularity Generation Disk<br><br><b>DO NOT REMOVE WITHOUT \
THE CAPTAIN AND RESEARCH DIRECTOR'S AUTHORISATION</b>"
/obj/item/paper/fluff/ruins/oldstation/report
name = "Crew Reawakening Report"
info = "Artificial Program's report to surviving crewmembers.<br><br>Crew were placed into cryostasis on March 10th, 2445.<br><br>Crew were awoken from cryostasis around June, 2557.<br><br> \
<b>SIGNIFICANT EVENTS OF NOTE</b><br>1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radiation detectors showed no residual \
radiation on station. Deduction, primarily detector was malfunctioning and was producing a radiation signal when there was none.<br><br>2: A data burst from a nearby Nanotrasen Space \
Station was received, this data burst contained research data that has been uploaded to our RnD labs.<br><br>3: Unknown invasion force has occupied Delta station."
/obj/item/paper/fluff/ruins/oldstation/generator_manual
name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator manual"
info = "You can barely make out a faded sentence... <br><br> Wrench down the generator on top of a wire node connected to either a SMES input terminal or the power grid."
//Old Prototype Hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/ancient
name = "prototype RIG hardsuit helmet"
desc = "Early prototype RIG hardsuit helmet, designed to quickly shift over a user's head. Design constraints of the helmet mean it has no inbuilt cameras, thus it restricts the users visability."
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
item_color = "ancient"
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/space/hardsuit/ancient
name = "prototype RIG hardsuit"
desc = "Prototype powered RIG hardsuit. Provides excellent protection from the elements of space while being comfortable to move around in, thanks to the powered locomotives. Remains very bulky however."
icon_state = "hardsuit-ancient"
item_state = "anc_hardsuit"
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
slowdown = 3
resistance_flags = FIRE_PROOF
var/footstep = 1
/obj/item/clothing/suit/space/hardsuit/ancient/on_mob_move()
var/mob/living/carbon/human/H = loc
if(!istype(H) || H.wear_suit != src)
return
if(footstep > 1)
playsound(src, 'sound/effects/servostep.ogg', 100, 1)
footstep = 0
else
footstep++
..()
// Chemical bottles
/obj/item/reagent_containers/glass/bottle/aluminum
name = "aluminum bottle"
list_reagents = list("aluminum" = 30)
/obj/item/reagent_containers/glass/bottle/hydrogen
name = "hydrogen bottle"
list_reagents = list("hydrogen" = 30)
/obj/item/reagent_containers/glass/bottle/lithium
name = "lithium bottle"
list_reagents = list("lithium" = 30)
/obj/item/reagent_containers/glass/bottle/carbon
name = "carbon bottle"
list_reagents = list("carbon" = 30)
/obj/item/reagent_containers/glass/bottle/nitrogen
name = "nitrogen bottle"
list_reagents = list("nitrogen" = 30)
/obj/item/reagent_containers/glass/bottle/oxygen
name = "oxygen bottle"
list_reagents = list("oxygen" = 30)
/obj/item/reagent_containers/glass/bottle/fluorine
name = "fluorine bottle"
list_reagents = list("fluorine" = 30)
/obj/item/reagent_containers/glass/bottle/sodium
name = "sodium bottle"
list_reagents = list("sodium" = 30)
/obj/item/reagent_containers/glass/bottle/silicon
name = "silicon bottle"
list_reagents = list("silicon" = 30)
/obj/item/reagent_containers/glass/bottle/phosphorus
name = "phosphorus bottle"
list_reagents = list("phosphorus" = 30)
/obj/item/reagent_containers/glass/bottle/sulfur
name = "sulfur bottle"
list_reagents = list("sulfur" = 30)
/obj/item/reagent_containers/glass/bottle/chlorine
name = "chlorine bottle"
list_reagents = list("chlorine" = 30)
/obj/item/reagent_containers/glass/bottle/potassium
name = "potassium bottle"
list_reagents = list("potassium" = 30)
/obj/item/reagent_containers/glass/bottle/iron
name = "iron bottle"
list_reagents = list("iron" = 30)
/obj/item/reagent_containers/glass/bottle/copper
name = "copper bottle"
list_reagents = list("copper" = 30)
/obj/item/reagent_containers/glass/bottle/mercury
name = "mercury bottle"
list_reagents = list("mercury" = 30)
/obj/item/reagent_containers/glass/bottle/radium
name = "radium bottle"
list_reagents = list("radium" = 30)
/obj/item/reagent_containers/glass/bottle/water
name = "water bottle"
list_reagents = list("water" = 30)
/obj/item/reagent_containers/glass/bottle/ethanol
name = "ethanol bottle"
list_reagents = list("ethanol" = 30)
/obj/item/reagent_containers/glass/bottle/sugar
name = "sugar bottle"
list_reagents = list("sugar" = 30)
/obj/item/reagent_containers/glass/bottle/sacid
name = "sulphuric acid bottle"
list_reagents = list("sacid" = 30)
/obj/item/reagent_containers/glass/bottle/welding_fuel
name = "welding fuel bottle"
list_reagents = list("fuel" = 30)
/obj/item/reagent_containers/glass/bottle/silver
name = "silver bottle"
list_reagents = list("silver" = 30)
/obj/item/reagent_containers/glass/bottle/iodine
name = "iodine bottle"
list_reagents = list("iodine" = 30)
/obj/item/reagent_containers/glass/bottle/bromine
name = "bromine bottle"
list_reagents = list("bromine" = 30)
// Engines
/obj/structure/shuttle/engine/large
name = "engine"
opacity = 1
icon = 'icons/obj/2x2.dmi'
icon_state = "large_engine"
desc = "A very large bluespace engine used to propel very large ships."
bound_width = 64
bound_height = 64
appearance_flags = 0
// areas
//Ruin of ancient Space Station
/area/ruin/space/ancientstation
name = "Charlie Station Main Corridor"
icon_state = "green"
has_gravity = TRUE
/area/ruin/space/ancientstation/powered
name = "Powered Tile"
icon_state = "teleporter"
requires_power = FALSE
/area/ruin/space/ancientstation/space
name = "Exposed To Space"
icon_state = "teleporter"
has_gravity = FALSE
/area/ruin/space/ancientstation/atmo
name = "Beta Station Atmospherics"
icon_state = "red"
has_gravity = FALSE
/area/ruin/space/ancientstation/betanorth
name = "Beta Station North Corridor"
icon_state = "blue"
/area/ruin/space/ancientstation/solar
name = "Station Solar Array"
icon_state = "panelsAP"
/area/ruin/space/ancientstation/engi
name = "Charlie Station Engineering"
icon_state = "engine"
/area/ruin/space/ancientstation/comm
name = "Charlie Station Command"
icon_state = "captain"
/area/ruin/space/ancientstation/hydroponics
name = "Charlie Station Hydroponics"
icon_state = "garden"
/area/ruin/space/ancientstation/kitchen
name = "Charlie Station Kitchen"
icon_state = "kitchen"
/area/ruin/space/ancientstation/sec
name = "Charlie Station Security"
icon_state = "red"
/area/ruin/space/ancientstation/deltacorridor
name = "Delta Station Main Corridor"
icon_state = "green"
/area/ruin/space/ancientstation/proto
name = "Delta Station Prototype Lab"
icon_state = "toxlab"
/area/ruin/space/ancientstation/rnd
name = "Delta Station Research and Development"
icon_state = "toxlab"
/area/ruin/space/ancientstation/hivebot
name = "Hivebot Mothership"
icon_state = "teleporter"
// Mob Spawners
//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
/obj/effect/mob_spawn/human/oldsec
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a security officer"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a security officer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/security
shoes = /obj/item/clothing/shoes/jackboots
id = /obj/item/card/id/away/old/sec
r_pocket = /obj/item/restraints/handcuffs
l_pocket = /obj/item/flash
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsec/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldmed
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a medical doctor"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a medical working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/medical
shoes = /obj/item/clothing/shoes/black
id = /obj/item/card/id/away/old/med
l_pocket = /obj/item/stack/medical/ointment
r_pocket = /obj/item/stack/medical/ointment
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldmed/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldeng
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "an engineer"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are an engineer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/engineering
shoes = /obj/item/clothing/shoes/workboots
id = /obj/item/card/id/away/old/eng
gloves = /obj/item/clothing/gloves/color/fyellow/old
l_pocket = /obj/item/tank/emergency_oxygen
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldeng/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldsci
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a scientist"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a scientist working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/science
shoes = /obj/item/clothing/shoes/laceup
id = /obj/item/card/id/away/old/sci
l_pocket = /obj/item/stack/medical/bruise_pack
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsci/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/structure/showcase/machinery/oldpod
name = "damaged cryogenic pod"
desc = "A damaged cryogenic pod long since lost to time, including its former occupant..."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper-open"
/obj/structure/showcase/machinery/oldpod/used
name = "opened cryogenic pod"
desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional."
+1
View File
@@ -12,6 +12,7 @@
//OTHER//
/////////
var/datum/preferences/prefs = null
var/skip_antag = FALSE //TRUE when a player declines to be included for the selection process of game mode antagonists.
var/move_delay = 1
var/moving = null
var/adminobs = null
@@ -36,8 +36,16 @@
path = /obj/item/storage/box/matches
/datum/gear/cards
display_name = "a deck of cards"
path = /obj/item/toy/cards/deck
display_name = "a deck of standard cards"
path = /obj/item/deck/cards
/datum/gear/doublecards
display_name = "a double deck of standard cards"
path = /obj/item/deck/doublecards
/datum/gear/tarot
display_name = "a deck of tarot cards"
path = /obj/item/deck/tarot
/datum/gear/headphones
display_name = "a pair of headphones"
+11 -2
View File
@@ -48,8 +48,17 @@
item_color="yellow"
burn_state = FIRE_PROOF
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
/obj/item/clothing/gloves/color/fyellow/New()
..()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
/obj/item/clothing/gloves/color/fyellow/old
desc = "Old and worn out insulated gloves, hopefully they still work."
name = "worn out insulated gloves"
/obj/item/clothing/gloves/color/fyellow/old/New()
..()
siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75)
/obj/item/clothing/gloves/color/black
desc = "These gloves are fire-resistant."
@@ -96,6 +96,7 @@
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
H.do_attack_animation(C)
visible_message("<span class='danger'>[C] has been touched with [src] by [H]!</span>")
add_attack_logs(H, C, "Touched with stun gloves")
C.Stun(stun_strength)
C.Weaken(stun_strength)
C.apply_effect(STUTTER, stun_strength)
@@ -0,0 +1,37 @@
//Let's keep clothing sorting clean. This is for all the oldstation clothes.
/obj/item/clothing/under/retro/security
desc = "A (now) retro corporate security jumpsuit. It doesn't have any sort of robust fabric, good ol' NT cutting costs."
name = "retro security officer's uniform"
icon_state = "retro_sec"
item_state = "retro_sec"
item_color = "retro_sec"
displays_id = 0
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/retro/medical
desc = "A once biologically resistant medical uniform. The high-vis stripes are faded and unreflective."
name = "retro medical officer's uniform"
icon_state = "retro_med"
item_state = "retro_med"
item_color = "retro_med"
displays_id = 0
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/retro/engineering
desc = "A faded grimy engineering jumpsuit and overall combo. It's coated with oil, dust, and grit."
name = "retro engineering uniform"
icon_state = "retro_eng"
item_state = "retro_eng"
item_color = "retro_eng"
displays_id = 0
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/retro/science
desc = "A faded polo and set of distinct white slacks. What a ridiculous tie."
name = "retro science officer's uniform"
icon_state = "retro_sci"
item_state = "retro_sci"
item_color = "retro_sci"
displays_id = 0
flags_size = ONESIZEFITSALL
+10
View File
@@ -339,6 +339,16 @@
time = 50
category = CAT_WEAPON
/datum/crafting_recipe/toxins_payload
name = "Toxins Payload Casing"
result = /obj/item/bombcore/toxins
reqs = list(
/obj/item/stock_parts/matter_bin = 1,
/obj/item/assembly/signaler = 1,
/obj/item/stack/sheet/metal = 2
)
category = CAT_WEAPON
/datum/crafting_recipe/bonfire
name = "Bonfire"
time = 60
+21 -1
View File
@@ -135,7 +135,7 @@
/obj/item/claymore/fluff/hit_reaction()
return 0
/obj/item/fluff/rsik_katana //Xydonus: Rsik Ugsharki
/obj/item/fluff/rsik_katana //Xydonus: Rsik Ugsharki Atan
name = "ceremonial katana"
desc = "A shimmering ceremonial golden katana, for the most discerning class of ninja. Looks expensive, and fragile."
icon = 'icons/obj/custom_items.dmi'
@@ -1020,6 +1020,26 @@
flags = NODROP|BLOCKHAIR
flags_inv = HIDEEARS
/obj/item/clothing/suit/hooded/hoodie/fluff/xydonus //Xydonus: Rsik Ugsharki Atan | Based off of the bomber jacket, but with a hood slapped on (for allowed suit storage)
name = "custom fit bomber jacket"
desc = "Made for Unathi who likes to show off their big horns."
icon = 'icons/obj/custom_items.dmi'
icon_state = "xydonus_jacket"
ignore_suitadjust = 0
hoodtype = /obj/item/clothing/head/hood/fluff/xydonus
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list(/obj/item/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/toy,/obj/item/storage/fancy/cigarettes,/obj/item/lighter)
/obj/item/clothing/head/hood/fluff/xydonus
name = "custom fit hood"
desc = "A hood with some horns <i>glued</i> to them, or something like that. Custom fit for a Unathi's head shape."
icon = 'icons/obj/custom_items.dmi'
icon_state = "xydonus_bomberhood"
body_parts_covered = HEAD
flags = NODROP|BLOCKHAIR
flags_inv = HIDEEARS
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/counterfeitguise_uniform // thatdanguy23 : Rissa Williams
icon = 'icons/obj/custom_items.dmi'
@@ -62,7 +62,7 @@
if(!proximity)
return
if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
to_chat(user, "<span class='warning'> [src] is empty.</span>")
return FALSE
@@ -0,0 +1,79 @@
/obj/structure/fermenting_barrel
name = "wooden barrel"
desc = "A large wooden barrel. You can ferment fruits and such inside it, or just use it to hold liquid."
icon = 'icons/obj/objects.dmi'
icon_state = "barrel"
density = TRUE
anchored = FALSE
container_type = DRAINABLE | AMOUNT_VISIBLE
pressure_resistance = 2 * ONE_ATMOSPHERE
max_integrity = 300
var/open = FALSE
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
/obj/structure/fermenting_barrel/Initialize()
create_reagents(300) //Bluespace beakers, but without the portability or efficiency in circuits.
. = ..()
/obj/structure/fermenting_barrel/examine(mob/user)
. = ..()
to_chat(user, "<span class='notice'>It is currently [open ? "open, letting you pour liquids in." : "closed, letting you draw liquids from the tap."] </span>")
/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/G)
if(G.reagents)
G.reagents.trans_to(src, G.reagents.total_volume)
var/amount = G.seed.potency / 4
if(G.distill_reagent)
reagents.add_reagent(G.distill_reagent, amount)
else
var/data = list()
data["names"] = list("[initial(G.name)]" = 1)
data["color"] = G.filling_color
data["alcohol_perc"] = G.wine_power
if(G.wine_flavor)
data["tastes"] = list(G.wine_flavor = 1)
// else // Stub - Will implement when we port over tg's better taste system - I'd rather get the barrel in first.
// data["tastes"] = list(G.tastes[1] = 1)
reagents.add_reagent("fruit_wine", amount, data)
qdel(G)
playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE)
/obj/structure/fermenting_barrel/attackby(obj/item/I, mob/user, params)
var/obj/item/reagent_containers/food/snacks/grown/G = I
if(istype(G))
if(!G.can_distill)
to_chat(user, "<span class='warning'>You can't distill this into anything...</span>")
return FALSE
else if(!user.drop_item())
to_chat(user, "<span class='warning'>[G] is stuck to your hand!</span>")
return FALSE
G.forceMove(src)
to_chat(user, "<span class='notice'>You place [G] into [src] to start the fermentation process.</span>")
addtimer(CALLBACK(src, .proc/makeWine, G), rand(80, 120) * speed_multiplier)
else if(I.is_refillable())
return FALSE // To refill via afterattack proc
else
return ..()
/obj/structure/fermenting_barrel/attack_hand(mob/user)
open = !open
if(open)
container_type = REFILLABLE | AMOUNT_VISIBLE
to_chat(user, "<span class='notice'>You open [src], letting you fill it.</span>")
else
container_type = DRAINABLE | AMOUNT_VISIBLE
to_chat(user, "<span class='notice'>You close [src], letting you draw from its tap.</span>")
update_icon()
/obj/structure/fermenting_barrel/update_icon()
if(open)
icon_state = "barrel_open"
else
icon_state = "barrel"
/datum/crafting_recipe/fermenting_barrel
name = "Wooden Barrel"
result = /obj/structure/fermenting_barrel
reqs = list(/obj/item/stack/sheet/wood = 30)
time = 50
category = CAT_PRIMAL
+6 -5
View File
@@ -8,12 +8,13 @@
icon = 'icons/obj/hydroponics/harvest.dmi'
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
var/plantname = ""
var/bitesize_mod = 0
var/bitesize_mod = 0 // If set, bitesize = 1 + round(reagents.total_volume / bitesize_mod)
var/splat_type = /obj/effect/decal/cleanable/plant_smudge
// If set, bitesize = 1 + round(reagents.total_volume / bitesize_mod)
dried_type = -1
// Saves us from having to define each stupid grown's dried_type as itself.
// If you don't want a plant to be driable (watermelons) set this to null in the time definition.
var/can_distill = TRUE //If FALSE, this object cannot be distilled into an alcohol.
var/distill_reagent //If NULL and this object can be distilled, it uses a generic fruit_wine reagent and adjusts its variables.
var/wine_flavor //If NULL, this is automatically set to the fruit's flavor. Determines the flavor of the wine if distill_reagent is NULL.
var/wine_power = 0.1 //Determines the boozepwr of the wine if distill_reagent is NULL. Uses 0.1 - 1.2 not tg's boozepower (divide by 100) else you'll end up with 1000% proof alcohol!
dried_type = -1 // Saves us from having to define each stupid grown's dried_type as itself. If you don't want a plant to be driable (watermelons) set this to null in the time definition.
burn_state = FLAMMABLE
origin_tech = "biotech=1"
+6 -1
View File
@@ -30,6 +30,7 @@
name = "ambrosia vulgaris branch"
desc = "This is a plant containing various healing chemicals."
origin_tech = "biotech=2"
wine_power = 0.2
// Ambrosia Deus
/obj/item/seeds/ambrosia/deus
@@ -50,6 +51,7 @@
icon_state = "ambrosiadeus"
filling_color = "#008B8B"
origin_tech = "biotech=4;materials=3"
wine_power = 0.5
//Ambrosia Gaia
/obj/item/seeds/ambrosia/gaia
@@ -74,6 +76,8 @@
origin_tech = "biotech=6;materials=5"
light_range = 3
seed = /obj/item/seeds/ambrosia/gaia
wine_power = 0.7
wine_flavor = "the earthmother's blessing"
// Ambrosia Cruciatus
/obj/item/seeds/ambrosia/cruciatus
@@ -83,4 +87,5 @@
reagents_add = list("thc" = 0.15, "kelotane" = 0.15, "bicaridine" = 0.1, "bath_salts" = 0.20, "plantmatter" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus
seed = /obj/item/seeds/ambrosia/cruciatus
seed = /obj/item/seeds/ambrosia/cruciatus
wine_power = 0.7
+3
View File
@@ -23,6 +23,7 @@
icon_state = "apple"
filling_color = "#FF4500"
bitesize = 100 // Always eat the apple in one bite
distill_reagent = "hcider"
// Posioned Apple
/obj/item/seeds/apple/poisoned
@@ -55,3 +56,5 @@
icon_state = "goldapple"
filling_color = "#FFD700"
origin_tech = "biotech=4;materials=5"
distill_reagent = null
wine_power = 0.5
+4
View File
@@ -23,6 +23,7 @@
trash = /obj/item/grown/bananapeel
filling_color = "#FFFF00"
bitesize = 5
distill_reagent = "bananahonk"
/obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is aiming the [name] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide.</span>")
@@ -74,6 +75,7 @@
icon_state = "mimana"
trash = /obj/item/grown/bananapeel/mimanapeel
filling_color = "#FFFFEE"
distill_reagent = "silencer"
/obj/item/grown/bananapeel/mimanapeel
seed = /obj/item/seeds/banana/mime
@@ -102,6 +104,8 @@
trash = /obj/item/grown/bananapeel/bluespace
filling_color = "#0000FF"
origin_tech = "biotech=3;bluespace=5"
wine_power = 0.6
wine_flavor = "slippery hypercubes"
/obj/item/grown/bananapeel/bluespace
seed = /obj/item/seeds/banana/bluespace
+3 -1
View File
@@ -25,6 +25,7 @@
icon_state = "soybeans"
filling_color = "#F0E68C"
bitesize_mod = 2
wine_power = 0.2
// Koibean
/obj/item/seeds/soya/koi
@@ -45,4 +46,5 @@
desc = "Something about these seems fishy."
icon_state = "koibeans"
filling_color = "#F0E68C"
bitesize_mod = 2
bitesize_mod = 2
wine_power = 0.4
+12
View File
@@ -25,6 +25,7 @@
gender = PLURAL
filling_color = "#FF00FF"
bitesize_mod = 2
distill_reagent = "gin"
// Poison Berries
/obj/item/seeds/berry/poison
@@ -44,6 +45,8 @@
desc = "Taste so good, you could die!"
icon_state = "poisonberrypile"
filling_color = "#C71585"
distill_reagent = null
wine_power = 0.35
// Death Berries
/obj/item/seeds/berry/death
@@ -65,6 +68,8 @@
desc = "Taste so good, you could die!"
icon_state = "deathberrypile"
filling_color = "#708090"
distill_reagent = null
wine_power = 0.5
// Glow Berries
/obj/item/seeds/berry/glow
@@ -89,6 +94,9 @@
filling_color = "#7CFC00"
origin_tech = "plasmatech=6"
light_color = "#006622"
distill_reagent = null
wine_power = 0.6
wine_flavor = "warmth"
// Cherries
/obj/item/seeds/cherry
@@ -118,6 +126,7 @@
gender = PLURAL
filling_color = "#FF0000"
bitesize_mod = 2
wine_power = 0.3
// Blue Cherries
/obj/item/seeds/cherry/blue
@@ -138,6 +147,7 @@
icon_state = "bluecherry"
filling_color = "#6495ED"
bitesize_mod = 2
wine_power = 0.5
// Grapes
/obj/item/seeds/grape
@@ -168,6 +178,7 @@
dried_type = /obj/item/reagent_containers/food/snacks/no_raisin
filling_color = "#FF1493"
bitesize_mod = 2
distill_reagent = "wine"
// Green Grapes
/obj/item/seeds/grape/green
@@ -186,3 +197,4 @@
name = "bunch of green grapes"
icon_state = "greengrapes"
filling_color = "#7FFF00"
distill_reagent = "cognac"
@@ -93,6 +93,7 @@
icon_state = "cannabis"
filling_color = "#00FF00"
bitesize_mod = 2
wine_power = 0.2
/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow
@@ -100,18 +101,21 @@
name = "rainbow cannabis leaf"
desc = "Is it supposed to be glowing like that...?"
icon_state = "megacannabis"
wine_power = 0.6
/obj/item/reagent_containers/food/snacks/grown/cannabis/death
seed = /obj/item/seeds/cannabis/death
name = "death cannabis leaf"
desc = "Looks a bit dark. Oh well."
icon_state = "blackcannabis"
wine_power = 0.4
/obj/item/reagent_containers/food/snacks/grown/cannabis/white
seed = /obj/item/seeds/cannabis/white
name = "white cannabis leaf"
desc = "It feels smooth and nice to the touch."
icon_state = "whitecannabis"
wine_power = 0.1
/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate
seed = /obj/item/seeds/cannabis/ultimate
@@ -119,3 +123,4 @@
desc = "You feel dizzy looking at it. What the fuck?"
icon_state = "ocannabis"
volume = 420
wine_power = 0.9
@@ -21,6 +21,7 @@
icon_state = "wheat"
filling_color = "#F0E68C"
bitesize_mod = 2
distill_reagent = "beer"
// Oat
/obj/item/seeds/wheat/oat
@@ -40,6 +41,7 @@
icon_state = "oat"
filling_color = "#556B2F"
bitesize_mod = 2
distill_reagent = "ale"
// Rice
/obj/item/seeds/wheat/rice
@@ -60,6 +62,7 @@
icon_state = "rice"
filling_color = "#FAFAD2"
bitesize_mod = 2
distill_reagent = "sake"
//Meatwheat - grows into synthetic meat
/obj/item/seeds/wheat/meat
@@ -80,6 +83,7 @@
filling_color = rgb(150, 0, 0)
bitesize_mod = 2
seed = /obj/item/seeds/wheat/meat
can_distill = FALSE
/obj/item/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user)
user.visible_message("<span class='notice'>[user] crushes [src] into meat.</span>", "<span class='notice'>You crush [src] into something that resembles meat.</span>")
+3
View File
@@ -25,6 +25,7 @@
icon_state = "chilipepper"
filling_color = "#FF0000"
bitesize_mod = 2
wine_power = 0.2
// Ice Chili
/obj/item/seeds/chili/ice
@@ -49,6 +50,7 @@
filling_color = "#0000CD"
bitesize_mod = 2
origin_tech = "biotech=4"
wine_power = 0.3
// Ghost Chili
/obj/item/seeds/chili/ghost
@@ -74,3 +76,4 @@
filling_color = "#F8F8FF"
bitesize_mod = 4
origin_tech = "biotech=4;magnets=5"
wine_power = 0.5
+4
View File
@@ -5,6 +5,7 @@
desc = "It's so sour, your face will twist."
icon_state = "lime"
bitesize_mod = 2
wine_power = 0.3
// Lime
/obj/item/seeds/lime
@@ -29,6 +30,7 @@
desc = "It's so sour, your face will twist."
icon_state = "lime"
filling_color = "#00FF00"
distill_reagent = "triple_sec"
// Orange
/obj/item/seeds/orange
@@ -104,6 +106,8 @@
desc = "Made for burning houses down."
icon_state = "firelemon"
bitesize_mod = 2
wine_power = 0.7
wine_flavor = "fire"
/obj/item/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user)
var/area/A = get_area(user)
@@ -25,6 +25,7 @@
icon_state = "cocoapod"
filling_color = "#FFD700"
bitesize_mod = 2
distill_reagent = "creme_de_cacao"
// Vanilla Pod
/obj/item/seeds/cocoapod/vanillapod
@@ -43,4 +44,5 @@
name = "vanilla pod"
desc = "Fattening... Mmmmm... vanilla."
icon_state = "vanillapod"
filling_color = "#FFD700"
filling_color = "#FFD700"
distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it.
+2
View File
@@ -24,6 +24,8 @@
filling_color = "#FFFF00"
trash = /obj/item/grown/corncob
bitesize_mod = 2
distill_reagent = "whiskey"
wine_power = 0.4
/obj/item/grown/corncob
name = "corn cob"
+3 -1
View File
@@ -22,6 +22,7 @@
icon_state = "eggplant"
filling_color = "#800080"
bitesize_mod = 2
wine_power = 0.2
// Egg-Plant
/obj/item/seeds/eggplant/eggy
@@ -41,4 +42,5 @@
icon_state = "eggyplant"
trash = /obj/item/reagent_containers/food/snacks/egg
filling_color = "#F8F8FF"
bitesize_mod = 2
bitesize_mod = 2
distill_reagent = "eggnog"
@@ -25,6 +25,7 @@
slot_flags = SLOT_HEAD
filling_color = "#FF6347"
bitesize_mod = 3
distill_reagent = "vermouth"
// Lily
/obj/item/seeds/poppy/lily
@@ -88,6 +89,7 @@
slot_flags = SLOT_HEAD
filling_color = "#E6E6FA"
bitesize_mod = 3
distill_reagent = "vermouth"
// Sunflower
@@ -145,6 +147,7 @@
slot_flags = SLOT_HEAD
filling_color = "#E6E6FA"
bitesize_mod = 2
distill_reagent = "absinthe"
// Novaflower
/obj/item/seeds/sunflower/novaflower
@@ -27,6 +27,7 @@
bitesize_mod = 2
var/stacktype = /obj/item/stack/tile/grass
var/tile_coefficient = 0.02 // 1/50
wine_power = 0.15
/obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user)
to_chat(user, "<span class='notice'>You prepare the astroturf.</span>")
@@ -65,3 +66,4 @@
desc = "The textile industry's dark secret."
icon_state = "carpetclump"
stacktype = /obj/item/stack/tile/carpet
can_distill = FALSE
+1
View File
@@ -95,3 +95,4 @@
icon_state = "kudzupod"
filling_color = "#6B8E23"
bitesize_mod = 2
wine_power = 0.2
+3
View File
@@ -25,6 +25,7 @@
w_class = WEIGHT_CLASS_NORMAL
filling_color = "#008000"
bitesize_mod = 3
wine_power = 0.4
// Holymelon
/obj/item/seeds/watermelon/holy
@@ -45,3 +46,5 @@
icon_state = "holymelon"
filling_color = "#FFD700"
dried_type = null
wine_power = 0.7 //Water to wine, baby.
wine_flavor = "divinity"
+4
View File
@@ -53,6 +53,7 @@
icon_state = "cabbage"
filling_color = "#90EE90"
bitesize_mod = 2
wine_power = 0.2
// Sugarcane
@@ -78,6 +79,7 @@
icon_state = "sugarcane"
filling_color = "#FFD700"
bitesize_mod = 2
distill_reagent = "rum"
// Gatfruit
@@ -108,6 +110,7 @@
origin_tech = "combat=6"
trash = /obj/item/gun/projectile/revolver
bitesize_mod = 2
wine_power = 0.9 //It burns going down, too.
//Cherry Bombs
/obj/item/seeds/cherry/bomb
@@ -129,6 +132,7 @@
seed = /obj/item/seeds/cherry/bomb
bitesize_mod = 2
volume = 125 //Gives enough room for the black powder at max potency
wine_power = 0.8
/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user)
var/area/A = get_area(user)
@@ -1,6 +1,7 @@
/obj/item/reagent_containers/food/snacks/grown/mushroom
name = "mushroom"
bitesize_mod = 2
wine_power = 0.4
// Reishi
@@ -84,6 +85,7 @@
desc = "<I>Amanita Virosa</I>: Deadly poisonous basidiomycete fungus filled with alpha amanitin."
icon_state = "angel"
filling_color = "#C0C0C0"
wine_power = 0.6
// Liberty Cap
@@ -109,6 +111,8 @@
desc = "<I>Psilocybe Semilanceata</I>: Liberate yourself!"
icon_state = "libertycap"
filling_color = "#DAA520"
wine_power = 0.8
wine_flavor = "freedom"
// Plump Helmet
@@ -135,6 +139,7 @@
desc = "<I>Plumus Hellmus</I>: Plump, soft and s-so inviting~"
icon_state = "plumphelmet"
filling_color = "#9370DB"
distill_reagent = "manlydorf"
// Walking Mushroom
@@ -161,6 +166,7 @@
icon_state = "walkingmushroom"
filling_color = "#9370DB"
origin_tech = "biotech=4;programming=5"
can_distill = FALSE
/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user)
if(istype(user.loc, /turf/space))
@@ -232,6 +238,7 @@
var/effect_path = /obj/structure/glowshroom
origin_tech = "biotech=4;plasmatech=6"
light_color = "#006622"
wine_power = 0.5
/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
if(istype(user.loc, /turf/space))
@@ -280,6 +287,8 @@
effect_path = /obj/structure/glowshroom/glowcap
origin_tech = "biotech=4;powerstorage=6;plasmatech=4"
light_color = "#8E0300"
wine_power = 0.6
wine_flavor = "warmth"
// Fungus/Mold
/obj/item/seeds/fungus
@@ -326,3 +335,5 @@
icon_state = "shadowshroom"
effect_path = /obj/structure/glowshroom/shadowshroom
origin_tech = "biotech=4;plasmatech=4;magnets=4"
wine_power = 0.6
wine_flavor = "strange coldness"
+4
View File
@@ -25,6 +25,8 @@
bitesize_mod = 2
slice_path = /obj/item/reagent_containers/food/snacks/onion_slice
slices_num = 2
wine_power = 0.2
wine_flavor = "pungentness"
/obj/item/seeds/onion/red
name = "pack of red onion seeds"
@@ -43,6 +45,8 @@
icon_state = "onion_red"
filling_color = "#C29ACF"
slice_path = /obj/item/reagent_containers/food/snacks/onion_slice/red
wine_power = 0.6
wine_flavor = "powerful pungentness"
/obj/item/reagent_containers/food/snacks/onion_slice
name = "onion slices"
+2 -1
View File
@@ -24,4 +24,5 @@
icon_state = "pineapple"
filling_color = "#e5b437"
w_class = WEIGHT_CLASS_NORMAL
bitesize_mod = 3
bitesize_mod = 3
wine_power = 0.4
+2
View File
@@ -25,6 +25,7 @@
icon_state = "potato"
filling_color = "#E9967A"
bitesize = 100
distill_reagent = "vodka"
/obj/item/reagent_containers/food/snacks/grown/potato/wedges
@@ -33,6 +34,7 @@
icon_state = "potato_wedges"
filling_color = "#E9967A"
bitesize = 100
distill_reagent = "sbiten"
/obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params)
@@ -23,6 +23,7 @@
icon_state = "pumpkin"
filling_color = "#FFA500"
bitesize_mod = 2
wine_power = 0.2
/obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params)
if(is_sharp(W))
@@ -52,3 +53,4 @@
icon_state = "blumpkin"
filling_color = "#87CEFA"
bitesize_mod = 2
wine_power = 0.5
+7 -1
View File
@@ -26,4 +26,10 @@
name = "strange plant"
desc = "What could this even be?"
icon_state = "crunchy"
bitesize_mod = 2
bitesize_mod = 2
/obj/item/reagent_containers/food/snacks/grown/random/Initialize()
. = ..()
wine_power = rand(0.1,1.5)
if(prob(1))
wine_power = 2.0
+4
View File
@@ -21,6 +21,7 @@
icon_state = "carrot"
filling_color = "#FFA500"
bitesize_mod = 2
wine_power = 0.3
/obj/item/reagent_containers/food/snacks/grown/carrot/wedges
name = "carrot wedges"
@@ -59,6 +60,7 @@
desc = "Closely related to carrots."
icon_state = "parsnip"
bitesize_mod = 2
wine_power = 0.35
// White-Beet
@@ -84,6 +86,7 @@
icon_state = "whitebeet"
filling_color = "#F4A460"
bitesize_mod = 2
wine_power = 0.4
// Red Beet
/obj/item/seeds/redbeet
@@ -107,3 +110,4 @@
desc = "You can't beat red beet."
icon_state = "redbeet"
bitesize_mod = 2
wine_power = 0.6
@@ -22,6 +22,7 @@
desc = "These aromatic tips of the tea plant can be dried to make tea."
icon_state = "tea_aspera_leaves"
filling_color = "#008000"
can_distill = FALSE
// Tea Astra
/obj/item/seeds/tea/astra
@@ -67,6 +68,7 @@
icon_state = "coffee_arabica"
filling_color = "#DC143C"
bitesize_mod = 2
distill_reagent = "kahlua"
// Coffee Robusta
/obj/item/seeds/coffee/robusta
+4 -1
View File
@@ -21,6 +21,7 @@
desc = "Dry them out to make some smokes."
icon_state = "tobacco_leaves"
filling_color = "#008000"
distill_reagent = "creme_de_menthe" //Menthol, I guess.
// Space Tobacco
/obj/item/seeds/tobacco/space
@@ -38,4 +39,6 @@
seed = /obj/item/seeds/tobacco/space
name = "space tobacco leaves"
desc = "Dry them out to make some space-smokes."
icon_state = "stobacco_leaves"
icon_state = "stobacco_leaves"
distill_reagent = null
wine_power = 0.5
+5
View File
@@ -22,6 +22,7 @@
splat_type = /obj/effect/decal/cleanable/tomato_smudge
filling_color = "#FF6347"
bitesize_mod = 2
distill_reagent = "enzyme"
// Blood Tomato
/obj/item/seeds/tomato/blood
@@ -43,6 +44,7 @@
splat_type = /obj/effect/gibspawner/generic
filling_color = "#FF0000"
origin_tech = "biotech=5"
distill_reagent = "bloodymary"
// Blue Tomato
@@ -89,6 +91,8 @@
desc = "So lubricated, you might slip through space-time."
icon_state = "bluespacetomato"
origin_tech = "biotech=4;bluespace=5"
distill_reagent = null
wine_power = 0.8
// Killer Tomato
@@ -117,6 +121,7 @@
var/awakening = 0
filling_color = "#FF0000"
origin_tech = "biotech=4;combat=5"
distill_reagent = "demonsblood"
/obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone)
if(awakening)
+8 -7
View File
@@ -45,9 +45,9 @@
/obj/machinery/logic_gate/nand/handle_logic()
if((input1_state == LOGIC_ON || input1_state == LOGIC_FLICKER) && (input2_state == LOGIC_ON || input2_state == LOGIC_FLICKER))
output_state = LOGIC_OFF //This can only output continuous signals
else //At least one input was ON/FLICKER, so output is off
output_state = LOGIC_OFF
output_state = LOGIC_OFF //Both inputs are ON/FLICKER, so output is off
else
output_state = LOGIC_ON //This can only output continuous signals
return
// NOR Gate
@@ -58,9 +58,9 @@
output_state = LOGIC_ON
/obj/machinery/logic_gate/nor/handle_logic()
if(input1_state == LOGIC_OFF ||input2_state == LOGIC_OFF)
if(input1_state == LOGIC_OFF && input2_state == LOGIC_OFF) //Both inputs are OFF, so output is ON
output_state = LOGIC_ON //This can only output continuous signals
else //Both inputs are ON, so output is OFF
else
output_state = LOGIC_OFF
return
@@ -71,14 +71,15 @@
icon_state = "logic_xor"
/obj/machinery/logic_gate/xor/handle_logic()
if((input1_state == LOGIC_ON || input1_state == LOGIC_FLICKER) || input2_state == LOGIC_OFF) //Only input1 is ON/FLICKER, so output matches input1
if((input1_state == LOGIC_ON || input1_state == LOGIC_FLICKER) && (input2_state == LOGIC_OFF)) //Only input1 is ON/FLICKER, so output matches input1
output_state = input1_state
else if((input2_state == LOGIC_ON || input2_state == LOGIC_FLICKER) || input1_state == LOGIC_OFF) //Only input2 is ON/FLICKER, so output matches input2
else if((input2_state == LOGIC_ON || input2_state == LOGIC_FLICKER) && (input1_state == LOGIC_OFF)) //Only input2 is ON/FLICKER, so output matches input2
output_state = input2_state
else //Both inputs are ON or OFF, so output is OFF
output_state = LOGIC_OFF
return
// XNOR Gate
/obj/machinery/logic_gate/xnor
name = "XNOR Gate"
+1 -1
View File
@@ -28,7 +28,7 @@
/obj/machinery/mineral/ore_redemption/New()
..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE),INFINITY)
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, FALSE, /obj/item/stack)
files = new /datum/research/smelter(src)
component_parts = list()
component_parts += new /obj/item/circuitboard/ore_redemption(null)
+19 -13
View File
@@ -7,7 +7,7 @@
var/harvested_name = "shortened mushrooms"
var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large."
var/needs_sharp_harvest = TRUE
var/harvest = /obj/item/reagent_containers/food/snacks/ash_flora/shavings
var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings
var/harvest_amount_low = 1
var/harvest_amount_high = 3
var/harvest_time = 60
@@ -79,7 +79,7 @@
desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures."
harvested_name = "leafless mushrooms"
harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?"
harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_leaf
harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf
needs_sharp_harvest = FALSE
harvest_amount_high = 4
harvest_time = 20
@@ -95,7 +95,7 @@
desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems."
harvested_name = "small mushrooms"
harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms."
harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_cap
harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap
harvest_amount_high = 4
harvest_time = 50
harvest_message_low = "You slice the cap off of a mushroom."
@@ -111,7 +111,7 @@
luminosity = 1
harvested_name = "tiny mushrooms"
harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back."
harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_stem
harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem
harvest_amount_high = 4
harvest_time = 40
harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem."
@@ -126,7 +126,7 @@
desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash."
harvested_name = "cacti"
harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash."
harvest = /obj/item/reagent_containers/food/snacks/ash_flora/cactus_fruit
harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
needs_sharp_harvest = FALSE
harvest_amount_high = 2
harvest_time = 10
@@ -149,45 +149,51 @@
H.visible_message("<span class='danger'>[H] steps on a cactus!</span>", \
"<span class='userdanger'>You step on a cactus!</span>")
/obj/item/reagent_containers/food/snacks/ash_flora
/obj/item/reagent_containers/food/snacks/grown/ash_flora
name = "mushroom shavings"
desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl."
icon = 'icons/obj/lavaland/ash_flora.dmi'
icon_state = "mushroom_shavings"
list_reagents = list("sugar" = 3, "ethanol" = 2, "stabilizing_agent" = 3, "minttoxin" = 2)
w_class = WEIGHT_CLASS_TINY
wine_power = 0.2
/obj/item/reagent_containers/food/snacks/ash_flora/New()
/obj/item/reagent_containers/food/snacks/grown/ash_flora/New()
..()
pixel_x = rand(-4, 4)
pixel_y = rand(-4, 4)
/obj/item/reagent_containers/food/snacks/ash_flora/shavings //for actual crafting
/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //for actual crafting
/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_leaf
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf
name = "mushroom leaf"
desc = "A leaf, from a mushroom."
list_reagents = list("nutriment" = 3, "vitfro" = 2, "nicotine" = 2)
icon_state = "mushroom_leaf"
wine_power = 0.4
/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_cap
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap
name = "mushroom cap"
desc = "The cap of a large mushroom."
list_reagents = list("lsd" = 2, "entpoly" = 4, "psilocybin" = 2)
icon_state = "mushroom_cap"
wine_power = 0.7
/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_stem
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem
name = "mushroom stem"
desc = "A long mushroom stem. It's slightly glowing."
list_reagents = list("tinlux" = 2, "vitamin" = 1, "space_drugs" = 1)
icon_state = "mushroom_stem"
luminosity = 1
wine_power = 0.6
/obj/item/reagent_containers/food/snacks/ash_flora/cactus_fruit
/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
name = "cactus fruit"
list_reagents = list("vitamin" = 2, "nutriment" = 2, "vitfro" = 4)
desc = "A cactus fruit covered in a thick, reddish skin. And some ash."
icon_state = "cactus_fruit"
wine_power = 0.5
/obj/item/mushroom_bowl
name = "mushroom bowl"
@@ -200,6 +206,6 @@
/datum/crafting_recipe/mushroom_bowl
name = "Mushroom Bowl"
result = /obj/item/reagent_containers/food/drinks/mushroom_bowl
reqs = list(/obj/item/reagent_containers/food/snacks/ash_flora/shavings = 5)
reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5)
time = 30
category = CAT_PRIMAL
+1 -1
View File
@@ -83,7 +83,7 @@
/obj/machinery/mineral/processing_unit/New()
..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY)
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack)
files = new /datum/research/smelter(src)
/obj/machinery/mineral/processing_unit/Destroy()
+2
View File
@@ -274,7 +274,9 @@
if(M.maxHealth != initial(M.maxHealth))
to_chat(user, "[M] already has a reinforced chassis!")
return
var/previous = M.maxHealth
M.maxHealth = 170
M.health += M.maxHealth - previous
to_chat(user, "You reinforce [M]'s chassis.")
qdel(src)
+1 -1
View File
@@ -16,7 +16,7 @@
/obj/machinery/mineral/mint/New()
..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM, MAT_TRANQUILLITE), MINERAL_MATERIAL_AMOUNT * 50)
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM, MAT_TRANQUILLITE), MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack)
/obj/machinery/mineral/mint/process()
var/turf/T = get_step(src, input_dir)
+11 -1
View File
@@ -30,7 +30,9 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE
see_in_dark = 100
verbs += /mob/dead/observer/proc/dead_tele
verbs += list(
/mob/dead/observer/proc/dead_tele,
/mob/dead/observer/proc/open_spawners_menu)
// Our new boo spell.
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/boo(null))
@@ -678,3 +680,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
mind.transfer_to(new_char)
else
new_char.key = key
/mob/dead/observer/proc/open_spawners_menu()
set name = "Mob spawners menu"
set desc = "See all currently available ghost spawners"
set category = "Ghost"
var/datum/spawners_menu/menu = new /datum/spawners_menu(src)
menu.ui_interact(src)
+9
View File
@@ -281,6 +281,15 @@
flags = RESTRICTED | WHITELISTED
syllables = list("click","clack")
/datum/language/kidan/get_random_name()
var/new_name = "[pick(list("Vrax", "Krek", "Vriz", "Zrik", "Zarak", "Click", "Zerk", "Drax", "Zven", "Drexx"))]"
new_name += ", "
new_name += "[pick(list("Noble", "Worker", "Scout", "Builder", "Farmer", "Gatherer", "Soldier", "Guard", "Prospector"))]"
new_name += " of Clan "
new_name += "[pick(list("Tristan", "Zarlan", "Clack", "Kkraz", "Zramn", "Orlan", "Zrax"))]" //I ran out of ideas after the first two tbh -_-
return new_name
/datum/language/slime
name = "Bubblish"
desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans."
+11 -14
View File
@@ -731,25 +731,22 @@
if(hasHUD(usr, "security") && setcriminal != "Cancel")
found_record = 1
var/their_name = R.fields["name"]
var/their_rank = R.fields["rank"]
if(R.fields["criminal"] == "*Execute*")
to_chat(usr, "<span class='warning'>Unable to modify the sec status of a person with an active Execution order. Use a security computer instead.</span>")
else
else
var/rank
if(ishuman(usr))
var/mob/living/carbon/human/U = usr
R.fields["comments"] += "Set to [setcriminal] by [U.get_authentification_name()] ([U.get_assignment()]) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
if(isrobot(usr))
rank = U.get_assignment()
else if(isrobot(usr))
var/mob/living/silicon/robot/U = usr
R.fields["comments"] += "Set to [setcriminal] by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
if(isAI(usr))
var/mob/living/silicon/ai/U = usr
R.fields["comments"] += "Set to [setcriminal] by [U.name] (artificial intelligence) on [current_date_string] [station_time_timestamp()] with comment: [t1]<BR>"
R.fields["criminal"] = setcriminal
log_admin("[key_name_admin(usr)] set secstatus of [their_rank] [their_name] to [setcriminal], comment: [t1]")
spawn()
sec_hud_set_security_status()
rank = "[U.modtype] [U.braintype]"
else if(isAI(usr))
rank = "AI"
set_criminal_status(usr, R, setcriminal, t1, rank)
break // Git out of the securiy records loop!
if(found_record)
break // Git out of the general records
if(!found_record)
to_chat(usr, "<span class='warning'>Unable to locate a data core entry for this person.</span>")
@@ -527,7 +527,7 @@
/datum/species/proc/handle_hud_icons_health_side(mob/living/carbon/human/H)
if(H.healths)
if(H.stat == DEAD)
if(H.stat == DEAD || (H.status_flags & FAKEDEATH))
H.healths.icon_state = "health7"
else
switch(H.hal_screwyhud)
@@ -546,7 +546,7 @@
/datum/species/proc/handle_hud_icons_health_doll(mob/living/carbon/human/H)
if(H.healthdoll)
if(H.stat == DEAD)
if(H.stat == DEAD || (H.status_flags & FAKEDEATH))
H.healthdoll.icon_state = "healthdoll_DEAD"
if(H.healthdoll.overlays.len)
H.healthdoll.overlays.Cut()
@@ -223,6 +223,10 @@
health = 35 - (getBruteLoss() + getFireLoss())
update_stat("updatehealth([reason])")
/mob/living/silicon/robot/drone/death(gibbed)
. = ..(gibbed)
ghostize(can_reenter_corpse = 0)
//CONSOLE PROCS
/mob/living/silicon/robot/drone/proc/law_resync()
@@ -32,24 +32,72 @@
melee_damage_upper = 8
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
var/chirp_sound = 'sound/misc/nymphchirp.ogg' //used in emote
speed = 0
stop_automated_movement = 0
turns_per_move = 4
var/list/donors = list()
var/ready_evolve = 0
holder_type = /obj/item/holder/diona
can_collar = 1
can_collar = TRUE
a_intent = INTENT_HELP
var/gestalt_alert = "merged with gestalt" //used in adding and clearing alert
var/evolve_donors = 5 //amount of blood donors needed before evolving
var/awareness_donors = 3 //amount of blood donors needed for understand language
var/nutrition_need = 500 //amount of nutrition needed before evolving
var/datum/action/innate/diona/merge/merge_action = new()
var/datum/action/innate/diona/evolve/evolve_action = new()
var/datum/action/innate/diona/steal_blood/steal_blood_action = new()
/datum/action/innate/diona/merge
name = "Merge with gestalt"
icon_icon = 'icons/mob/human_races/r_diona.dmi'
button_icon_state = "preview"
/datum/action/innate/diona/merge/Activate()
var/mob/living/simple_animal/diona/user = owner
user.merge()
/datum/action/innate/diona/evolve
name = "Evolve"
icon_icon = 'icons/obj/cloning.dmi'
button_icon_state = "pod_1"
/datum/action/innate/diona/evolve/Activate()
var/mob/living/simple_animal/diona/user = owner
user.evolve()
/datum/action/innate/diona/steal_blood
name = "Steal blood"
icon_icon = 'icons/obj/bloodpack.dmi'
button_icon_state = "full"
/datum/action/innate/diona/steal_blood/Activate()
var/mob/living/simple_animal/diona/user = owner
user.steal_blood()
/mob/living/simple_animal/diona/New()
..()
if(name == initial(name)) //To stop Pun-Pun becoming generic.
name = "[name] ([rand(1, 1000)])"
real_name = name
add_language("Rootspeak")
verbs += /mob/living/simple_animal/diona/proc/merge
merge_action.Grant(src)
evolve_action.Grant(src)
steal_blood_action.Grant(src)
/mob/living/simple_animal/diona/UnarmedAttack(var/atom/A)
if(isdiona(A) && (src in A.contents)) //can't attack your gestalt
visible_message("[src] wiggles around a bit.")
else
..()
/mob/living/simple_animal/diona/resist()
..()
split()
/mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M)
//Let people pick the little buggers up.
@@ -57,88 +105,76 @@
if(isdiona(M))
to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.")
to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.")
verbs += /mob/living/simple_animal/diona/proc/split
verbs -= /mob/living/simple_animal/diona/proc/merge
throw_alert(gestalt_alert, /obj/screen/alert/nymph, new_master = src) //adds a screen alert that can call resist
forceMove(M)
else
get_scooped(M)
..()
/mob/living/simple_animal/diona/proc/merge()
set category = "Diona"
set name = "Merge with gestalt"
set desc = "Merge with another diona."
if(iscarbon(loc))
verbs -= /mob/living/simple_animal/diona/proc/merge
return
if(stat != CONSCIOUS)
return FALSE
var/list/choices = list()
for(var/mob/living/carbon/C in view(1,src))
if(!(Adjacent(C)) || !(C.client))
for(var/mob/living/carbon/human/H in view(1,src))
if(!(Adjacent(H)) || !isdiona(H))
continue
choices += H
if(ishuman(C))
var/mob/living/carbon/human/D = C
if(isdiona(D))
choices += C
if(!choices.len)
to_chat(src, "<span class='warning'>No suitable diona nearby.</span>")
return FALSE
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
if(!M || !src || !(Adjacent(M)))
return
if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate
return FALSE
if(ishuman(M))
if(isdiona(M))
to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.")
M.status_flags |= PASSEMOTES
to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.")
forceMove(M)
verbs += /mob/living/simple_animal/diona/proc/split
verbs -= /mob/living/simple_animal/diona/proc/merge
throw_alert(gestalt_alert, /obj/screen/alert/nymph, new_master = src) //adds a screen alert that can call resist
return TRUE
else
return
return FALSE
/mob/living/simple_animal/diona/proc/split()
set category = "Diona"
set name = "Split from gestalt"
set desc = "Split away from your gestalt as a lone nymph."
if(!(iscarbon(loc)))
verbs -= /mob/living/simple_animal/diona/proc/split
return
if((stat != CONSCIOUS) || !isdiona(loc))
return FALSE
var/mob/living/carbon/human/D = loc
T = get_turf(src)
if(!T)
return FALSE
to_chat(loc, "You feel a pang of loss as [src] splits away from your biomass.")
to_chat(src, "You wiggle out of the depths of [loc]'s biomass and plop to the ground.")
forceMove(T)
var/hasMobs = FALSE
for(var/atom/A in D.contents)
if(istype(A, /mob/) || istype(A, /obj/item/holder))
hasMobs = TRUE
if(!hasMobs)
D.status_flags &= ~PASSEMOTES
var/mob/living/M = loc
clear_alert(gestalt_alert)
return TRUE
forceMove(get_turf(src))
verbs -= /mob/living/simple_animal/diona/proc/split
verbs += /mob/living/simple_animal/diona/proc/merge
if(istype(M))
for(var/atom/A in M.contents)
if(istype(A, /mob/living/simple_animal/borer) || istype(A, /obj/item/holder))
return
M.status_flags &= ~PASSEMOTES
/mob/living/simple_animal/diona/verb/evolve()
set category = "Diona"
set name = "Evolve"
set desc = "Grow to a more complex form."
if(donors.len < 5)
/mob/living/simple_animal/diona/proc/evolve()
if(stat != CONSCIOUS)
return FALSE
if(donors.len < evolve_donors)
to_chat(src, "<span class='warning'>You need more blood in order to ascend to a new state of consciousness...</span>")
return
return FALSE
if(nutrition < 500)
if(nutrition < nutrition_need)
to_chat(src, "<span class='warning'>You need to binge on weeds in order to have the energy to grow...</span>")
return
return FALSE
split()
if(isdiona(loc) && !split()) //if it's merged with diona, needs to able to split before evolving
return FALSE
visible_message("<span class='danger'>[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.</span>","<span class='danger'>You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.</span>")
var/mob/living/carbon/human/diona/adult = new(get_turf(loc))
@@ -162,28 +198,33 @@
unEquip(W)
qdel(src)
return TRUE
/mob/living/simple_animal/diona/verb/steal_blood()
set category = "Diona"
set name = "Steal Blood"
set desc = "Take a blood sample from a suitable donor."
/mob/living/simple_animal/diona/proc/steal_blood()
if(stat != CONSCIOUS)
return FALSE
var/list/choices = list()
for(var/mob/living/carbon/human/H in oview(1,src))
choices += H
if(Adjacent(H) && H.dna && !(NO_BLOOD in H.dna.species.species_traits))
choices += H
if(!choices.len)
to_chat(src, "<span class='warning'>No suitable blood donors nearby.</span>")
return FALSE
var/mob/living/carbon/human/M = input(src,"Who do you wish to take a sample from?") in null|choices
if(!M || !src)
return
if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate
return FALSE
if(NO_BLOOD in M.dna.species.species_traits)
if(!M.dna || (NO_BLOOD in M.dna.species.species_traits))
to_chat(src, "<span class='warning'>That donor has no blood to take.</span>")
return
return FALSE
if(donors.Find(M.real_name))
to_chat(src, "<span class='warning'>That donor offers you nothing new.</span>")
return
return FALSE
visible_message("<span class='danger'>[src] flicks out a feeler and neatly steals a sample of [M]'s blood.</span>","<span class='danger'>You flick out a feeler and neatly steal a sample of [M]'s blood.</span>")
donors += M.real_name
@@ -195,13 +236,12 @@
update_progression()
/mob/living/simple_animal/diona/proc/update_progression()
if(!donors.len)
return
if(stat != CONSCIOUS || !donors.len)
return FALSE
if(donors.len == 5)
ready_evolve = 1
if(donors.len == evolve_donors)
to_chat(src, "<span class='noticealien'>You feel ready to move on to your next stage of growth.</span>")
else if(donors.len == 3)
else if(donors.len == awareness_donors)
universal_understand = 1
to_chat(src, "<span class='noticealien'>You feel your awareness expand, and realize you know how to understand the creatures around you.</span>")
else
@@ -219,7 +259,7 @@
return
/mob/living/simple_animal/diona/emote(act, m_type=1, message = null)
if(stat)
if(stat != CONSCIOUS)
return
var/on_CD = 0
@@ -237,6 +277,6 @@
if("chirp")
message = "<B>\The [src]</B> chirps!"
m_type = 2 //audible
playsound(src, 'sound/misc/nymphchirp.ogg', 40, 1, 1)
playsound(src, chirp_sound, 40, 1, 1)
..(act, m_type, message)
@@ -23,6 +23,11 @@
var/datum/mind/origin
var/egg_lain = 0
/mob/living/simple_animal/hostile/headcrab/examine(mob/user)
..()
if(stat == DEAD)
to_chat(desc = "It appears to be dead.")
/mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim)
var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim)
egg.insert(victim)
@@ -101,7 +101,7 @@ Difficulty: Medium
animate(src, pixel_z = 0, time = 12)
/obj/effect/temp_visual/target
icon = 'icons/mob/actions.dmi'
icon = 'icons/mob/actions/actions.dmi'
icon_state = "sniper_zoom"
layer = MOB_LAYER - 0.1
luminosity = 2
@@ -65,7 +65,7 @@
/datum/action/innate/terrorspider/queen/queensense
name = "Hive Sense"
icon_icon = 'icons/mob/actions.dmi'
icon_icon = 'icons/mob/actions/actions.dmi'
button_icon_state = "mindswap"
/datum/action/innate/terrorspider/queen/queensense/Activate()
+7 -8
View File
@@ -1,6 +1,5 @@
/mob/new_player
var/ready = 0
var/skip_antag = 0 //For declining an antag roll this round.
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
var/totalPlayers = 0 //Player counts for the Lobby tab
var/totalPlayersReady = 0
@@ -65,16 +64,16 @@
if(!ticker || ticker.current_state <= GAME_STATE_PREGAME)
if(!ready) output += "<p><a href='byond://?src=[UID()];ready=1'>Declare Ready</A></p>"
else output += "<p><b>You are ready</b> (<a href='byond://?src=[UID()];ready=2'>Cancel</A>)</p>"
var/list/antags = client.prefs.be_special
if(antags && antags.len)
if(!skip_antag) output += "<p><a href='byond://?src=[UID()];skip_antag=1'>Global Antag Candidacy</A>"
else output += "<p><a href='byond://?src=[UID()];skip_antag=2'>Global Antag Candidacy</A>"
output += "<br /><small>You are <b>[skip_antag ? "ineligible" : "eligible"]</b> for all antag roles.</small></p>"
else
output += "<p><a href='byond://?src=[UID()];manifest=1'>View the Crew Manifest</A></p>"
output += "<p><a href='byond://?src=[UID()];late_join=1'>Join Game!</A></p>"
var/list/antags = client.prefs.be_special
if(antags && antags.len)
if(!client.skip_antag) output += "<p><a href='byond://?src=[UID()];skip_antag=1'>Global Antag Candidacy</A>"
else output += "<p><a href='byond://?src=[UID()];skip_antag=2'>Global Antag Candidacy</A>"
output += "<br /><small>You are <b>[client.skip_antag ? "ineligible" : "eligible"]</b> for all antag roles.</small></p>"
output += "<p><a href='byond://?src=[UID()];observe=1'>Observe</A></p>"
if(GLOB.join_tos)
@@ -172,7 +171,7 @@
new_player_panel_proc()
if(href_list["skip_antag"])
skip_antag = !skip_antag
client.skip_antag = !client.skip_antag
new_player_panel_proc()
if(href_list["refresh"])
+1
View File
@@ -230,6 +230,7 @@
new/datum/data/pda/app/janitor,
new/datum/data/pda/app/supply,
new/datum/data/pda/app/mule_control,
new/datum/data/pda/app/status_display)
+4 -1
View File
@@ -115,7 +115,7 @@
#define CHARS_PER_LINE 5
#define FONT_SIZE "5pt"
#define FONT_COLOR "#09f"
#define FONT_STYLE "Arial Black"
#define FONT_STYLE "Small Fonts"
/obj/machinery/treadmill_monitor
name = "Treadmill Monitor"
@@ -126,6 +126,7 @@
density = 0
maptext_height = 26
maptext_width = 32
maptext_y = -1
var/on = 0 // if we should be metering or not
var/id = null // id of treadmill
@@ -200,6 +201,8 @@
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
// Stolen from status_display
/obj/machinery/treadmill_monitor/proc/update_display(var/line1, var/line2)
line1 = uppertext(line1)
line2 = uppertext(line2)
var/new_text = {"<div style="font-size:[FONT_SIZE];color:[FONT_COLOR];font:'[FONT_STYLE]';text-align:center;" valign="top">[line1]<br>[line2]</div>"}
if(maptext != new_text)
maptext = new_text
@@ -1236,3 +1236,107 @@
drink_icon = "synthignonglass"
drink_name = "Glass of Synthignon"
drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious."
/datum/reagent/consumable/ethanol/fruit_wine
name = "Fruit Wine"
id = "fruit_wine"
description = "A wine made from grown plants."
color = "#FFFFFF"
alcohol_perc = 0.35
taste_message = "bad coding"
can_synth = FALSE
var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit.
var/list/tastes = list("bad coding" = 1) //List of tastes. See above.
/datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data)
names = data["names"]
tastes = data["tastes"]
alcohol_perc = data["alcohol_perc"]
color = data["color"]
generate_data_info(data)
/datum/reagent/consumable/ethanol/fruit_wine/on_merge(list/data, amount)
var/diff = (amount/volume)
if(diff < 1)
color = BlendRGB(color, data["color"], diff/2) //The percentage difference over two, so that they take average if equal.
else
color = BlendRGB(color, data["color"], (1/diff)/2) //Adjust so it's always blending properly.
var/oldvolume = volume-amount
var/list/cachednames = data["names"]
for(var/name in names | cachednames)
names[name] = ((names[name] * oldvolume) + (cachednames[name] * amount)) / volume
var/list/cachedtastes = data["tastes"]
for(var/taste in tastes | cachedtastes)
tastes[taste] = ((tastes[taste] * oldvolume) + (cachedtastes[taste] * amount)) / volume
alcohol_perc *= oldvolume
var/newzepwr = data["alcohol_perc"] * amount
alcohol_perc += newzepwr
alcohol_perc /= volume //Blending alcohol percentage to volume.
generate_data_info(data)
/datum/reagent/consumable/ethanol/fruit_wine/proc/generate_data_info(list/data)
var/minimum_percent = 0.15 //Percentages measured between 0 and 1.
var/list/primary_tastes = list()
var/list/secondary_tastes = list()
drink_name = "glass of [name]"
drink_desc = description
for(var/taste in tastes)
switch(tastes[taste])
if(minimum_percent*2 to INFINITY)
primary_tastes += taste
if(minimum_percent to minimum_percent*2)
secondary_tastes += taste
var/minimum_name_percent = 0.35
name = ""
var/list/names_in_order = sortTim(names, /proc/cmp_numeric_dsc, TRUE)
var/named = FALSE
for(var/fruit_name in names)
if(names[fruit_name] >= minimum_name_percent)
name += "[fruit_name] "
named = TRUE
if(named)
name += "wine"
else
name = "mixed [names_in_order[1]] wine"
var/alcohol_description
switch(alcohol_perc)
if(1.2 to INFINITY)
alcohol_description = "suicidally strong"
if(0.9 to 1.2)
alcohol_description = "rather strong"
if(0.7 to 0.9)
alcohol_description = "strong"
if(0.4 to 0.7)
alcohol_description = "rich"
if(0.2 to 0.4)
alcohol_description = "mild"
if(0 to 0.2)
alcohol_description = "sweet"
else
alcohol_description = "watery" //How the hell did you get negative boozepwr?
var/list/fruits = list()
if(names_in_order.len <= 3)
fruits = names_in_order
else
for(var/i in 1 to 3)
fruits += names_in_order[i]
fruits += "other plants"
var/fruit_list = english_list(fruits)
description = "A [alcohol_description] wine brewed from [fruit_list]."
var/flavor = ""
if(!primary_tastes.len)
primary_tastes = list("[alcohol_description] alcohol")
flavor += english_list(primary_tastes)
if(secondary_tastes.len)
flavor += ", with a hint of "
flavor += english_list(secondary_tastes)
taste_message = flavor
if(holder.my_atom)
holder.my_atom.on_reagent_change()
@@ -95,7 +95,6 @@
spawn(5) reagents.clear_reagents()
return
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(target.reagents && !target.reagents.total_volume)
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
return
@@ -107,7 +106,7 @@
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>")
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
else if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty.</span>")
return
+23 -12
View File
@@ -1,6 +1,7 @@
#define DIRECTION_FORWARDS 1
#define DIRECTION_OFF 0
#define DIRECTION_REVERSED -1
#define IS_OPERATING (can_conveyor_run() && operating)
GLOBAL_LIST_INIT(conveyor_belts, list()) //Saves us having to look through the entire machines list for our things
GLOBAL_LIST_INIT(conveyor_switches, list())
@@ -22,7 +23,6 @@ GLOBAL_LIST_INIT(conveyor_switches, list())
var/operable = TRUE // Can this belt actually go?
var/list/affecting // the list of all items that will be moved this ptick
var/reversed = FALSE // set to TRUE to have the conveyor belt be reversed
speed_process = TRUE //gotta go fast
var/id //ID of the connected lever
// create a conveyor
@@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list())
/obj/machinery/conveyor/update_icon()
..()
if(operating && can_conveyor_run())
if(IS_OPERATING)
icon_state = "conveyor_started_[clockwise ? "cw" : "ccw"]"
if(reversed)
icon_state += "_r"
@@ -161,20 +161,30 @@ GLOBAL_LIST_INIT(conveyor_switches, list())
update_icon()
/obj/machinery/conveyor/process()
if(!operating)
return
if(!can_conveyor_run())
if(!IS_OPERATING)
return
use_power(100)
affecting = loc.contents - src // moved items will be all in loc
if(!affecting)
return
sleep(1)
for(var/atom/movable/A in affecting)
if(!A.anchored)
if(A.loc == loc) // prevents the object from being affected if it's not currently here.
step(A,forwards)
var/still_stuff_to_move = FALSE
for(var/atom/movable/AM in affecting)
if(AM.anchored)
continue
still_stuff_to_move = TRUE
addtimer(CALLBACK(src, .proc/move_thing, AM), 1)
CHECK_TICK
if(!still_stuff_to_move && speed_process)
makeNormalProcess()
else if(still_stuff_to_move && !speed_process)
makeSpeedProcess()
/obj/machinery/conveyor/Crossed(atom/movable/AM)
if(!speed_process)
makeSpeedProcess()
..()
/obj/machinery/conveyor/proc/move_thing(atom/movable/AM)
if(!AM.anchored && AM.loc == loc)
step(AM, forwards)
/obj/machinery/conveyor/proc/can_conveyor_run()
if(stat & BROKEN)
@@ -475,3 +485,4 @@ GLOBAL_LIST_INIT(conveyor_switches, list())
#undef DIRECTION_FORWARDS
#undef DIRECTION_OFF
#undef DIRECTION_REVERSED
#undef IS_OPERATING
+1 -1
View File
@@ -22,7 +22,7 @@
/obj/machinery/r_n_d/New()
materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0,
FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
materials.precise_insertion = TRUE
..()
wires["Red"] = 0
+3 -1
View File
@@ -2,6 +2,8 @@
BLOOD SYSTEM
****************************************************/
#define EXOTIC_BLEED_MULTIPLIER 4 //Multiplies the actually bled amount by this number for the purposes of turf reaction calculations.
/mob/living/carbon/human/proc/suppress_bloodloss(amount)
if(bleedsuppress)
return
@@ -104,7 +106,7 @@
if(dna.species.exotic_blood)
var/datum/reagent/R = GLOB.chemical_reagents_list[get_blood_id()]
if(istype(R) && isturf(loc))
R.reaction_turf(get_turf(src), amt)
R.reaction_turf(get_turf(src), amt * EXOTIC_BLEED_MULTIPLIER)
/mob/living/proc/restore_blood()
blood_volume = initial(blood_volume)
+3 -4
View File
@@ -19,10 +19,9 @@
pixel_y = rand(-5, 5)
/obj/item/stack/ore/bluespace_crystal/attack_self(var/mob/user)
blink_mob(user)
user.drop_item()
user.visible_message("<span class='notice'>[user] crushes the [src]!</span>")
qdel(src)
if(use(1))
blink_mob(user)
user.visible_message("<span class='notice'>[user] crushes a [singular_name]!</span>")
/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(var/mob/living/L)
if(!is_teleport_allowed(L.z))