mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 12:04:48 +01:00
Applies what my mom taught me about conflict resolution
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
#define TARGET_INVALID_DEAD 3
|
||||
#define TARGET_INVALID_NOCKEY 4
|
||||
#define TARGET_INVALID_UNREACHABLE 5
|
||||
#define TARGET_INVALID_GOLEM 6
|
||||
#define TARGET_INVALID_EVENT 7
|
||||
|
||||
//gamemode istype helpers
|
||||
#define GAMEMODE_IS_BLOB (ticker && istype(ticker.mode, /datum/game_mode/blob))
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
//Docking error flags
|
||||
#define DOCKING_SUCCESS 0
|
||||
#define DOCKING_BLOCKED (1<<0)
|
||||
#define DOCKING_IMMOBILIZED (1<<1)
|
||||
#define DOCKING_AREA_EMPTY (1<<2)
|
||||
#define DOCKING_NULL_DESTINATION (1<<3)
|
||||
#define DOCKING_NULL_SOURCE (1<<4)
|
||||
|
||||
//Rotation params
|
||||
#define ROTATE_DIR 1
|
||||
#define ROTATE_SMOOTH 2
|
||||
#define ROTATE_OFFSET 4
|
||||
|
||||
#define SHUTTLE_DOCKER_LANDING_CLEAR 1
|
||||
#define SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT 2
|
||||
#define SHUTTLE_DOCKER_BLOCKED 3
|
||||
+21
-1
@@ -120,4 +120,24 @@ var/gaussian_next
|
||||
/proc/round_down(num)
|
||||
if(round(num) != num)
|
||||
return round(num--)
|
||||
else return num
|
||||
else return num
|
||||
|
||||
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
|
||||
/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4)
|
||||
var/list/region_x1 = list()
|
||||
var/list/region_y1 = list()
|
||||
var/list/region_x2 = list()
|
||||
var/list/region_y2 = list()
|
||||
|
||||
// These loops create loops filled with x/y values that the boundaries inhabit
|
||||
// ex: list(5, 6, 7, 8, 9)
|
||||
for(var/i in min(x1, x2) to max(x1, x2))
|
||||
region_x1["[i]"] = TRUE
|
||||
for(var/i in min(y1, y2) to max(y1, y2))
|
||||
region_y1["[i]"] = TRUE
|
||||
for(var/i in min(x3, x4) to max(x3, x4))
|
||||
region_x2["[i]"] = TRUE
|
||||
for(var/i in min(y3, y4) to max(y3, y4))
|
||||
region_y2["[i]"] = TRUE
|
||||
|
||||
return list(region_x1 & region_x2, region_y1 & region_y2)
|
||||
@@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(janitorial_equipment, list()) //list of janitorial equipment
|
||||
GLOBAL_LIST_INIT(crafting_recipes, list()) //list of all crafting recipes
|
||||
GLOBAL_LIST_INIT(prisoncomputer_list, list())
|
||||
GLOBAL_LIST_INIT(cell_logs, list())
|
||||
GLOBAL_LIST_INIT(navigation_computers, list())
|
||||
|
||||
GLOBAL_LIST_INIT(all_areas, list())
|
||||
GLOBAL_LIST_INIT(machines, list())
|
||||
|
||||
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(standard_chemicals, list("slimejelly","blood","water","lube","c
|
||||
"cryoxadone","spaceacillin","carpotoxin","lsd","fluorosurfactant",
|
||||
"fluorosurfactant","ethanol","ammonia","diethylamine","antihol","pancuronium",
|
||||
"lipolicide","condensedcapsaicin","frostoil","amanitin","psilocybin",
|
||||
"enzyme","nothing","salglu_solution","antifreeze","neurotoxin"))
|
||||
"enzyme","nothing","salglu_solution","antifreeze","neurotoxin", "jestosterone"))
|
||||
// Rare chemicals
|
||||
GLOBAL_LIST_INIT(rare_chemicals, list("minttoxin","syndicate_nanites", "xenomicrobes"))
|
||||
// Standard medicines
|
||||
|
||||
@@ -39,6 +39,8 @@ SUBSYSTEM_DEF(shuttle)
|
||||
var/list/supply_packs = list()
|
||||
var/datum/round_event/shuttle_loan/shuttle_loan
|
||||
var/sold_atoms = ""
|
||||
var/list/hidden_shuttle_turfs = list() //all turfs hidden from navigation computers associated with a list containing the image hiding them and the type of the turf they are pretending to be
|
||||
var/list/hidden_shuttle_turf_images = list() //only the images from the above list
|
||||
|
||||
/datum/controller/subsystem/shuttle/Initialize(start_timeofday)
|
||||
ordernum = rand(1,9000)
|
||||
@@ -49,7 +51,7 @@ SUBSYSTEM_DEF(shuttle)
|
||||
WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!")
|
||||
if(!supply)
|
||||
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
|
||||
|
||||
|
||||
initial_load()
|
||||
|
||||
for(var/typepath in subtypesof(/datum/supply_packs))
|
||||
@@ -259,4 +261,54 @@ SUBSYSTEM_DEF(shuttle)
|
||||
|
||||
return O
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/get_dock_overlap(x0, y0, x1, y1, z)
|
||||
. = list()
|
||||
var/list/stationary_cache = stationary
|
||||
for(var/i in 1 to stationary_cache.len)
|
||||
var/obj/docking_port/port = stationary_cache[i]
|
||||
if(!port || port.z != z)
|
||||
continue
|
||||
var/list/bounds = port.return_coords()
|
||||
var/list/overlap = get_overlap(x0, y0, x1, y1, bounds[1], bounds[2], bounds[3], bounds[4])
|
||||
var/list/xs = overlap[1]
|
||||
var/list/ys = overlap[2]
|
||||
if(xs.len && ys.len)
|
||||
.[port] = overlap
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/update_hidden_docking_ports(list/remove_turfs, list/add_turfs)
|
||||
var/list/remove_images = list()
|
||||
var/list/add_images = list()
|
||||
|
||||
if(remove_turfs)
|
||||
for(var/T in remove_turfs)
|
||||
var/list/L = hidden_shuttle_turfs[T]
|
||||
if(L)
|
||||
remove_images += L[1]
|
||||
hidden_shuttle_turfs -= remove_turfs
|
||||
|
||||
if(add_turfs)
|
||||
for(var/V in add_turfs)
|
||||
var/turf/T = V
|
||||
var/image/I
|
||||
if(remove_images.len)
|
||||
//we can just reuse any images we are about to delete instead of making new ones
|
||||
I = remove_images[1]
|
||||
remove_images.Cut(1, 2)
|
||||
I.loc = T
|
||||
else
|
||||
I = image(loc = T)
|
||||
add_images += I
|
||||
I.appearance = T.appearance
|
||||
I.override = TRUE
|
||||
hidden_shuttle_turfs[T] = list(I, T.type)
|
||||
|
||||
hidden_shuttle_turf_images -= remove_images
|
||||
hidden_shuttle_turf_images += add_images
|
||||
|
||||
for(var/V in GLOB.navigation_computers)
|
||||
var/obj/machinery/computer/camera_advanced/shuttle_docker/C = V
|
||||
C.update_hidden_docking_ports(remove_images, add_images)
|
||||
|
||||
QDEL_LIST(remove_images)
|
||||
|
||||
#undef CALL_SHUTTLE_REASON_LENGTH
|
||||
@@ -9,21 +9,21 @@
|
||||
|
||||
/mob/proc/CanContractDisease(datum/disease/D)
|
||||
if(stat == DEAD)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(D.GetDiseaseID() in resistances)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(HasDisease(D))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(count_by_type(viruses, /datum/disease/advance) >= 3)
|
||||
return 0
|
||||
if(istype(D, /datum/disease/advance) && count_by_type(viruses, /datum/disease/advance) > 0)
|
||||
return FALSE
|
||||
|
||||
if(!(type in D.viable_mobtypes))
|
||||
return -1 //for stupid fucking monkies
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/mob/proc/ContractDisease(datum/disease/D)
|
||||
|
||||
@@ -298,7 +298,7 @@ var/list/advance_cures = list(
|
||||
if(HasSymptom(S))
|
||||
return
|
||||
|
||||
if(symptoms.len < 5 + rand(-1, 1))
|
||||
if(symptoms.len < (VIRUS_SYMPTOM_LIMIT - 1) + rand(-1, 1))
|
||||
symptoms += S
|
||||
else
|
||||
RemoveSymptom(pick(symptoms))
|
||||
@@ -364,7 +364,7 @@ var/list/advance_cures = list(
|
||||
if(!user)
|
||||
return
|
||||
|
||||
var/i = 5
|
||||
var/i = VIRUS_SYMPTOM_LIMIT
|
||||
|
||||
var/datum/disease/advance/D = new(0, null)
|
||||
D.symptoms = list()
|
||||
|
||||
@@ -48,12 +48,4 @@
|
||||
if(!D)
|
||||
name = "Reality Enhancer"
|
||||
symptoms = list(new/datum/symptom/sensory_restoration)
|
||||
..(process, D, copy)
|
||||
|
||||
// Sensory Destruction
|
||||
|
||||
/datum/disease/advance/sensory_destruction/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0)
|
||||
if(!D)
|
||||
name = "Reality Destruction"
|
||||
symptoms = list(new/datum/symptom/sensory_destruction)
|
||||
..(process, D, copy)
|
||||
@@ -15,8 +15,8 @@ Bonus
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
/datum/symptom/sensory_restoration
|
||||
name = "Sensory Restoration"
|
||||
/datum/symptom/mind_restoration
|
||||
name = "Mind Restoration"
|
||||
stealth = -1
|
||||
resistance = -4
|
||||
stage_speed = -4
|
||||
@@ -24,85 +24,42 @@ Bonus
|
||||
level = 5
|
||||
severity = 0
|
||||
|
||||
/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A)
|
||||
/datum/symptom/mind_restoration/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 3))
|
||||
var/mob/living/M = A.affected_mob
|
||||
var/datum/reagents/RD = M.reagents
|
||||
|
||||
switch(A.stage)
|
||||
if(2)
|
||||
if(RD.check_and_add("oculine", 10, 10))
|
||||
to_chat(M, "<span class='notice'>Your hearing feels clearer and crisp.</span>")
|
||||
if(3)
|
||||
if(RD.check_and_add("antihol", 10, 10))
|
||||
to_chat(M, "<span class='notice'>You feel sober.</span>")
|
||||
RD.check_and_add("oculine", 10, 10)
|
||||
if(4)
|
||||
if(RD.check_and_add("synaphydramine", 10, 5))
|
||||
to_chat(M, "<span class='notice'>You feel focused.</span>")
|
||||
RD.check_and_add("antihol", 10, 10)
|
||||
RD.check_and_add("oculine", 10, 10)
|
||||
if(5)
|
||||
if(RD.check_and_add("mannitol", 10, 10))
|
||||
to_chat(M, "<span class='notice'>Your mind feels relaxed.</span>")
|
||||
RD.check_and_add("synaphydramine", 10, 5)
|
||||
RD.check_and_add("antihol", 10, 10)
|
||||
RD.check_and_add("oculine", 10, 10)
|
||||
if(A.stage >= 3)
|
||||
M.AdjustSlur(-2)
|
||||
M.AdjustDrunk(-4)
|
||||
M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3, 0, 1)
|
||||
if(A.stage >= 4)
|
||||
M.AdjustDrowsy(-2)
|
||||
if(RD.has_reagent("lsd"))
|
||||
RD.remove_reagent("lsd", 5)
|
||||
if(RD.has_reagent("histamine"))
|
||||
RD.remove_reagent("histamine", 5)
|
||||
M.AdjustHallucinate(-10)
|
||||
if(A.stage >= 5)
|
||||
RD.check_and_add("mannitol", 10, 10)
|
||||
|
||||
return
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
Sensory-Destruction
|
||||
noticable.
|
||||
Lowers resistance
|
||||
Decreases stage speed tremendously.
|
||||
Decreases transmittablity tremendously.
|
||||
the drugs hit them so hard they have to focus on not dying
|
||||
|
||||
Bonus
|
||||
The body generates Sensory destructive chemicals.
|
||||
You cannot taste anything anymore.
|
||||
ethanol for extremely drunk victim
|
||||
lsd to break the mind
|
||||
impedrezene to ruin the brain
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
/datum/symptom/sensory_destruction
|
||||
name = "Sensory destruction"
|
||||
/datum/symptom/sensory_restoration
|
||||
name = "Sensory Restoration"
|
||||
stealth = -1
|
||||
resistance = -2
|
||||
stage_speed = -3
|
||||
resistance = -3
|
||||
stage_speed = -2
|
||||
transmittable = -4
|
||||
level = 6
|
||||
severity = 5
|
||||
level = 4
|
||||
|
||||
/datum/symptom/sensory_destruction/Activate(var/datum/disease/advance/A)
|
||||
/datum/symptom/sensory_restoration/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB))
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(1)
|
||||
to_chat(M, "<span class='warning'><b>You can't taste a thing.</b></span>")
|
||||
if(2)
|
||||
to_chat(M, "<span class='warning'><b>You can't feel anything.</b></span>")
|
||||
if(prob(10))
|
||||
M.reagents.add_reagent("morphine",rand(5,7))
|
||||
if(3)
|
||||
M.reagents.add_reagent("ethanol",rand(5,7))
|
||||
to_chat(M, "<span class='warning'><b>You feel absolutely hammered.</b></span>")
|
||||
if(prob(15))
|
||||
M.reagents.add_reagent("morphine",rand(5,7))
|
||||
if(4)
|
||||
M.reagents.add_reagent_list(list("ethanol"=rand(7,15),"lsd"=rand(5,10)))
|
||||
to_chat(M, "<span class='warning'><b>You try to focus on not dying.</b></span>")
|
||||
if(prob(20))
|
||||
M.reagents.add_reagent("morphine",rand(5,7))
|
||||
if(5)
|
||||
M.reagents.add_reagent_list(list("haloperidol"=rand(5,15),"ethanol"=rand(7,20),"lsd"=rand(5,15)))
|
||||
to_chat(M, "<span class='warning'><b>u can count 2 potato!</b></span>")
|
||||
if(prob(25))
|
||||
M.reagents.add_reagent("morphine",rand(5,7))
|
||||
return
|
||||
if(4, 5)
|
||||
if(M.reagents.get_reagent_amount("oculine") < 20)
|
||||
M.reagents.add_reagent("oculine", 20)
|
||||
else
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
|
||||
to_chat(M, "<span class='notice'>[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]</span>")
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Stimulant //gotta go fast
|
||||
|
||||
Noticable.
|
||||
Lowers resistance significantly.
|
||||
Decreases stage speed moderately..
|
||||
Decreases transmittablity tremendously.
|
||||
Moderate Level.
|
||||
|
||||
Bonus
|
||||
The body generates Ephedrine.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/stimulant
|
||||
|
||||
name = "Stimulant"
|
||||
stealth = -1
|
||||
resistance = -3
|
||||
stage_speed = -2
|
||||
transmittable = -4
|
||||
level = 3
|
||||
|
||||
/datum/symptom/stimulant/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 10))
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(5)
|
||||
if(M.reagents.get_reagent_amount("ephedrine") < 10)
|
||||
M.reagents.add_reagent("ephedrine", 10)
|
||||
else
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
|
||||
to_chat(M, "<span class='notice'>[pick("You feel restless.", "You feel like running laps around the station.")]</span>")
|
||||
return
|
||||
@@ -47,44 +47,4 @@ Bonus
|
||||
M.BecomeNearsighted()
|
||||
if(prob(eyes.damage - 10 + 1))
|
||||
if(M.BecomeBlind())
|
||||
to_chat(M, "<span class='userdanger'>You go blind!</span>")
|
||||
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Ocular Restoration
|
||||
|
||||
Noticable.
|
||||
Lowers resistance significantly.
|
||||
Decreases stage speed moderately..
|
||||
Decreases transmittablity tremendously.
|
||||
High level.
|
||||
|
||||
Bonus
|
||||
Restores eyesight.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/visionaid
|
||||
|
||||
name = "Ocular Restoration"
|
||||
stealth = -1
|
||||
resistance = -3
|
||||
stage_speed = -2
|
||||
transmittable = -4
|
||||
level = 4
|
||||
|
||||
/datum/symptom/visionaid/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(4, 5)
|
||||
if(M.reagents.get_reagent_amount("oculine") < 20)
|
||||
M.reagents.add_reagent("oculine", 20)
|
||||
else
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
|
||||
to_chat(M, "<span class='notice'>[pick("Your eyes feel great.", "You are now blinking manually.", "You don't feel the need to blink.")]</span>")
|
||||
return
|
||||
to_chat(M, "<span class='userdanger'>You go blind!</span>")
|
||||
@@ -1,47 +1,6 @@
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Weight Gain
|
||||
|
||||
Very Very Noticable.
|
||||
Decreases resistance.
|
||||
Decreases stage speed.
|
||||
Reduced transmittable.
|
||||
Intense Level.
|
||||
|
||||
Bonus
|
||||
Increases the weight gain of the mob,
|
||||
forcing it to eventually turn fat.
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/weight_gain
|
||||
|
||||
name = "Weight Gain"
|
||||
stealth = -3
|
||||
resistance = -3
|
||||
stage_speed = -2
|
||||
transmittable = -2
|
||||
level = 4
|
||||
severity = 1
|
||||
|
||||
/datum/symptom/weight_gain/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB))
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(1, 2, 3, 4)
|
||||
to_chat(M, "<span class='warning'>[pick("You feel blubbery.", "Your stomach hurts.")]</span>")
|
||||
else
|
||||
M.overeatduration = min(M.overeatduration + 100, 600)
|
||||
M.nutrition = min(M.nutrition + 100, NUTRITION_LEVEL_FULL)
|
||||
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Weight Loss
|
||||
|
||||
Very Very Noticable.
|
||||
@@ -77,45 +36,4 @@ Bonus
|
||||
else
|
||||
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
|
||||
M.overeatduration = max(M.overeatduration - 100, 0)
|
||||
M.nutrition = max(M.nutrition - 100, 0)
|
||||
|
||||
return
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Weight Even
|
||||
|
||||
Very Noticable.
|
||||
Decreases resistance.
|
||||
Decreases stage speed.
|
||||
Reduced transmittable.
|
||||
High level.
|
||||
|
||||
Bonus
|
||||
Causes the weight of the mob to
|
||||
be even, meaning eating isn't
|
||||
required anymore.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/weight_even
|
||||
|
||||
name = "Weight Even"
|
||||
stealth = -3
|
||||
resistance = -2
|
||||
stage_speed = -2
|
||||
transmittable = -2
|
||||
level = 4
|
||||
|
||||
/datum/symptom/weight_even/Activate(datum/disease/advance/A)
|
||||
..()
|
||||
if(prob(SYMPTOM_ACTIVATION_PROB))
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(4, 5)
|
||||
M.overeatduration = 0
|
||||
M.nutrition = NUTRITION_LEVEL_WELL_FED + 50
|
||||
|
||||
return
|
||||
M.nutrition = max(M.nutrition - 100, 0)
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
var/assigned_role //assigned role is what job you're assigned to when you join the station.
|
||||
var/special_role //special roles are typically reserved for antags or roles like ERT. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal.
|
||||
var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets
|
||||
var/list/restricted_roles = list()
|
||||
|
||||
var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button.
|
||||
|
||||
@@ -825,7 +825,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "IV drip crate"
|
||||
access = access_cmo
|
||||
access = access_medical
|
||||
|
||||
/datum/supply_packs/medical/surgery
|
||||
name = "Surgery Crate"
|
||||
@@ -1036,6 +1036,15 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
containername = "party equipment"
|
||||
announce_beacons = list("Bar" = list("Bar"))
|
||||
|
||||
/datum/supply_packs/organic/bar
|
||||
name = "Bar Starter Kit"
|
||||
contains = list(/obj/item/storage/box/drinkingglasses,
|
||||
/obj/item/circuitboard/soda,
|
||||
/obj/item/circuitboard/beer)
|
||||
cost = 20
|
||||
containername = "beer starter kit"
|
||||
announce_beacons = list("Bar" = list("Bar"))
|
||||
|
||||
//////// livestock
|
||||
/datum/supply_packs/organic/cow
|
||||
name = "Cow Crate"
|
||||
|
||||
@@ -482,6 +482,16 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
surplus = 25
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/dangerous/sniper_compact //For when you really really hate that one guy.
|
||||
name = "Compact Sniper Rifle"
|
||||
desc = "A compact, unscoped version of the operative sniper rifle. Packs a powerful punch, but ammo is limited."
|
||||
reference = "CSR"
|
||||
item = /obj/item/gun/projectile/automatic/sniper_rifle/compact
|
||||
cost = 16
|
||||
surplus = 0
|
||||
cant_discount = TRUE
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/dangerous/crossbow
|
||||
name = "Energy Crossbow"
|
||||
desc = "A miniature energy crossbow that is small enough both to fit into a pocket and to slip into a backpack unnoticed by observers. Fires bolts tipped with toxin, a poisonous substance that is the product of a living organism. Stuns enemies for a short period of time. Recharges automatically."
|
||||
@@ -921,7 +931,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
reference = "PB"
|
||||
item = /obj/item/pizza_bomb
|
||||
cost = 5
|
||||
surplus = 8
|
||||
surplus = 80
|
||||
|
||||
/datum/uplink_item/explosives/grenadier
|
||||
name = "Grenadier's belt"
|
||||
@@ -1597,6 +1607,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
item = /obj/item/storage/box/syndicate
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
cant_discount = TRUE // You fucking wish
|
||||
var/crate_value = 50
|
||||
|
||||
/datum/uplink_item/badass/surplus_crate/super
|
||||
name = "Syndicate Super Surplus Crate"
|
||||
desc = "A crate containing 125 telecrystals worth of random syndicate leftovers."
|
||||
reference = "SYSS"
|
||||
cost = 40
|
||||
crate_value = 125
|
||||
|
||||
/datum/uplink_item/badass/surplus_crate/spawn_item(turf/loc, obj/item/uplink/U)
|
||||
var/obj/structure/closet/crate/C = new(loc)
|
||||
@@ -1604,16 +1622,16 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
var/list/buyable_items = list()
|
||||
for(var/category in temp_uplink_list)
|
||||
buyable_items += temp_uplink_list[category]
|
||||
var/remaining_TC = crate_value
|
||||
var/list/bought_items = list()
|
||||
var/list/itemlog = list()
|
||||
U.uses -= cost
|
||||
U.used_TC = 20
|
||||
var/remaining_TC = 50
|
||||
U.used_TC = cost
|
||||
|
||||
var/datum/uplink_item/I
|
||||
while(remaining_TC)
|
||||
I = pick(buyable_items)
|
||||
if(!I.surplus)
|
||||
if(!I.surplus || prob(100 - I.surplus))
|
||||
continue
|
||||
if(I.cost > remaining_TC)
|
||||
continue
|
||||
|
||||
@@ -61,6 +61,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
|
||||
var/outdoors = 0 //For space, the asteroid, lavaland, etc. Used with blueprints to determine if we are adding a new area (vs editing a station room)
|
||||
var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default?
|
||||
var/nad_allowed = FALSE //is the station NAD allowed on this area?
|
||||
|
||||
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
|
||||
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
|
||||
@@ -168,31 +169,36 @@ var/list/ghostteleportlocs = list()
|
||||
name = "\improper Emergency Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle2"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_4
|
||||
name = "\improper Escape Pod Four"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod1/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -206,6 +212,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/escape_pod2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod2/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -219,6 +226,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/escape_pod3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod3/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -232,6 +240,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
|
||||
name = "\improper Escape Pod Five"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod5/station
|
||||
icon_state = "shuttle2"
|
||||
@@ -304,6 +313,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/syndicate_elite
|
||||
name = "\improper Syndicate Elite Shuttle"
|
||||
icon_state = "shuttlered"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/syndicate_elite/mothership
|
||||
name = "\improper Syndicate Elite Shuttle"
|
||||
@@ -316,6 +326,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/syndicate_sit
|
||||
name = "\improper Syndicate SIT Shuttle"
|
||||
icon_state = "shuttlered"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/assault_pod
|
||||
name = "Steel Rain"
|
||||
@@ -451,6 +462,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/syndicate
|
||||
name = "Syndicate Nuclear Team Shuttle"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/trade
|
||||
name = "Trade Shuttle"
|
||||
@@ -491,6 +503,7 @@ var/list/ghostteleportlocs = list()
|
||||
icon_state = "centcom"
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/centcom/control
|
||||
name = "\improper Centcom Control"
|
||||
@@ -537,6 +550,7 @@ var/list/ghostteleportlocs = list()
|
||||
name = "\improper Syndicate Forward Base"
|
||||
icon_state = "syndie-ship"
|
||||
requires_power = 0
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/syndicate_mothership/control
|
||||
name = "\improper Syndicate Control Room"
|
||||
|
||||
@@ -105,15 +105,25 @@
|
||||
/datum/dna/gene/disability/nervousness/New()
|
||||
block=NERVOUSBLOCK
|
||||
|
||||
|
||||
/datum/dna/gene/disability/blindness
|
||||
name="Blindness"
|
||||
activation_message="You can't seem to see anything."
|
||||
deactivation_message ="You can see now, in case you didn't notice..."
|
||||
activation_message = "You can't seem to see anything."
|
||||
deactivation_message = "You can see now, in case you didn't notice..."
|
||||
instability = -GENE_INSTABILITY_MAJOR
|
||||
disability=BLIND
|
||||
disability = BLIND
|
||||
|
||||
/datum/dna/gene/disability/blindness/New()
|
||||
block=BLINDBLOCK
|
||||
block = BLINDBLOCK
|
||||
|
||||
/datum/dna/gene/disability/blindness/activate(mob/M, connected, flags)
|
||||
..()
|
||||
M.update_blind_effects()
|
||||
|
||||
/datum/dna/gene/disability/blindness/deactivate(mob/M, connected, flags)
|
||||
..()
|
||||
M.update_blind_effects()
|
||||
|
||||
|
||||
/datum/dna/gene/disability/colourblindness
|
||||
name = "Colourblindness"
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
/obj/effect/proc_holder/spell/targeted/remotetalk/cast(list/targets, mob/user = usr)
|
||||
if(!ishuman(user)) return
|
||||
var/say = input("What do you wish to say") as text|null
|
||||
if(!say)
|
||||
if(!say || usr.stat)
|
||||
return
|
||||
say = strip_html(say)
|
||||
say = pencode_to_html(say, usr, format = 0, fields = 0)
|
||||
|
||||
@@ -140,7 +140,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
if(changeling.current.mind.assigned_role == "Clown")
|
||||
to_chat(changeling.current, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
changeling.current.mutations.Remove(CLUMSY)
|
||||
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(changeling.current)
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in changeling.objectives)
|
||||
to_chat(changeling.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
@@ -157,7 +157,8 @@ var/global/list/all_cults = list()
|
||||
if(mob.mind.assigned_role == "Clown")
|
||||
to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(mob)
|
||||
var/obj/item/paper/talisman/supply/T = new(mob)
|
||||
var/list/slots = list (
|
||||
"backpack" = slot_in_backpack,
|
||||
|
||||
@@ -353,7 +353,7 @@ var/list/teleport_runes = list()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
for(var/mob/living/M in T.contents)
|
||||
if(!iscultist(M) && !ismindshielded(M) && ishuman(M))
|
||||
if(!iscultist(M) && !ismindshielded(M) && !isgolem(M) && ishuman(M))
|
||||
convertees.Add(M)
|
||||
if(!convertees.len)
|
||||
fail_invoke()
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
if(devil_mind.assigned_role == "Clown")
|
||||
to_chat(devil_mind.current, "Your infernal nature allows you to wield weapons without harming yourself.")
|
||||
devil_mind.current.mutations.Remove(CLUMSY)
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(devil_mind.current)
|
||||
spawn(10)
|
||||
devil_mind.devilinfo.update_hud()
|
||||
if(issilicon(devil_mind.current))
|
||||
|
||||
@@ -53,6 +53,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
for(var/datum/mind/raider in raiders)
|
||||
raider.assigned_role = SPECIAL_ROLE_RAIDER
|
||||
raider.special_role = SPECIAL_ROLE_RAIDER
|
||||
raider.offstation_role = TRUE
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -76,10 +76,12 @@
|
||||
|
||||
scientist.assigned_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST
|
||||
scientist.special_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST
|
||||
scientist.offstation_role = TRUE
|
||||
log_game("[key_name(scientist)] has been selected as an abductor team [team_number] scientist.")
|
||||
|
||||
agent.assigned_role = SPECIAL_ROLE_ABDUCTOR_AGENT
|
||||
agent.special_role = SPECIAL_ROLE_ABDUCTOR_AGENT
|
||||
agent.offstation_role = TRUE
|
||||
log_game("[key_name(agent)] has been selected as an abductor team [team_number] agent.")
|
||||
|
||||
abductors |= agent
|
||||
|
||||
@@ -54,6 +54,7 @@ proc/issyndicate(mob/living/M as mob)
|
||||
for(var/datum/mind/synd_mind in syndicates)
|
||||
synd_mind.assigned_role = SPECIAL_ROLE_NUKEOPS //So they aren't chosen for other jobs.
|
||||
synd_mind.special_role = SPECIAL_ROLE_NUKEOPS
|
||||
synd_mind.offstation_role = TRUE
|
||||
return 1
|
||||
|
||||
|
||||
@@ -172,6 +173,7 @@ proc/issyndicate(mob/living/M as mob)
|
||||
M.dna.species.create_organs(M)
|
||||
M.cleanSE() //No fat/blind/colourblind/epileptic/whatever ops.
|
||||
M.overeatduration = 0
|
||||
M.flavor_text = null
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = M.get_organ("head")
|
||||
var/hair_c = pick("#8B4513","#000000","#FF4500","#FFD700") // Brown, black, red, blonde
|
||||
|
||||
@@ -402,19 +402,34 @@ var/bomb_set
|
||||
icon_state = "nucleardisk"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/disk/nuclear/unrestricted
|
||||
desc = "Seems to have been stripped of its safeties, you better not lose it."
|
||||
|
||||
/obj/item/disk/nuclear/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
GLOB.poi_list |= src
|
||||
|
||||
/obj/item/disk/nuclear/process()
|
||||
var/turf/disk_loc = get_turf(src)
|
||||
if(!is_secure_level(disk_loc.z))
|
||||
if(!check_disk_loc())
|
||||
var/holder = get(src, /mob)
|
||||
if(holder)
|
||||
to_chat(holder, "<span class='danger'>You can't help but feel that you just lost something back there...</span>")
|
||||
qdel(src)
|
||||
|
||||
//station disk is allowed on z1, escape shuttle/pods, CC, and syndicate shuttles/base, reset otherwise
|
||||
/obj/item/disk/nuclear/proc/check_disk_loc()
|
||||
var/turf/T = get_turf(src)
|
||||
var/area/A = get_area(src)
|
||||
if(is_station_level(T.z))
|
||||
return TRUE
|
||||
if(A.nad_allowed)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/disk/nuclear/unrestricted/check_disk_loc()
|
||||
return TRUE
|
||||
|
||||
/obj/item/disk/nuclear/Destroy(force)
|
||||
var/turf/diskturf = get_turf(src)
|
||||
|
||||
|
||||
@@ -35,6 +35,11 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu
|
||||
var/turf/current_location = get_turf(possible_target.current)
|
||||
if(current_location && !is_level_reachable(current_location.z))
|
||||
return TARGET_INVALID_UNREACHABLE
|
||||
if(isgolem(possible_target.current))
|
||||
return TARGET_INVALID_GOLEM
|
||||
if(possible_target.offstation_role)
|
||||
return TARGET_INVALID_EVENT
|
||||
|
||||
|
||||
/datum/objective/proc/find_target()
|
||||
var/list/possible_targets = list()
|
||||
|
||||
@@ -122,7 +122,8 @@
|
||||
if(mob.mind.assigned_role == "Clown")
|
||||
to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(mob)
|
||||
|
||||
var/obj/item/flash/T = new(mob)
|
||||
var/obj/item/toy/crayon/spraycan/R = new(mob)
|
||||
|
||||
@@ -299,6 +299,9 @@
|
||||
if(traitor_mob.mind.assigned_role == "Clown")
|
||||
to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
traitor_mob.mutations.Remove(CLUMSY)
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(traitor_mob)
|
||||
|
||||
|
||||
// find a radio! toolbox(es), backpack, belt, headset
|
||||
var/obj/item/R = locate(/obj/item/pda) in traitor_mob.contents //Hide the uplink in a PDA if available, otherwise radio
|
||||
|
||||
@@ -186,7 +186,8 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
if(vampire.current.mind.assigned_role == "Clown")
|
||||
to_chat(vampire.current, "Your lust for blood has allowed you to overcome your clumsy nature allowing you to wield weapons without harming yourself.")
|
||||
vampire.current.mutations.Remove(CLUMSY)
|
||||
|
||||
var/datum/action/innate/toggle_clumsy/A = new
|
||||
A.Grant(vampire.current)
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in vampire.objectives)
|
||||
to_chat(vampire.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
/obj/item/organ/internal/cyberimp/chest/nutriment/plus
|
||||
)
|
||||
|
||||
/datum/outfit/job/ntnavyofficer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
H.mind.offstation_role = TRUE
|
||||
|
||||
// CC Officials who lead ERTs, Death Squads, etc.
|
||||
/datum/job/ntspecops
|
||||
title = "Special Operations Officer"
|
||||
@@ -88,4 +94,10 @@
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_stun,
|
||||
/obj/item/organ/internal/cyberimp/chest/nutriment/plus,
|
||||
/obj/item/organ/internal/cyberimp/arm/combat/centcom
|
||||
)
|
||||
)
|
||||
|
||||
/datum/outfit/job/ntspecops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
H.mind.offstation_role = TRUE
|
||||
@@ -125,7 +125,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons, access_ntrep)
|
||||
access_clown, access_mime, access_RC_announce, access_keycard_auth, access_gateway, access_weapons, access_ntrep)
|
||||
outfit = /datum/outfit/job/nanotrasenrep
|
||||
|
||||
/datum/outfit/job/nanotrasenrep
|
||||
@@ -205,7 +205,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_magistrate)
|
||||
access_clown, access_mime, access_RC_announce, access_keycard_auth, access_gateway, access_magistrate)
|
||||
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_lawyer, access_magistrate, access_heads)
|
||||
outfit = /datum/outfit/job/judge
|
||||
|
||||
|
||||
@@ -253,6 +253,27 @@
|
||||
if(!ismachine(H))
|
||||
H.mutations.Add(COMIC)
|
||||
|
||||
//action given to antag clowns
|
||||
/datum/action/innate/toggle_clumsy
|
||||
name = "Toggle Clown Clumsy"
|
||||
button_icon_state = "clown"
|
||||
|
||||
/datum/action/innate/toggle_clumsy/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.mutations.Add(CLUMSY)
|
||||
active = TRUE
|
||||
background_icon_state = "bg_spell"
|
||||
UpdateButtonIcon()
|
||||
to_chat(H, "<span class='notice'>You start acting clumsy to throw suspicions off. Focus again before using weapons.</span>")
|
||||
|
||||
/datum/action/innate/toggle_clumsy/Deactivate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.mutations.Remove(CLUMSY)
|
||||
active = FALSE
|
||||
background_icon_state = "bg_default"
|
||||
UpdateButtonIcon()
|
||||
to_chat(H, "<span class='notice'>You focus and can now use weapons regularly.</span>")
|
||||
|
||||
/datum/job/mime
|
||||
title = "Mime"
|
||||
flag = MIME
|
||||
|
||||
@@ -64,11 +64,6 @@
|
||||
B.name = "Uplifting Primer"
|
||||
if("toolboxia")
|
||||
B.name = "Toolbox Manifesto Robusto"
|
||||
if("homosexuality")
|
||||
B.name = "Guys Gone Wild"
|
||||
if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
|
||||
B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
|
||||
H.setBrainLoss(99) // starts off retarded as fuck
|
||||
if("science")
|
||||
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
|
||||
else
|
||||
|
||||
@@ -53,5 +53,6 @@
|
||||
H.faction += "syndicate"
|
||||
var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS]
|
||||
opshud.join_hud(H.mind.current)
|
||||
H.mind.offstation_role = TRUE
|
||||
set_antag_hud(H.mind.current, "hudoperative")
|
||||
H.regenerate_icons()
|
||||
@@ -35,25 +35,24 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(25))
|
||||
if(!(resistance_flags & INDESTRUCTIBLE))
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(prob(50))
|
||||
for(var/x in verbs)
|
||||
verbs -= x
|
||||
set_broken()
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
for(var/x in verbs)
|
||||
verbs -= x
|
||||
set_broken()
|
||||
else
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(25))
|
||||
qdel(src)
|
||||
return
|
||||
if(prob(50))
|
||||
for(var/x in verbs)
|
||||
verbs -= x
|
||||
set_broken()
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
for(var/x in verbs)
|
||||
verbs -= x
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/computer/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(prob(Proj.damage))
|
||||
@@ -97,8 +96,9 @@
|
||||
set_light(light_range_on, light_power_on)
|
||||
|
||||
/obj/machinery/computer/proc/set_broken()
|
||||
stat |= BROKEN
|
||||
update_icon()
|
||||
if(!(resistance_flags & INDESTRUCTIBLE))
|
||||
stat |= BROKEN
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/computer/proc/decode(text)
|
||||
// Adds line breaks
|
||||
@@ -114,7 +114,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/attackby(obj/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver) && circuit)
|
||||
if(istype(I, /obj/item/screwdriver) && circuit && !(resistance_flags & INDESTRUCTIBLE))
|
||||
var/obj/item/screwdriver/S = I
|
||||
playsound(src.loc, S.usesound, 50, 1)
|
||||
if(do_after(user, 20 * S.toolspeed, target = src))
|
||||
|
||||
@@ -617,6 +617,30 @@ to destroy them and players will be able to make replacements.
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/item/circuitboard/soda
|
||||
name = "Circuit board (Soda Machine)"
|
||||
build_path = /obj/machinery/chem_dispenser/soda
|
||||
board_type = "machine"
|
||||
frame_desc = "Requires 2 Matter Bins, 1 Manipulators, 1 Capacitor, 1 Console Screen, and 1 Power Cell."
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/cell = 1)
|
||||
|
||||
/obj/item/circuitboard/beer
|
||||
name = "Circuit board (Beer Machine)"
|
||||
build_path = /obj/machinery/chem_dispenser/beer
|
||||
board_type = "machine"
|
||||
frame_desc = "Requires 2 Matter Bins, 1 Manipulators, 1 Capacitor, 1 Console Screen, and 1 Power Cell."
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/cell = 1)
|
||||
|
||||
|
||||
/obj/item/circuitboard/circuit_imprinter
|
||||
name = "Circuit board (Circuit Imprinter)"
|
||||
|
||||
@@ -1232,7 +1232,8 @@
|
||||
/obj/item/kitchen/mould/bear = 1, /obj/item/kitchen/mould/worm = 1,
|
||||
/obj/item/kitchen/mould/bean = 1, /obj/item/kitchen/mould/ball = 1,
|
||||
/obj/item/kitchen/mould/cane = 1, /obj/item/kitchen/mould/cash = 1,
|
||||
/obj/item/kitchen/mould/coin = 1, /obj/item/kitchen/mould/loli = 1)
|
||||
/obj/item/kitchen/mould/coin = 1, /obj/item/kitchen/mould/loli = 1,
|
||||
/obj/item/kitchen/cutter = 2)
|
||||
contraband = list(/obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife/butcher = 2)
|
||||
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
@@ -231,16 +231,10 @@
|
||||
if(amount < used)
|
||||
return FALSE
|
||||
amount -= used
|
||||
if(amount < 1)
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(locate(src) in R.module.modules)
|
||||
R.module.modules -= src
|
||||
if(R)
|
||||
R.unEquip(src, TRUE)
|
||||
zero_amount()
|
||||
if(check)
|
||||
zero_amount()
|
||||
update_icon()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/stack/proc/get_amount()
|
||||
return amount
|
||||
@@ -307,6 +301,12 @@
|
||||
|
||||
/obj/item/stack/proc/zero_amount()
|
||||
if(amount < 1)
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(locate(src) in R.module.modules)
|
||||
R.module.modules -= src
|
||||
if(usr)
|
||||
usr.unEquip(src, TRUE)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -122,6 +122,10 @@ var/global/list/datum/stack_recipe/silverfancy_tile_recipes = list ( \
|
||||
mineralType = "titanium"
|
||||
materials = list(MAT_TITANIUM=500)
|
||||
|
||||
/obj/item/stack/tile/mineral/titanium/purple
|
||||
turf_type = /turf/simulated/floor/mineral/titanium/purple
|
||||
icon_state = "tile_plasma"
|
||||
|
||||
/obj/item/stack/tile/mineral/plastitanium
|
||||
name = "plas-titanium tile"
|
||||
singular_name = "plas-titanium floor tile"
|
||||
|
||||
@@ -338,6 +338,7 @@
|
||||
H.emote("gasp")
|
||||
if(!H.undergoing_cardiac_arrest() && (prob(10) || defib.combat)) // Your heart explodes.
|
||||
H.set_heartattack(TRUE)
|
||||
H.shock_internal_organs(100)
|
||||
add_attack_logs(user, M, "Stunned with [src]")
|
||||
defib.deductcharge(revivecost)
|
||||
cooldown = 1
|
||||
@@ -388,6 +389,7 @@
|
||||
update_icon()
|
||||
return
|
||||
H.set_heartattack(FALSE)
|
||||
H.shock_internal_organs(100)
|
||||
user.visible_message("<span class='boldnotice'>[defib] pings: Cardiac arrhythmia corrected.</span>")
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
@@ -422,6 +424,7 @@
|
||||
H.emote("gasp")
|
||||
if(tplus > tloss)
|
||||
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
|
||||
H.shock_internal_organs(100)
|
||||
H.med_hud_set_health()
|
||||
H.med_hud_set_status()
|
||||
defib.deductcharge(revivecost)
|
||||
@@ -484,6 +487,7 @@
|
||||
H.Weaken(5)
|
||||
if(!H.undergoing_cardiac_arrest() && prob(10)) // Your heart explodes.
|
||||
H.set_heartattack(TRUE)
|
||||
H.shock_internal_organs(100)
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
H.emote("gasp")
|
||||
add_attack_logs(user, M, "Stunned with [src]")
|
||||
@@ -539,6 +543,7 @@
|
||||
H.emote("gasp")
|
||||
if(tplus > tloss)
|
||||
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
|
||||
H.shock_internal_organs(100)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.use(revivecost)
|
||||
|
||||
@@ -18,10 +18,11 @@
|
||||
var/datatype = 0
|
||||
var/value = 0
|
||||
|
||||
/obj/item/dnainjector/New()
|
||||
/obj/item/dnainjector/Initialize()
|
||||
. = ..()
|
||||
if(datatype && block)
|
||||
buf=new
|
||||
buf.dna=new
|
||||
buf = new
|
||||
buf.dna = new
|
||||
buf.types = datatype
|
||||
buf.dna.ResetSE()
|
||||
SetValue(value)
|
||||
@@ -37,29 +38,29 @@
|
||||
return selblock
|
||||
|
||||
/obj/item/dnainjector/proc/GetState(var/selblock=0)
|
||||
var/real_block=GetRealBlock(selblock)
|
||||
if(buf.types&DNA2_BUF_SE)
|
||||
var/real_block = GetRealBlock(selblock)
|
||||
if(buf.types & DNA2_BUF_SE)
|
||||
return buf.dna.GetSEState(real_block)
|
||||
else
|
||||
return buf.dna.GetUIState(real_block)
|
||||
|
||||
/obj/item/dnainjector/proc/SetState(var/on, var/selblock=0)
|
||||
var/real_block=GetRealBlock(selblock)
|
||||
if(buf.types&DNA2_BUF_SE)
|
||||
var/real_block = GetRealBlock(selblock)
|
||||
if(buf.types & DNA2_BUF_SE)
|
||||
return buf.dna.SetSEState(real_block,on)
|
||||
else
|
||||
return buf.dna.SetUIState(real_block,on)
|
||||
|
||||
/obj/item/dnainjector/proc/GetValue(var/selblock=0)
|
||||
var/real_block=GetRealBlock(selblock)
|
||||
if(buf.types&DNA2_BUF_SE)
|
||||
var/real_block = GetRealBlock(selblock)
|
||||
if(buf.types & DNA2_BUF_SE)
|
||||
return buf.dna.GetSEValue(real_block)
|
||||
else
|
||||
return buf.dna.GetUIValue(real_block)
|
||||
|
||||
/obj/item/dnainjector/proc/SetValue(var/val,var/selblock=0)
|
||||
var/real_block=GetRealBlock(selblock)
|
||||
if(buf.types&DNA2_BUF_SE)
|
||||
var/real_block = GetRealBlock(selblock)
|
||||
if(buf.types & DNA2_BUF_SE)
|
||||
return buf.dna.SetSEValue(real_block,val)
|
||||
else
|
||||
return buf.dna.SetUIValue(real_block,val)
|
||||
@@ -73,6 +74,10 @@
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
H = M
|
||||
|
||||
if(!buf)
|
||||
log_runtime(EXCEPTION("[src] used by [user] on [M] failed to initialize properly."), src)
|
||||
return
|
||||
|
||||
spawn(0) //Some mutations have sleeps in them, like monkey
|
||||
if(!(NOCLONE in M.mutations) && !(H && (NO_DNA in H.dna.species.species_traits))) // prevents drained people from having their DNA changed
|
||||
var/prev_ue = M.dna.unique_enzymes
|
||||
@@ -160,7 +165,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/hulkmut/New()
|
||||
/obj/item/dnainjector/hulkmut/Initialize()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
@@ -171,7 +176,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antihulk/New()
|
||||
/obj/item/dnainjector/antihulk/Initialize()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
@@ -182,7 +187,7 @@
|
||||
value = 0xFFF
|
||||
//block = 8
|
||||
|
||||
/obj/item/dnainjector/xraymut/New()
|
||||
/obj/item/dnainjector/xraymut/Initialize()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
@@ -193,7 +198,7 @@
|
||||
value = 0x001
|
||||
//block = 8
|
||||
|
||||
/obj/item/dnainjector/antixray/New()
|
||||
/obj/item/dnainjector/antixray/Initialize()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
@@ -204,7 +209,7 @@
|
||||
value = 0xFFF
|
||||
//block = 10
|
||||
|
||||
/obj/item/dnainjector/firemut/New()
|
||||
/obj/item/dnainjector/firemut/Initialize()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
@@ -215,7 +220,7 @@
|
||||
value = 0x001
|
||||
//block = 10
|
||||
|
||||
/obj/item/dnainjector/antifire/New()
|
||||
/obj/item/dnainjector/antifire/Initialize()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
@@ -226,7 +231,7 @@
|
||||
value = 0xFFF
|
||||
//block = 12
|
||||
|
||||
/obj/item/dnainjector/telemut/New()
|
||||
/obj/item/dnainjector/telemut/Initialize()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
@@ -242,7 +247,7 @@
|
||||
value = 0x001
|
||||
//block = 12
|
||||
|
||||
/obj/item/dnainjector/antitele/New()
|
||||
/obj/item/dnainjector/antitele/Initialize()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
@@ -253,7 +258,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/nobreath/New()
|
||||
/obj/item/dnainjector/nobreath/Initialize()
|
||||
block = BREATHLESSBLOCK
|
||||
..()
|
||||
|
||||
@@ -264,7 +269,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antinobreath/New()
|
||||
/obj/item/dnainjector/antinobreath/Initialize()
|
||||
block = BREATHLESSBLOCK
|
||||
..()
|
||||
|
||||
@@ -275,7 +280,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/remoteview/New()
|
||||
/obj/item/dnainjector/remoteview/Initialize()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
@@ -286,7 +291,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antiremoteview/New()
|
||||
/obj/item/dnainjector/antiremoteview/Initialize()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
@@ -297,7 +302,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/regenerate/New()
|
||||
/obj/item/dnainjector/regenerate/Initialize()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
@@ -308,7 +313,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antiregenerate/New()
|
||||
/obj/item/dnainjector/antiregenerate/Initialize()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
@@ -319,7 +324,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/runfast/New()
|
||||
/obj/item/dnainjector/runfast/Initialize()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
@@ -330,7 +335,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antirunfast/New()
|
||||
/obj/item/dnainjector/antirunfast/Initialize()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
@@ -341,7 +346,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/morph/New()
|
||||
/obj/item/dnainjector/morph/Initialize()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
@@ -352,7 +357,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antimorph/New()
|
||||
/obj/item/dnainjector/antimorph/Initialize()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
@@ -363,7 +368,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/noprints/New()
|
||||
/obj/item/dnainjector/noprints/Initialize()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
@@ -374,7 +379,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antinoprints/New()
|
||||
/obj/item/dnainjector/antinoprints/Initialize()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
@@ -385,7 +390,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/insulation/New()
|
||||
/obj/item/dnainjector/insulation/Initialize()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
@@ -396,7 +401,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antiinsulation/New()
|
||||
/obj/item/dnainjector/antiinsulation/Initialize()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
@@ -407,7 +412,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/midgit/New()
|
||||
/obj/item/dnainjector/midgit/Initialize()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
@@ -418,7 +423,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antimidgit/New()
|
||||
/obj/item/dnainjector/antimidgit/Initialize()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
@@ -430,7 +435,7 @@
|
||||
value = 0x001
|
||||
//block = 1
|
||||
|
||||
/obj/item/dnainjector/antiglasses/New()
|
||||
/obj/item/dnainjector/antiglasses/Initialize()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
@@ -441,7 +446,7 @@
|
||||
value = 0xFFF
|
||||
//block = 1
|
||||
|
||||
/obj/item/dnainjector/glassesmut/New()
|
||||
/obj/item/dnainjector/glassesmut/Initialize()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
@@ -452,7 +457,7 @@
|
||||
value = 0xFFF
|
||||
//block = 3
|
||||
|
||||
/obj/item/dnainjector/epimut/New()
|
||||
/obj/item/dnainjector/epimut/Initialize()
|
||||
block = EPILEPSYBLOCK
|
||||
..()
|
||||
|
||||
@@ -463,7 +468,7 @@
|
||||
value = 0x001
|
||||
//block = 3
|
||||
|
||||
/obj/item/dnainjector/antiepi/New()
|
||||
/obj/item/dnainjector/antiepi/Initialize()
|
||||
block = EPILEPSYBLOCK
|
||||
..()
|
||||
|
||||
@@ -474,7 +479,7 @@
|
||||
value = 0x001
|
||||
//block = 5
|
||||
|
||||
/obj/item/dnainjector/anticough/New()
|
||||
/obj/item/dnainjector/anticough/Initialize()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
@@ -485,7 +490,7 @@
|
||||
value = 0xFFF
|
||||
//block = 5
|
||||
|
||||
/obj/item/dnainjector/coughmut/New()
|
||||
/obj/item/dnainjector/coughmut/Initialize()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
@@ -496,7 +501,7 @@
|
||||
value = 0xFFF
|
||||
//block = 6
|
||||
|
||||
/obj/item/dnainjector/clumsymut/New()
|
||||
/obj/item/dnainjector/clumsymut/Initialize()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
@@ -507,7 +512,7 @@
|
||||
value = 0x001
|
||||
//block = 6
|
||||
|
||||
/obj/item/dnainjector/anticlumsy/New()
|
||||
/obj/item/dnainjector/anticlumsy/Initialize()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
@@ -518,7 +523,7 @@
|
||||
value = 0x001
|
||||
//block = 7
|
||||
|
||||
/obj/item/dnainjector/antitour/New()
|
||||
/obj/item/dnainjector/antitour/Initialize()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
@@ -529,7 +534,7 @@
|
||||
value = 0xFFF
|
||||
//block = 7
|
||||
|
||||
/obj/item/dnainjector/tourmut/New()
|
||||
/obj/item/dnainjector/tourmut/Initialize()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
@@ -540,7 +545,7 @@
|
||||
value = 0xFFF
|
||||
//block = 9
|
||||
|
||||
/obj/item/dnainjector/stuttmut/New()
|
||||
/obj/item/dnainjector/stuttmut/Initialize()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
@@ -552,7 +557,7 @@
|
||||
value = 0x001
|
||||
//block = 9
|
||||
|
||||
/obj/item/dnainjector/antistutt/New()
|
||||
/obj/item/dnainjector/antistutt/Initialize()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
@@ -563,7 +568,7 @@
|
||||
value = 0xFFF
|
||||
//block = 11
|
||||
|
||||
/obj/item/dnainjector/blindmut/New()
|
||||
/obj/item/dnainjector/blindmut/Initialize()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
@@ -574,7 +579,7 @@
|
||||
value = 0x001
|
||||
//block = 11
|
||||
|
||||
/obj/item/dnainjector/antiblind/New()
|
||||
/obj/item/dnainjector/antiblind/Initialize()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
@@ -585,7 +590,7 @@
|
||||
value = 0xFFF
|
||||
//block = 12
|
||||
|
||||
/obj/item/dnainjector/telemut/New()
|
||||
/obj/item/dnainjector/telemut/Initialize()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
@@ -596,7 +601,7 @@
|
||||
value = 0x001
|
||||
//block = 12
|
||||
|
||||
/obj/item/dnainjector/antitele/New()
|
||||
/obj/item/dnainjector/antitele/Initialize()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
@@ -607,7 +612,7 @@
|
||||
value = 0xFFF
|
||||
//block = 13
|
||||
|
||||
/obj/item/dnainjector/deafmut/New()
|
||||
/obj/item/dnainjector/deafmut/Initialize()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
@@ -618,7 +623,7 @@
|
||||
value = 0x001
|
||||
//block = 13
|
||||
|
||||
/obj/item/dnainjector/antideaf/New()
|
||||
/obj/item/dnainjector/antideaf/Initialize()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
@@ -629,7 +634,7 @@
|
||||
value = 0xFFF
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/hallucination/New()
|
||||
/obj/item/dnainjector/hallucination/Initialize()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
@@ -640,7 +645,7 @@
|
||||
value = 0x001
|
||||
//block = 2
|
||||
|
||||
/obj/item/dnainjector/antihallucination/New()
|
||||
/obj/item/dnainjector/antihallucination/Initialize()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
@@ -651,7 +656,7 @@
|
||||
value = 0xFFF
|
||||
//block = 14
|
||||
|
||||
/obj/item/dnainjector/h2m/New()
|
||||
/obj/item/dnainjector/h2m/Initialize()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
@@ -662,6 +667,6 @@
|
||||
value = 0x001
|
||||
//block = 14
|
||||
|
||||
/obj/item/dnainjector/m2h/New()
|
||||
/obj/item/dnainjector/m2h/Initialize()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
@@ -9,12 +9,16 @@
|
||||
* Rolling Pins
|
||||
* Candy Moulds
|
||||
* Sushi Mat
|
||||
* Circular cutter
|
||||
*/
|
||||
|
||||
/obj/item/kitchen
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
origin_tech = "materials=1"
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Utensils
|
||||
*/
|
||||
@@ -179,6 +183,7 @@
|
||||
origin_tech = "biotech=3;combat=2"
|
||||
attack_verb = list("shanked", "shivved")
|
||||
|
||||
|
||||
/*
|
||||
* Rolling Pins
|
||||
*/
|
||||
@@ -251,7 +256,7 @@
|
||||
desc = "It has the shape of a sucker imprinted into it."
|
||||
icon_state = "mould_loli"
|
||||
|
||||
/*
|
||||
/*
|
||||
* Sushi Mat
|
||||
*/
|
||||
/obj/item/kitchen/sushimat
|
||||
@@ -263,4 +268,20 @@
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("rolled", "cracked", "battered", "thrashed")
|
||||
attack_verb = list("rolled", "cracked", "battered", "thrashed")
|
||||
|
||||
|
||||
|
||||
/// circular cutter by Ume
|
||||
|
||||
/obj/item/kitchen/cutter
|
||||
name = "generic circular cutter"
|
||||
desc = "A generic circular cutter for cookies and other things."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "circular_cutter"
|
||||
force = 5
|
||||
throwforce = 5
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("bashed", "slashed", "pricked", "thrashed")
|
||||
@@ -9,7 +9,7 @@
|
||||
item_state = "lighter-g"
|
||||
var/icon_on = "lighter-g-on"
|
||||
var/icon_off = "lighter-g"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 4
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -460,6 +460,19 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/storage/bag/tray/cookies_tray
|
||||
var/cookie = /obj/item/reagent_containers/food/snacks/cookie
|
||||
|
||||
/obj/item/storage/bag/tray/cookies_tray/New() /// By Azule Utama, thank you a lot!
|
||||
..()
|
||||
for(var/i in 1 to 6)
|
||||
var/obj/item/C = new cookie(src)
|
||||
handle_item_insertion(C) // Done this way so the tray actually has the cookies visible when spawned
|
||||
rebuild_overlays()
|
||||
|
||||
/obj/item/storage/bag/tray/cookies_tray/sugarcookie
|
||||
cookie = /obj/item/reagent_containers/food/snacks/sugarcookie
|
||||
|
||||
/*
|
||||
* Chemistry bag
|
||||
*/
|
||||
|
||||
@@ -172,6 +172,10 @@
|
||||
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return
|
||||
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
C.shock_internal_organs(33)
|
||||
|
||||
L.Stun(stunforce)
|
||||
L.Weaken(stunforce)
|
||||
L.apply_effect(STUTTER, stunforce)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("Name", "Body")
|
||||
var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("Name", "Body", "Voice")
|
||||
|
||||
switch(choice)
|
||||
if("Name")
|
||||
@@ -172,6 +172,25 @@
|
||||
AC.whitelist = race_list
|
||||
ui_users[user] = AC
|
||||
AC.ui_interact(user)
|
||||
if("Voice")
|
||||
var/voice_choice = input(user, "Perhaps...", "Voice effects") as null|anything in list("Comic Sans", "Wingdings", "Swedish", "Chav")
|
||||
var/voice_mutation
|
||||
switch(voice_choice)
|
||||
if("Comic Sans")
|
||||
voice_mutation = COMICBLOCK
|
||||
if("Wingdings")
|
||||
voice_mutation = WINGDINGSBLOCK
|
||||
if("Swedish")
|
||||
voice_mutation = SWEDEBLOCK
|
||||
if("Chav")
|
||||
voice_mutation = CHAVBLOCK
|
||||
if(voice_mutation)
|
||||
if(H.dna.GetSEState(voice_mutation))
|
||||
H.dna.SetSEState(voice_mutation, FALSE)
|
||||
genemutcheck(H, voice_mutation, null, MUTCHK_FORCED)
|
||||
else
|
||||
H.dna.SetSEState(voice_mutation, TRUE)
|
||||
genemutcheck(H, voice_mutation, null, MUTCHK_FORCED)
|
||||
|
||||
/obj/structure/mirror/magic/attackby(obj/item/I, mob/living/user, params)
|
||||
return
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/purple
|
||||
icon_state = "shuttlefloor5"
|
||||
floor_tile = /obj/item/stack/tile/mineral/titanium/purple
|
||||
icons = list("shuttlefloor5","shuttlefloor5_dam")
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/purple/airless
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
H.mind_initialize()
|
||||
H.mind.assigned_role = "Event Character"
|
||||
H.mind.special_role = "Event Character"
|
||||
H.mind.offstation_role = TRUE
|
||||
|
||||
H.key = thisplayer.key
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ var/global/sent_honksquad = 0
|
||||
new_honksquad.mind_initialize()
|
||||
new_honksquad.mind.assigned_role = SPECIAL_ROLE_HONKSQUAD
|
||||
new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD
|
||||
new_honksquad.mind.offstation_role = TRUE
|
||||
new_honksquad.add_language("Clownish")
|
||||
ticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_honksquad.equip_honksquad(honk_leader_selected)
|
||||
|
||||
@@ -131,6 +131,7 @@ var/global/sent_syndicate_infiltration_team = 0
|
||||
new_syndicate_infiltrator.mind_initialize()
|
||||
new_syndicate_infiltrator.mind.assigned_role = "Syndicate Infiltrator"
|
||||
new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator"
|
||||
new_syndicate_infiltrator.mind.offstation_role = TRUE //they can flee to z2 so make them inelligible as antag targets
|
||||
ticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list
|
||||
new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt)
|
||||
return new_syndicate_infiltrator
|
||||
|
||||
@@ -415,7 +415,7 @@ client/proc/one_click_antag()
|
||||
new_syndicate_commando.mind_initialize()
|
||||
new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
|
||||
new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
|
||||
|
||||
new_syndicate_commando.mind.offstation_role = TRUE
|
||||
//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
ticker.mode.traitors += new_syndicate_commando.mind
|
||||
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
|
||||
|
||||
@@ -85,6 +85,7 @@ var/global/sent_strike_team = 0
|
||||
R.mind.original = R
|
||||
R.mind.assigned_role = SPECIAL_ROLE_DEATHSQUAD
|
||||
R.mind.special_role = SPECIAL_ROLE_DEATHSQUAD
|
||||
R.mind.offstation_role = TRUE
|
||||
if(!(R.mind in ticker.minds))
|
||||
ticker.minds += R.mind
|
||||
ticker.mode.traitors += R.mind
|
||||
@@ -178,7 +179,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack)
|
||||
if(is_leader)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear/unrestricted(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
|
||||
|
||||
@@ -116,6 +116,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
new_syndicate_commando.mind_initialize()
|
||||
new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
|
||||
new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD
|
||||
new_syndicate_commando.mind.offstation_role = TRUE
|
||||
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_syndicate_commando.equip_syndicate_commando(is_leader)
|
||||
qdel(spawn_location)
|
||||
@@ -139,7 +140,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
if(is_leader)
|
||||
equip_to_slot_or_del(new /obj/item/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/disk/nuclear/unrestricted(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/grenade/plastic/x4(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/card/emag(src), slot_r_store)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
var/checking = FALSE
|
||||
var/TC_cost = 0
|
||||
var/borg_to_spawn
|
||||
var/upload_mind
|
||||
var/list/possible_types = list("Assault", "Medical", "Saboteur")
|
||||
|
||||
/obj/item/antag_spawner/borg_tele/attack_self(mob/user)
|
||||
@@ -34,20 +35,42 @@
|
||||
borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types
|
||||
if(!borg_to_spawn || checking || used)
|
||||
return
|
||||
checking = TRUE
|
||||
to_chat(user, "<span class='notice'>The device is now checking for possible borgs.</span>")
|
||||
var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1)
|
||||
if(borg_candidates.len > 0 && !used)
|
||||
checking = FALSE
|
||||
used = TRUE
|
||||
var/mob/M = pick(borg_candidates)
|
||||
var/client/C = M.client
|
||||
spawn_antag(C, get_turf(src.loc), "syndieborg")
|
||||
qdel(src)
|
||||
else
|
||||
checking = FALSE
|
||||
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.</span>")
|
||||
upload_mind = input("Would you like to continue playing as an operative or take over the cyborg? (Another player will control your old self)", "Play as") as null|anything in list("Nuclear Operative", "Syndicate Cyborg")
|
||||
if(!upload_mind || checking || used)
|
||||
return
|
||||
if(upload_mind == "Nuclear Operative")
|
||||
checking = TRUE
|
||||
to_chat(user, "<span class='notice'>The device is now checking for possible borgs.</span>")
|
||||
var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1)
|
||||
if(borg_candidates.len > 0 && !used)
|
||||
checking = FALSE
|
||||
used = TRUE
|
||||
var/mob/M = pick(borg_candidates)
|
||||
var/client/C = M.client
|
||||
spawn_antag(C, get_turf(loc), "syndieborg")
|
||||
qdel(src)
|
||||
else
|
||||
checking = FALSE
|
||||
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.</span>")
|
||||
return
|
||||
else if(upload_mind == "Syndicate Cyborg")
|
||||
checking = TRUE
|
||||
to_chat(user, "<span class='notice'>You attempt to upload your consciousness into a new syndicate cyborg.</span>")
|
||||
var/list/nuclear_candidates = pollCandidates("Do you want to play as the Syndicate Nuclear Operative [user.real_name]?", ROLE_OPERATIVE, 1)
|
||||
if(nuclear_candidates.len > 0 && !used)
|
||||
checking = FALSE
|
||||
used = TRUE
|
||||
var/mob/M = pick(nuclear_candidates)
|
||||
var/client/nukeop_client = M.client
|
||||
var/client/borg_client = user.client
|
||||
spawn_antag(borg_client, get_turf(loc), "syndieborg")
|
||||
user.key = nukeop_client.key
|
||||
ticker.mode.greet_syndicate(user.mind)
|
||||
qdel(src)
|
||||
else
|
||||
checking = FALSE
|
||||
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.</span>")
|
||||
return
|
||||
|
||||
/obj/item/antag_spawner/borg_tele/spawn_antag(client/C, turf/T, type = "")
|
||||
if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything
|
||||
|
||||
@@ -85,6 +85,8 @@
|
||||
var/datum/species/golem/X = mob_species
|
||||
to_chat(new_spawn, "[initial(X.info_text)]")
|
||||
if(!owner)
|
||||
to_chat(new_spawn, "<span class='notice'>It is common in free golem societies to respect Adamantine golems as elders, however you do not have to obey them. \
|
||||
Adamantine golems are the only golems that can resonate to all golems.</span>")
|
||||
to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.")
|
||||
to_chat(new_spawn, "<span class='warning'>You are not an antagonist, but you are not a crewmember either. \
|
||||
You may interact or trade with crew you come across, aswell as defend yourself and your ship \
|
||||
|
||||
@@ -81,6 +81,19 @@
|
||||
time = 60
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/griefsky
|
||||
name = "General Griefsky"
|
||||
result = /mob/living/simple_animal/bot/secbot/griefsky
|
||||
reqs = list(/obj/item/assembly/signaler = 1,
|
||||
/obj/item/clothing/head/helmet = 1,
|
||||
/obj/item/melee/energy/sword = 4,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/robot_parts/r_arm = 2,
|
||||
/obj/item/robot_parts/l_arm = 2)
|
||||
tools = list(/obj/item/weldingtool)
|
||||
time = 120
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/cleanbot
|
||||
name = "Cleanbot"
|
||||
result = /mob/living/simple_animal/bot/cleanbot
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
while(db_discord_id.NextRow())
|
||||
stored_id = db_discord_id.item[1]
|
||||
if(!stored_id) // Not linked
|
||||
var/know_how = alert("Do you know how to get a discord user ID?","Question","Yes","No")
|
||||
var/know_how = alert("Do you know how to get a discord user ID? This ID is NOT your discord username and numbers!","Question","Yes","No")
|
||||
if(know_how == "No") // Opens discord support on how to collect IDs
|
||||
src << link("https://support.discordapp.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID")
|
||||
var/entered_id = input("Please enter your Discord ID.", "Enter Discord ID", null, null) as text|null
|
||||
|
||||
@@ -40,7 +40,7 @@ We hope you enjoy the lights.", "Harmless ions approaching", new_sound = 'sound/
|
||||
event_announcement.Announce("The Aurora Caelus event is now ending. Starlight conditions will slowly return to normal. \
|
||||
When this has concluded, please return to your workplace and continue work as normal. \
|
||||
Have a pleasant shift, [station_name()], and thank you for watching with us.",
|
||||
"Harmless ions approaching", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meteorology Division")
|
||||
"Harmless ions dissipating", new_sound = 'sound/misc/notice2.ogg', from = "Nanotrasen Meteorology Division")
|
||||
|
||||
/datum/event/aurora_caelus/proc/fade_to_black(turf/space/S)
|
||||
set waitfor = FALSE
|
||||
|
||||
@@ -33,7 +33,9 @@
|
||||
SA.key = SG.key
|
||||
SA.universal_speak = 1
|
||||
SA.sentience_act()
|
||||
SA.maxHealth = max(SA.maxHealth, 200)
|
||||
SA.maxHealth = max(SA.maxHealth + 200)
|
||||
SA.melee_damage_lower = max(SA.melee_damage_lower + 15)
|
||||
SA.melee_damage_upper = max(SA.melee_damage_upper + 15)
|
||||
SA.health = SA.maxHealth
|
||||
SA.del_on_death = FALSE
|
||||
greet_sentient(SA)
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen
|
||||
spawncount = 1
|
||||
if(5)
|
||||
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/mother
|
||||
spawncount = 1
|
||||
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/princess
|
||||
spawncount = 2
|
||||
while(spawncount >= 1 && vents.len)
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/vent = pick(vents)
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ var/global/list/unused_trade_stations = list("sol")
|
||||
M.equipOutfit(/datum/outfit/admin/sol_trader)
|
||||
M.dna.species.after_equip_job(null, M)
|
||||
M.mind.objectives += trader_objectives
|
||||
M.mind.offstation_role = TRUE
|
||||
greet_trader(M)
|
||||
success_spawn = 1
|
||||
if(success_spawn)
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
icon_state = "COOKIE!!!"
|
||||
bitesize = 1
|
||||
filling_color = "#DBC94F"
|
||||
list_reagents = list("nutriment" = 1)
|
||||
list_reagents = list("nutriment" = 1, "sugar" = 3, "hot_coco" = 5 )
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/fortunecookie
|
||||
name = "fortune cookie"
|
||||
@@ -215,7 +215,7 @@
|
||||
name = "sugar cookie"
|
||||
desc = "Just like your little sister used to make."
|
||||
icon_state = "sugarcookie"
|
||||
list_reagents = list("nutriment" = 3, "sugar" = 3)
|
||||
list_reagents = list("nutriment" = 1, "sugar" = 3)
|
||||
|
||||
|
||||
//////////////////////
|
||||
|
||||
@@ -129,6 +129,71 @@
|
||||
list_reagents = list("nutriment" = 1)
|
||||
|
||||
|
||||
///cookies by Ume
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cookiedough
|
||||
var/flat = FALSE
|
||||
name = "pastry dough"
|
||||
icon = 'icons/obj/food/food_ingredients.dmi'
|
||||
desc = "The base for tasty cookies."
|
||||
icon_state = "cookiedough"
|
||||
list_reagents = list("nutriment" = 5, "sugar" = 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cookiedough/update_icon()
|
||||
if(flat)
|
||||
icon_state = "cookiedough_flat"
|
||||
name = "flat pastry dough"
|
||||
else
|
||||
icon_state = "cookiedough"
|
||||
|
||||
|
||||
|
||||
// Dough + rolling pin = flat cookie dough // Flat dough + circular cutter = unbaked cookies
|
||||
/obj/item/reagent_containers/food/snacks/cookiedough/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/kitchen/rollingpin) && !flat)
|
||||
if(isturf(loc))
|
||||
to_chat(user, "<span class='notice'>You flatten [src].</span>")
|
||||
flat = TRUE
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to put [src] on a surface to roll it out!</span>")
|
||||
else if(istype(I, /obj/item/kitchen/cutter) && flat)
|
||||
if(isturf(loc))
|
||||
new /obj/item/reagent_containers/food/snacks/rawcookies(loc)
|
||||
to_chat(user, "<span class='notice'>You cut [src] into cookies.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to put [src] on a surface to cut it out!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/rawcookies
|
||||
name = "raw cookies"
|
||||
desc = "Ready for oven!"
|
||||
icon = 'icons/obj/food/food_ingredients.dmi'
|
||||
icon_state = "unbaked_cookies"
|
||||
list_reagents = list("nutriment" = 5, "sugar" = 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers/food/snacks/choc_pile))
|
||||
if(isturf(loc))
|
||||
new /obj/item/reagent_containers/food/snacks/rawcookies/chocochips(loc)
|
||||
to_chat(user, "<span class='notice'>You sprinkle [I] all over the cookies.</span>")
|
||||
qdel(src)
|
||||
qdel(I)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to put [src] on a surface to add this</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/rawcookies/chocochips
|
||||
name = "raw cookies"
|
||||
desc = "Ready for oven! They have little pieces of chocolate all over them"
|
||||
icon = 'icons/obj/food/food_ingredients.dmi'
|
||||
icon_state = "unbaked_cookies_choco"
|
||||
list_reagents = list("nutriment" = 5, "sugar" = 5, "chocolate" = 5)
|
||||
|
||||
//////////////////////
|
||||
// Chocolate //
|
||||
//////////////////////
|
||||
@@ -140,6 +205,19 @@
|
||||
filling_color = "#7D5F46"
|
||||
list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2)
|
||||
|
||||
///Chocolate crumbles/pile
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/kitchen/knife))
|
||||
if(isturf(loc))
|
||||
new /obj/item/reagent_containers/food/snacks/choc_pile(loc)
|
||||
to_chat(user, "<span class='notice'>You cut [src] into little crumbles.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to put [src] on a surface to cut it out!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs
|
||||
name = "pile of chocolate"
|
||||
desc = "A pile of pure chocolate pieces."
|
||||
|
||||
@@ -163,13 +163,22 @@
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/loadedbakedpotato
|
||||
|
||||
/datum/recipe/oven/cookie
|
||||
reagents = list("milk" = 5, "sugar" = 5)
|
||||
////cookies by Ume
|
||||
|
||||
/datum/recipe/oven/cookies
|
||||
items = list(
|
||||
/obj/item/reagent_containers/food/snacks/dough,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/reagent_containers/food/snacks/rawcookies/chocochips,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/cookie
|
||||
result = /obj/item/storage/bag/tray/cookies_tray
|
||||
|
||||
/datum/recipe/oven/sugarcookies
|
||||
items = list(
|
||||
/obj/item/reagent_containers/food/snacks/rawcookies,
|
||||
)
|
||||
result = /obj/item/storage/bag/tray/cookies_tray/sugarcookie
|
||||
|
||||
|
||||
////
|
||||
|
||||
/datum/recipe/oven/fortunecookie
|
||||
reagents = list("sugar" = 5)
|
||||
@@ -437,14 +446,6 @@
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/cracker
|
||||
|
||||
/datum/recipe/oven/sugarcookie
|
||||
reagents = list("sugar" = 5)
|
||||
items = list(
|
||||
/obj/item/reagent_containers/food/snacks/dough,
|
||||
/obj/item/reagent_containers/food/snacks/egg,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/sugarcookie
|
||||
|
||||
/datum/recipe/oven/sugarcookie/make_food(obj/container)
|
||||
var/obj/item/reagent_containers/food/snacks/sugarcookie/being_cooked = ..()
|
||||
being_cooked.reagents.del_reagent("egg")
|
||||
|
||||
@@ -460,12 +460,12 @@
|
||||
prize_list += list(
|
||||
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250),
|
||||
new /datum/data/mining_equipment("Science Backpack", /obj/item/storage/backpack/science, 250),
|
||||
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250),
|
||||
new /datum/data/mining_equipment("Full Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250),
|
||||
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250),
|
||||
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
|
||||
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
|
||||
new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000),
|
||||
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 1500)
|
||||
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000)
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment/
|
||||
|
||||
@@ -19,10 +19,17 @@
|
||||
var/obj/item/radio/radio = null // For use with the radio MMI upgrade
|
||||
var/datum/action/generic/configure_mmi_radio/radio_action = null
|
||||
|
||||
// Used for cases when mmi or one of it's children commits suicide.
|
||||
// Needed to fix a rather insane bug when a posibrain/robotic brain commits suicide
|
||||
var/dead_icon = "mmi_dead"
|
||||
|
||||
/obj/item/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if(istype(O, /obj/item/organ/internal/brain/crystal ))
|
||||
if(istype(O, /obj/item/organ/internal/brain/crystal))
|
||||
to_chat(user, "<span class='warning'> This brain is too malformed to be able to use with the [src].</span>")
|
||||
return
|
||||
if(istype(O, /obj/item/organ/internal/brain/golem))
|
||||
to_chat(user, "<span class='warning'>You can't find a way to plug [O] into [src].</span>")
|
||||
return
|
||||
if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO
|
||||
var/obj/item/organ/internal/brain/B = O
|
||||
if(!B.brainmob)
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
if(!.)
|
||||
return FALSE
|
||||
if(!gibbed && container && istype(container, /obj/item/mmi))//If not gibbed but in a container.
|
||||
var/obj/item/mmi/mmi = container
|
||||
visible_message("<span class='danger'>[src]'s MMI flatlines!</span>", "<span class='warning'>You hear something flatline.</span>")
|
||||
container.icon_state = "mmi_dead"
|
||||
mmi.icon_state = mmi.dead_icon
|
||||
|
||||
/mob/living/carbon/brain/gib()
|
||||
// can we muster a parent call here?
|
||||
|
||||
@@ -21,11 +21,16 @@
|
||||
var/mob/living/carbon/human/imprinted_master = null
|
||||
var/ejected_flavor_text = "circuit"
|
||||
|
||||
dead_icon = "boris_blank"
|
||||
|
||||
/obj/item/mmi/robotic_brain/Destroy()
|
||||
imprinted_master = null
|
||||
return ..()
|
||||
|
||||
/obj/item/mmi/robotic_brain/attack_self(mob/user)
|
||||
if(isgolem(user))
|
||||
to_chat(user, "<span class='warning'>Your golem fingers are too large to press the switch on [src].</span>")
|
||||
return
|
||||
if(requires_master && !imprinted_master)
|
||||
to_chat(user, "<span class='notice'>You press your thumb on [src] and imprint your user information.</span>")
|
||||
imprinted_master = user
|
||||
@@ -228,4 +233,5 @@
|
||||
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
|
||||
silenced = TRUE
|
||||
requires_master = FALSE
|
||||
ejected_flavor_text = "metal cube"
|
||||
ejected_flavor_text = "metal cube"
|
||||
dead_icon = "posibrain"
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
if(reagents.has_reagent("teslium"))
|
||||
shock_damage *= 1.5 //If the mob has teslium in their body, shocks are 50% more damaging!
|
||||
take_overall_damage(0,shock_damage, TRUE, used_weapon = "Electrocution")
|
||||
shock_internal_organs(shock_damage)
|
||||
visible_message(
|
||||
"<span class='danger'>[src] was shocked by \the [source]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
|
||||
@@ -1116,3 +1117,7 @@ so that different stomachs can handle things in different ways VB*/
|
||||
if(I.flags_inv & HIDEMASK || forced)
|
||||
update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
/mob/living/carbon/proc/shock_internal_organs(intensity)
|
||||
for(var/obj/item/organ/O in internal_organs)
|
||||
O.shock_organ(intensity)
|
||||
@@ -37,6 +37,9 @@ var/global/list/empty_playable_ai_cores = list()
|
||||
var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
|
||||
current_mode.possible_traitors.Remove(src)
|
||||
|
||||
// Ghost the current player and disallow them to return to the body
|
||||
ghostize(FALSE)
|
||||
// Delete the old AI shell
|
||||
qdel(src)
|
||||
|
||||
// TODO: Move away from the insane name-based landmark system
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
var/new_destination // pending new destination (waiting for beacon response)
|
||||
var/destination // destination description tag
|
||||
var/next_destination // the next destination in the patrol route
|
||||
var/robot_arm = /obj/item/robot_parts/r_arm
|
||||
|
||||
var/blockcount = 0 //number of times retried a blocked path
|
||||
var/awaiting_beacon = 0 // count of pticks awaiting a beacon response
|
||||
@@ -1106,3 +1107,6 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
if(I)
|
||||
I.icon = null
|
||||
path.Cut(1, 2)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/drop_part(obj/item/drop_item, dropzone)
|
||||
new drop_item(dropzone)
|
||||
@@ -179,14 +179,10 @@
|
||||
on = 0
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//Bot Construction
|
||||
var/robot_arm = /obj/item/robot_parts/l_arm
|
||||
|
||||
//Cleanbot assembly
|
||||
/obj/item/bucket_sensor
|
||||
@@ -22,6 +23,7 @@
|
||||
var/turf/T = get_turf(loc)
|
||||
var/mob/living/simple_animal/bot/cleanbot/A = new /mob/living/simple_animal/bot/cleanbot(T)
|
||||
A.name = created_name
|
||||
A.robot_arm = W.type
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to the bucket and sensor assembly. Beep boop!</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
@@ -268,6 +270,7 @@
|
||||
var/turf/T = get_turf(user.loc)
|
||||
var/mob/living/simple_animal/bot/floorbot/A = new /mob/living/simple_animal/bot/floorbot(T)
|
||||
A.name = created_name
|
||||
A.robot_arm = W.type
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to the odd looking toolbox assembly. Boop beep!</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
@@ -284,7 +287,10 @@
|
||||
//Medbot Assembly
|
||||
/obj/item/storage/firstaid/attackby(obj/item/I, mob/user, params)
|
||||
if(!istype(I, /obj/item/robot_parts/l_arm) && !istype(I, /obj/item/robot_parts/r_arm))
|
||||
return ..()
|
||||
return ..()
|
||||
else
|
||||
robot_arm = I.type
|
||||
|
||||
|
||||
//Making a medibot!
|
||||
if(contents.len)
|
||||
@@ -292,7 +298,7 @@
|
||||
return
|
||||
|
||||
var/obj/item/firstaid_arm_assembly/A = new /obj/item/firstaid_arm_assembly(loc, med_bot_skin)
|
||||
|
||||
|
||||
A.req_one_access = req_one_access
|
||||
A.syndicate_aligned = syndicate_aligned
|
||||
A.treatment_oxy = treatment_oxy
|
||||
@@ -377,6 +383,7 @@
|
||||
S.treatment_fire = treatment_fire
|
||||
S.treatment_tox = treatment_tox
|
||||
S.treatment_virus = treatment_virus
|
||||
S.robot_arm = robot_arm
|
||||
else
|
||||
new /mob/living/simple_animal/bot/medbot/syndicate(T) //Syndicate medibots are a special case that have so many unique vars on them, it's not worth passing them through construction phases
|
||||
user.unEquip(src, 1)
|
||||
@@ -389,8 +396,8 @@
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "helmet_signaler"
|
||||
item_state = "helmet"
|
||||
var/build_step = 0
|
||||
var/created_name = "Securitron" //To preserve the name if it's a unique securitron I guess
|
||||
var/build_step = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/attackby(obj/item/assembly/signaler/S, mob/user, params)
|
||||
..()
|
||||
@@ -440,6 +447,7 @@
|
||||
to_chat(user, "<span class='notice'>You add the robot arm to [src]!</span>")
|
||||
name = "helmet/signaler/prox sensor/robot arm assembly"
|
||||
overlays += "hs_arm"
|
||||
robot_arm = I.type
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/melee/baton)) && (build_step >= 3))
|
||||
@@ -450,6 +458,7 @@
|
||||
var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot
|
||||
S.forceMove(get_turf(src))
|
||||
S.name = created_name
|
||||
S.robot_arm = robot_arm
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
@@ -481,10 +490,74 @@
|
||||
to_chat(user, "<span class='notice'>You remove the robot arm from [src].</span>")
|
||||
build_step--
|
||||
|
||||
//General Griefsky
|
||||
|
||||
else if((istype(I, /obj/item/wrench)) && (build_step == 3))
|
||||
var/obj/item/griefsky_assembly/A = new /obj/item/griefsky_assembly
|
||||
user.put_in_hands(A)
|
||||
to_chat(user, "<span class='notice'>You adjust the arm slots for extra weapons!.</span>")
|
||||
user.unEquip(src, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/griefsky_assembly
|
||||
name = "\improper Griefsky assembly"
|
||||
desc = "Some sort of bizarre assembly."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "griefsky_assembly"
|
||||
item_state = "griefsky_assembly"
|
||||
var/build_step = 0
|
||||
var/toy_step = 0
|
||||
|
||||
/obj/item/griefsky_assembly/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if((istype(I, /obj/item/melee/energy/sword)) && (build_step < 3 ))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add an energy sword to [src]!.</span>")
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/melee/energy/sword)) && (build_step == 3))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You complete General Griefsky!.</span>")
|
||||
var/mob/living/simple_animal/bot/secbot/griefsky/S = new /mob/living/simple_animal/bot/secbot/griefsky
|
||||
S.forceMove(get_turf(src))
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
else if((istype(I, /obj/item/toy/sword)) && (toy_step < 3 ))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
toy_step++
|
||||
to_chat(user, "<span class='notice'>You add a toy sword to [src]!.</span>")
|
||||
qdel(I)
|
||||
|
||||
else if((istype(I, /obj/item/toy/sword)) && (toy_step == 3))
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You complete Genewul Giftskee!.</span>")
|
||||
var/mob/living/simple_animal/bot/secbot/griefsky/toy/S = new /mob/living/simple_animal/bot/secbot/griefsky/toy
|
||||
S.forceMove(get_turf(src))
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(I, /obj/item/screwdriver))
|
||||
if((build_step == 1) || (build_step == 2) || (build_step == 3) || (build_step == 4))
|
||||
new /obj/item/melee/energy/sword(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You detach the energy sword from [src].</span>")
|
||||
build_step--
|
||||
else if((toy_step == 1) || (toy_step == 2) || (toy_step == 3) || (toy_step == 4))
|
||||
new /obj/item/toy/sword(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You detach the toy sword from [src].</span>")
|
||||
toy_step--
|
||||
|
||||
//Honkbot Assembly
|
||||
/obj/item/storage/box/clown/attackby(obj/item/W, mob/user, params)
|
||||
if(!istype(W, /obj/item/robot_parts/l_arm) && !istype(W, /obj/item/robot_parts/r_arm))
|
||||
return ..()
|
||||
else
|
||||
robot_arm = W.type
|
||||
|
||||
if(contents.len)
|
||||
to_chat(user, "<span class='warning'>You need to empty [src] out first!</span>")
|
||||
@@ -531,5 +604,6 @@
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You add the trombone to [src]! Heeeenk! </span>")
|
||||
qdel(W)
|
||||
new /mob/living/simple_animal/bot/honkbot(get_turf(loc))
|
||||
var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T)
|
||||
A.robot_arm = robot_arm
|
||||
qdel(src)
|
||||
@@ -388,14 +388,11 @@
|
||||
on = 0
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
var/obj/item/storage/toolbox/mechanical/N = new /obj/item/storage/toolbox/mechanical(Tsec)
|
||||
N.contents = list()
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
while(amount)//Dumps the tiles into the appropriate sized stacks
|
||||
if(amount >= 16)
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
/mob/living/simple_animal/bot/secbot/griefsky //This bot is powerful. If you managed to get 4 eswords somehow, you deserve this horror. Emag him for best results.
|
||||
name = "\improper General Griefsky"
|
||||
desc = "Is that a secbot with four eswords in its arms...?"
|
||||
icon_state = "griefsky0"
|
||||
health = 100
|
||||
maxHealth = 100
|
||||
base_icon = "griefsky"
|
||||
window_name = "Automatic Security Unit v3.0"
|
||||
|
||||
var/spin_icon = "griefsky-c" // griefsky and griefsky junior have dif icons
|
||||
var/weapon = /obj/item/melee/energy/sword
|
||||
var/block_chance = 50 //block attacks
|
||||
var/reflect_chance = 80 // chance to reflect projectiles
|
||||
var/dmg = 30 //esword dmg
|
||||
var/block_chance_melee = 50
|
||||
var/block_chance_ranged = 90
|
||||
var/stun_chance = 50
|
||||
var/spam_flag = 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/toy //A toy version of general griefsky!
|
||||
name = "Genewul Giftskee"
|
||||
desc = "An adorable looking secbot with four toy swords taped to its arms"
|
||||
spin_icon = "griefskyj-c"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
radio_channel = "Service" //we dont report sec anymore!
|
||||
dmg = 0
|
||||
block_chance_melee = 1
|
||||
block_chance_ranged = 1
|
||||
stun_chance = 0
|
||||
bot_core_type = /obj/machinery/bot_core/toy
|
||||
weapon = /obj/item/toy/sword
|
||||
|
||||
/obj/machinery/bot_core/toy
|
||||
req_access = list(access_maint_tunnels, access_theatre, access_robotics)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/spam_flag_false() //used for addtimer to not spam comms
|
||||
spam_flag = 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/back_to_idle()
|
||||
..()
|
||||
playsound(loc, 'sound/weapons/saberoff.ogg', 50, 1, -1)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/emag_act(mob/user)
|
||||
..()
|
||||
light_color = LIGHT_COLOR_PURE_RED //if you see a red one. RUN!!
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/Crossed(atom/movable/AM)
|
||||
..()
|
||||
if(ismob(AM) && AM == target)
|
||||
var/mob/living/carbon/C = AM
|
||||
visible_message("[src] flails his swords and pushes [C] out of it's way!" )
|
||||
C.Weaken(2)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/New()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/Destroy()
|
||||
QDEL_NULL(weapon)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/UnarmedAttack(atom/A) //like secbots its only possible with admin intervention
|
||||
if(!on)
|
||||
return
|
||||
if(iscarbon(A))
|
||||
var/mob/living/carbon/C = A
|
||||
sword_attack(C)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
|
||||
retaliate(P.firer)
|
||||
if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
|
||||
visible_message("[src] deflects [P] with its energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, 0)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/sword_attack(mob/living/carbon/C) // esword attack
|
||||
src.do_attack_animation(C)
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, -1)
|
||||
spawn(2)
|
||||
icon_state = spin_icon
|
||||
var/threat = C.assess_threat(src)
|
||||
if(ishuman(C))
|
||||
C.apply_damage(dmg, BRUTE)
|
||||
if(prob(stun_chance))
|
||||
C.Weaken(5)
|
||||
add_attack_logs(src, C, "sliced")
|
||||
if(declare_arrests)
|
||||
var/area/location = get_area(src)
|
||||
if(!spam_flag)
|
||||
speak("Back away! I will deal with this level [threat] swine <b>[C]</b> in [location] myself!.", radio_channel)
|
||||
spam_flag = 1
|
||||
addtimer(CALLBACK(src, .proc/spam_flag_false), 100) //to avoid spamming comms of sec for each hit
|
||||
visible_message("[src] flails his swords and cuts [C]!")
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/handle_automated_action()
|
||||
if(!on)
|
||||
return
|
||||
|
||||
switch(mode)
|
||||
if(BOT_IDLE) // idle
|
||||
icon_state = "griefsky1"
|
||||
walk_to(src,0)
|
||||
look_for_perp() // see if any criminals are in range
|
||||
if(!mode && auto_patrol) // still idle, and set to patrol
|
||||
mode = BOT_START_PATROL // switch to patrol mode
|
||||
if(BOT_HUNT) // hunting for perp
|
||||
icon_state = spin_icon
|
||||
playsound(loc,'sound/effects/spinsabre.ogg',100,1,-1)
|
||||
if(frustration >= 15) // general beepsky doesn't give up so easily, jedi scum
|
||||
walk_to(src,0)
|
||||
back_to_idle()
|
||||
return
|
||||
if(target) // make sure target exists
|
||||
if(target.stat == !DEAD)
|
||||
if(Adjacent(target) && isturf(target.loc)) // if right next to perp
|
||||
target_lastloc = target.loc
|
||||
sword_attack(target)
|
||||
anchored = TRUE
|
||||
frustration++
|
||||
return
|
||||
else // not next to perp
|
||||
var/turf/olddist = get_dist(src, target)
|
||||
walk_to(src, target,1,3) //he's a fast fucker
|
||||
if((get_dist(src, target)) >= (olddist))
|
||||
frustration++
|
||||
else
|
||||
frustration = 0
|
||||
else
|
||||
back_to_idle()
|
||||
speak("You fool")
|
||||
else
|
||||
back_to_idle()
|
||||
|
||||
if(BOT_START_PATROL)
|
||||
look_for_perp()
|
||||
start_patrol()
|
||||
|
||||
if(BOT_PATROL)
|
||||
icon_state = "griefsky1"
|
||||
look_for_perp()
|
||||
bot_patrol()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/look_for_perp()
|
||||
anchored = 0
|
||||
for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal
|
||||
if((C.stat) || (C.handcuffed))
|
||||
continue
|
||||
|
||||
if((C.name == oldtarget_name) && (world.time < last_found + 100))
|
||||
continue
|
||||
|
||||
threatlevel = C.assess_threat(src)
|
||||
|
||||
if(!threatlevel)
|
||||
continue
|
||||
|
||||
else if(threatlevel >= 4)
|
||||
target = C
|
||||
oldtarget_name = C.name
|
||||
speak("You are a bold one")
|
||||
playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1)
|
||||
visible_message("[src] ignites his energy swords!")
|
||||
icon_state = "griefsky-c"
|
||||
visible_message("<b>[src]</b> points at [C.name]!")
|
||||
mode = BOT_HUNT
|
||||
INVOKE_ASYNC(src, .proc/handle_automated_action)
|
||||
break
|
||||
else
|
||||
continue
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/explode()
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='boldannounce'>[src] lets out a huge cough as it blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/r_arm(Tsec)
|
||||
if(prob(50)) //most of the time weapon will be destroyed
|
||||
new weapon(Tsec)
|
||||
if(prob(25))
|
||||
new weapon(Tsec)
|
||||
if(prob(10))
|
||||
new weapon(Tsec)
|
||||
if(prob(5))
|
||||
new weapon(Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
..()
|
||||
|
||||
//this section is blocking attack
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
|
||||
retaliate(P.firer)
|
||||
if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
|
||||
visible_message("[src] deflects [P] with its energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1, 0)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/proc/special_retaliate_after_attack(mob/user) //allows special actions to take place after being attacked.
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/special_retaliate_after_attack(mob/user)
|
||||
if(icon_state != spin_icon)
|
||||
return
|
||||
if(prob(block_chance_melee))
|
||||
visible_message("[src] deflects [user]'s attack with his energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, TRUE, -1)
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/attack_hand(mob/living/carbon/human/H)
|
||||
if((H.a_intent == INTENT_HARM) || (H.a_intent == INTENT_DISARM))
|
||||
retaliate(H)
|
||||
if(special_retaliate_after_attack(H))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/attackby(obj/item/W, mob/user, params) //cant touch or attack him while spinning
|
||||
if(src.icon_state == spin_icon)
|
||||
if(prob(block_chance_melee))
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("[src] deflects [user]'s move with his energy swords!")
|
||||
playsound(loc, 'sound/weapons/blade1.ogg', 50, TRUE, -1)
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
@@ -278,16 +278,15 @@
|
||||
else
|
||||
continue
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/explode()
|
||||
/mob/living/simple_animal/bot/honkbot/explode() //doesn't drop cardboard nor its assembly, since its a very frail material.
|
||||
walk_to(src, 0)
|
||||
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
//doesn't drop cardboard nor its assembly, since its a very frail material.
|
||||
new /obj/item/bikehorn(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/r_arm(Tsec)
|
||||
new /obj/item/bikehorn(Tsec)
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
var/datum/effect_system/spark_spread/s = new
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
|
||||
@@ -591,7 +591,7 @@
|
||||
new /obj/item/healthanalyzer(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
if(reagent_glass)
|
||||
reagent_glass.forceMove(Tsec)
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
dat += hack(user)
|
||||
dat += showpai(user)
|
||||
dat += text({"
|
||||
<TT><B>Securitron v1.6 controls</B></TT><BR><BR>
|
||||
<TT><B>[window_name]</B></TT><BR><BR>
|
||||
Status: []<BR>
|
||||
Behaviour controls are [locked ? "locked" : "unlocked"]<BR>
|
||||
Maintenance panel panel is [open ? "opened" : "closed"]"},
|
||||
@@ -231,9 +231,10 @@ Auto Patrol: []"},
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
C.visible_message("<span class='danger'>[src] is trying to put zipties on [C]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put zipties on you!</span>")
|
||||
spawn(60)
|
||||
if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
|
||||
return
|
||||
INVOKE_ASYNC(src, .proc/cuff_callback, C)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/proc/cuff_callback(mob/living/carbon/C)
|
||||
if(do_after(src, 60, target = C))
|
||||
if(!C.handcuffed)
|
||||
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
|
||||
C.update_handcuffed()
|
||||
@@ -417,23 +418,18 @@ Auto Patrol: []"},
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/explode()
|
||||
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec)
|
||||
Sa.build_step = 1
|
||||
Sa.overlays += "hs_hole"
|
||||
Sa.created_name = name
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/melee/baton(Tsec)
|
||||
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
drop_part(robot_arm, Tsec)
|
||||
do_sparks(3, 1, src)
|
||||
|
||||
new /obj/effect/decal/cleanable/blood/oil(loc)
|
||||
..()
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
//The objects that corgis can wear on their backs.
|
||||
var/list/allowed_types = list(
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/suit/armor/vest/blueshield,
|
||||
/obj/item/clothing/suit/space/deathsquad,
|
||||
/obj/item/clothing/suit/space/hardsuit/engineering,
|
||||
/obj/item/radio,
|
||||
@@ -365,6 +366,12 @@
|
||||
name = "Definitely Not [real_name]"
|
||||
desc = "That's Definitely Not [real_name]"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/beret/centcom/officer, /obj/item/clothing/head/beret/centcom/officer/navy)
|
||||
name = "Blueshield [real_name]"
|
||||
desc = "Will stand by you until the bitter end."
|
||||
emote_see = list("stands with pride.", "growls heroically.")
|
||||
valid = 1
|
||||
|
||||
if(valid)
|
||||
if(user && !user.drop_item())
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Terror Spider, Black, Deadly Venom
|
||||
|
||||
/datum/reagent/terror_black_toxin
|
||||
name = "Black Widow venom"
|
||||
name = "Black Terror venom"
|
||||
id = "terror_black_toxin"
|
||||
description = "An incredibly toxic venom injected by the Black Widow spider."
|
||||
color = "#CF3600"
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
evolvequeen_action.Grant(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/princess/proc/evolve_to_queen()
|
||||
change_mob_type(/mob/living/simple_animal/hostile/poison/terror_spider/queen, null, null, 1, 1)
|
||||
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/Q = new /mob/living/simple_animal/hostile/poison/terror_spider/queen(loc)
|
||||
if(mind)
|
||||
mind.transfer_to(Q)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/princess/DoWrap()
|
||||
. = ..()
|
||||
|
||||
@@ -349,6 +349,7 @@
|
||||
if(!user.unEquip(A))
|
||||
return
|
||||
A.loc = FD
|
||||
FD.log_override = FALSE
|
||||
FD.pen = A
|
||||
FD.damage = 5
|
||||
FD.nodamage = 0
|
||||
@@ -370,6 +371,32 @@
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/riot
|
||||
icon_state = "foamdart_riot"
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/sniper
|
||||
name = "foam sniper dart"
|
||||
desc = "For the big nerf! Ages 8 and up."
|
||||
caliber = "foam_force_sniper"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/sniper
|
||||
icon_state = "foamdartsniper"
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/sniper/update_icon()
|
||||
..()
|
||||
if(modified)
|
||||
icon_state = "foamdartsniper_empty"
|
||||
desc = "Its nerf or nothing! ... Although, this one doesn't look too safe."
|
||||
if(BB)
|
||||
BB.icon_state = "foamdartsniper_empty"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
if(BB)
|
||||
BB.icon_state = initial(BB.icon_state)
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/sniper/riot
|
||||
name = "riot foam sniper dart"
|
||||
desc = "For the bigger brother of the crowd control toy. Ages 18 and up."
|
||||
caliber = "foam_force_sniper"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
icon_state = "foamdartsniper_riot"
|
||||
|
||||
/obj/item/ammo_casing/shotgun/assassination
|
||||
name = "assassination shell"
|
||||
desc = "A specialist shrapnel shell that has been laced with a silencing toxin."
|
||||
|
||||
@@ -125,6 +125,21 @@
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
materials = list(MAT_METAL = 50000)
|
||||
|
||||
/obj/item/ammo_box/foambox/sniper
|
||||
name = "ammo box (Foam Sniper Darts)"
|
||||
icon = 'icons/obj/guns/toy.dmi'
|
||||
icon_state = "foambox_sniper"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper
|
||||
max_ammo = 40
|
||||
materials = list(MAT_METAL = 900)
|
||||
|
||||
/obj/item/ammo_box/foambox/sniper/riot
|
||||
icon_state = "foambox_sniper_riot"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper/riot
|
||||
materials = list(MAT_METAL = 90000)
|
||||
|
||||
|
||||
|
||||
/obj/item/ammo_box/caps
|
||||
name = "speed loader (caps)"
|
||||
icon_state = "357"
|
||||
|
||||
@@ -490,3 +490,12 @@
|
||||
/obj/item/ammo_box/magazine/laser/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/20)*20]"
|
||||
|
||||
/obj/item/ammo_box/magazine/toy/smgm45
|
||||
name = "donksoft SMG magazine"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
max_ammo = 20
|
||||
|
||||
/obj/item/ammo_box/magazine/toy/smgm45/update_icon()
|
||||
..()
|
||||
icon_state = "c20r45-[round(ammo_count(),2)]"
|
||||
|
||||
@@ -39,6 +39,17 @@
|
||||
can_unsuppress = 0
|
||||
can_suppress = 0
|
||||
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/compact //holds very little ammo, lacks zooming, and bullets are primarily damage dealers, but the gun lacks the downsides of the full size rifle
|
||||
name = "compact sniper rifle"
|
||||
desc = "a compact, unscoped version of the standard issue syndicate sniper rifle. Still capable of sending people crying."
|
||||
recoil = 0
|
||||
weapon_weight = WEAPON_LIGHT
|
||||
fire_delay = 0
|
||||
mag_type = /obj/item/ammo_box/magazine/sniper_rounds/compact
|
||||
can_unsuppress = FALSE
|
||||
can_suppress = FALSE
|
||||
zoomable = FALSE
|
||||
|
||||
//Normal Boolets
|
||||
/obj/item/ammo_box/magazine/sniper_rounds
|
||||
name = "sniper rounds (.50)"
|
||||
@@ -159,3 +170,39 @@
|
||||
dismemberment = 0
|
||||
weaken = 0
|
||||
breakthings = FALSE
|
||||
|
||||
//compact ammo
|
||||
/obj/item/ammo_box/magazine/sniper_rounds/compact
|
||||
name = "sniper rounds (compact)"
|
||||
desc = "An extremely powerful round capable of inflicting massive damage on a target."
|
||||
ammo_type = /obj/item/ammo_casing/compact
|
||||
max_ammo = 4
|
||||
|
||||
/obj/item/ammo_casing/compact
|
||||
desc = "A .50 caliber compact round casing."
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper/compact
|
||||
icon_state = ".50"
|
||||
|
||||
/obj/item/projectile/bullet/sniper/compact //Can't dismember, and can't break things; just deals massive damage.
|
||||
dismemberment = 0
|
||||
breakthings = FALSE
|
||||
|
||||
//toy magazine
|
||||
/obj/item/ammo_box/magazine/toy/sniper_rounds
|
||||
name = "donksoft Sniper magazine"
|
||||
icon_state = ".50mag"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper/riot
|
||||
max_ammo = 6
|
||||
caliber = "foam_force_sniper"
|
||||
|
||||
/obj/item/ammo_box/magazine/toy/sniper_rounds/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
var/ammo = ammo_count()
|
||||
if(ammo && istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/sniper/riot))
|
||||
overlays += image('icons/obj/ammo.dmi', icon_state = ".50mag-r")
|
||||
else if(ammo)
|
||||
overlays += image('icons/obj/ammo.dmi', icon_state = ".50mag-f")
|
||||
else
|
||||
icon_state = "[initial(icon_state)]"
|
||||
@@ -116,3 +116,15 @@
|
||||
item_state = "shotgun"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/tommygun
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/toy
|
||||
name = "donksoft sniper rifle"
|
||||
desc = "A recoil-operated, semi-automatic donksoft sniper rifle. Perfect to annoy/kill the neighbour’s cat! Ages 8 and up."
|
||||
icon = 'icons/obj/guns/toy.dmi'
|
||||
can_suppress = FALSE
|
||||
needs_permit = FALSE
|
||||
zoomable = FALSE
|
||||
mag_type = /obj/item/ammo_box/magazine/toy/sniper_rounds
|
||||
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/toy/process_chamber(eject_casing = 0, empty_chamber = 1)
|
||||
..()
|
||||
@@ -64,3 +64,16 @@
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
stamina = 25
|
||||
log_override = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/sniper
|
||||
name = "foam sniper dart"
|
||||
icon_state = "foamdartsniper"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper
|
||||
range = 30
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
name = "riot sniper foam dart"
|
||||
icon_state = "foamdartsniper_riot"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper/riot
|
||||
stamina = 100
|
||||
log_override = FALSE
|
||||
@@ -264,10 +264,76 @@
|
||||
dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up",
|
||||
"tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana",
|
||||
"watermelonjuice", "carrotjuice", "potato", "berryjuice")
|
||||
var/list/special_reagents2 = list(list(""),
|
||||
list("bananahonk", "milkshake", "cafe_latte", "cafe_mocha"),
|
||||
list("triple_citrus", "icecoffe","icetea"))
|
||||
hack_message = "You change the mode from 'McNano' to 'Pizza King'."
|
||||
unhack_message = "You change the mode from 'Pizza King' to 'McNano'."
|
||||
hacked_reagents = list("thirteenloko")
|
||||
|
||||
/obj/machinery/chem_dispenser/soda/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/soda(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/super(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/soda/upgraded/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/soda(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/pico(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/super(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/hyper(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/soda/RefreshParts()
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
for(var/i in 1 to M.rating)
|
||||
dispensable_reagents = sortList(dispensable_reagents | special_reagents2[i])
|
||||
|
||||
/obj/machinery/chem_dispenser/soda/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers/glass))
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
return ..()
|
||||
else
|
||||
..()
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(iswrench(I))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
if(anchored)
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='caution'>[src] can now be moved.</span>")
|
||||
else if(!anchored)
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='caution'>[src] is now secured.</span>")
|
||||
|
||||
if(panel_open)
|
||||
if(iscrowbar(I))
|
||||
if(beaker)
|
||||
var/obj/item/reagent_containers/glass/B = beaker
|
||||
B.forceMove(loc)
|
||||
beaker = null
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/chem_dispenser/beer
|
||||
icon_state = "booze_dispenser"
|
||||
name = "booze dispenser"
|
||||
@@ -276,10 +342,75 @@
|
||||
max_energy = 100
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
|
||||
dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol")
|
||||
var/list/special_reagents3 = list(list("iced_beer"),
|
||||
list("irishcream", "manhattan",),
|
||||
list("antihol", "synthignon", "bravebull"))
|
||||
hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
|
||||
unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
|
||||
hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing", "sake")
|
||||
|
||||
/obj/machinery/chem_dispenser/beer/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/beer(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/super(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/beer/upgraded/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/beer(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/pico(null)
|
||||
component_parts += new /obj/item/stock_parts/capacitor/super(null)
|
||||
component_parts += new /obj/item/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/hyper(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/beer/RefreshParts()
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
for(var/i in 1 to M.rating)
|
||||
dispensable_reagents = sortList(dispensable_reagents | special_reagents3[i])
|
||||
|
||||
/obj/machinery/chem_dispenser/beer/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers/glass))
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
return ..()
|
||||
else
|
||||
..()
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(iswrench(I))
|
||||
playsound(src, I.usesound, 50, 1)
|
||||
if(anchored)
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='caution'>[src] can now be moved.</span>")
|
||||
else if(!anchored)
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='caution'>[src] is now secured.</span>")
|
||||
|
||||
if(panel_open)
|
||||
if(iscrowbar(I))
|
||||
if(beaker)
|
||||
var/obj/item/reagent_containers/glass/B = beaker
|
||||
B.forceMove(loc)
|
||||
beaker = null
|
||||
default_deconstruction_crowbar(I)
|
||||
return TRUE
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
drink_icon = "whiskeyglass"
|
||||
drink_name = "Glass of whiskey"
|
||||
drink_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
|
||||
taste_message = "whiskey"
|
||||
|
||||
/datum/reagent/consumable/ethanol/specialwhiskey
|
||||
name = "Special Blend Whiskey"
|
||||
@@ -89,6 +90,7 @@
|
||||
drink_icon = "ginvodkaglass"
|
||||
drink_name = "Glass of gin"
|
||||
drink_desc = "A crystal clear glass of Griffeater gin."
|
||||
taste_message = "gin"
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe
|
||||
name = "Absinthe"
|
||||
@@ -124,6 +126,7 @@
|
||||
drink_icon = "rumglass"
|
||||
drink_name = "Glass of Rum"
|
||||
drink_desc = "Now you want to Pray for a pirate suit, don't you?"
|
||||
taste_message = "rum"
|
||||
|
||||
/datum/reagent/consumable/ethanol/rum/overdose_process(mob/living/M, severity)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -150,6 +153,7 @@
|
||||
drink_icon = "ginvodkaglass"
|
||||
drink_name = "Glass of vodka"
|
||||
drink_desc = "The glass contain wodka. Xynta."
|
||||
taste_message = "vodka"
|
||||
|
||||
/datum/reagent/consumable/ethanol/sake
|
||||
name = "Sake"
|
||||
@@ -171,6 +175,7 @@
|
||||
drink_icon = "tequilaglass"
|
||||
drink_name = "Glass of Tequila"
|
||||
drink_desc = "Now all that's missing is the weird colored shades!"
|
||||
taste_message = "tequila"
|
||||
|
||||
/datum/reagent/consumable/ethanol/vermouth
|
||||
name = "Vermouth"
|
||||
@@ -205,6 +210,7 @@
|
||||
drink_icon = "cognacglass"
|
||||
drink_name = "Glass of cognac"
|
||||
drink_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
|
||||
taste_message = "cognac"
|
||||
|
||||
/datum/reagent/consumable/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
|
||||
name = "Suicider"
|
||||
@@ -278,7 +284,7 @@
|
||||
drink_icon = "atomicbombglass"
|
||||
drink_name = "Atomic Bomb"
|
||||
drink_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "a long, fiery burn"
|
||||
|
||||
/datum/reagent/consumable/ethanol/threemileisland
|
||||
name = "THree Mile Island Iced Tea"
|
||||
@@ -290,7 +296,7 @@
|
||||
drink_icon = "threemileislandglass"
|
||||
drink_name = "Three Mile Island Ice Tea"
|
||||
drink_desc = "A glass of this is sure to prevent a meltdown."
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "a creeping heat"
|
||||
|
||||
/datum/reagent/consumable/ethanol/goldschlager
|
||||
name = "Goldschlager"
|
||||
@@ -302,6 +308,7 @@
|
||||
drink_icon = "ginvodkaglass"
|
||||
drink_name = "Glass of goldschlager"
|
||||
drink_desc = "100 proof that teen girls will drink anything with gold in it."
|
||||
taste_message = "a deep, spicy warmth"
|
||||
|
||||
/datum/reagent/consumable/ethanol/patron
|
||||
name = "Patron"
|
||||
@@ -313,6 +320,7 @@
|
||||
drink_icon = "patronglass"
|
||||
drink_name = "Glass of Patron"
|
||||
drink_desc = "Drinking patron in the bar, with all the subpar ladies."
|
||||
taste_message = "a gift"
|
||||
|
||||
/datum/reagent/consumable/ethanol/gintonic
|
||||
name = "Gin and Tonic"
|
||||
@@ -324,6 +332,7 @@
|
||||
drink_icon = "gintonicglass"
|
||||
drink_name = "Gin and Tonic"
|
||||
drink_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
|
||||
taste_message = "bitter medicine"
|
||||
|
||||
/datum/reagent/consumable/ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
@@ -336,6 +345,7 @@
|
||||
drink_name = "Cuba Libre"
|
||||
drink_desc = "A classic mix of rum and cola."
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "liberation"
|
||||
|
||||
/datum/reagent/consumable/ethanol/whiskey_cola
|
||||
name = "Whiskey Cola"
|
||||
@@ -359,7 +369,7 @@
|
||||
drink_icon = "martiniglass"
|
||||
drink_name = "Classic Martini"
|
||||
drink_desc = "Damn, the bartender even stirred it, not shook it."
|
||||
taste_message = "martini"
|
||||
taste_message = "class"
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
@@ -371,6 +381,7 @@
|
||||
drink_icon = "martiniglass"
|
||||
drink_name = "Vodka martini"
|
||||
drink_desc ="A bastardisation of the classic martini. Still great."
|
||||
taste_message = "class and potatoes"
|
||||
|
||||
/datum/reagent/consumable/ethanol/white_russian
|
||||
name = "White Russian"
|
||||
@@ -382,7 +393,7 @@
|
||||
drink_icon = "whiterussianglass"
|
||||
drink_name = "White Russian"
|
||||
drink_desc = "A very nice looking drink. But that's just, like, your opinion, man."
|
||||
taste_message = "creamy alcohol"
|
||||
taste_message = "very creamy alcohol"
|
||||
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail
|
||||
name = "Screwdriver"
|
||||
@@ -394,7 +405,7 @@
|
||||
drink_icon = "screwdriverglass"
|
||||
drink_name = "Screwdriver"
|
||||
drink_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "a naughty secret"
|
||||
|
||||
/datum/reagent/consumable/ethanol/booger
|
||||
name = "Booger"
|
||||
@@ -406,7 +417,7 @@
|
||||
drink_icon = "booger"
|
||||
drink_name = "Booger"
|
||||
drink_desc = "Eww..."
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "a fruity mess"
|
||||
|
||||
/datum/reagent/consumable/ethanol/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
@@ -560,7 +571,7 @@
|
||||
drink_icon = "b52glass"
|
||||
drink_name = "B-52"
|
||||
drink_desc = "Kahlua, Irish Cream, and congac. You will get bombed."
|
||||
taste_message = "creamy alcohol"
|
||||
taste_message = "destruction"
|
||||
|
||||
/datum/reagent/consumable/ethanol/irishcoffee
|
||||
name = "Irish Coffee"
|
||||
@@ -584,7 +595,7 @@
|
||||
drink_icon = "margaritaglass"
|
||||
drink_name = "Margarita"
|
||||
drink_desc = "On the rocks with salt on the rim. Arriba~!"
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "daisies"
|
||||
|
||||
/datum/reagent/consumable/ethanol/black_russian
|
||||
name = "Black Russian"
|
||||
@@ -608,7 +619,7 @@
|
||||
drink_icon = "manhattanglass"
|
||||
drink_name = "Manhattan"
|
||||
drink_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
|
||||
taste_message = "bitter alcohol"
|
||||
taste_message = "a bustling city"
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj
|
||||
name = "Manhattan Project"
|
||||
@@ -620,7 +631,7 @@
|
||||
drink_icon = "proj_manhattanglass"
|
||||
drink_name = "Manhattan Project"
|
||||
drink_desc = "A scientist's drink of choice, for thinking how to blow up the station."
|
||||
taste_message = "bitter alcohol"
|
||||
taste_message = "the apocalypse"
|
||||
|
||||
/datum/reagent/consumable/ethanol/whiskeysoda
|
||||
name = "Whiskey Soda"
|
||||
@@ -661,7 +672,7 @@
|
||||
drink_icon = "b&p"
|
||||
drink_name = "Barefoot"
|
||||
drink_desc = "Barefoot and pregnant"
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "pregnancy"
|
||||
|
||||
/datum/reagent/consumable/ethanol/snowwhite
|
||||
name = "Snow White"
|
||||
@@ -673,7 +684,7 @@
|
||||
drink_icon = "snowwhite"
|
||||
drink_name = "Snow White"
|
||||
drink_desc = "A cold refreshment."
|
||||
taste_message = "refreshing alcohol"
|
||||
taste_message = "a poisoned apple"
|
||||
|
||||
/datum/reagent/consumable/ethanol/demonsblood
|
||||
name = "Demons Blood"
|
||||
@@ -699,7 +710,7 @@
|
||||
drink_icon = "vodkatonicglass"
|
||||
drink_name = "Vodka and Tonic"
|
||||
drink_desc = "For when a gin and tonic isn't russian enough."
|
||||
taste_message = "fizzy alcohol"
|
||||
taste_message = "bitter medicine"
|
||||
|
||||
/datum/reagent/consumable/ethanol/ginfizz
|
||||
name = "Gin Fizz"
|
||||
@@ -724,7 +735,7 @@
|
||||
drink_icon = "bahama_mama"
|
||||
drink_name = "Bahama Mama"
|
||||
drink_desc = "Tropic cocktail"
|
||||
taste_message = "fruity alcohol"
|
||||
taste_message = "HONK"
|
||||
|
||||
/datum/reagent/consumable/ethanol/singulo
|
||||
name = "Singulo"
|
||||
@@ -749,7 +760,7 @@
|
||||
drink_icon = "sbitenglass"
|
||||
drink_name = "Sbiten"
|
||||
drink_desc = "A spicy mix of Vodka and Spice. Very hot."
|
||||
taste_message = "spicy alcohol"
|
||||
taste_message = "comforting warmth"
|
||||
|
||||
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M)
|
||||
if(M.bodytemperature < 360)
|
||||
@@ -766,7 +777,7 @@
|
||||
drink_icon = "devilskiss"
|
||||
drink_name = "Devils Kiss"
|
||||
drink_desc = "Creepy time!"
|
||||
taste_message = "blood"
|
||||
taste_message = "naughtiness"
|
||||
|
||||
/datum/reagent/consumable/ethanol/red_mead
|
||||
name = "Red Mead"
|
||||
@@ -791,7 +802,7 @@
|
||||
drink_icon = "meadglass"
|
||||
drink_name = "Mead"
|
||||
drink_desc = "A Vikings Beverage, though a cheap one."
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "honey"
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer
|
||||
name = "Iced Beer"
|
||||
@@ -803,7 +814,7 @@
|
||||
drink_icon = "iced_beerglass"
|
||||
drink_name = "Iced Beer"
|
||||
drink_desc = "A beer so frosty, the air around it freezes."
|
||||
taste_message = "refreshing alcohol"
|
||||
taste_message = "cold beer"
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M)
|
||||
if(M.bodytemperature > 270)
|
||||
@@ -820,7 +831,7 @@
|
||||
drink_icon = "grogglass"
|
||||
drink_name = "Grog"
|
||||
drink_desc = "A fine and cepa drink for Space."
|
||||
taste_message = "rum"
|
||||
taste_message = "strongly diluted rum"
|
||||
|
||||
/datum/reagent/consumable/ethanol/aloe
|
||||
name = "Aloe"
|
||||
@@ -832,7 +843,7 @@
|
||||
drink_icon = "aloe"
|
||||
drink_name = "Aloe"
|
||||
drink_desc = "Very, very, very good."
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "healthy skin"
|
||||
|
||||
/datum/reagent/consumable/ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
@@ -856,7 +867,7 @@
|
||||
drink_icon = "alliescocktail"
|
||||
drink_name = "Allies cocktail"
|
||||
drink_desc = "A drink made from your allies."
|
||||
taste_message = "bitter alcohol"
|
||||
taste_message = "victory"
|
||||
|
||||
/datum/reagent/consumable/ethanol/acid_spit
|
||||
name = "Acid Spit"
|
||||
@@ -916,6 +927,7 @@
|
||||
drink_icon = "hippiesdelightglass"
|
||||
drink_name = "Hippie's Delight"
|
||||
drink_desc = "A drink enjoyed by people during the 1960's."
|
||||
taste_message = "colors"
|
||||
|
||||
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -966,7 +978,7 @@
|
||||
drink_icon = "irishcarbomb"
|
||||
drink_name = "Irish Car Bomb"
|
||||
drink_desc = "An irish car bomb."
|
||||
taste_message = "creamy alcohol"
|
||||
taste_message = "troubles"
|
||||
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
@@ -990,7 +1002,7 @@
|
||||
drink_icon = "erikasurprise"
|
||||
name = "Erika Surprise"
|
||||
drink_desc = "The surprise is, it's green!"
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "disappointment"
|
||||
|
||||
/datum/reagent/consumable/ethanol/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -1003,7 +1015,7 @@
|
||||
drink_icon = "driestmartiniglass"
|
||||
drink_name = "Driest Martini"
|
||||
drink_desc = "Only for the experienced. You think you see sand floating in the glass."
|
||||
taste_message = "bitter alcohol"
|
||||
taste_message = "dust and ashes"
|
||||
|
||||
/datum/reagent/consumable/ethanol/driestmartini/on_mob_life(mob/living/M)
|
||||
if(current_cycle >= 55 && current_cycle < 115)
|
||||
@@ -1019,7 +1031,7 @@
|
||||
drink_icon = "kahluaglass"
|
||||
drink_name = "Glass of RR coffee Liquor"
|
||||
drink_desc = "DAMN, THIS THING LOOKS ROBUST"
|
||||
taste_message = "sweet alcohol"
|
||||
taste_message = "coffee and alcohol"
|
||||
|
||||
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1158,7 +1170,7 @@
|
||||
drink_icon = "synthanolglass"
|
||||
drink_name = "Glass of Synthanol"
|
||||
drink_desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too."
|
||||
taste_message = "motor oil mixed with puke"
|
||||
taste_message = "motor oil"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M)
|
||||
if(!M.isSynthetic())
|
||||
@@ -1184,6 +1196,7 @@
|
||||
drink_icon = "robottearsglass"
|
||||
drink_name = "Glass of Robot Tears"
|
||||
drink_desc = "No robots were hurt in the making of this drink."
|
||||
taste_message = "existential angst"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/trinary
|
||||
name = "Trinary"
|
||||
@@ -1195,6 +1208,7 @@
|
||||
drink_icon = "trinaryglass"
|
||||
drink_name = "Glass of Trinary"
|
||||
drink_desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well."
|
||||
taste_message = "modem static"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/servo
|
||||
name = "Servo"
|
||||
@@ -1206,6 +1220,7 @@
|
||||
drink_icon = "servoglass"
|
||||
drink_name = "Glass of Servo"
|
||||
drink_desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe."
|
||||
taste_message = "motor oil and cocoa"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/uplink
|
||||
name = "Uplink"
|
||||
@@ -1217,6 +1232,7 @@
|
||||
drink_icon = "uplinkglass"
|
||||
drink_name = "Glass of Uplink"
|
||||
drink_desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics."
|
||||
taste_message = "a GUI in visual basic"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/synthnsoda
|
||||
name = "Synth 'n Soda"
|
||||
@@ -1228,6 +1244,7 @@
|
||||
drink_icon = "synthnsodaglass"
|
||||
drink_name = "Glass of Synth 'n Soda"
|
||||
drink_desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon."
|
||||
taste_message = "fizzy motor oil"
|
||||
|
||||
/datum/reagent/consumable/ethanol/synthanol/synthignon
|
||||
name = "Synthignon"
|
||||
@@ -1239,6 +1256,7 @@
|
||||
drink_icon = "synthignonglass"
|
||||
drink_name = "Glass of Synthignon"
|
||||
drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious."
|
||||
taste_message = "fancy motor oil"
|
||||
|
||||
/datum/reagent/consumable/ethanol/fruit_wine
|
||||
name = "Fruit Wine"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
description = "Uh, some kind of drink."
|
||||
reagent_state = LIQUID
|
||||
color = "#E78108" // rgb: 231, 129, 8
|
||||
taste_message = "something which should not exist"
|
||||
var/adj_dizzy = 0
|
||||
var/adj_drowsy = 0
|
||||
var/adj_sleepy = 0
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
drink_icon = "glass_clear"
|
||||
drink_name = "Glass of Tonic Water"
|
||||
drink_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
|
||||
taste_message = "bitterness"
|
||||
|
||||
/datum/reagent/consumable/drink/cold/sodawater
|
||||
name = "Soda Water"
|
||||
@@ -25,6 +26,7 @@
|
||||
drink_icon = "glass_clear"
|
||||
drink_name = "Glass of Soda Water"
|
||||
drink_desc = "Soda water. Why not make a scotch and soda?"
|
||||
taste_message = "fizz"
|
||||
|
||||
/datum/reagent/consumable/drink/cold/ice
|
||||
name = "Ice"
|
||||
@@ -36,6 +38,7 @@
|
||||
drink_icon = "iceglass"
|
||||
drink_name = "Glass of ice"
|
||||
drink_desc = "Generally, you're supposed to put something else in there too..."
|
||||
taste_message = "cold"
|
||||
|
||||
/datum/reagent/consumable/drink/cold/ice/on_mob_life(mob/living/M)
|
||||
M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
|
||||
@@ -62,7 +65,7 @@
|
||||
drink_icon = "nuka_colaglass"
|
||||
drink_name = "Nuka Cola"
|
||||
drink_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
|
||||
taste_message = "cola"
|
||||
taste_message = "radioactive cola"
|
||||
|
||||
/datum/reagent/consumable/drink/cold/nuka_cola/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
drink_icon = "icedcoffeeglass"
|
||||
drink_name = "Iced Coffee"
|
||||
drink_desc = "A drink to perk you up and refresh you!"
|
||||
taste_message = "coffee"
|
||||
taste_message = "refreshingly cold coffee"
|
||||
|
||||
/datum/reagent/consumable/drink/coffee/soy_latte
|
||||
name = "Soy Latte"
|
||||
@@ -320,6 +320,7 @@
|
||||
drink_icon = "soy_latte"
|
||||
drink_name = "Soy Latte"
|
||||
drink_desc = "A nice and refrshing beverage while you are reading."
|
||||
taste_message = "fake milky coffee"
|
||||
|
||||
/datum/reagent/consumable/drink/coffee/soy_latte/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -338,6 +339,7 @@
|
||||
drink_icon = "cafe_latte"
|
||||
drink_name = "Cafe Latte"
|
||||
drink_desc = "A nice, strong and refreshing beverage while you are reading."
|
||||
taste_message = "milky coffee"
|
||||
|
||||
/datum/reagent/consumable/drink/coffee/cafe_latte/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -353,6 +355,7 @@
|
||||
color = "#673629"
|
||||
drink_name = "Cafe Mocha"
|
||||
drink_desc = "The perfect blend of coffe, milk, and chocolate."
|
||||
taste_message = "chocolatey coffee"
|
||||
|
||||
/datum/reagent/consumable/drink/tea
|
||||
name = "Tea"
|
||||
@@ -385,16 +388,17 @@
|
||||
drink_icon = "icetea"
|
||||
drink_name = "Iced Tea"
|
||||
drink_desc = "No relation to a certain rap artist/ actor."
|
||||
taste_message = "cold tea"
|
||||
|
||||
/datum/reagent/consumable/drink/bananahonk
|
||||
name = "Banana Mama"
|
||||
name = "Banana Honk"
|
||||
id = "bananahonk"
|
||||
description = "A drink from Clown Heaven."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
drink_icon = "bananahonkglass"
|
||||
drink_name = "Banana Honk"
|
||||
drink_desc = "A drink from Banana Heaven."
|
||||
taste_message = "honks"
|
||||
taste_message = "HONK"
|
||||
|
||||
/datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -462,7 +466,7 @@
|
||||
drink_icon = "bluecherryshake"
|
||||
drink_name = "Blue Cherry Shake"
|
||||
drink_desc = "An exotic blue milkshake."
|
||||
taste_message = "cherry milkshake"
|
||||
taste_message = "blues"
|
||||
|
||||
/datum/reagent/consumable/drink/pumpkin_latte
|
||||
name = "Pumpkin Latte"
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
taste_message = "metal"
|
||||
|
||||
/datum/reagent/lithium/on_mob_life(mob/living/M)
|
||||
if(isturf(M.loc) && !istype(M.loc, /turf/space))
|
||||
@@ -34,6 +35,7 @@
|
||||
description = "A highly potent hallucinogenic substance. Far out, maaaan."
|
||||
reagent_state = LIQUID
|
||||
color = "#0000D8"
|
||||
taste_message = "a magical journey"
|
||||
|
||||
/datum/reagent/lsd/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -50,6 +52,7 @@
|
||||
metabolization_rate = 0.2
|
||||
addiction_chance = 65
|
||||
heart_rate_decrease = 1
|
||||
taste_message = "a synthetic high"
|
||||
|
||||
/datum/reagent/space_drugs/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -66,6 +69,7 @@
|
||||
id = "psilocybin"
|
||||
description = "A strong psycotropic derived from certain species of mushroom."
|
||||
color = "#E700E7" // rgb: 231, 0, 231
|
||||
taste_message = "visions"
|
||||
|
||||
/datum/reagent/psilocybin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -101,6 +105,7 @@
|
||||
overdose_threshold = 35
|
||||
addiction_chance = 70
|
||||
heart_rate_increase = 1
|
||||
taste_message = "calm"
|
||||
|
||||
/datum/reagent/nicotine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -237,6 +242,7 @@
|
||||
color = "#0264B4"
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
taste_message = "very poor life choices"
|
||||
|
||||
|
||||
/datum/reagent/krokodil/on_mob_life(mob/living/M)
|
||||
@@ -310,6 +316,7 @@
|
||||
addiction_chance = 60
|
||||
metabolization_rate = 0.6
|
||||
heart_rate_increase = 1
|
||||
taste_message = "speed"
|
||||
|
||||
/datum/reagent/methamphetamine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -369,6 +376,7 @@
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 80
|
||||
metabolization_rate = 0.6
|
||||
taste_message = "WAAAAGH"
|
||||
|
||||
/datum/reagent/bath_salts/on_mob_life(mob/living/M)
|
||||
var/check = rand(0,100)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
taste_message = null
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -57,7 +58,7 @@
|
||||
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
|
||||
reagent_state = SOLID
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
taste_message = null
|
||||
taste_message = "nutrition"
|
||||
|
||||
/datum/reagent/consumable/vitamin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -272,6 +273,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#B1B0B0"
|
||||
overdose_threshold = 100
|
||||
taste_strength = 2
|
||||
taste_message = "salt"
|
||||
|
||||
/datum/reagent/consumable/sodiumchloride/overdose_process(mob/living/M, severity)
|
||||
@@ -324,7 +326,7 @@
|
||||
id = "sprinkles"
|
||||
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
|
||||
color = "#FF00FF" // rgb: 255, 0, 255
|
||||
taste_message = "sweetness"
|
||||
taste_message = "crunchy sweetness"
|
||||
|
||||
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -433,7 +435,7 @@
|
||||
description = "Blue and tastier kind of cherry jelly."
|
||||
reagent_state = LIQUID
|
||||
color = "#00F0FF"
|
||||
taste_message = "cherry jelly"
|
||||
taste_message = "the blues"
|
||||
|
||||
/datum/reagent/consumable/egg
|
||||
name = "Egg"
|
||||
@@ -462,7 +464,7 @@
|
||||
description = "A sweet syrup derived from corn starch that has had its starches converted into maltose and other sugars."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
taste_message = "sweetness"
|
||||
taste_message = "cheap sugar substitute"
|
||||
|
||||
/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M)
|
||||
M.reagents.add_reagent("sugar", 1.2)
|
||||
@@ -502,7 +504,7 @@
|
||||
id = "onionjuice"
|
||||
description = "A strong tasting substance that can induce partial blindness."
|
||||
color = "#c0c9a0"
|
||||
taste_message = "bitterness"
|
||||
taste_message = "pungency"
|
||||
|
||||
/datum/reagent/consumable/onion/reaction_mob(mob/living/M, method = TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
@@ -708,7 +710,7 @@
|
||||
description = "A paste comprised of highly-processed organic material. Uncomfortably similar to deviled ham spread."
|
||||
reagent_state = LIQUID
|
||||
color = "#EBD7D7"
|
||||
taste_message = "meat"
|
||||
taste_message = "meat?"
|
||||
|
||||
/datum/reagent/consumable/meatslurry/on_mob_life(mob/living/M)
|
||||
if(prob(4))
|
||||
@@ -810,6 +812,7 @@
|
||||
color = "#F5F5F5"
|
||||
metabolization_rate = 0.2
|
||||
taste_message = "excellent cuisine"
|
||||
taste_strength = 4
|
||||
|
||||
/datum/reagent/msg/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
color = "#C805DC"
|
||||
metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
|
||||
shock_reduction = 200
|
||||
taste_message = "numbness"
|
||||
|
||||
/datum/reagent/medicine/hydrocodone/on_mob_life(mob/living/M)
|
||||
if(ishuman(M))
|
||||
@@ -28,6 +29,7 @@
|
||||
description = "Sterilizes wounds in preparation for surgery."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
taste_message = "antiseptic"
|
||||
|
||||
//makes you squeaky clean
|
||||
/datum/reagent/medicine/sterilizine/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
@@ -47,6 +49,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FA46FA"
|
||||
overdose_threshold = 40
|
||||
taste_message = "stimulant"
|
||||
|
||||
/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -89,6 +92,7 @@
|
||||
description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
taste_message = "nurturing"
|
||||
|
||||
/datum/reagent/medicine/mitocholide/on_mob_life(mob/living/M)
|
||||
if(ishuman(M))
|
||||
@@ -112,6 +116,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#0000C8" // rgb: 200, 165, 220
|
||||
heart_rate_decrease = 1
|
||||
taste_message = "a safe refuge"
|
||||
|
||||
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -135,6 +140,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#669900" // rgb: 102, 153, 0
|
||||
overdose_threshold = 30
|
||||
taste_message = "reformation"
|
||||
|
||||
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -163,6 +169,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#0AB478"
|
||||
metabolization_rate = 0.2
|
||||
taste_message = "antibiotics"
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine
|
||||
name = "Silver Sulfadiazine"
|
||||
@@ -171,6 +178,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#F0C814"
|
||||
metabolization_rate = 3
|
||||
taste_message = "burn cream"
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -196,6 +204,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 3
|
||||
taste_message = "wound cream"
|
||||
|
||||
/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -243,6 +252,7 @@
|
||||
description = "A resorbable microfibrillar collagen and protein mixture that can rapidly heal injuries when applied topically."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFEBEB"
|
||||
taste_message = "blood"
|
||||
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
if(iscarbon(M))
|
||||
@@ -264,6 +274,7 @@
|
||||
description = "Activated charcoal helps to absorb toxins."
|
||||
reagent_state = LIQUID
|
||||
color = "#000000"
|
||||
taste_message = "dust"
|
||||
|
||||
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -283,6 +294,7 @@
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 30
|
||||
addiction_chance = 5
|
||||
taste_message = "health"
|
||||
|
||||
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -338,6 +350,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#22AB35"
|
||||
metabolization_rate = 0.8
|
||||
taste_message = "a painful cleansing"
|
||||
|
||||
/datum/reagent/medicine/calomel/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -356,6 +369,7 @@
|
||||
description = "Potassium Iodide is a medicinal drug used to counter the effects of radiation poisoning."
|
||||
reagent_state = LIQUID
|
||||
color = "#B4DCBE"
|
||||
taste_message = "cleansing"
|
||||
|
||||
/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M)
|
||||
if(prob(80))
|
||||
@@ -368,6 +382,7 @@
|
||||
description = "Pentetic Acid is an aggressive chelation agent. May cause tissue damage. Use with caution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
taste_message = "a purge"
|
||||
|
||||
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -391,6 +406,7 @@
|
||||
metabolization_rate = 0.1
|
||||
shock_reduction = 25
|
||||
overdose_threshold = 25
|
||||
taste_message = "relief"
|
||||
|
||||
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -409,6 +425,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#00FFFF"
|
||||
metabolization_rate = 0.2
|
||||
taste_message = "safety"
|
||||
|
||||
/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -424,6 +441,7 @@
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 0.2
|
||||
addiction_chance = 20
|
||||
taste_message = "oxygenation"
|
||||
|
||||
/datum/reagent/medicine/perfluorodecalin/on_mob_life(mob/living/carbon/human/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -444,6 +462,7 @@
|
||||
metabolization_rate = 0.3
|
||||
overdose_threshold = 35
|
||||
addiction_chance = 25
|
||||
taste_message = "stimulation"
|
||||
|
||||
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -492,6 +511,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#5BCBE1"
|
||||
addiction_chance = 10
|
||||
taste_message = "antihistamine"
|
||||
|
||||
/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/M)
|
||||
M.AdjustJitter(-20)
|
||||
@@ -514,6 +534,7 @@
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
shock_reduction = 50
|
||||
taste_message = "a delightful numbing"
|
||||
|
||||
/datum/reagent/medicine/morphine/on_mob_life(mob/living/M)
|
||||
M.AdjustJitter(-25)
|
||||
@@ -538,6 +559,7 @@
|
||||
description = "Oculine is a saline eye medication with mydriatic and antibiotic effects."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
taste_message = "clarity"
|
||||
|
||||
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -569,6 +591,7 @@
|
||||
color = "#000000"
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 25
|
||||
taste_message = "a moment of respite"
|
||||
|
||||
/datum/reagent/medicine/atropine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -596,6 +619,7 @@
|
||||
color = "#96B1AE"
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 20
|
||||
taste_message = "borrowed time"
|
||||
|
||||
/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -651,6 +675,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#A0E85E"
|
||||
metabolization_rate = 0.2
|
||||
taste_message = "life"
|
||||
|
||||
/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -716,6 +741,7 @@
|
||||
id = "mannitol"
|
||||
description = "Mannitol is a sugar alcohol that can help alleviate cranial swelling."
|
||||
color = "#D1D1F1"
|
||||
taste_message = "neurogenisis"
|
||||
|
||||
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -727,6 +753,7 @@
|
||||
id = "mutadone"
|
||||
description = "Mutadone is an experimental bromide that can cure genetic abnomalities."
|
||||
color = "#5096C8"
|
||||
taste_message = "cleanliness"
|
||||
|
||||
/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/human/M)
|
||||
if(M.mind && M.mind.assigned_role == "Cluwne") // HUNKE
|
||||
@@ -755,6 +782,7 @@
|
||||
id = "antihol"
|
||||
description = "A medicine which quickly eliminates alcohol in the body."
|
||||
color = "#009CA8"
|
||||
taste_message = "sobriety"
|
||||
|
||||
/datum/reagent/medicine/antihol/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -841,6 +869,7 @@
|
||||
description = "A hormone generated by the pancreas responsible for metabolizing carbohydrates and fat in the bloodstream."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
taste_message = "tiredness"
|
||||
|
||||
/datum/reagent/medicine/insulin/on_mob_life(mob/living/M)
|
||||
M.reagents.remove_reagent("sugar", 5)
|
||||
@@ -853,6 +882,7 @@
|
||||
color = "#D782E6"
|
||||
addiction_chance = 20
|
||||
overdose_threshold = 50
|
||||
taste_message = "warmth and stability"
|
||||
|
||||
/datum/reagent/medicine/teporone/on_mob_life(mob/living/M)
|
||||
if(M.bodytemperature > 310)
|
||||
@@ -867,6 +897,7 @@
|
||||
description = "Haloperidol is a powerful antipsychotic and sedative. Will help control psychiatric problems, but may cause brain damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFDCFF"
|
||||
taste_message = "stability"
|
||||
|
||||
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -898,6 +929,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#96DEDE"
|
||||
metabolization_rate = 0.1
|
||||
taste_message = "sleepiness"
|
||||
|
||||
/datum/reagent/medicine/ether/on_mob_life(mob/living/M)
|
||||
M.AdjustJitter(-25)
|
||||
@@ -919,6 +951,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#555555"
|
||||
can_synth = FALSE
|
||||
taste_message = "bodily perfection"
|
||||
|
||||
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -938,6 +971,7 @@
|
||||
color = "#DCDCDC"
|
||||
overdose_threshold = 30
|
||||
metabolization_rate = 0.1
|
||||
taste_message = "faint hope"
|
||||
|
||||
/datum/reagent/medicine/omnizine_diluted/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -955,26 +989,6 @@
|
||||
update_flags |= M.adjustFireLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
||||
return list(0, update_flags)
|
||||
|
||||
//virus-specific symptom reagents
|
||||
|
||||
/datum/reagent/medicine/synaphydramine
|
||||
name = "Diphen-Synaptizine"
|
||||
id = "synaphydramine"
|
||||
description = "Reduces drowsiness and hallucinations while also purging histamine from the body."
|
||||
color = "#EC536D" // rgb: 236, 83, 109
|
||||
|
||||
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
M.AdjustDrowsy(-5)
|
||||
if(holder.has_reagent("lsd"))
|
||||
holder.remove_reagent("lsd", 5)
|
||||
if(holder.has_reagent("histamine"))
|
||||
holder.remove_reagent("histamine", 5)
|
||||
M.AdjustHallucinate(-10)
|
||||
if(prob(30))
|
||||
update_flags |= M.adjustToxLoss(1, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
//////////////////////////////
|
||||
// Synth-Meds //
|
||||
//////////////////////////////
|
||||
@@ -987,6 +1001,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#CC7A00"
|
||||
process_flags = SYNTHETIC
|
||||
taste_message = "overclocking"
|
||||
|
||||
/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1017,6 +1032,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#D7B395"
|
||||
process_flags = SYNTHETIC
|
||||
taste_message = "heavy metals"
|
||||
|
||||
/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1033,6 +1049,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
taste_message = "knitting wounds"
|
||||
|
||||
/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1051,6 +1068,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
taste_message = "soothed burns"
|
||||
|
||||
/datum/reagent/medicine/kelotane/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1069,6 +1087,7 @@
|
||||
description = "Ichor from an extremely powerful plant. Great for restoring wounds, but it's a little heavy on the brain."
|
||||
color = "#FFAF00"
|
||||
overdose_threshold = 25
|
||||
taste_message = "a gift from nature"
|
||||
|
||||
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1094,6 +1113,7 @@
|
||||
id = "corazone"
|
||||
description = "A medication used to treat pain, fever, and inflammation, along with heart attacks."
|
||||
color = "#F5F5F5"
|
||||
taste_message = "a brief respite"
|
||||
|
||||
// This reagent's effects are handled in heart attack handling code
|
||||
|
||||
@@ -1104,6 +1124,7 @@
|
||||
color = "#9b3401"
|
||||
metabolization_rate = 0.5
|
||||
can_synth = FALSE
|
||||
taste_message = "wholeness"
|
||||
|
||||
/datum/reagent/medicine/nanocalcium/on_mob_life(mob/living/carbon/human/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
description = "A silvery white and ductile member of the boron group of chemical elements."
|
||||
reagent_state = SOLID
|
||||
color = "#A8A8A8" // rgb: 168, 168, 168
|
||||
taste_message = null
|
||||
taste_message = "metal"
|
||||
|
||||
|
||||
/datum/reagent/silicon
|
||||
@@ -176,7 +176,7 @@
|
||||
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
|
||||
reagent_state = LIQUID
|
||||
color = "#9E6B38" // rgb: 158, 107, 56
|
||||
taste_message = null
|
||||
taste_message = "extreme discomfort"
|
||||
|
||||
// metal foaming agent
|
||||
// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
|
||||
@@ -215,7 +215,7 @@
|
||||
description = "A purple gaseous element."
|
||||
reagent_state = GAS
|
||||
color = "#493062"
|
||||
taste_message = null
|
||||
taste_message = "chemtrail resistance"
|
||||
|
||||
/datum/reagent/carpet
|
||||
name = "Carpet"
|
||||
@@ -261,7 +261,7 @@
|
||||
description = "Pure 100% nail polish remover, also works as an industrial solvent."
|
||||
reagent_state = LIQUID
|
||||
color = "#474747"
|
||||
taste_message = null
|
||||
taste_message = "nail polish remover"
|
||||
|
||||
/datum/reagent/acetone/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -274,7 +274,7 @@
|
||||
description = "Volatile."
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
taste_message = null
|
||||
taste_message = "one third of an explosion"
|
||||
|
||||
/datum/reagent/colorful_reagent
|
||||
name = "Colorful Reagent"
|
||||
@@ -534,7 +534,7 @@
|
||||
description = "Finely ground Coffee beans, used to make coffee."
|
||||
reagent_state = SOLID
|
||||
color = "#5B2E0D" // rgb: 91, 46, 13
|
||||
taste_message = "bitterness"
|
||||
taste_message = "waste"
|
||||
|
||||
/datum/reagent/toxin/teapowder
|
||||
name = "Ground Tea Leaves"
|
||||
@@ -542,7 +542,7 @@
|
||||
description = "Finely shredded Tea leaves, used for making tea."
|
||||
reagent_state = SOLID
|
||||
color = "#7F8400" // rgb: 127, 132, 0"
|
||||
taste_message = "bitterness"
|
||||
taste_message = "the future"
|
||||
|
||||
//////////////////////////////////Hydroponics stuff///////////////////////////////
|
||||
|
||||
@@ -566,6 +566,7 @@
|
||||
description = "Cheap and extremely common type of plant nutriment."
|
||||
color = "#376400" // RBG: 50, 100, 0
|
||||
tox_prob = 10
|
||||
taste_message = "obscurity and toil"
|
||||
|
||||
/datum/reagent/plantnutriment/left4zednutriment
|
||||
name = "Left 4 Zed"
|
||||
@@ -573,6 +574,7 @@
|
||||
description = "Unstable nutriment that makes plants mutate more often than usual."
|
||||
color = "#1A1E4D" // RBG: 26, 30, 77
|
||||
tox_prob = 25
|
||||
taste_message = "evolution"
|
||||
|
||||
/datum/reagent/plantnutriment/robustharvestnutriment
|
||||
name = "Robust Harvest"
|
||||
@@ -580,6 +582,7 @@
|
||||
description = "Very potent nutriment that prevents plants from mutating."
|
||||
color = "#9D9D00" // RBG: 157, 157, 0
|
||||
tox_prob = 15
|
||||
taste_message = "bountifulness"
|
||||
|
||||
///Alchemical Reagents
|
||||
|
||||
|
||||
@@ -176,6 +176,39 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/reagent/stable_mutagen
|
||||
name = "Stable mutagen"
|
||||
id = "stable_mutagen"
|
||||
description = "Just the regular, boring sort of mutagenic compound. Works in a completely predictable manner."
|
||||
reagent_state = LIQUID
|
||||
color = "#7DFF00"
|
||||
|
||||
/datum/reagent/stable_mutagen/on_mob_life(mob/living/M)
|
||||
if(!ishuman(M) || !M.dna)
|
||||
return
|
||||
M.apply_effect(2*REAGENTS_EFFECT_MULTIPLIER, IRRADIATE, negate_armor = 1)
|
||||
if(current_cycle == 10 && islist(data))
|
||||
if(istype(data["dna"], /datum/dna))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/dna/D = data["dna"]
|
||||
if(!D.species.is_small)
|
||||
H.set_species(D.species.type, retain_damage = TRUE)
|
||||
H.dna = D.Clone()
|
||||
H.real_name = D.real_name
|
||||
domutcheck(H, null, MUTCHK_FORCED)
|
||||
H.dna.UpdateSE()
|
||||
H.dna.UpdateUI()
|
||||
H.sync_organ_dna(TRUE)
|
||||
H.UpdateAppearance()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/reagent/stable_mutagen/on_tick()
|
||||
var/datum/reagent/blood/B = locate() in holder.reagent_list
|
||||
if(B && islist(B.data) && !data)
|
||||
data = B.data.Copy()
|
||||
..()
|
||||
|
||||
/datum/reagent/uranium
|
||||
name ="Uranium"
|
||||
id = "uranium"
|
||||
@@ -1037,7 +1070,7 @@
|
||||
/datum/reagent/capulettium
|
||||
name = "Capulettium"
|
||||
id = "capulettium"
|
||||
description = "A rare drug that causes the user to fall unconscious and appear dead as long as it's in the body."
|
||||
description = "A rare drug that causes the user to appear dead for some time."
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584"
|
||||
heart_rate_stop = 1
|
||||
@@ -1046,10 +1079,18 @@
|
||||
/datum/reagent/capulettium/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
switch(current_cycle)
|
||||
if(1 to 10)
|
||||
if(1 to 5)
|
||||
update_flags |= M.AdjustEyeBlurry(10, FALSE)
|
||||
if(6 to 10)
|
||||
M.Drowsy(10)
|
||||
if(11)
|
||||
fakedeath(M)
|
||||
if(61 to 69)
|
||||
update_flags |= M.AdjustEyeBlurry(10, FALSE)
|
||||
if(70 to INFINITY)
|
||||
update_flags |= M.AdjustEyeBlurry(10, FALSE)
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
fakerevive(M)
|
||||
return ..() | update_flags
|
||||
|
||||
/datum/reagent/capulettium/on_mob_delete(mob/living/M)
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
|
||||
reagent_state = LIQUID
|
||||
color = "#1BB1AB"
|
||||
taste_message = "oil"
|
||||
taste_message = "cherry"
|
||||
|
||||
/datum/reagent/lube/reaction_turf(turf/simulated/T, volume)
|
||||
if(volume >= 1 && istype(T))
|
||||
@@ -194,7 +194,7 @@
|
||||
|
||||
|
||||
/datum/reagent/blood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"="#A10808","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"="#A10808","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null, "dna" = null)
|
||||
name = "Blood"
|
||||
id = "blood"
|
||||
reagent_state = LIQUID
|
||||
@@ -285,6 +285,7 @@
|
||||
name = "Vaccine"
|
||||
id = "vaccine"
|
||||
color = "#C81040" // rgb: 200, 16, 64
|
||||
taste_message = "antibodies"
|
||||
|
||||
/datum/reagent/vaccine/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(islist(data) && (method == INGEST))
|
||||
@@ -440,7 +441,7 @@
|
||||
description = "Something that shouldn't exist on this plane of existance."
|
||||
process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
|
||||
metabolization_rate = 1
|
||||
taste_message = null
|
||||
taste_message = "sulfur"
|
||||
|
||||
/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -507,6 +508,7 @@
|
||||
description = "Can be used to dry things."
|
||||
reagent_state = LIQUID
|
||||
color = "#A70FFF"
|
||||
taste_message = "dry mouth"
|
||||
|
||||
/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, volume)
|
||||
if(istype(T) && T.wet)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user