Merge pull request #12 from CHOMPStation2/master

Updoot 2/18/2021
This commit is contained in:
MisterGrimm
2021-02-18 05:29:32 -05:00
committed by GitHub
219 changed files with 10377 additions and 4291 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
Going to make a Pull Request? Make sure you read the [CONTRIBUTING.md](.github/CONTRIBUTING.md) first!
CHOMPStation is a fork of the Yawn-wider code branch which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, for the game Space Station 13.
CHOMPStation was a fork of the Yawn-wider code branch which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, but we are now since separated from Yawn-wider code, while keeping some of their features, which is a fork of the VOREStation code branch which is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, for the game Space Station 13.
![Render Nanomaps](https://github.com/VOREStation/VOREStation/workflows/Render%20Nanomaps/badge.svg)
-1
View File
@@ -173,6 +173,5 @@ What is the naming convention for planes or layers?
plane = initial(plane)
layer = initial(layer)
// Check if a mob can "logically" see an atom plane
#define MOB_CAN_SEE_PLANE(M, P) (P <= PLANE_WORLD || (P in M.planes_visible))
+1
View File
@@ -10,6 +10,7 @@
#define LANGUAGE_ENOCHIAN "Enochian"
#define LANGUAGE_VESPINAE "Vespinae"
#define LANGUAGE_SPACER "Spacer"
#define LANGUAGE_CLOWNISH "Coulrian"
#define LANGUAGE_CHIMPANZEE "Chimpanzee"
#define LANGUAGE_NEAERA "Neaera"
+3 -1
View File
@@ -5,4 +5,6 @@ GLOBAL_LIST_EMPTY(meteor_list)
GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
GLOBAL_LIST_EMPTY(tagger_locations)
GLOBAL_LIST_EMPTY(tagger_locations)
GLOBAL_LIST_INIT(char_directory_tags, list("Pred", "Prey", "Switch", "Non-Vore", "Unset"))
+9 -1
View File
@@ -13,4 +13,12 @@ var/global/list/vore_reagent_sounds = list(
'sound/vore/walkslosh10.ogg',
"None" = null)
/var/global/list/existing_metroids = list() //Global variable for tracking metroids for the event announcement. Needs to go here for load order.
/var/global/list/existing_metroids = list() //Global variable for tracking metroids for the event announcement. Needs to go here for load order.
//stuff that only synths can eat
var/global/list/edible_tech = list(/obj/item/weapon/cell,
/obj/item/weapon/circuitboard,
/obj/item/integrated_circuit,
/obj/item/broken_device,
/obj/item/brokenbug,
)
+13 -3
View File
@@ -124,9 +124,13 @@ var/global/list/global_vore_egg_types = list(
"Slime glob",
"Chicken",
"Synthetic",
"Cooking error",
"Bluespace Floppy",
"Bluespace Compressed File",
"Bluespace CD",
"Escape pod",
"Cooking error",
"Web cocoon",
"Honeycomb",
"Bug cocoon",
"Rock",
"Yellow",
@@ -155,9 +159,13 @@ var/global/list/tf_vore_egg_types = list(
"Slime glob" = /obj/item/weapon/storage/vore_egg/slimeglob,
"Chicken" = /obj/item/weapon/storage/vore_egg/chicken,
"Synthetic" = /obj/item/weapon/storage/vore_egg/synthetic,
"Cooking error" = /obj/item/weapon/storage/vore_egg/badrecipe,
"Bluespace Floppy" = /obj/item/weapon/storage/vore_egg/floppy,
"Bluespace Compressed File" = /obj/item/weapon/storage/vore_egg/file,
"Bluespace CD" = /obj/item/weapon/storage/vore_egg/cd,
"Escape pod" = /obj/item/weapon/storage/vore_egg/escapepod,
"Cooking error" = /obj/item/weapon/storage/vore_egg/badrecipe,
"Web cocoon" = /obj/item/weapon/storage/vore_egg/cocoon,
"Honeycomb" = /obj/item/weapon/storage/vore_egg/honeycomb,
"Bug cocoon" = /obj/item/weapon/storage/vore_egg/bugcocoon,
"Rock" = /obj/item/weapon/storage/vore_egg/rock,
"Yellow" = /obj/item/weapon/storage/vore_egg/yellow,
@@ -183,6 +191,7 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
/obj/item/device/paicard,
/obj/item/device/pda,
/obj/item/device/radio/headset,
/obj/item/device/starcaster_news, //chompstation addition
/obj/item/inflatable/torn,
/obj/item/organ,
/obj/item/stack/material/cardboard,
@@ -219,7 +228,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
/obj/item/weapon/storage/fancy/crayons,
/obj/item/weapon/storage/fancy/egg_box,
/obj/item/weapon/storage/wallet,
/obj/item/weapon/storage/vore_egg)
/obj/item/weapon/storage/vore_egg,
/obj/item/weapon/material/kitchen) //chompstation addition
var/global/list/contamination_flavors = list(
"Generic" = contamination_flavors_generic,
+41 -1
View File
@@ -1609,6 +1609,46 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
/proc/href(href_src, list/href_params, href_text)
return "<a href='?src=\ref[href_src];[list2params(href_params)]'>[href_text]</a>"
// This is a helper for anything that wants to render the map in TGUI
/proc/get_tgui_plane_masters()
. = list()
// 'Utility' planes
. += new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects)
. += new /obj/screen/plane_master/lighting //Lighting system (but different!)
. += new /obj/screen/plane_master/ghosts //Ghosts!
. += new /obj/screen/plane_master{plane = PLANE_AI_EYE} //AI Eye!
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS} //Status is the synth/human icon left side of medhuds
. += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH} //Health bar
. += new /obj/screen/plane_master{plane = PLANE_CH_LIFE} //Alive-or-not icon
. += new /obj/screen/plane_master{plane = PLANE_CH_ID} //Job ID icon
. += new /obj/screen/plane_master{plane = PLANE_CH_WANTED} //Wanted status
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPLOYAL} //Loyalty implants
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPTRACK} //Tracking implants
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPCHEM} //Chemical implants
. += new /obj/screen/plane_master{plane = PLANE_CH_SPECIAL} //"Special" role stuff
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS_OOC} //OOC status HUD
. += new /obj/screen/plane_master{plane = PLANE_ADMIN1} //For admin use
. += new /obj/screen/plane_master{plane = PLANE_ADMIN2} //For admin use
. += new /obj/screen/plane_master{plane = PLANE_ADMIN3} //For admin use
. += new /obj/screen/plane_master{plane = PLANE_MESONS} //Meson-specific things like open ceilings.
. += new /obj/screen/plane_master{plane = PLANE_BUILDMODE} //Things that only show up while in build mode
// Real tangible stuff planes
. += new /obj/screen/plane_master/main{plane = TURF_PLANE}
. += new /obj/screen/plane_master/main{plane = OBJ_PLANE}
. += new /obj/screen/plane_master/main{plane = MOB_PLANE}
. += new /obj/screen/plane_master/cloaked //Cloaked atoms!
//VOREStation Add - Random other plane masters
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS_R} //Right-side status icon
. += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100
. += new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status
. += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
. += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality
//VOREStation Add End
/proc/CallAsync(datum/source, proctype, list/arguments)
set waitfor = FALSE
return call(source, proctype)(arglist(arguments))
return call(source, proctype)(arglist(arguments))
+25
View File
@@ -0,0 +1,25 @@
GLOBAL_LIST_EMPTY(widelists)
/proc/widelist(var/list/input_list)
var/list_hash = gen_hash_list(input_list)
if(!(list_hash in GLOB.widelists))
GLOB.widelists[list_hash] = input_list
return GLOB.widelists[list_hash]
/proc/gen_hash_list(var/list/input_list)
var/string = ""
for(var/item in input_list)
var/p1 = ""
if(islist(item))
p1 = ">>>::-;[gen_hash_list(item)];-::<<<"
else
p1 = "[item]"
var/p2 = ""
if(islist(input_list[item]))
p2 = ">>>::-;[gen_hash_list(input_list[item])];-::<<<"
else
p2 = "[input_list[item]]"
string += "[p1]::--::[p2]::;;;"
return md5(string)
+7
View File
@@ -161,6 +161,13 @@
#define ui_ghost_pai "SOUTH: 6,CENTER+2:24"
#define ui_ghost_updown "SOUTH: 6,CENTER+3:24"
// NIF Soulcatcher guest ones
#define ui_nifsc_reenter "SOUTH:6,CENTER-3:24"
#define ui_nifsc_arproj "SOUTH:6,CENTER-2:24"
#define ui_nifsc_jumptoowner "SOUTH:6,CENTER-1:24"
#define ui_nifsc_nme "SOUTH:6,CENTER:24"
#define ui_nifsc_nsay "SOUTH:6,CENTER+1:24"
// Rig panel
#define ui_rig_deco1 "WEST:-7, SOUTH+5"
#define ui_rig_deco2 "WEST:-7, SOUTH+6"
+102
View File
@@ -0,0 +1,102 @@
/obj/screen/nifsc
icon = 'icons/mob/screen_nifsc.dmi'
/obj/screen/nifsc/MouseEntered(location,control,params)
flick(icon_state + "_anim", src)
openToolTip(usr, src, params, title = name, content = desc)
/obj/screen/nifsc/MouseExited()
closeToolTip(usr)
/obj/screen/nifsc/Click()
closeToolTip(usr)
/obj/screen/nifsc/reenter
name = "Re-enter NIF"
desc = "Return into the NIF"
icon_state = "reenter"
/obj/screen/nifsc/reenter/Click()
..()
var/mob/living/carbon/brain/caught_soul/CS = usr
CS.reenter_soulcatcher()
/obj/screen/nifsc/arproj
name = "AR project"
desc = "Project your form into Augmented Reality for those around your predator with the appearance of your loaded character."
icon_state = "arproj"
/obj/screen/nifsc/arproj/Click()
..()
var/mob/living/carbon/brain/caught_soul/CS = usr
CS.ar_project()
/obj/screen/nifsc/jumptoowner
name = "Jump back to host"
desc = "Jumb back to the Soulcather host"
icon_state = "jump"
/obj/screen/nifsc/jumptoowner/Click()
..()
var/mob/living/carbon/brain/caught_soul/CS = usr
CS.jump_to_owner()
/obj/screen/nifsc/nme
name = "Emote into Soulcatcher"
desc = "Emote into the NIF's Soulcatcher (circumventing AR emoting)"
icon_state = "nme"
/obj/screen/nifsc/nme/Click()
..()
var/mob/living/carbon/brain/caught_soul/CS = usr
CS.nme()
/obj/screen/nifsc/nsay
name = "Speak into Soulcatcher"
desc = "Speak into the NIF's Soulcatcher (circumventing AR speaking)"
icon_state = "nsay"
/obj/screen/nifsc/nsay/Click()
..()
var/mob/living/carbon/brain/caught_soul/CS = usr
CS.nsay()
/mob/living/carbon/brain/caught_soul/create_mob_hud(datum/hud/HUD, apply_to_client = TRUE)
..()
var/list/adding = list()
HUD.adding = adding
var/obj/screen/using
using = new /obj/screen/nifsc/reenter()
using.screen_loc = ui_nifsc_reenter
using.hud = src
adding += using
using = new /obj/screen/nifsc/arproj()
using.screen_loc = ui_nifsc_arproj
using.hud = src
adding += using
using = new /obj/screen/nifsc/jumptoowner()
using.screen_loc = ui_nifsc_jumptoowner
using.hud = src
adding += using
using = new /obj/screen/nifsc/nme()
using.screen_loc = ui_nifsc_nme
using.hud = src
adding += using
using = new /obj/screen/nifsc/nsay()
using.screen_loc = ui_nifsc_nsay
using.hud = src
adding += using
if(client && apply_to_client)
client.screen = list()
client.screen += HUD.adding
client.screen += client.void
-6
View File
@@ -4,9 +4,6 @@
// Also handles initialization and processing of overmap sectors.
//
// This global variable exists for legacy support so we don't have to rename every shuttle_controller to SSshuttles yet.
var/global/datum/controller/subsystem/shuttles/shuttle_controller
SUBSYSTEM_DEF(shuttles)
name = "Shuttles"
wait = 2 SECONDS
@@ -35,9 +32,6 @@ SUBSYSTEM_DEF(shuttles)
var/tmp/list/current_run // Shuttles remaining to process this fire() tick
/datum/controller/subsystem/shuttles/PreInit()
global.shuttle_controller = src // TODO - Remove this! Change everything to point at SSshuttles intead
/datum/controller/subsystem/shuttles/Initialize(timeofday)
last_landmark_registration_time = world.time
// Find all declared shuttle datums and initailize them. (Okay, queue them for initialization a few lines further down)
+1 -4
View File
@@ -49,10 +49,7 @@ var/global/datum/controller/subsystem/ticker/ticker
/datum/controller/subsystem/ticker/Initialize()
pregame_timeleft = config.pregame_time
send2mainirc("Server lobby is loaded and open at byond://[config.serverurl ? config.serverurl : (config.server ? config.server : "[world.address]:[world.port]")]")
// Set up the global announcer
GLOB.autospeaker = new (null, null, null, 1)
GLOB.autospeaker = new (null, null, null, 1) //Set up Global Announcer
return ..()
/datum/controller/subsystem/ticker/fire(resumed = FALSE)
+1 -1
View File
@@ -51,7 +51,7 @@
/obj/item/weapon/reagent_containers/glass/paint/purple,
/obj/item/weapon/reagent_containers/glass/paint/black,
/obj/item/weapon/reagent_containers/glass/paint/white,
/obj/item/weapon/contraband/poster,
/obj/item/weapon/contraband/poster/custom,
/obj/item/weapon/wrapping_paper = 3
)
cost = 10
+5
View File
@@ -36,6 +36,11 @@
item_cost = 10
path = /obj/item/clothing/suit/space/void/autolok
/datum/uplink_item/item/tools/inflatable
name = "Inflatables"
item_cost = 10
path = /obj/item/weapon/storage/briefcase/inflatable
/datum/uplink_item/item/tools/elitetablet
name = "Tablet (Advanced)"
item_cost = 15
+1 -1
View File
@@ -399,7 +399,7 @@ var/list/mob/living/forced_ambiance_list = new
L << chosen_ambiance
else
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
else if(src.ambience.len)
else if(src.ambience && src.ambience.len)
var/ambience_odds = L?.client.prefs.ambience_chance
if(prob(ambience_odds) && (world.time >= L.client.time_last_ambience_played + 1 MINUTE))
var/sound = pick(ambience)
+19 -1
View File
@@ -27,4 +27,22 @@ var/const/access_pilot = 67
/datum/access/entertainment
id = access_entertainment
desc = "Entertainment Backstage"
region = ACCESS_REGION_GENERAL
region = ACCESS_REGION_GENERAL
/var/const/access_mime = 138
/datum/access/mime
id = access_mime
desc = "Mime Office"
region = ACCESS_REGION_GENERAL
/var/const/access_clown = 136
/datum/access/clown
id = access_clown
desc = "Clown Office"
region = ACCESS_REGION_GENERAL
/var/const/access_tomfoolery = 137
/datum/access/tomfoolery
id = access_tomfoolery
desc = "Tomfoolery Closet"
region = ACCESS_REGION_GENERAL
+2 -2
View File
@@ -26,13 +26,13 @@
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_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth)
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth)
minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
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_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_hop, access_RC_announce, access_keycard_auth)
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth)
/datum/alt_title/deputy_director
title = "Deputy Director"
+10 -10
View File
@@ -79,14 +79,14 @@
departments = list(DEPARTMENT_CIVILIAN)
department_flag = CIVILIAN
faction = "Station"
total_positions = -1
spawn_positions = -1
total_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
spawn_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
supervisors = "the spirit of laughter"
selection_color = "#515151"
economic_modifier = 1
job_description = "A Clown is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!"
whitelist_only = 1
latejoin_only = 1
latejoin_only = 0
outfit_type = /decl/hierarchy/outfit/job/clown
pto_type = PTO_CIVILIAN
alt_titles = list("Jester" = /datum/alt_title/jester, "Fool" = /datum/alt_title/fool)
@@ -99,9 +99,9 @@
/datum/job/clown/get_access()
if(config.assistant_maint)
return list(access_maint_tunnels, access_entertainment)
return list(access_maint_tunnels, access_entertainment, access_clown, access_tomfoolery)
else
return list(access_entertainment)
return list(access_entertainment, access_clown, access_tomfoolery)
/datum/job/mime
title = "Mime"
@@ -109,15 +109,15 @@
departments = list(DEPARTMENT_CIVILIAN)
department_flag = CIVILIAN
faction = "Station"
total_positions = -1
spawn_positions = -1
total_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
spawn_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
supervisors = "the spirit of performance"
selection_color = "#515151"
economic_modifier = 1
job_description = "A Mime is there to entertain the crew and keep high morale using unbelievable performances and acting skills!"
alt_titles = list("Poseur" = /datum/alt_title/poseur)
whitelist_only = 1
latejoin_only = 1
latejoin_only = 0
outfit_type = /decl/hierarchy/outfit/job/mime
pto_type = PTO_CIVILIAN
@@ -126,6 +126,6 @@
/datum/job/mime/get_access()
if(config.assistant_maint)
return list(access_maint_tunnels, access_entertainment)
return list(access_maint_tunnels, access_entertainment, access_tomfoolery, access_mime)
else
return list(access_entertainment)
return list(access_entertainment, access_tomfoolery, access_mime)
+55 -3
View File
@@ -29,6 +29,7 @@
var/close_sound = 'sound/machines/door/blastdoorclose.ogg'
var/damage = BLAST_DOOR_CRUSH_DAMAGE
var/multiplier = 1 // The multiplier for how powerful our YEET is.
var/istransparent = 0
closed_layer = ON_WINDOW_LAYER // Above airlocks when closed
var/id = 1.0
@@ -108,10 +109,13 @@
src.density = 1
update_nearby_tiles()
src.update_icon()
src.set_opacity(1)
if(src.istransparent)
src.set_opacity(0)
else
src.set_opacity(1)
sleep(15)
src.operating = 0
// Blast door crushing.
for(var/turf/turf in locs)
for(var/atom/movable/AM in turf)
@@ -276,10 +280,11 @@
// Parameters: None
// Description: Closes the door. Does necessary checks.
/obj/machinery/door/blast/close()
if (src.operating || (stat & BROKEN || stat & NOPOWER))
return
force_close()
force_close()
// Proc: repair()
// Parameters: None
@@ -323,5 +328,52 @@ obj/machinery/door/blast/regular/open
icon_state = "shutter1"
damage = SHUTTER_CRUSH_DAMAGE
// SUBTYPE: Transparent
// Not technically a blast door but operates like one. Allows air and light.
obj/machinery/door/blast/gate
name = "thick gate"
icon_state_open = "tshutter0"
icon_state_opening = "tshutterc0"
icon_state_closed = "tshutter1"
icon_state_closing = "tshutterc1"
icon_state = "tshutter1"
damage = SHUTTER_CRUSH_DAMAGE
maxhealth = 400
block_air_zones = 0
opacity = 0
istransparent = 1
obj/machinery/door/blast/gate/open
icon_state = "tshutter0"
density = 0
/obj/machinery/door/blast/gate/thin
name = "thin gate"
icon_state_open = "shutter2_0"
icon_state_opening = "shutter2_c0"
icon_state_closed = "shutter2_1"
icon_state_closing = "shutter2_c1"
icon_state = "shutter2_1"
maxhealth = 200
opacity = 0
/obj/machinery/door/blast/gate/thin/open
icon_state = "shutter2_1"
density = 0
/obj/machinery/door/blast/gate/bars
name = "prison bars"
icon_state_open = "bars_0"
icon_state_opening = "bars_c0"
icon_state_closed = "bars_1"
icon_state_closing = "bars_c1"
icon_state = "bars_1"
maxhealth = 600
opacity = 0
/obj/machinery/door/blast/gate/bars/open
icon_state = "bars_1"
density = 0
#undef BLAST_DOOR_CRUSH_DAMAGE
#undef SHUTTER_CRUSH_DAMAGE
+3
View File
@@ -376,10 +376,13 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/pointdefense)
/obj/effect/projectile/tracer/pointdefense
icon = 'icons/obj/projectiles_vr.dmi'
icon_state = "beam_pointdef"
/obj/effect/projectile/muzzle/pointdefense
icon = 'icons/obj/projectiles_vr.dmi'
icon_state = "muzzle_pointdef"
/obj/effect/projectile/impact/pointdefense
icon = 'icons/obj/projectiles_vr.dmi'
icon_state = "impact_pointdef"
+15 -15
View File
@@ -1157,7 +1157,6 @@
/obj/item/clothing/suit/jacket/puffer/vest = 5,
/obj/item/clothing/suit/storage/flannel/red = 5,
/obj/item/clothing/suit/unathi/robe = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit = 5,
/obj/item/clothing/suit/storage/toggle/internalaffairs = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5,
@@ -1244,7 +1243,6 @@
/obj/item/clothing/suit/jacket/puffer/vest = 100,
/obj/item/clothing/suit/storage/flannel/red = 100,
/obj/item/clothing/suit/unathi/robe = 100,
/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit = 100,
/obj/item/clothing/suit/storage/toggle/internalaffairs = 100,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 100,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 100,
@@ -1447,7 +1445,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
@@ -1617,14 +1615,19 @@
products = list(/obj/item/weapon/card/id/syndicate/station_access = 1,
/obj/item/weapon/storage/box/syndie_kit/chameleon = 1,
/obj/item/clothing/mask/bandana = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/device/radio/headset/syndicate/alt = 1,
/obj/item/device/pda = 1,
/obj/item/device/communicator = 1,
/obj/item/weapon/tape_roll = 2,
/obj/item/weapon/handcuffs = 4,
/obj/item/weapon/handcuffs/legcuffs = 4,
/obj/item/weapon/cell/device/weapon/recharge/alien = 2,
/obj/item/device/chameleon = 1,
/obj/item/weapon/storage/mre/menu11 = 2
/obj/item/weapon/storage/mre/menu11 = 2,
/obj/item/device/flash = 2,
/obj/item/weapon/pen/reagent/paralysis = 4,
/obj/item/device/perfect_tele/alien = 1
)
vend_delay = 15
@@ -2514,7 +2517,6 @@
/obj/item/clothing/suit/jacket/puffer/vest = 5,
/obj/item/clothing/suit/storage/flannel/red = 5,
/obj/item/clothing/suit/unathi/robe = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit = 5,
/obj/item/clothing/suit/storage/toggle/internalaffairs = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5,
@@ -2601,7 +2603,6 @@
/obj/item/clothing/suit/jacket/puffer/vest = 100,
/obj/item/clothing/suit/storage/flannel/red = 100,
/obj/item/clothing/suit/unathi/robe = 100,
/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit = 100,
/obj/item/clothing/suit/storage/toggle/internalaffairs = 100,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 100,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 100,
@@ -3260,20 +3261,20 @@
/obj/item/clothing/under/rank/trek/command/voy = 5,
/obj/item/clothing/under/rank/trek/command/ent = 5,
/obj/item/clothing/under/rank/trek/eng = 5,
/obj/item/clothing/under/rank/trek/sec = 5,
/obj/item/clothing/under/rank/trek/eng/next = 5,
/obj/item/clothing/under/rank/trek/sec/next = 5,
/obj/item/clothing/under/rank/trek/eng/ds9 = 5,
/obj/item/clothing/under/rank/trek/sec/ds9 = 5,
/obj/item/clothing/under/rank/trek/eng/voy = 5,
/obj/item/clothing/under/rank/trek/sec/voy = 5,
/obj/item/clothing/under/rank/trek/eng/ent = 5,
/obj/item/clothing/under/rank/trek/sec/ent = 5,
/obj/item/clothing/under/rank/trek/medsci = 5,
/obj/item/clothing/under/rank/trek/medsci/next = 5,
/obj/item/clothing/under/rank/trek/medsci/ds9 = 5,
/obj/item/clothing/under/rank/trek/medsci/voy = 5,
/obj/item/clothing/under/rank/trek/medsci/ent = 5,
/obj/item/clothing/under/rank/trek/sec = 5,
/obj/item/clothing/under/rank/trek/sec/next = 5,
/obj/item/clothing/under/rank/trek/sec/ds9 = 5,
/obj/item/clothing/under/rank/trek/sec/voy = 5,
/obj/item/clothing/under/rank/trek/sec/ent = 5,
/obj/item/clothing/under/rank/khi/cmd = 5,
/obj/item/clothing/under/rank/khi/eng = 5,
/obj/item/clothing/under/rank/khi/med = 5,
@@ -3504,7 +3505,6 @@
/obj/item/clothing/suit/jacket/puffer/vest = 5,
/obj/item/clothing/suit/storage/flannel/red = 5,
/obj/item/clothing/suit/unathi/robe = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit = 5,
/obj/item/clothing/suit/storage/toggle/internalaffairs = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5,
@@ -3943,7 +3943,7 @@
/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/pineapple = 10,
/obj/item/weapon/reagent_containers/food/snacks/pineappleslice = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread = 10,
@@ -4407,7 +4407,7 @@
/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/pineapple = 10,
/obj/item/weapon/reagent_containers/food/snacks/pineappleslice = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie = 10,
/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread = 10,
@@ -4579,7 +4579,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
@@ -90,6 +90,39 @@
serial_number = given_serial
..(loc)
//Selectable subtype
/obj/item/weapon/contraband/poster/custom
name = "rolled-up poly-poster"
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
poster_type = /obj/structure/sign/poster/custom
/obj/item/weapon/contraband/poster/custom/New(turf/loc, var/given_serial = 0)
if(given_serial == 0)
serial_number = 1 //Decidedly unrandom
else
serial_number = given_serial
..(loc)
/obj/item/weapon/contraband/poster/custom/verb/select_poster()
set name = "Set Poster type"
set category = "Object"
set desc = "Click to choose a poster to display."
var/mob/M = usr
var/list/options = list()
for(var/datum/poster/posteroption in poster_designs)
options[posteroption.listing_name] = posteroption
var/choice = input(M,"Choose a poster!","Customize Poster") in options
if(src && choice && !M.stat && in_range(M,src))
var serial = poster_designs.Find(options[choice])
serial_number = serial
name = "rolled-up poly-poster - No.[serial]"
to_chat(M, "The poster is now: [choice].")
return 1
//############################## THE ACTUAL DECALS ###########################
/obj/structure/sign/poster
@@ -187,6 +220,7 @@
// Description suffix
var/desc=""
var/icon_state=""
var/listing_name=""
// NT poster subtype.
/obj/structure/sign/poster/nanotrasen
@@ -201,3 +235,8 @@
set_poster(design)
..(newloc, placement_dir, serial, itemtype)
//Non-Random Posters
/obj/structure/sign/poster/custom
roll_type = /obj/item/weapon/contraband/poster/custom
+115 -57
View File
@@ -1,290 +1,348 @@
// baystation12 posters
/datum/poster/bay_1
icon_state="bsposter1"
name = "Unlucky Space Explorer"
desc = "This particular one depicts a skeletal form within a space suit."
name = "PSA: Unlucky Space Explorer"
desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
listing_name = "PSA - EVA Accidents"
/datum/poster/bay_2
icon_state="bsposter2"
name = "Positronic Logic Conflicts"
desc = "This particular one depicts the cold, unmoving stare of a particular advanced AI."
name = "PSA: Disobedient Drones"
desc = "This PSA depicts the cold, unmoving stare of a particularly advanced AI. Contact information for the Emergent Intelligence Oversight is included."
listing_name = "PSA - Emergent Drones"
/datum/poster/bay_3
icon_state="bsposter3"
name = "Paranoia"
desc = "This particular one warns of the dangers of trusting your co-workers too much."
name = "PSA: Corporate Espionage"
desc = "This PSA warns of the dangers of trusting your co-workers with sensitive department information. They may be spying for a rival corporation, or worse!"
listing_name = "PSA - Corporate Espionage"
/datum/poster/bay_4
icon_state="bsposter4"
name = "Keep Calm"
desc = "This particular one is of a famous New Earth design, although a bit modified. Someone has scribbled an O over the A on the poster."
desc = "An incredibly vague message, presented in a classic form. Someone has scribbled an O over the A on the poster."
listing_name = "PSA - Keep Calm"
/datum/poster/bay_5
icon_state="bsposter5"
name = "Martian Warlord"
desc = "This particular one depicts the cartoony mug of a certain Martial Warmonger."
name = "PSA: Saboteurs!"
desc = "A company PSA reminding employees to keep an eye out for suspicious activity, and report it immediately."
listing_name = "PSA - Saboteur"
/datum/poster/bay_6
icon_state="bsposter6"
name = "Technological Singularity"
desc = "This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity."
name = "Eradicator XV"
desc = "An ad for the fifteenth installment in the Eradicator movie franchise, about a violent robotic uprising hellbent on wiping out humanity."
listing_name = "Ad - Eradicator XV"
/datum/poster/bay_7
icon_state="bsposter7"
name = "Wasteland"
desc = "This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"12\" is visible on their blue jumpsuits."
name = "Wasteland: Battle for Earth"
desc = "This action movie ad shows a couple of ragged post-apocalyptic gunmen, one male and one female, on top of a mound of rubble."
listing_name = "Ad - Battle for Earth"
/datum/poster/bay_8
icon_state="bsposter8"
name = "Pinup Girl Cindy"
desc = "This particular one is of a historical corporate PR girl, Cindy, in a particularly feminine pose."
desc = "This is a vintage 2450s pin-up of NanoTrasen's PR girl, Cindy, in a particularly feminine pose."
listing_name = "Pin-up - Cindi"
/datum/poster/bay_9
icon_state="bsposter9"
name = "Pinup Girl Amy"
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
desc = "This pin-up is of Amy, one of NanoTrasen's most popular PR models."
listing_name = "Pin-up - Amy"
/datum/poster/bay_10
icon_state="bsposter10"
name = "Don't Panic"
desc = "This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
desc = "This ad for Vey-Medical anxiety pills depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
listing_name = "Ad - Don't panic."
/datum/poster/bay_11
icon_state="bsposter11"
name = "Underwater Laboratory"
desc = "This particular one is of the fabled last crew of a previous Company project."
name = "Underwater Living"
desc = "This immigration poster encourages you to move to Earth;s premiere underwater city, Atlantis. One bedroom apartments start at half your salary."
listing_name = "Ad - Atlantis"
/datum/poster/bay_12
icon_state="bsposter12"
name = "Rogue AI"
desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of humanity's earliest space stations. Back then, the Company was just known as TriOptimum."
name = "Beware Rogue AI"
desc = "This ad for the Emergent Intelligence Oversight Recruitment Division depicts a menacing AI and asks if you're a bad enough dude to take it on."
listing_name = "Recruitment - EIO"
/datum/poster/bay_13
icon_state="bsposter13"
name = "User of the Arcane Arts"
desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image."
name = "Become A User of the Arcane Arts"
desc = "This ad for popular Virtual Reality online game 'Wiz Online' depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image. Incredible graphics!"
listing_name = "Ad - Wiz Online"
/datum/poster/bay_14
icon_state="bsposter14"
name = "Levitating Skull"
desc = "This particular one is the portrait of a flying enchanted skull. Its adventures along with its fabled companion are now fading through history..."
desc = "This tacky ad is a portrait of the flying enchanted skull, Bones. Its adventures along with its fabled companion are showing now on a broadcast service near you!"
listing_name = "Ad - Bones Adventures"
/datum/poster/bay_15
icon_state="bsposter15"
name = "Augmented Legend"
desc = "This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish."
desc = "This ad for Ward-Takahashi cybernetic implants shows obviously augmented individual, gazing towards the sky. Is your body augmented?"
listing_name = "Ad - Ward-Takahashi Augments"
/datum/poster/bay_16
icon_state="bsposter16"
name = "Dangerous Static"
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, but it's ripped off."
name = "Snow Crash"
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. You think it's an ad for something, but you're not sure what."
listing_name = "Ad - Snow Crash"
/datum/poster/bay_17
icon_state="bsposter17"
name = "Pinup Girl Val"
desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly."
listing_name = "Pin-up - Val"
/datum/poster/bay_18
icon_state="bsposter18"
name = "Derpman, Enforcer of the State"
desc = "Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
desc = "An ad for Centauri Provisions donuts. Officer Derpman is here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
listing_name = "Ad - Officer Derpman Donuts"
/datum/poster/bay_19
icon_state="bsposter19"
name = "Respect an Unathi"
desc = "This poster depicts a well dressed looking Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races."
desc = "This poster depicts a sharply dressed Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between humanity and the Unathi."
listing_name = "PSA - Unathi"
/datum/poster/bay_20
icon_state="bsposter20"
name = "Skrell Twilight"
desc = "This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves"
name = "Skrell Tourism"
desc = "This tourism poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves."
listing_name = "Ad - Skrellian Tourism"
/datum/poster/bay_21
icon_state="bsposter21"
name = "Join the Fuzz!"
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
listing_name = "Recruitment - NanoTrasen Security - Pinup"
/datum/poster/bay_22
icon_state="bsposter22"
name = "Looking for a career with excitement?"
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
listing_name = "Recruitment - Xenobiology"
/datum/poster/bay_23
icon_state="bsposter23"
name = "Safety first: because electricity doesn't wait!"
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
listing_name = "Safety - Electric Shock"
/datum/poster/bay_24
icon_state="bsposter24"
name = "Responsible medbay habits, No #259"
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
listing_name = "Medical - Clone Disclosure"
/datum/poster/bay_25
icon_state="bsposter25"
name = "Irresponsible medbay habits, No #2"
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
listing_name = "Medical - Sexual Harassment"
/datum/poster/bay_26
icon_state="bsposter26"
name = "The Men We Knew"
desc = "This movie poster depicts a group of soldiers fighting a large mech, the movie seems to be a patriotic war movie."
desc = "This movie poster depicts a group of soldiers fighting a large mech, it seems to be some kind of movie set during the Hegemony War."
listing_name = "Ad - Men We Knew"
/datum/poster/bay_27
icon_state="bsposter27"
name = "Plastic Sheep Can't Scream"
desc = "This is a movie poster for an upcoming horror movie, it features an AI in the front of it."
desc = "This is a movie poster for an upcoming horror movie, featuring a frightening looking robotic creature."
listing_name = "Ad - Plastic Sheep Can't Scream"
/datum/poster/bay_28
icon_state="bsposter28"
name = "The Stars Know Love"
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama."
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic drama."
listing_name = "Ad - The Stars Know Love"
/datum/poster/bay_29
icon_state="bsposter29"
name = "Winter Is Coming"
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!\""
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep yourself from freezing this winter!\". Below is the logo of NanoThreads clothing."
listing_name = "Ad - Cold-weather Gear"
/datum/poster/bay_30
icon_state="bsposter30"
name = "Ambrosia Vulgaris"
desc = "Just looking at this poster makes you feel a little bit dizzy."
desc = "It's an ad for getting absolutely shitfaced on psychadelics. Just looking at this poster makes you feel a little bit dizzy. Use responsibly."
listing_name = "Ad - Ambrosia Vulgaris"
/datum/poster/bay_31
icon_state="bsposter31"
name = "Donut Corp"
desc = "This is an advertisement for Donut Corp, the new innovation in donut technology!"
name = "Donut Panic"
desc = "This is an advertisement for Donut Panic, the bi-monthly periodical for donut lovers galaxy-wide."
listing_name = "Ad - Donuts Panic"
/datum/poster/bay_32
icon_state="bsposter32"
name = "Eat!"
desc = "A poster depicting a hamburger. The poster orders you to consume the hamburger."
desc = "A NanoPastures poster depicting a synthmeat hamburger. The poster COMMANDS you to consume the hamburger."
listing_name = "Ad - Hamburger"
/datum/poster/bay_33
icon_state="bsposter33"
name = "Tools, tools, tools"
desc = "You can never have enough tools, thats for sure!"
name = "Tools, tools, tools!"
desc = "Xion Manufacturing reminds you: Never trust an off-brand tool. "
listing_name = "Ad - Xion Tools"
/datum/poster/bay_34
icon_state="bsposter34"
name = "Power Up!"
desc = "High reward, higher risk!"
desc = "NanoTrasen are leaders in Phoron-based supermatter power! High reward, higher risk!"
listing_name = "Ad - Phoron Power"
/datum/poster/bay_35
icon_state="bsposter35"
name = "Lamarr"
desc = "This is a poster depicting the pet and mascot of the science department."
name = "Kendrick"
desc = "This is a poster depicting the pet and mascot of the science department, and national corporate ambassador for slime-based science solutions.."
listing_name = "Ad - Slime Science"
/datum/poster/bay_36
icon_state="bsposter36"
name = "Fancy Borg"
desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it."
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy."
listing_name = "Ad - Borg Fancy A"
/datum/poster/bay_37
icon_state="bsposter37"
name = "Fancier Borg"
desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it. This is even fancier than the first poster."
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy. This is even fancier than the other poster."
listing_name = "Ad - Borg Fancy B"
/datum/poster/bay_38
icon_state="bsposter38"
name = "Toaster Love"
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath."
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath. An ad for a cybernetics 'enthusiast' magazine. "
listing_name = "Ad - Toaster Love"
/datum/poster/bay_39
icon_state="bsposter39"
name = "Responsible medbay habits, No #91"
desc = "A safety poster with a chemist holding a vial. \"Always wear safety gear while handling dangerous chemicals, even if it concerns only small amounts.\""
listing_name = "Safety - Chemicals"
/datum/poster/bay_40
icon_state="bsposter40"
name = "Agreeable work environment"
desc = "This poster depicts a young woman in a stylish dress. \"Try to aim for a pleasant atmosphere in the workspace. A friendly word can do more than forms in triplicate.\""
listing_name = "PSA - Agreeable Work Environment"
/datum/poster/bay_41
icon_state="bsposter41"
name = "Professional work environment"
desc = "A safety poster featuring a green haired woman in a shimmering blue dress. \"As an Internal Affairs Agent, your job is to create a fair and agreeable work environment for the crewmembers, as discreetly and professionally as possible.\""
listing_name = "Recruitment - Internal Affairs"
/datum/poster/bay_42
icon_state="bsposter42"
name = "Engineering pinup"
desc = "This is pin-up poster. A half-naked girl with white hair, toned muscles and stunning blue eyes looks back at you from the poster. Her welding helmet, tattoos and grey jumpsuit hanging around her waist gives a bit of a rugged feel."
listing_name = "Pin-up - Engineer"
/datum/poster/bay_43
icon_state="bsposter43"
name = "Responsible medbay habits, No #3"
desc = "A safety poster with a purple-haired surgeon. She looks a bit cross. \"Let the surgeons do their work. NEVER replace or remove a surgery tool from where the surgeon put it.\""
listing_name = "Safety - Surgical Tools"
/datum/poster/bay_44
icon_state="bsposter44"
name = "Time for a drink?"
desc = "This poster depicts a friendly-looking Tajaran holding a tray of drinks."
desc = "This poster for a brand for \"Tajaran-style\" rum produced by Gilthari Exports depicts a friendly-looking Tajaran holding a tray of drinks."
listing_name = "Ad - Rarkajar Rum"
/datum/poster/bay_45
icon_state="bsposter45"
name = "Responsible engineering habits, No #1"
desc = "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\""
listing_name = "Safety - No Shortcut Fixes"
/datum/poster/bay_46
icon_state="bsposter46"
name = "Inspirational lawyer"
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right."
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right. It's an ad for a NanoTrasen subsidiary law firm."
listing_name = "Ad - NanoTrasen Law"
/datum/poster/bay_47
icon_state="bsposter47"
name = "Security pinup"
desc = "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself."
listing_name = "Pin-up - Security"
/datum/poster/bay_48
icon_state="bsposter48"
name = "Borg pinup?"
desc = "This is a.. pin-up poster? It is a diagram on an old model of cyborg with a note scribbled in marker on the bottom, on the top there is a large XO written in red marker."
name = "Remote Drones 4 U"
desc = "This is an ad for a fairly basic model of drone produced by Grayson Manufactories Ltd. for use in hazardous environments."
listing_name = "Ad - Grayson Drones"
/datum/poster/bay_49
icon_state="bsposter49"
name = "Engineering recruitment"
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
listing_name = "Recruitment - Engineering"
/datum/poster/bay_50
icon_state="bsposter50"
name = "Pinup Girl Cindy Kate"
desc = "This particular one is of Cindy Kate, a seductive performer well known among less savoury circles."
desc = "This particular one is of Cindy Kate, a seductive virtual performer well known among less savoury exonet circles."
listing_name = "Pin-up - Cindi-Kate"
/datum/poster/bay_51
icon_state="bsposter51"
name = "space appreciation poster"
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. One of three."
name = "space tourism poster"
desc = "This is a poster produced by the Visit Space Society. This one is targeted at planet-dwellers, suggesting they generally visit space."
listing_name = "Tourism - Space"
/datum/poster/bay_52
icon_state="bsposter52"
name = "fire safety poster"
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
listing_name = "Safety - Stop Drop and Roll"
/datum/poster/bay_53
icon_state="bsposter53"
name = "fire extinguisher poster"
desc = "This is a poster reminding you of what you should use to put out a fire."
listing_name = "Safety - Fire Extinguishers"
/datum/poster/bay_54
icon_state="bsposter54"
name = "firefighter poster"
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
listing_name = "Safety - Prevent Fires"
/datum/poster/bay_55
icon_state="bsposter55"
name = "Earth appreciation poster"
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Two of three."
name = "Binma tourism poster"
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit the exotic garden world of Binma, and try not to get eaten."
listing_name = "Tourism - Binma"
/datum/poster/bay_56
icon_state="bsposter56"
name = "Mars appreciation poster"
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Three of three."
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit historic Mars. Come for the domes, stay for the monuments to hubris!"
/datum/poster/bay_57
icon_state="bsposter57"
name = "space carp warning poster"
desc = "This poster tells of the dangers of space carp infestations."
listing_name = "Safety - Carp"
/datum/poster/bay_58
icon_state="bsposter58"
name = "space carp information poster"
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
listing_name = "Safety - Carp Information"
@@ -2,41 +2,49 @@
icon_state="polposter1"
name = "Safety!"
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
listing_name = "Safety - Internals"
/datum/poster/pol_2
icon_state="polposter2"
name = "Safety!"
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
listing_name = "Safety - Goggles"
/datum/poster/pol_3
icon_state="polposter3"
name = "Safety!"
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
listing_name = "Safety - Follow Instruction"
/datum/poster/pol_4
icon_state="polposter4"
name = "Clean Hands Save Lives"
desc = "A safety poster reminding you to wash your hands."
listing_name = "Safety - Hand Washing"
/datum/poster/pol_5
icon_state="polposter5"
name = "Help!"
desc = "This poster depicts a man helping another man get up."
listing_name = "Safety - Help Others"
/datum/poster/pol_6
icon_state="polposter6"
name = "Walk!"
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
listing_name = "Safety - No Running"
/datum/poster/pol_7
icon_state="polposter7"
name = "Place your signs!"
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
listing_name = "Safety - Wet Floor Signs"
/datum/poster/pol_8
icon_state="polposter8"
name = "Safety!"
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
listing_name = "Safety - EVA Training"
/datum/poster/pol_9
icon_state="poster10" //Recycling this icon
@@ -44,52 +52,138 @@
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
a multitool are the optimal tools to use, and where to find the maintenance panel on most airlocks. Unfortunately, the poster does not mention any \
wire codes."
listing_name = "Safety - Airlock Maintenance"
/datum/poster/pol_10
icon_state="polposter9"
name = "orchid"
desc = "This poster appears strangely familiar, depicting the flower of a tree native to the planet Earth."
listing_name = "General - Orchid"
// A new subset of poster datum for Security posters.
/datum/poster/pol_11
icon_state="polposter10"
name = "firefighter pinup"
desc = "A buff firefighter with his shirt off. Maybe he's trying to raise awareness about fire safety, but you're a little distracted."
listing_name = "Pin-up - Firefighter"
/datum/poster/pol_12
icon_state="polposter11"
name = "CHUCK"
desc = "With the budget Cyber Solutions 'Chuck' model work drone, your days of menial labour are numbered! \"With Cyber Solutions, there's always someone beside you, helping you. You know their face. You know my face.\""
listing_name = "Ad - Chuck"
/datum/poster/pol_13
icon_state="polposter12"
name = "New You"
desc = "An ad for Kaleidoscope Cosmetics. \"The common factor in all your failed relationships is you. Fix it with affordable gene therapy!\""
listing_name = "Ad - Kaleidoscope"
/datum/poster/pol_14
icon_state="polposter13"
name = "Take a Taxi"
desc = "An ad for the Major Bill's Transportation drone-operated taxi service operating in most major cities throughout Solar space."
listing_name = "Ad - Taxi"
/datum/poster/pol_15
icon_state="polposter14"
name = "Adopt A Teshpet"
desc = "An ad for definitively racist virtual pet game, Teshpets."
listing_name = "Ad - Teshpets"
/datum/poster/pol_16
icon_state="polposter15"
name = "Train and Fight"
desc = "This poster of sweaty, near-naked wrestlers is the most masculine thing you've ever seen. You can barely tell where one man ends and the other begins. Always seek manliness!"
listing_name = "Pinup - Wrestling"
/datum/poster/nt_3
icon_state = "ntposter03"
name = "Mechatronic Safety"
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
The image seems important."
listing_name = "Safety - Mech Operation"
/datum/poster/nt_4
icon_state = "ntposter04"
name = "Beware Aetotheans"
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
listing_name = "Safety - Aetothean Danger"
/datum/poster/nt_5
icon_state = "ntposter05"
name = "Promethean"
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
listing_name = "Safety - Prometheans"
/datum/poster/nt_6
icon_state = "ntposter06"
name = "NanoTrasen"
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
listing_name = "Ad - NanoTrasen"
/datum/poster/nt_7
icon_state = "ntposter07"
name = "SolGov"
desc = "This poster showcases an SCG emblem. The outer ring reads,\
\"<font face='times new roman ms'>NIL MORTALIBUS ARDUI EST</font>\".\
Solar Confederate Government."
listing_name = "Political - SolGov"
/datum/poster/nt_8
icon_state = "ntposter08"
name = "wildlife hazard"
desc = "This SifGov poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
listing_name = "Safety - Spiders"
// A new subset of poster datum for ONLY 'Internal' NanoTrasen posters, given to Security.
/datum/poster/nanotrasen
icon_state = "polposter1"
name = "Safety!"
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
listing_name = "Safety - Internals"
/datum/poster/nanotrasen/pol_2
icon_state="polposter2"
name = "Safety!"
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
listing_name = "Safety - Goggles"
/datum/poster/nanotrasen/pol_3
icon_state="polposter3"
name = "Safety!"
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
listing_name = "Safety - Follow Instruction"
/datum/poster/nanotrasen/pol_4
icon_state="polposter4"
name = "Clean Hands Save Lives"
desc = "A safety poster reminding you to wash your hands."
listing_name = "Safety - Hand Washing"
/datum/poster/nanotrasen/pol_5
icon_state="polposter5"
name = "Help!"
desc = "This poster depicts a man helping another man get up."
listing_name = "Safety - Help Others"
/datum/poster/nanotrasen/pol_6
icon_state="polposter6"
name = "Walk!"
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
listing_name = "Safety - No Running"
/datum/poster/nanotrasen/pol_7
icon_state="polposter7"
name = "Place your signs!"
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
listing_name = "Safety - Wet Floor Signs"
/datum/poster/nanotrasen/pol_8
icon_state="polposter8"
name = "Safety!"
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
listing_name = "Safety - EVA Training"
/datum/poster/nanotrasen/pol_9
icon_state="poster10"
@@ -97,81 +191,97 @@
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
a multitool are the optimal tools to use, and where to find the maintenance panel on most airlocks. Unfortunately, the poster does not mention any \
wire codes."
listing_name = "Safety - Airlock Maintenance"
/datum/poster/nanotrasen/pol_10
icon_state="polposter9"
name = "orchid"
desc = "This poster suggests a feeling of peace. It depicts the flower of a tree native to the planet Earth."
listing_name = "General - Orchid"
/datum/poster/nanotrasen/bay_9
icon_state="bsposter9"
name = "Pinup Girl Amy"
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
listing_name = "Pin-up - Amy"
/datum/poster/nanotrasen/bay_21
icon_state="bsposter21"
name = "Join the Fuzz!"
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
listing_name = "Recruitment - NanoTrasen Security - Pinup"
/datum/poster/nanotrasen/bay_22
icon_state="bsposter22"
name = "Looking for a career with excitement?"
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
listing_name = "Recruitment - Xenobiology"
/datum/poster/nanotrasen/bay_23
icon_state="bsposter23"
name = "Safety first: because electricity doesn't wait!"
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
listing_name = "Safety - Electric Shock"
/datum/poster/nanotrasen/bay_24
icon_state="bsposter24"
name = "Responsible medbay habits, No #259"
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
listing_name = "Medical - Clone Disclosure"
/datum/poster/nanotrasen/bay_25
icon_state="bsposter25"
name = "Irresponsible medbay habits, No #2"
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
listing_name = "Medical - Sexual Harassment"
/datum/poster/nanotrasen/bay_49
icon_state="bsposter49"
name = "Engineering recruitment"
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
listing_name = "Recruitment - Engineering"
/datum/poster/nanotrasen/bay_52
icon_state="bsposter52"
name = "fire safety poster"
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
listing_name = "Safety - Stop Drop And Roll"
/datum/poster/nanotrasen/bay_53
icon_state="bsposter53"
name = "fire extinguisher poster"
desc = "This is a poster reminding you of what you should use to put out a fire."
listing_name = "Safety - Extinguishers"
/datum/poster/nanotrasen/bay_54
icon_state="bsposter54"
name = "firefighter poster"
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
listing_name = "Safety - Prevent Fires"
/datum/poster/nanotrasen/bay_57
icon_state="bsposter57"
name = "space carp warning poster"
desc = "This poster tells of the dangers of space carp infestations."
listing_name = "Safety - Carp"
/datum/poster/nanotrasen/bay_58
icon_state="bsposter58"
name = "space carp information poster"
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
listing_name = "Safety - Carp Information"
/datum/poster/nanotrasen/nt_1
icon_state = "ntposter01"
name = "Security recruitment"
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about the importance of Security."
listing_name = "Recruitment - NanoTrasen Security - Importance"
/datum/poster/nanotrasen/nt_2
icon_state = "ntposter02"
name = "Security recruitment"
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about Security Employee benefits."
listing_name = "Recruitment - NanoTrasen Security - Benefits"
/datum/poster/nanotrasen/nt_3
icon_state = "ntposter03"
@@ -179,6 +289,7 @@
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
The image seems important."
listing_name = "Safety - Mech Operation"
//VOREStation Removal Start TFF 17/12/19 - lore not used in our station's own lore.
/*
@@ -186,6 +297,7 @@
icon_state = "ntposter04"
name = "Beware Aetotheans"
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
listing_name = "Safety - Aetothean Danger"
*/
//VOREstation Removal End
@@ -193,11 +305,13 @@
icon_state = "ntposter05"
name = "Promethean"
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
listing_name = "Safety - Prometheans"
/datum/poster/nanotrasen/nt_6
icon_state = "ntposter06"
name = "NanoTrasen"
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
listing_name = "Ad - NanoTrasen"
/datum/poster/nanotrasen/nt_7
icon_state = "ntposter07"
@@ -205,13 +319,16 @@
desc = "This poster showcases an SCG emblem. The outer ring reads,\
\"<font face='times new roman ms'>NIL MORTALIBUS ARDUI EST</font>\".\
Solar Confederate Government."
listing_name = "Political - SolGov"
/datum/poster/nanotrasen/nt_8
icon_state = "ntposter08"
name = "wildlife hazard"
desc = "This poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
listing_name = "Safety - Spiders"
/datum/poster/nanotrasen/nt_9
icon_state = "ntposter09"
name = "Regulations and You"
desc = "This poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
desc = "This SifGov poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
listing_name = "Safety - Corporate Regulations"
@@ -33,6 +33,9 @@ would spawn and follow the beaker, even if it is carried or thrown.
proc/start()
Destroy()
holder = null
return ..()
/////////////////////////////////////////////
// GENERIC STEAM SPREAD SYSTEM
@@ -74,6 +74,12 @@
light_power = 0.5
light_color = "#8837A3"
/obj/effect/projectile/impact/precursor //CHOMPedit add precursor impact
icon_state = "impact_prec"
light_range = 2
light_power = 0.7
light_color = "#FF0099"
/obj/effect/projectile/impact/tungsten
icon_state = "impact_mhd_laser"
light_range = 4
@@ -62,6 +62,12 @@
light_power = 0.5
light_color = "#8837A3"
/obj/effect/projectile/muzzle/precursor //CHOMPedit add Precursor muzzle
icon_state = "muzzle_prec"
light_range = 2
light_power = 0.7
light_color = "#FF0099"
/obj/effect/projectile/muzzle/inversion
icon_state = "muzzle_invert"
light_range = 2
@@ -91,6 +91,12 @@
light_power = 0.5
light_color = "#8837A3"
/obj/effect/projectile/tracer/precursor //CHOMPedit add precursor tracer
icon_state = "prec"
light_range = 2
light_power = 0.7
light_color = "#FF0099"
/obj/effect/projectile/tracer/inversion
icon_state = "invert"
light_range = 2
-3
View File
@@ -612,9 +612,6 @@ var/list/global/slot_flags_enumeration = list(
. = ..()
if(blood_overlay)
overlays.Remove(blood_overlay)
if(istype(src, /obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = src
G.transfer_blood = 0
/obj/item/reveal_blood()
if(was_bloodied && !fluorescent)
@@ -1,3 +1,103 @@
// Etc UI-only vars
/obj/item/device/communicator
// Stuff for moving cameras
var/turf/last_camera_turf
// Stuff needed to render the map
var/map_name
var/obj/screen/map_view/cam_screen
var/list/cam_plane_masters
var/obj/screen/background/cam_background
var/obj/screen/skybox/local_skybox
// Proc: setup_tgui_camera()
// Parameters: None
// Description: This sets up all of the variables above to handle in-UI map windows.
/obj/item/device/communicator/proc/setup_tgui_camera()
map_name = "communicator_[REF(src)]_map"
// Initialize map objects
cam_screen = new
cam_screen.name = "screen"
cam_screen.assigned_map = map_name
cam_screen.del_on_map_removal = FALSE
cam_screen.screen_loc = "[map_name]:1,1"
cam_plane_masters = get_tgui_plane_masters()
for(var/plane in cam_plane_masters)
var/obj/screen/instance = plane
instance.assigned_map = map_name
instance.del_on_map_removal = FALSE
instance.screen_loc = "[map_name]:CENTER"
local_skybox = new()
local_skybox.assigned_map = map_name
local_skybox.del_on_map_removal = FALSE
local_skybox.screen_loc = "[map_name]:CENTER,CENTER"
cam_plane_masters += local_skybox
cam_background = new
cam_background.assigned_map = map_name
cam_background.del_on_map_removal = FALSE
// Proc: update_active_camera_screen()
// Parameters: None
// Description: This refreshes the camera location
/obj/item/device/communicator/proc/update_active_camera_screen()
if(!video_source?.can_use())
show_static()
return
var/newturf = get_turf(video_source)
if(!is_on_same_plane_or_station(get_z(newturf), get_z(src)))
show_static()
return
var/obj/item/device/communicator/communicator = video_source.loc
if(istype(communicator))
if(communicator.selfie_mode)
var/mob/target = get(communicator, /mob)
if(istype(target))
cam_screen.vis_contents = list(target)
else
cam_screen.vis_contents = list(communicator)
cam_background.fill_rect(1, 1, 1, 1)
cam_background.icon_state = "clear"
local_skybox.cut_overlays()
return
// If we're not forcing an update for some reason and the cameras are in the same location,
// we don't need to update anything.
if(last_camera_turf == newturf)
return
// We get a new turf in case they've moved in the last half decisecond (it's BYOND, it might happen)
last_camera_turf = get_turf(video_source)
if(!is_on_same_plane_or_station(get_z(last_camera_turf), get_z(src)))
show_static()
return
var/list/visible_turfs = list()
var/list/visible_things = view(video_range, last_camera_turf)
for(var/turf/visible_turf in visible_things)
visible_turfs += visible_turf
cam_screen.vis_contents = visible_turfs
cam_background.icon_state = "clear"
cam_background.fill_rect(1, 1, (video_range * 2), (video_range * 2))
local_skybox.cut_overlays()
local_skybox.add_overlay(SSskybox.get_skybox(get_z(last_camera_turf)))
local_skybox.scale_to_view(video_range * 2)
local_skybox.set_position("CENTER", "CENTER", (world.maxx>>1) - last_camera_turf.x, (world.maxy>>1) - last_camera_turf.y)
/obj/item/device/communicator/proc/show_static()
cam_screen.vis_contents.Cut()
cam_background.icon_state = "scanline2"
cam_background.fill_rect(1, 1, (video_range * 2), (video_range * 2))
local_skybox.cut_overlays()
// Proc: tgui_state()
// Parameters: User
// Description: This tells TGUI to only allow us to be interacted with while in a mob inventory.
@@ -9,7 +109,15 @@
// Description: This proc handles opening the UI. It's basically just a standard stub.
/obj/item/device/communicator/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/tgui_state/custom_state)
ui = SStgui.try_update_ui(user, src, ui)
// Update the camera every SStgui tick in case it moves
update_active_camera_screen()
if(!ui)
// Register map objects
user.client.register_map_obj(cam_screen)
for(var/plane in cam_plane_masters)
user.client.register_map_obj(plane)
user.client.register_map_obj(cam_background)
// Setup UI
ui = new(user, src, "Communicator", name)
if(custom_state)
ui.set_state(custom_state)
@@ -188,6 +296,7 @@
data["target_feed"] = data["feeds"][newsfeed_channel]
else
data["target_feed"] = null
data["selfie_mode"] = selfie_mode
return data
@@ -200,6 +309,7 @@
if(data_core)
data_core.get_manifest_list()
data["manifest"] = PDA_Manifest
data["mapRef"] = map_name
return data
// Proc: tgui-act()
@@ -231,6 +341,9 @@
if("toggle_ringer")
ringer = !ringer
if("selfie_mode")
selfie_mode = !selfie_mode
if("add_hex")
var/hex = params["add_hex"]
add_to_EPv2(hex)
@@ -324,3 +437,4 @@
if("newsfeed")
newsfeed_channel = text2num(params["newsfeed"])
#undef DEFAULT_MAP_SIZE
@@ -28,7 +28,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
origin_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2, TECH_DATA = 2)
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
var/video_range = 4
var/video_range = 3
var/obj/machinery/camera/communicator/video_source // Their camera
var/obj/machinery/camera/communicator/camera // Our camera
@@ -72,6 +72,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/update_ticks = 0
var/newsfeed_channel = 0
// If you turn this on, it changes the way communicator video works. User configurable option.
var/selfie_mode = FALSE
// Proc: New()
// Parameters: None
// Description: Adds the new communicator to the global list of all communicators, sorts the list, obtains a reference to the Exonet node, then tries to
@@ -86,6 +89,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
camera.name = "[src] #[rand(100,999)]"
camera.c_tag = camera.name
setup_tgui_camera()
//This is a pretty terrible way of doing this.
addtimer(CALLBACK(src, .proc/register_to_holder), 5 SECONDS)
@@ -124,9 +129,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/obj/item/device/communicator/examine(mob/user)
. = ..()
if(Adjacent(user) && video_source)
. += "<span class='notice'>It looks like it's on a video call: <a href='?src=\ref[src];watchvideo=1'>\[view\]</a></span>"
for(var/mob/living/voice/voice in contents)
. += "<span class='notice'>On the screen, you can see a image feed of [voice].</span>"
@@ -142,17 +144,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
else
. += "<span class='notice'>The device doesn't appear to be transmitting any data.</span>"
// Proc: Topic()
// Parameters: href, href_list - Data from a link
// Description: Used by the above examine.
/obj/item/device/communicator/Topic(href, href_list)
if(..())
return 1
if(href_list["watchvideo"])
if(video_source)
watch_video(usr)
// Proc: emp_act()
// Parameters: None
// Description: Drops all calls when EMPed, so the holder can then get murdered by the antagonist.
@@ -234,8 +225,6 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
alert_called = 0
update_icon()
tgui_interact(user)
if(video_source)
watch_video(user)
// Proc: MouseDrop()
//Same thing PDAs do
@@ -316,6 +305,11 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
QDEL_NULL(camera)
QDEL_NULL(exonet)
last_camera_turf = null
qdel(cam_screen)
QDEL_LIST(cam_plane_masters)
qdel(cam_background)
return ..()
// Proc: update_icon()
@@ -332,12 +332,15 @@
if(video_source) //Already in a video
to_chat(user, "<span class='danger'>You are already connected to a video call!</span>")
return
if(user.blinded) //User is blinded
to_chat(user, "<span class='danger'>You cannot see well enough to do that!</span>")
return
if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something
to_chat(user, "<span class='danger'>[bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.</span>")
return
to_chat(user, "<span class='notice'>[bicon(src)] Attempting to start video over existing call.</span>")
sleep(30)
@@ -345,42 +348,16 @@
video_source = comm.camera
comm.visible_message("<span class='danger'>[bicon(src)] New video connection from [comm].</span>")
watch_video(user)
update_active_camera_screen()
GLOB.moved_event.register(video_source, src, .proc/update_active_camera_screen)
update_icon()
// Proc: watch_video()
// Parameters: user - the mob doing the viewing of video
// Description: Moves a mob's eye to the far end for the duration of viewing the far end
/obj/item/device/communicator/proc/watch_video(mob/user)
if(!Adjacent(user) || !video_source) return
user.set_machine(video_source)
user.reset_view(video_source)
to_chat(user, "<span class='notice'>Now viewing video session. To leave camera view, close the communicator window OR: OOC -> Cancel Camera View</span>")
to_chat(user, "<span class='notice'>To return to an active video session, use the communicator in your hand.</span>")
spawn(0)
while(user.machine == video_source && Adjacent(user))
var/turf/T = get_turf(video_source)
if(!T || !is_on_same_plane_or_station(T.z, user.z) || !video_source.can_use())
to_chat(user, "<span class='warning'>The screen bursts into static, then goes black.</span>")
video_cleanup(user)
return
sleep(10)
video_cleanup(user)
// Proc: video_cleanup()
// Parameters: user - the mob who doesn't want to see video anymore
// Description: Cleans up mob's client when they stop watching a video
/obj/item/device/communicator/proc/video_cleanup(mob/user)
if(!user) return
user.reset_view(null)
user.unset_machine()
// Proc: end_video()
// Parameters: reason - the text reason to print for why it ended
// Description: Ends the video call by clearing video_source
/obj/item/device/communicator/proc/end_video(var/reason)
GLOB.moved_event.unregister(video_source, src, .proc/update_active_camera_screen)
show_static()
video_source = null
. = "<span class='danger'>[bicon(src)] [reason ? reason : "Video session ended"].</span>"
@@ -297,7 +297,8 @@ var/global/list/default_medbay_channels = list(
playsound(src, "button", 10)
GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels) //BS12 EDIT
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels)
if(!GLOB.autospeaker)
return
var/datum/radio_frequency/connection = null
@@ -308,7 +309,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
else
connection = radio_connection
channel = null
if (!istype(connection))
if(!istype(connection))
return
if(!LAZYLEN(zlevels))
@@ -507,7 +508,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
else if(adhoc_fallback) //Less huzzah, we have to fallback
to_chat(loc, "<span class='warning'>\The [src] pings as it falls back to local radio transmission.</span>")
subspace_transmission = FALSE
else //Oh well
return FALSE
@@ -594,7 +595,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
/obj/item/device/radio/examine(mob/user)
. = ..()
if((in_range(src, user) || loc == user))
if(b_stat)
. += "<span class='notice'>\The [src] can be attached and modified!</span>"
@@ -8,6 +8,7 @@
w_class = ITEMSIZE_SMALL
/obj/item/pizzavoucher/New()
..()
var/list/descstrings = list("24/7 PIZZA PIE HEAVEN",
"WE ALWAYS DELIVER!",
"24-HOUR PIZZA PIE POWER!",
@@ -77,7 +77,7 @@
/obj/item/weapon/lipstick/random,
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/corncob,
/obj/item/weapon/contraband/poster,
/obj/item/weapon/contraband/poster/custom,
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/book/manual/chef_recipes,
/obj/item/weapon/bikehorn,
@@ -65,7 +65,6 @@
light_applied = 0
update_icon(user)
user.update_action_buttons()
light = !light
playsound(src, 'sound/weapons/empty.ogg', 15, 1, -3)
/obj/item/weapon/shield/riot/explorer/update_icon()
@@ -92,4 +91,4 @@
if(on)
icon_state = "explorer_shield_P_lighted"
else
icon_state = "explorer_shield_P"
icon_state = "explorer_shield_P"
@@ -113,24 +113,44 @@
/obj/item/weapon/storage/vore_egg/synthetic
name = "synthetic egg"
desc = "Can robots lay eggs?"
desc = "Smells like Easter morning."
icon_state = "egg_synthetic"
/obj/item/weapon/storage/vore_egg/badrecipe
name = "Burned mess"
desc = "Someone didn't cook this egg quite right..."
icon_state = "egg_badrecipe"
/obj/item/weapon/storage/vore_egg/escapepod
name = "small escape pod"
desc = "Someone left in a hurry."
icon_state = "egg_escapepod"
/obj/item/weapon/storage/vore_egg/floppy
name = "blue space floppy disc"
desc = "Probably shouldn't copy THIS floppy."
icon_state = "egg_floppy"
/obj/item/weapon/storage/vore_egg/cd
name = "blue space cd"
desc = "What could even be on this?!"
icon_state = "egg_cd"
/obj/item/weapon/storage/vore_egg/file
name = "blue space file"
desc = "Gotta wonder how much is compressed in there."
icon_state = "egg_file"
/obj/item/weapon/storage/vore_egg/badrecipe
name = "Burned mess"
desc = "Someone didn't cook this egg quite right..."
icon_state = "egg_badrecipe"
/obj/item/weapon/storage/vore_egg/cocoon
name = "web cocoon"
desc = "It straight up smells like spiders in here."
icon_state = "egg_cocoon"
/obj/item/weapon/storage/vore_egg/honeycomb
name = "honeycomb"
desc = "Smells delicious!"
icon_state = "egg_honeycomb"
/obj/item/weapon/storage/vore_egg/bugcocoon
name = "bug cocoon"
desc = "Metamorphosis!"
+1 -1
View File
@@ -262,7 +262,7 @@
prob(8);/obj/item/weapon/haircomb,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(10);/obj/item/weapon/contraband/poster,
prob(10);/obj/item/weapon/contraband/poster/custom,
prob(4);/obj/item/weapon/material/butterfly,
prob(6);/obj/item/weapon/material/butterflyblade,
prob(6);/obj/item/weapon/material/butterflyhandle,
@@ -45,5 +45,5 @@
trigger()
/obj/structure/ghost_pod/ghost_activated/Initialize()
..()
. = ..()
ghostpod_startup(spawn_active)
+1 -1
View File
@@ -254,8 +254,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/stack/material/steel{amount = 5},
/obj/item/stack/material/cardboard{amount = 5},
/obj/item/weapon/contraband/poster,
/obj/item/weapon/contraband/poster/custom,
/obj/item/weapon/material/wirerod,
/obj/item/weapon/contraband/poster,
/obj/item/weapon/newspaper,
/obj/item/weapon/paper/crumpled,
/obj/item/weapon/paper/crumpled/bloody
+303 -32
View File
@@ -321,73 +321,344 @@
desc = "A warning sign which reads XENOBIOLOGY."
icon_state = "xenobio3"
//direction signs presented by the order they appear in the dmi
/obj/structure/sign/directions
name = "direction sign"
desc = "A direction sign, claiming to know the way."
desc = "A direction sign, claiming to know the way to... somewhere?"
icon_state = "direction"
icon = 'icons/obj/decals_directions.dmi'
//TODO: set up overlay systems, inc. interactions (e.g. vines clear w/ plantbgone or fire, snow can be brushed off or melted, and so on)
//disabled this proc, it serves no purpose except to overwrite the description that already exists. may have been intended for making your own signs?
//seems to defeat the point of having a generic directional sign that mappers could edit and use in POIs? left it here in case something breaks.
/*
/obj/structure/sign/directions/New()
..()
desc = "A direction sign, pointing out which way \the [src] is."
/obj/structure/sign/directions/science
name = "\improper Science department"
desc = "A direction sign, pointing out which way the Science department is."
icon_state = "direction_sci"
desc = "A direction sign, pointing out the way to \the [src]."
*/
//engineering signs
/obj/structure/sign/directions/engineering
name = "\improper Engineering department"
desc = "A direction sign, pointing out which way the Engineering department is."
name = "\improper Engineering Department"
desc = "A direction sign, pointing out the way to the Engineering Department."
icon_state = "direction_eng"
/obj/structure/sign/directions/engineering/reactor
name = "\improper Reactor"
desc = "A direction sign, pointing out the way to the Reactor."
icon_state = "direction_core"
/obj/structure/sign/directions/engineering/solars
name = "\improper Solar Array"
desc = "A direction sign, pointing out the way to the nearest Solar Array."
icon_state = "direction_solar"
/obj/structure/sign/directions/engineering/atmospherics
name = "\improper Atmospherics Department"
desc = "A direction sign, pointing out the way to the Atmospherics Department."
icon_state = "direction_atmos"
/obj/structure/sign/directions/engineering/gravgen
name = "\improper Gravity Generator"
desc = "A direction sign, pointing out the way to the Artificial Gravity Generator."
icon_state = "direction_grav"
/obj/structure/sign/directions/engineering/engeqp
name = "\improper Engineering Equipment Storage"
desc = "A direction sign, pointing out the way to Engineering Equipment Storage."
icon_state = "direction_engeqp"
//security signs
/obj/structure/sign/directions/security
name = "\improper Security department"
desc = "A direction sign, pointing out which way the Security department is."
name = "\improper Security Department"
desc = "A direction sign, pointing out the way to the Security Department."
icon_state = "direction_sec"
/obj/structure/sign/directions/security/armory
name = "\improper Armory"
desc = "A direction sign, pointing out the way to the Armory."
icon_state = "direction_armory"
/obj/structure/sign/directions/security/brig
name = "\improper Brig"
desc = "A direction sign, pointing out the way to the Brig."
icon_state = "direction_brig"
/obj/structure/sign/directions/security/seceqp
name = "\improper Security Equipment Storage"
desc = "A direction sign, pointing out the way to Security Equipment Storage."
icon_state = "direction_seceqp"
/obj/structure/sign/directions/security/internal_affairs
name = "\improper Internal Affairs Office"
desc = "A direction sign, pointing out the way to the Internal Affairs Office."
icon_state = "direction_intaff"
/obj/structure/sign/directions/security/forensics
name = "\improper Forensics Lab"
desc = "A direction sign, pointing out the way to the Forensics Lab."
icon_state = "direction_forensics"
/obj/structure/sign/directions/security/forensics/alt
icon_state = "direction_lab"
/obj/structure/sign/directions/security/interrogation
name = "\improper Interrogations"
desc = "A direction sign, pointing out the way to Interrogations."
icon_state = "direction_interrogation"
//science signs
/obj/structure/sign/directions/science
name = "\improper Science Department"
desc = "A direction sign, pointing out the way to the Science Department."
icon_state = "direction_sci"
/obj/structure/sign/directions/science/rnd
name = "\improper Research & Development"
desc = "A direction sign, pointing out the way to Research & Development."
icon_state = "direction_rnd"
/obj/structure/sign/directions/science/toxins
name = "\improper Toxins Lab"
desc = "A direction sign, pointing out the way to the Toxins Lab."
icon_state = "direction_sci"
/obj/structure/sign/directions/science/robotics
name = "\improper Robotics Workshop"
desc = "A direction sign, pointing out the way to the Robotics Workshop."
icon_state = "direction_robotics"
/obj/structure/sign/directions/science/xenoarch
name = "\improper Xenoarchaeology Lab"
desc = "A direction sign, pointing out the way to the Xenoarchaeology Lab."
icon_state = "direction_xenoarch"
/obj/structure/sign/directions/science/xenobiology
name = "\improper Xenobiology Lab"
desc = "A direction sign, pointing out the way to the Xenobiology Lab."
icon_state = "direction_xbio"
/obj/structure/sign/directions/science/xenoflora
name = "\improper Xenoflora Lab"
desc = "A direction sign, pointing out the way to the Xenoflora Lab."
icon_state = "direction_xflora"
/obj/structure/sign/directions/science/exploration
name = "\improper Exploration Department"
desc = "A direction sign, pointing out the way to the Exploration Department."
icon_state = "direction_explo"
//medical signs
/obj/structure/sign/directions/medical
name = "\improper Medical Bay"
desc = "A direction sign, pointing out which way the Medical Bay is."
desc = "A direction sign, pointing out the way to the Medical Bay."
icon_state = "direction_med"
/obj/structure/sign/directions/medical/chemlab
name = "\improper Chemistry Lab"
desc = "A direction sign, pointing out the way to the Chemistry Lab."
icon_state = "direction_med"
/obj/structure/sign/directions/medical/surgery
name = "\improper Surgery"
desc = "A direction sign, pointing out the way to Surgery."
icon_state = "direction_surgery"
/obj/structure/sign/directions/medical/operating_1
name = "\improper Operating Theatre 1"
desc = "A direction sign, pointing out the way to Operating Theatre 1."
icon_state = "direction_op1"
/obj/structure/sign/directions/medical/operating_2
name = "\improper Operating Theatre 2"
desc = "A direction sign, pointing out the way to Operating Theatre 2."
icon_state = "direction_op2"
/obj/structure/sign/directions/medical/virology
name = "\improper Virology"
desc = "A direction sign, pointing out the way to the Virology Lab."
icon_state = "direction_viro"
/obj/structure/sign/directions/medical/medeqp
name = "\improper Medical Equipment Storage"
desc = "A direction sign, pointing out the way to Medical Equipment Storage."
icon_state = "direction_medeqp"
/obj/structure/sign/directions/medical/morgue
name = "\improper Morgue"
desc = "A direction sign, pointing out the way to the Morgue."
icon_state = "direction_morgue"
/obj/structure/sign/directions/medical/cloning
name = "\improper Cloning Lab"
desc = "A direction sign, pointing out the way to the Cloning Lab."
icon_state = "direction_cloning"
/obj/structure/sign/directions/medical/resleeving
name = "\improper Resleeving Lab"
desc = "A direction sign, pointing out the way to the Resleeving Lab."
icon_state = "direction_resleeve"
//special signs
/obj/structure/sign/directions/evac
name = "\improper Evacuation"
desc = "A direction sign, pointing out which way the Escape Shuttle dock is."
desc = "A direction sign, pointing out the way to the Escape Shuttle Dock."
icon_state = "direction_evac"
/obj/structure/sign/directions/eva
name = "\improper Extra-Vehicular Activity"
desc = "A direction sign, pointing out the way to the EVA Bay."
icon_state = "direction_eva"
//command signs
/obj/structure/sign/directions/ai_core
name = "\improper AI Core"
desc = "A direction sign, pointing out the way to the AI Core."
icon_state = "direction_ai_core"
/obj/structure/sign/directions/bridge
name = "\improper Bridge"
desc = "A direction sign, pointing out the way to the Bridge."
icon_state = "direction_bridge"
/obj/structure/sign/directions/command
name = "\improper Command"
desc = "A direction sign, pointing out the way to the Command Center."
icon_state = "direction_command"
/obj/structure/sign/directions/teleporter
name = "\improper Teleporter"
desc = "A direction sign, pointing out the way to the Teleporter."
icon_state = "direction_teleport"
/obj/structure/sign/directions/telecomms
name = "\improper Telecommunications Hub"
desc = "A direction sign, pointing out the way to the Telecommunications Hub."
icon_state = "direction_tcomms"
//cargonia signs
/obj/structure/sign/directions/cargo
name = "\improper Cargo department"
desc = "A direction sign, pointing out which way the Cargo department is."
name = "\improper Cargo Department"
desc = "A direction sign, pointing out the way to the Cargo Department."
icon_state = "direction_crg"
// VOREStation Edit - New signs for us
/obj/structure/sign/directions/command
icon = 'icons/obj/decals_vr.dmi'
name = "\improper Command department"
desc = "A direction sign, pointing out which way the Command department is."
icon_state = "direction_cmd"
/obj/structure/sign/directions/cargo/mining
name = "\improper Mining Department"
desc = "A direction sign, pointing out the way to the Mining Department."
icon_state = "direction_mining"
/obj/structure/sign/directions/elevator
icon = 'icons/obj/decals_vr.dmi'
name = "\improper Space Elevator"
desc = "A direction sign, pointing out which way the Space Elevator is."
icon_state = "direction_elv"
// VOREStation Edit End
/obj/structure/sign/directions/cryo
name = "\improper Cryogenic Storage"
desc = "A direction sign, pointing out which way cryogenic storage is."
icon_state = "direction_cry"
/obj/structure/sign/directions/cargo/refinery
name = "\improper Refinery"
desc = "A direction sign, pointing out the way to the Refinery."
icon_state = "direction_refinery"
//civilian/misc signs
/obj/structure/sign/directions/roomnum
name = "room number"
desc = "A sign detailing the number of the room beside it."
icon_state = "roomnum"
/obj/structure/sign/directions/cryo
name = "\improper Cryogenic Storage"
desc = "A direction sign, pointing out the way to Cryogenic Storage."
icon_state = "direction_cry"
/obj/structure/sign/directions/elevator
name = "\improper Elevator"
desc = "A direction sign, pointing out the way to the nearest elevator."
icon_state = "direction_elv"
/obj/structure/sign/directions/bar
name = "\improper Bar"
desc = "A direction sign, pointing out the way to the nearest watering hole."
icon_state = "direction_bar"
/obj/structure/sign/directions/kitchen
name = "\improper Kitchen"
desc = "A pictographic direction sign with a knife, plate, and fork, pointing out the way to the nearest dining establishment."
icon_state = "direction_kitchen"
/obj/structure/sign/directions/tram
name = "\improper Public Transit Station"
desc = "A direction sign, pointing out the way to the nearest public transit station."
icon_state = "direction_tram"
/obj/structure/sign/directions/janitor
name = "\improper Custodial Closet"
desc = "A direction sign, pointing out the way to the Custodial Closet."
icon_state = "direction_janitor"
/obj/structure/sign/directions/chapel
name = "\improper Chapel"
desc = "A direction sign, pointing out the way to the Chapel."
icon_state = "direction_chapel"
/obj/structure/sign/directions/dorms
name = "\improper Dormitories"
desc = "A direction sign, pointing out the way to the Dormitories."
icon_state = "direction_dorms"
/obj/structure/sign/directions/library
name = "\improper Library"
desc = "A direction sign, pointing out the way to the Library."
icon_state = "direction_library"
/obj/structure/sign/directions/dock
name = "\improper Dock"
desc = "A direction sign, pointing out the way to the nearest docking area."
icon_state = "direction_dock"
/obj/structure/sign/directions/gym
name = "\improper Gym"
desc = "A direction sign, pointing out the way to the Gym."
icon_state = "direction_gym"
/obj/structure/sign/directions/pool
name = "\improper Pool"
desc = "A direction sign, pointing out the way to the Pool."
icon_state = "direction_pool"
/obj/structure/sign/directions/recreation
name = "\improper Recreation Area"
desc = "A direction sign, pointing out the way to the nearest Recreation Area."
icon_state = "direction_recreation"
/obj/structure/sign/directions/stairwell
name = "\improper Stairwell"
desc = "A direction sign with stairs and a door, pointing out the way to the nearest stairwell."
icon_state = "stairwell"
/obj/structure/sign/directions/stairs_up
name = "\improper Stairs Up"
desc = "A direction sign with stairs and an upward-slanted arrow, pointing out the way to the nearest set of stairs that go up."
icon_state = "stairs_up"
/obj/structure/sign/directions/stairs_down
name = "\improper Stairs Down"
desc = "A direction sign with stairs and a downward-slanted arrow, pointing out the way to the nearest set of stairs that go down."
icon_state = "stairs_down"
/obj/structure/sign/directions/ladderwell
name = "\improper Access Shaft"
desc = "A direction sign with a ladder and a door, pointing out the way to the nearest access shaft."
icon_state = "ladderwell"
/obj/structure/sign/directions/ladder_up
name = "\improper Ladder Up"
desc = "A direction sign with a ladder and an upward arrow, pointing out the way to the nearest ladder that goes up."
icon_state = "ladder_up"
/obj/structure/sign/directions/ladder_down
name = "\improper Ladder Down"
desc = "A direction sign with a ladder and a downward arrow, pointing out the way to the nearest ladder that goes down."
icon_state = "ladder_down"
/obj/structure/sign/directions/exit
name = "\improper Emergency Exit"
desc = "A lurid green sign that unmistakably identifies that the door it's next to as an emergency exit route."
icon_state = "exit_sign"
//OTHER STUFF
/obj/structure/sign/christmas/lights
name = "Christmas lights"
desc = "Flashy and pretty."
+3 -71
View File
@@ -215,82 +215,14 @@
L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily
if(iscarbon(O))
var/mob/living/carbon/M = O
if(M.r_hand)
M.r_hand.clean_blood()
if(M.l_hand)
M.l_hand.clean_blood()
if(M.back)
if(M.back.clean_blood())
M.update_inv_back(0)
//flush away reagents on the skin
var/mob/living/carbon/M = O
if(M.touching)
var/remove_amount = M.touching.maximum_volume * M.reagent_permeability() //take off your suit first
M.touching.remove_any(remove_amount)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/washgloves = 1
var/washshoes = 1
var/washmask = 1
var/washears = 1
var/washglasses = 1
if(H.wear_suit)
washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES)
washshoes = !(H.wear_suit.flags_inv & HIDESHOES)
if(H.head)
washmask = !(H.head.flags_inv & HIDEMASK)
washglasses = !(H.head.flags_inv & HIDEEYES)
washears = !(H.head.flags_inv & HIDEEARS)
if(H.wear_mask)
if (washears)
washears = !(H.wear_mask.flags_inv & HIDEEARS)
if (washglasses)
washglasses = !(H.wear_mask.flags_inv & HIDEEYES)
if(H.head)
if(H.head.clean_blood())
H.update_inv_head(0)
if(H.wear_suit)
if(H.wear_suit.clean_blood())
H.update_inv_wear_suit(0)
else if(H.w_uniform)
if(H.w_uniform.clean_blood())
H.update_inv_w_uniform(0)
if(H.gloves && washgloves)
if(H.gloves.clean_blood())
H.update_inv_gloves(0)
if(H.shoes && washshoes)
if(H.shoes.clean_blood())
H.update_inv_shoes(0)
if(H.wear_mask && washmask)
if(H.wear_mask.clean_blood())
H.update_inv_wear_mask(0)
if(H.glasses && washglasses)
if(H.glasses.clean_blood())
H.update_inv_glasses(0)
if(H.l_ear && washears)
if(H.l_ear.clean_blood())
H.update_inv_ears(0)
if(H.r_ear && washears)
if(H.r_ear.clean_blood())
H.update_inv_ears(0)
if(H.belt)
if(H.belt.clean_blood())
H.update_inv_belt(0)
H.clean_blood(washshoes)
else
if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags
if(M.wear_mask.clean_blood())
M.update_inv_wear_mask(0)
M.clean_blood()
else
O.clean_blood()
M.clean_blood()
if(isturf(loc))
var/turf/tile = loc
for(var/obj/effect/E in tile)
@@ -0,0 +1,41 @@
//Flushable toilets on station levels. Flushing sends stuff directly to a trashpit landmark without stinking up the cargo office.
//Only on-station toilets are affected and only if the trashpit landmark also exists. Otherwise toilets will stay normal.
/obj/structure/toilet
var/teleplumbed = FALSE
var/exit_landmark
/obj/structure/toilet/Initialize()
if(z in global.using_map.map_levels)
teleplumbed = TRUE
exit_landmark = locate(/obj/effect/landmark/teleplumb_exit)
if(teleplumbed && exit_landmark)
desc = "The BS-500, a bluespace rift-rotation-based waste disposal unit for small matter. This one seems remarkably clean."
return ..()
/obj/structure/toilet/attack_hand(mob/living/user as mob)
if(open && teleplumbed && exit_landmark)
var/list/bowl_contents = list()
for(var/obj/item/I in loc.contents)
if(istype(I) && !I.anchored)
bowl_contents += I
if(bowl_contents.len)
user.visible_message("<span class='notice'>[user] flushes the toilet.</span>", "<span class='notice'>You flush the toilet.</span>")
playsound(src, 'sound/vore/death7.ogg', 50, 1) //Got lazy about getting new sound files. Have a sick remix lmao.
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
playsound(src, 'sound/mecha/powerup.ogg', 30, 1)
for(var/obj/item/F in bowl_contents)
F.forceMove(get_turf(exit_landmark))
bowl_contents -= F
return
return ..()
/obj/structure/toilet/attack_ai(mob/user as mob)
if(isrobot(user))
if(user.client && user.client.eye == user)
return attack_hand(user)
else
return attack_hand(user)
/obj/effect/landmark/teleplumb_exit
name = "teleplumbing exit"
+106 -37
View File
@@ -1,61 +1,130 @@
GLOBAL_DATUM(character_directory, /datum/character_directory)
/client/verb/show_character_directory()
set name = "Character Directory"
set category = "OOC"
set desc = "Shows a listing of all active characters, along with their associated OOC notes, flavor text, and more."
if(mob.next_move >= world.time) //This is primarily to stop malicious users from trying to lag the server by spamming this verb
// This is primarily to stop malicious users from trying to lag the server by spamming this verb
if(!usr.checkMoveCooldown())
to_chat(usr, "<span class='warning'>Don't spam character directory refresh.</span>")
return
usr.setMoveCooldown(10)
mob.next_move = world.time + 10
if(!GLOB.character_directory)
GLOB.character_directory = new
GLOB.character_directory.tgui_interact(mob)
var/html = "<script> function togglesection(targetsection) { var targettext = document.getElementById(targetsection); if (targettext.style.display === 'none') { targettext.style.display = ''; } else { targettext.style.display = 'none'; } } </script>"
var/curID = 0
// This is a global singleton. Keep in mind that all operations should occur on usr, not src.
/datum/character_directory
/datum/character_directory/tgui_state(mob/user)
return GLOB.tgui_always_state
/datum/character_directory/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "CharacterDirectory", "Character Directory")
ui.open()
/datum/character_directory/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
data["personalVisibility"] = user?.client?.prefs?.show_in_directory
data["personalTag"] = user?.client?.prefs?.directory_tag
return data
/datum/character_directory/tgui_static_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/list/directory_mobs = list()
for(var/client/C in GLOB.clients)
if(C.prefs && !C.prefs.show_in_directory)
// Allow opt-out.
if(!C?.prefs?.show_in_directory)
continue
// These are the three vars we're trying to find
// The approach differs based on the mob the client is controlling
var/name = null
var/ooc_notes = null
var/flavor_text = null
var/tag = C.prefs.directory_tag
var/character_ad = C.prefs.directory_ad
if(ishuman(C.mob))
var/mob/living/carbon/human/H = C.mob
if(data_core && data_core.general)
if(!find_general_record("name", H.real_name))
if(!find_record("name", H.real_name, data_core.hidden_general))
continue
curID++
html += "<div class='block'>"
html += "<h3 class='uiContent highlight' style='font-size:16px'>[H.real_name]</h3><br>"
if(H.flavor_texts["general"])
html += "<a onclick='togglesection(\"[ckey(H.real_name)] [curID] flavor\")'>Flavor text</a>"
html += "<p class='uiContent' style='display:none' id='[ckey(H.real_name)] [curID] flavor'>[H.flavor_texts["general"]]</p>"
if(H.ooc_notes)
html += "<a onclick='togglesection(\"[ckey(H.real_name)] [curID] ooc\")'>OOC notes</a>"
html += "<p class='uiContent' style='display:none' id='[ckey(H.real_name)] [curID] ooc'>[H.ooc_notes]</p>"
html += "</div>"
name = H.real_name
ooc_notes = H.ooc_notes
flavor_text = H.flavor_texts["general"]
if(isAI(C.mob))
var/mob/living/silicon/ai/A = C.mob
curID++
html += "<div class='block'>"
html += "<h3 class='uiContent highlight' style='font-size:16px'>[A.name] (Artificial Intelligence)</h3><br>"
if(A.ooc_notes)
html += "<a onclick='togglesection(\"[ckey(A.name)] [curID] ooc\")'>OOC notes</a>"
html += "<p class='uiContent' style='display:none' id='[ckey(A.name)] [curID] ooc'>[A.ooc_notes]</p>"
html += "</div>"
name = "[A.name] (Artificial Intelligence)"
ooc_notes = A.ooc_notes
flavor_text = null // No flavor text for AIs :c
if(isrobot(C.mob))
var/mob/living/silicon/robot/R = C.mob
if(R.scrambledcodes || (R.module && R.module.hide_on_manifest))
continue
curID++
html += "<div class='block'>"
html += "<h3 class='uiContent highlight' style='font-size:16px'>[R.name] ([R.modtype] [R.braintype])</h3><br>"
if(R.flavor_text)
html += "<a onclick='togglesection(\"[ckey(R.name)] [curID] flavor\")'>Flavor text</a>"
html += "<p class='uiContent' style='display:none' id='[ckey(R.name)] [curID] flavor'>[R.flavor_text]</p>"
if(R.ooc_notes)
html += "<a onclick='togglesection(\"[ckey(R.name)] [curID] ooc\")'>OOC notes</a>"
html += "<p class='uiContent' style='display:none' id='[ckey(R.name)] [curID] ooc'>[R.ooc_notes]</p>"
html += "</div>"
if(!curID)
html += "<p class='uiContent'>404: Station not found</p>"
name = "[R.name] ([R.modtype] [R.braintype])"
ooc_notes = R.ooc_notes
flavor_text = R.flavor_text
var/datum/browser/popup = new(mob, "chardir", "Character Directory", 640, 480)
popup.set_content(html)
popup.open()
// It's okay if we fail to find OOC notes and flavor text
// But if we can't find the name, they must be using a non-compatible mob type currently.
if(!name)
continue
directory_mobs.Add(list(list(
"name" = name,
"ooc_notes" = ooc_notes,
"tag" = tag,
"character_ad" = character_ad,
"flavor_text" = flavor_text,
)))
data["directory"] = directory_mobs
return data
/datum/character_directory/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
. = ..()
if(.)
return
switch(action)
if("refresh")
// This is primarily to stop malicious users from trying to lag the server by spamming this verb
if(!usr.checkMoveCooldown())
to_chat(usr, "<span class='warning'>Don't spam character directory refresh.</span>")
return
usr.setMoveCooldown(10)
update_tgui_static_data(usr, ui)
return TRUE
if("setTag")
var/list/new_tag = input(usr, "Pick a new tag for the character directory", "Character Tag", usr?.client?.prefs?.directory_tag) as null|anything in GLOB.char_directory_tags
if(!new_tag)
return
usr?.client?.prefs?.directory_tag = new_tag
return TRUE
if("setVisible")
usr?.client?.prefs?.show_in_directory = !usr?.client?.prefs?.show_in_directory
to_chat(usr, "<span class='notice'>You are now [usr.client.prefs.show_in_directory ? "shown" : "not shown"] in the directory.</span>")
return TRUE
if("editAd")
if(!usr?.client?.prefs)
return
var/current_ad = usr.client.prefs.directory_ad
var/new_ad = sanitize(input(usr, "Change your character ad", "Character Ad", current_ad) as message|null, extra = 0)
if(isnull(new_ad))
return
usr.client.prefs.directory_ad = new_ad
return TRUE
+1 -1
View File
@@ -948,7 +948,7 @@ var/datum/announcement/minor/admin_min_announcer = new
log_admin("[key_name(usr)] toggled persistence to [config.persistence_disabled ? "Off" : "On"].")
world.update_status()
feedback_add_details("admin_verb","TPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglemaploadpersistence()
set category = "Server"
set desc="Whether mapload persistent data will be saved from now on."
+2
View File
@@ -60,6 +60,7 @@ var/list/admin_verbs_admin = list(
/client/proc/check_ai_laws, //shows AI and borg laws,
/client/proc/rename_silicon, //properly renames silicons,
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
/client/proc/shuttle_panel, // Allows controlling all shuttles remotely.
/client/proc/check_antagonists,
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
@@ -452,6 +453,7 @@ var/list/admin_verbs_event_manager = list(
/client/proc/check_ai_laws, //shows AI and borg laws,
/client/proc/rename_silicon, //properly renames silicons,
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
/client/proc/shuttle_panel, // Allows controlling all shuttles remotely.
/client/proc/check_antagonists,
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
+12 -1
View File
@@ -437,6 +437,17 @@
set_security_level(sec_level)
log_admin("[key_name(usr)] changed the security level to code [sec_level].")
/client/proc/shuttle_panel()
set name = "Shuttle Control Panel"
set category = "Admin"
if(!check_rights(R_ADMIN | R_EVENT))
return
var/datum/tgui_module/admin_shuttle_controller/A = new(src)
A.tgui_interact(usr)
log_and_message_admins("has opened the shuttle panel.")
feedback_add_details("admin_verb","SHCP")
//---- bs12 verbs ----
@@ -525,4 +536,4 @@
T.spell_list += new S
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].")
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] the spell [S].</font>", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] the spell [S].</font>", 1)
@@ -92,15 +92,7 @@
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neuter")
if (new_gender)
if(new_gender == "Male")
M.gender = MALE
M.dna.SetUIState(DNA_UI_GENDER, FALSE)
else if (new_gender == "Female")
M.gender = FEMALE
M.dna.SetUIState(DNA_UI_GENDER, TRUE)
else
M.gender = NEUTER
M.dna.SetUIState(DNA_UI_GENDER, FALSE)
M.set_gender(new_gender)
M.update_dna(M)
M.update_hair(FALSE)
@@ -157,6 +157,29 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.g_synth = pref.g_synth
character.b_synth = pref.b_synth
character.synth_markings = pref.synth_markings
character.ear_style = ear_styles_list[pref.ear_style]
character.r_ears = pref.r_ears
character.b_ears = pref.b_ears
character.g_ears = pref.g_ears
character.r_ears2 = pref.r_ears2
character.b_ears2 = pref.b_ears2
character.g_ears2 = pref.g_ears2
character.tail_style = tail_styles_list[pref.tail_style]
character.r_tail = pref.r_tail
character.b_tail = pref.b_tail
character.g_tail = pref.g_tail
character.r_tail2 = pref.r_tail2
character.b_tail2 = pref.b_tail2
character.g_tail2 = pref.g_tail2
character.wing_style = wing_styles_list[pref.wing_style]
character.r_wing = pref.r_wing
character.b_wing = pref.b_wing
character.g_wing = pref.g_wing
character.r_wing2 = pref.r_wing2
character.b_wing2 = pref.b_wing2
character.g_wing2 = pref.g_wing2
character.set_gender( pref.biological_gender)
if(pref.species == "Grey")//YWadd START
character.wingdings = pref.wingdings
@@ -171,7 +194,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(pref.haemophilia == 1)
character.add_modifier(/datum/modifier/trait/haemophilia)
//YWadd END
//YWadd END
// Destroy/cyborgize organs and limbs.
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
@@ -88,6 +88,11 @@
display_name = "cap, grey"
path = /obj/item/clothing/head/soft/grey
/datum/gear/head/cap/med
display_name = "cap, medical (Medical)"
path = /obj/item/clothing/head/soft/med
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Search and Rescue")
/datum/gear/head/cap/orange
display_name = "cap, orange"
path = /obj/item/clothing/head/soft/orange
@@ -6,10 +6,14 @@
/datum/category_item/player_setup_item/vore/misc/load_character(var/savefile/S)
S["show_in_directory"] >> pref.show_in_directory
S["directory_tag"] >> pref.directory_tag
S["directory_ad"] >> pref.directory_ad
S["sensorpref"] >> pref.sensorpref //TFF 5/8/19 - add sensor pref setting to load after saved
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
S["show_in_directory"] << pref.show_in_directory
S["directory_tag"] << pref.directory_tag
S["directory_ad"] << pref.directory_ad
S["sensorpref"] << pref.sensorpref //TFF 5/8/19 - add sensor pref setting to be saveable
//TFF 5/8/19 - add new datum category to allow for setting multiple settings when this is selected in the loadout.
@@ -20,17 +24,30 @@
/datum/category_item/player_setup_item/vore/misc/sanitize_character()
pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory))
pref.directory_tag = sanitize_inlist(pref.directory_tag, GLOB.char_directory_tags, initial(pref.directory_tag))
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref)) //TFF - 5/8/19 - add santisation for sensor prefs
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
. += "<br>"
. += "<b>Appear in Character Directory:</b> <a [pref.show_in_directory ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_show_in_directory=1'><b>[pref.show_in_directory ? "Yes" : "No"]</b></a><br>"
. += "<b>Character Directory Tag:</b> <a href='?src=\ref[src];directory_tag=1'><b>[pref.directory_tag]</b></a><br>"
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>" //TFF 5/8/19 - Allow selection of sensor settings from off, binary, vitals, tracking, or random
/datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user)
if(href_list["toggle_show_in_directory"])
pref.show_in_directory = pref.show_in_directory ? 0 : 1;
return TOPIC_REFRESH
else if(href_list["directory_tag"])
var/new_tag = input(user, "Pick a new tag for the character directory", "Character Tag", pref.directory_tag) as null|anything in GLOB.char_directory_tags
if(!new_tag)
return
pref.directory_tag = new_tag
return TOPIC_REFRESH
else if(href_list["directory_ad"])
var/msg = sanitize(input(user,"Write your advertisement here!", "Flavor Text", html_decode(pref.directory_ad)) as message, extra = 0) //VOREStation Edit: separating out OOC notes
pref.directory_ad = msg
return TOPIC_REFRESH
//TFF 5/8/19 - add new thing so you can choose the sensor setting your character can get.
else if(href_list["toggle_sensor_setting"])
var/new_sensorpref = input(user, "Choose your character's sensor preferences:", "Character Preferences", sensorpreflist[pref.sensorpref]) as null|anything in sensorpreflist
+6 -6
View File
@@ -83,11 +83,11 @@ datum/preferences
//Mob preview
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
var/static/list/preview_screen_locs = list(
"1" = "character_preview_map:1,5:-12",
"2" = "character_preview_map:1,3:15",
"4" = "character_preview_map:1:7,2:10",
"8" = "character_preview_map:1:-7,1:5",
"BG" = "character_preview_map:1,1 to 1,5"
"1" = "character_preview_map:2,7",
"2" = "character_preview_map:2,5",
"4" = "character_preview_map:2,3",
"8" = "character_preview_map:2,1",
"BG" = "character_preview_map:1,1 to 3,8"
)
//Jobs, uses bitflags
@@ -281,7 +281,7 @@ datum/preferences
if(!BG)
BG = new
BG.plane = TURF_PLANE
BG.icon = 'icons/effects/128x48.dmi'
BG.icon = 'icons/effects/setup_backgrounds_vr.dmi'
BG.pref = src
LAZYSET(char_render_holders, "BG", BG)
client.screen |= BG
+2
View File
@@ -1,5 +1,7 @@
/datum/preferences
var/show_in_directory = 1 //Show in Character Directory
var/directory_tag = "Unset" //Sorting tag to use in character directory
var/directory_ad = "" //Advertisement stuff to show in character directory.
var/sensorpref = 5 //Set character's suit sensor level
var/job_talon_high = 0
var/job_talon_med = 0
+13 -5
View File
@@ -38,7 +38,7 @@
// Aurora forensics port.
/obj/item/clothing/clean_blood()
..()
. = ..()
gunshot_residue = null
@@ -55,6 +55,12 @@
verbs |= /obj/item/clothing/proc/change_color
//VOREStation edit start
/obj/item/clothing/update_icon()
overlays.Cut() //This removes all the overlays on the sprite and then goes down a checklist adding them as required.
if(blood_DNA)
add_blood()
. = ..()
/obj/item/clothing/equipped(var/mob/user,var/slot)
..()
if(enables_planes)
@@ -366,6 +372,11 @@
return
*/
/obj/item/clothing/gloves/clean_blood()
. = ..()
transfer_blood = 0
update_icon()
/obj/item/clothing/gloves/mob_can_equip(mob/user, slot, disable_warning = FALSE)
var/mob/living/carbon/human/H = user
@@ -685,9 +696,7 @@
update_icon()
/obj/item/clothing/shoes/update_icon()
overlays.Cut() //This removes all the overlays on the sprite and then goes down a checklist adding them as required.
if(blood_DNA)
add_blood()
. = ..()
if(holding)
overlays += image(icon, "[icon_state]_knife")
if(contaminated)
@@ -698,7 +707,6 @@
if(ismob(usr))
var/mob/M = usr
M.update_inv_shoes()
return ..()
/obj/item/clothing/shoes/clean_blood()
update_icon()
+6
View File
@@ -99,3 +99,9 @@
desc = "It's a ballcap bearing the colors of Major Bill's Shipping."
icon_state = "mbillsoft"
catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
/obj/item/clothing/head/soft/med
name = "medical cap"
desc = "It's a field cap in white, with a blue cross on the front."
icon_state = "medsoft"
item_state_slots = list(slot_r_hand_str = "mimesoft", slot_l_hand_str = "mimesoft")
@@ -7,15 +7,27 @@
icon_override = 'icons/mob/species/seromi/synth_facemask.dmi'
icon_state = "synth_facemask"
origin_tech = list(TECH_ILLEGAL = 1)
var/lstat
var/mob/living/carbon/maskmaster
equipped()
..()
var/mob/living/carbon/human/H = loc
if(istype(H) && H.wear_mask == src)
canremove = 0
maskmaster = H
START_PROCESSING(SSprocessing, src)
dropped()
canremove = 1
maskmaster = null
STOP_PROCESSING(SSprocessing, src)
return ..()
Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
mob_can_equip(var/mob/living/carbon/human/user, var/slot)
if (!..())
return 0
@@ -27,12 +39,20 @@
return 0
update_icon()
var/mob/living/carbon/human/H = loc
if (H.stat == DEAD) icon_state = "synth_facemask_dead"
if (maskmaster && maskmaster.stat == DEAD) icon_state = "synth_facemask_dead"
else icon_state = "synth_facemask"
if(istype(H)) H.update_inv_wear_mask()
process()
if(maskmaster && lstat != maskmaster.stat)
lstat = maskmaster.stat
update_icon()
lstat = maskmaster.stat
//LOADOUT ITEM
/datum/gear/mask/synthface/
display_name = "Synth Facemask(Tesh)"
display_name = "Synth Facemask (Teshari)"
path = /obj/item/clothing/mask/synthfacemask
sort_category = "Xenowear"
whitelisted = SPECIES_TESHARI
@@ -180,7 +180,7 @@
)
/obj/item/clothing/suit/space/void/autolok/Initialize()
..()
. = ..()
helmet = new /obj/item/clothing/head/helmet/space/void/autolok //autoinstall the helmet
//override the attackby screwdriver proc so that people can't remove the helmet
@@ -165,7 +165,7 @@
var/datum/radio_frequency/radio_connection
/obj/item/clothing/accessory/collar/shock/Initialize()
..()
. = ..()
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) // Makes it so you don't need to change the frequency off of default for it to work.
/obj/item/clothing/accessory/collar/shock/Destroy() //Clean up your toys when you're done.
@@ -164,6 +164,7 @@
desc = "It's made of a special fiber that provides minor protection against biohazards"
icon_state = "scrubs"
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
index = 1
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
+9 -2
View File
@@ -621,13 +621,13 @@ Uniforms and such
*/
/obj/item/clothing/under/sundress
name = "flowery white sundress"
name = "sundress"
desc = "Makes you want to frolic in a field of daisies."
icon_state = "sundress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/sundress_white
name = "white sundress"
name = "flowery white sundress"
desc = "A white sundress decorated with purple lilies."
icon_state = "sundress_white"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -637,41 +637,48 @@ Uniforms and such
desc = "A cute pink sundress."
icon_state = "pinksun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
index = 1
/obj/item/clothing/under/dress/sundress_white
name = "white sundress"
desc = "A white sundress, it's short."
icon_state = "whitesun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
index = 1
/obj/item/clothing/under/dress/sundress_pinkbow
name = "bowed pink sundress"
desc = "A cute pink sundress with a bow."
icon_state = "bowsun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
index = 1
/obj/item/clothing/under/dress/sundress_blue
name = "long blue sundress"
desc = "A long blue sun dress with white frills towards the bottom."
icon_state = "bluesun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
index = 1
/obj/item/clothing/under/dress/sundress_pinkshort
name = "short pink sundress"
desc = "A very short pink sundress, it's more like a chemise."
icon_state = "shortpink"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
index = 1
/obj/item/clothing/under/dress/twopiece
name = "two-piece dress"
desc = "A fancy two-piece dress, the pieces are sewn together."
icon_state = "twopiece"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
index = 1
/obj/item/clothing/under/dress/gothic2
name = "lacey gothic dress"
desc = "An elegant gothic dress with lace decorations."
icon_state = "gothic2"
index = 1
/obj/item/clothing/under/captainformal
name = "site manager's formal uniform"
File diff suppressed because it is too large Load Diff
+19 -1
View File
@@ -248,4 +248,22 @@
nutriment_amt = 1 //Todo - Change numbers.
nutriment_desc = list("a precious sweetness that needs protecting" = 2) //This is a WIP flavour, Could keep it if you don't mind the "gotta protect the precious cinnamon roll" joke
//TODO: Maybe butterscotch candies?
//TODO: Maybe butterscotch candies?
//So what if like yknow, you buy a bread tube and wow you actually get to test the new and improved producct.
/obj/item/weapon/reagent_containers/food/snacks/tastybread/sequel
name = "bread tube 2"
desc = "Bread in a tube. Chewy...and surprisingly tasty. Now with twice the bread to tube!"
filling_color = "#75491c"
nutriment_amt = 12
nutriment_desc = list("bread" = 4, "sweetness" = 6)
/obj/item/weapon/reagent_containers/food/snacks/tastybread/New()
..()
if(prob(1))
new /obj/item/weapon/reagent_containers/food/snacks/tastybread/sequel(src)
return QDEL_HINT_QUEUE
/obj/item/weapon/reagent_containers/food/snacks/tastybread/sequel/Initialize()
. = ..()
bitesize = 4
+73 -231
View File
@@ -1,21 +1,4 @@
//I guess we're not always eating PEOPLE.
/*
/obj/item/weapon/reagent_containers/food/snacks/my_new_food
name = "cheesemeaties"
desc = "The cheese adds a good flavor. Not great. Just good"
icon = 'icons/obj/food_vr.dmi'
icon_state = "cheesemeaties"
trash = /obj/item/trash/plate //What I leave behind when eaten (waffles instead of plate = bigsquareplate)
center_of_mass = list("x"=16, "y"=16) //If your thing is too huge and you don't want it in the center.
nutriment_amt = 5
nutriment_desc = list("gargonzola" = 2, "burning" = 2)
/obj/item/weapon/reagent_containers/food/snacks/my_new_food/Initialize()
..()
reagents.add_reagent("protein", 2) //For meaty things.
bitesize = 3 //How many reagents to transfer per bite?
*/
/obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi
name = "sushi roll"
desc = "A whole sushi roll! Slice it up and enjoy with some soy sauce and wasabi."
@@ -27,7 +10,7 @@
nutriment_amt = 15
/obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 10)
bitesize = 5
@@ -52,7 +35,7 @@
nutriment_desc = list("meat" = 2, "vegetables" = 2, "seasoning" = 5)
/obj/item/weapon/reagent_containers/food/snacks/goulash/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 3) //For meaty things.
reagents.add_reagent("water", 5)
@@ -66,7 +49,7 @@
nutriment_desc = list("vegetables" = 2, "seasoned meat" = 5)
/obj/item/weapon/reagent_containers/food/snacks/donerkebab/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 2) //For meaty things.
@@ -80,7 +63,7 @@
nutriment_desc = list("cooked meat" = 5)
/obj/item/weapon/reagent_containers/food/snacks/roastbeef/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 4) //For meaty things.
bitesize = 2
@@ -94,7 +77,7 @@
nutriment_desc = list("chocolate" = 4, "colors" = 2)
/obj/item/weapon/reagent_containers/food/snacks/reishicup/Initialize()
..()
. = ..()
reagents.add_reagent("psilocybin", 3)
bitesize = 6
@@ -113,8 +96,7 @@
foldable = null
/obj/item/weapon/storage/box/wings/Initialize()
..()
for(var/i=1 to startswith)
. = ..()
update_icon()
return
@@ -126,14 +108,14 @@
/obj/item/weapon/reagent_containers/food/snacks/chickenwing
name = "chicken wing"
desc = "What flavor even is this? Buffalo? Barbeque? Or something more exotic?"
desc = "What flavor even is this? Buffalo? Barbecue? Or something more exotic?"
icon = 'icons/obj/food_vr.dmi'
icon_state = "wing"
nutriment_amt = 2
nutriment_desc = list("chicken" = 2, "unplacable flavor sauce" = 4)
/obj/item/weapon/reagent_containers/food/snacks/chickenwing/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 1)
bitesize = 3
@@ -148,7 +130,7 @@
nutriment_desc = list("spicyness" = 4, "sourness" = 4, "tofu" = 1)
/obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup/Initialize()
..()
. = ..()
bitesize = 2
@@ -162,7 +144,7 @@
nutriment_desc = list("fried egg" = 2, "egg noodles" = 4)
/obj/item/weapon/reagent_containers/food/snacks/kitsuneudon/Initialize()
..()
. = ..()
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/generalschicken
@@ -175,7 +157,7 @@
nutriment_desc = list("sweet and spicy sauce" = 5, "chicken" = 3)
/obj/item/weapon/reagent_containers/food/snacks/generalschicken/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 4)
bitesize = 2
@@ -187,7 +169,7 @@
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 1)
reagents.add_reagent("shockchem", 6)
bitesize = 6
@@ -204,7 +186,7 @@
nutriment_desc = list("crunchy shell bits" = 5)
/obj/item/weapon/reagent_containers/food/snacks/bugball/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 1)
reagents.add_reagent("carbon", 5)
bitesize = 7
@@ -219,7 +201,7 @@
nutriment_desc = list("sparkles" = 5, "ancient inca culture" =3)
/obj/item/weapon/reagent_containers/food/snacks/pillbug/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 3)
reagents.add_reagent("shockchem", 6)
bitesize = 6
@@ -233,7 +215,7 @@
nutriment_desc = list("crunchy shell bits" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pillbug/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 1)
reagents.add_reagent("carbon", 5)
bitesize = 3
@@ -248,7 +230,7 @@
nutriment_desc = list("brothy sweet goodness" = 5)
/obj/item/weapon/reagent_containers/food/snacks/mammi/Initialize()
..()
. = ..()
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/makaroni
@@ -261,7 +243,7 @@
nutriment_desc = list("Cheese" = 5, "eggs" = 3, "pasta" = 4, "sparkles" = 3)
/obj/item/weapon/reagent_containers/food/snacks/makaroni/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 1)
reagents.add_reagent("shockchem", 6)
bitesize = 7
@@ -274,7 +256,7 @@
nutriment_amt = 5
/obj/item/weapon/reagent_containers/food/snacks/lobster/Initialize()
..()
. = ..()
bitesize = 0.1
/obj/item/weapon/reagent_containers/food/snacks/lobstercooked
@@ -287,7 +269,7 @@
nutriment_desc = list("lemon" = 2, "lobster" = 5, "salad" = 2)
/obj/item/weapon/reagent_containers/food/snacks/lobstercooked/Initialize()
..()
. = ..()
bitesize = 5
reagents.add_reagent("protein", 20)
reagents.add_reagent("tricordrazine", 5)
@@ -301,7 +283,7 @@
nutriment_amt = 5
/obj/item/weapon/reagent_containers/food/snacks/cuttlefish/Initialize()
..()
. = ..()
bitesize = 10
/obj/item/weapon/reagent_containers/food/snacks/cuttlefishcooked
@@ -313,7 +295,7 @@
nutriment_desc = list("cuttlefish" = 5, "rubber" = 5, "grease" = 1)
/obj/item/weapon/reagent_containers/food/snacks/cuttlefishcooked/Initialize()
..()
. = ..()
bitesize = 5
reagents.add_reagent("protein", 10)
@@ -329,7 +311,7 @@
trash = /obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfishremains
/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfish/Initialize()
..()
. = ..()
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/monkfishfillet
@@ -340,7 +322,7 @@
nutriment_amt = 5
/obj/item/weapon/reagent_containers/food/snacks/monkfishfillet/Initialize()
..()
. = ..()
bitesize = 3
reagents.add_reagent("protein", 1)
@@ -354,7 +336,7 @@
trash = /obj/item/trash/fancyplate
/obj/item/weapon/reagent_containers/food/snacks/monkfishcooked/Initialize()
..()
. = ..()
bitesize = 4
reagents.add_reagent("protein", 5)
@@ -369,7 +351,7 @@
slices_num = 1
/obj/item/weapon/reagent_containers/food/snacks/sliceable/monkfishremains/Initialize()
..()
. = ..()
bitesize = 0.01 //impossible to eat
reagents.add_reagent("carbon", 5)
@@ -384,7 +366,7 @@
slices_num = 5
/obj/item/weapon/reagent_containers/food/snacks/sliceable/sharkchunk/Initialize()
..()
. = ..()
bitesize = 3
reagents.add_reagent("protein", 20)
@@ -397,7 +379,7 @@
toxin_amount = null
/obj/item/weapon/reagent_containers/food/snacks/sharkmeat/Initialize()
..()
. = ..()
bitesize = 3
reagents.add_reagent("protein", 2)
@@ -411,7 +393,7 @@
nutriment_desc = list("manliness" = 1, "fish oil" = 2, "shark" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcooked/Initialize()
..()
. = ..()
bitesize = 3
reagents.add_reagent("protein", 8)
@@ -425,7 +407,7 @@
nutriment_desc = list("salt" = 1, "fish oil" = 2, "spicy shark" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sharkmeatdip/Initialize()
..()
. = ..()
bitesize = 3
reagents.add_reagent("capsaicin", 4)
reagents.add_reagent("protein", 4)
@@ -440,7 +422,7 @@
nutriment_desc = list("viking spirit" = 1, "rot" = 2, "fermented sauce" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcubes/Initialize()
..()
. = ..()
bitesize = 10
reagents.add_reagent("potatojuice", 30) // for people who want to get fat, FAST.
@@ -476,188 +458,6 @@
name = "wolpin cube"
monkey_type = "Wolpin"
/*
/obj/item/weapon/reagent_containers/food/snacks/pizza/margfrozen
name = "frozen margherita pizza"
desc = "It's frozen rock solid, better thaw it in a microwave."
icon = 'icons/obj/food_vr.dmi'
icon_state = "margharita_pizza_frozen"
center_of_mass = list("x"=16, "y"=11)
nutriment_amt = 15
nutriment_desc = list("ice" = 5, "toothache" = 1, "frozen cheese" = 5, "frozen tomato" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizza/margfrozen/Initialize()
..()
bitesize = 20
//reagents.add_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margcargo
name = "Margherita"
desc = "The golden standard of pizzas, it looks drowned in tomato sauce."
icon = 'icons/obj/food_vr.dmi'
icon_state = "margharita_pizza_cargo"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/margcargo
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
nutriment_desc = list("pizza crust" = 10, "tomato" = 15, "cheese" = 5)
nutriment_amt = 10
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margcargo/Initialize()
..()
reagents.add_reagent("protein", 2)
reagents.add_reagent("tomatojuice", 10)
bitesize = 2
//reagents.remove_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/slice/margcargo
name = "Margherita slice"
desc = "A slice of the classic pizza, it's hard not to spill any tomato juice on yourself."
icon = 'icons/obj/food_vr.dmi'
icon_state = "margharita_pizza_slice_cargo"
filling_color = "#BAA14C"
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margcargo
/obj/item/weapon/reagent_containers/food/snacks/slice/margcargo/filled
filled = TRUE
/obj/item/weapon/reagent_containers/food/snacks/pizza/meatfrozen
name = "frozen meat pizza"
desc = "It's frozen rock solid, better thaw it in a microwave."
icon = 'icons/obj/food_vr.dmi'
icon_state = "meat_pizza_frozen"
center_of_mass = list("x"=16, "y"=11)
nutriment_amt = 15
nutriment_desc = list("ice" = 5, "toothache" = 1, "frozen meat" = 5, "frozen cow screams" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizza/meatfrozen/Initialize()
..()
bitesize = 20
//reagents.add_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo
name = "Meatpizza"
desc = "A pizza with meat topping, some of it suspiciously pink."
icon = 'icons/obj/food_vr.dmi'
icon_state = "meat_pizza_cargo"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/meatcargo
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
nutriment_desc = list("meat" = 10, "beef" = 10, "squeaky pork" = 15, "longpig" = 5)
nutriment_amt = 10
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo/Initialize()
..()
reagents.add_reagent("protein", 20)
reagents.add_reagent("tomatojuice", 6)
bitesize = 2
//reagents.remove_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/slice/meatcargo
name = "Meatpizza slice"
desc = "A slice of a meaty pizza, there are some bits of supiciously pink meat."
icon = 'icons/obj/food_vr.dmi'
icon_state = "meat_pizza_slice_cargo"
filling_color = "#BAA14C"
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo
/obj/item/weapon/reagent_containers/food/snacks/slice/meatcargo/filled
filled = TRUE
/obj/item/weapon/reagent_containers/food/snacks/pizza/mushfrozen
name = "frozen mushroom pizza"
desc = "It's frozen rock solid, better thaw it in a microwave."
icon = 'icons/obj/food_vr.dmi'
icon_state = "mushroom_pizza_frozen"
center_of_mass = list("x"=16, "y"=11)
nutriment_amt = 15
nutriment_desc = list("ice" = 5, "toothache" = 1, "frozen mushrooms" = 5, "frozen cream" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizza/mushfrozen/Initialize()
..()
bitesize = 20
//reagents.add_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushcargo
name = "Mushroompizza"
desc = "Very special pizza, it looks to be drowned in cream."
icon = 'icons/obj/food_vr.dmi'
icon_state = "mushroom_pizza_cargo"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/mushcargo
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
nutriment_desc = list("pizza crust" = 10, "cheese" = 5, "creamy sauce" = 5, "mushroom" = 5)
nutriment_amt = 10
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushcargo/Initialize()
..()
reagents.add_reagent("protein", 4)
bitesize = 2
//reagents.remove_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/slice/mushcargo
name = "Mushroompizza slice"
desc = "Very special pizza slice, it looks to be drowned in cream."
icon = 'icons/obj/food_vr.dmi'
icon_state = "mushroom_pizza_slice_cargo"
filling_color = "#BAA14C"
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushcargo
/obj/item/weapon/reagent_containers/food/snacks/slice/mushcargp/filled
filled = TRUE
/obj/item/weapon/reagent_containers/food/snacks/pizza/vegfrozen
name = "frozen vegtable pizza"
desc = "It's frozen rock solid, better thaw it in a microwave."
icon = 'icons/obj/food_vr.dmi'
icon_state = "vegetable_pizza_frozen"
center_of_mass = list("x"=16, "y"=11)
nutriment_amt = 15
nutriment_desc = list("ice" = 5, "toothache" = 1, "frozen vegtable chunks" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizza/vegfrozen/Initialize()
..()
bitesize = 20
//reagents.add_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegcargo
name = "Vegetablepizza"
desc = "At least 10 of Tomato Sapiens were harmed during making this pizza."
icon = 'icons/obj/food_vr.dmi'
icon_state = "vegetable_pizza_cargo"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/vegcargo
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
nutriment_desc = list("pizza crust" = 10, "tomato" = 20, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5)
nutriment_amt = 5
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegcargo/Initialize()
..()
reagents.add_reagent("protein", 4)
reagents.add_reagent("tomatojuice", 15)
reagents.add_reagent("imidazoline", 10)
bitesize = 2
//reagents.remove_reagent("frostoil",3)
/obj/item/weapon/reagent_containers/food/snacks/slice/vegcargo
name = "Vegtablepizza slice"
desc = "At least 10 of Tomato Sapiens were harmed during making this pizza."
icon = 'icons/obj/food_vr.dmi'
icon_state = "vegetable_pizza_slice_cargo"
filling_color = "#BAA14C"
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegcargo
/obj/item/weapon/reagent_containers/food/snacks/slice/vegcargo/filled
filled = TRUE
*/
// food cubes
/obj/item/weapon/reagent_containers/food/snacks/cube
name = "protein cube"
@@ -700,7 +500,7 @@
nutriment_desc = list("bitter chyme" = 50)
/obj/item/weapon/reagent_containers/food/snacks/proteinslab/Initialize()
..()
. = ..()
reagents.add_reagent("protein", 30)
/obj/item/weapon/reagent_containers/food/snacks/cube/nutriment
@@ -759,3 +559,45 @@
/obj/item/weapon/reagent_containers/food/snacks/bun/Initialize()
. = ..()
//Readded Polaris Foods
/obj/item/weapon/reagent_containers/food/snacks/nachos
name = "nachos"
desc = "Chips from Old Mexico."
icon_state = "nachos"
nutriment_amt = 2
nutriment_desc = list("salt" = 1)
/obj/item/weapon/reagent_containers/food/snacks/nachos/Initialize()
. = ..()
reagents.add_reagent("nutriment", 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/cheesenachos
name = "cheesy nachos"
desc = "The delicious combination of nachos and melting cheese."
icon_state = "cheesenachos"
nutriment_amt = 5
nutriment_desc = list("salt" = 2, "cheese" = 3)
/obj/item/weapon/reagent_containers/food/snacks/cheesenachos/Initialize()
. = ..()
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("protein", 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/onionsoup
name = "Onion Soup"
desc = "A soup with layers."
icon_state = "onionsoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#E0C367"
center_of_mass = list("x"=16, "y"=7)
nutriment_amt = 5
nutriment_desc = list("onion" = 2, "soup" = 2)
/obj/item/weapon/reagent_containers/food/snacks/onionsoup/Initialize()
. = ..()
bitesize = 3
+155 -156
View File
@@ -1,156 +1,155 @@
/obj/machinery/appliance/cooker/oven
name = "oven"
desc = "Cookies are ready, dear."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "ovenopen"
cook_type = "baked"
appliancetype = OVEN
food_color = "#A34719"
can_burn_food = TRUE
var/datum/looping_sound/oven/oven_loop
circuit = /obj/item/weapon/circuitboard/oven
cooked_sound = 'sound/machines/ding.ogg'
active_power_usage = 6 KILOWATTS
heating_power = 6 KILOWATTS
//Based on a double deck electric convection oven
resistance = 12 KILOWATTS // Approx. 12 minutes to heat up.
idle_power_usage = 2 KILOWATTS
//uses ~30% power to stay warm
optimal_power = 0.8 // Oven cooks .2 faster than the default speed.
light_x = 3
light_y = 4
max_contents = 5
container_type = /obj/item/weapon/reagent_containers/cooking_container/oven
stat = POWEROFF //Starts turned off
var/open = FALSE // Start closed just so people don't try to preheat with it open, lol.
output_options = list(
"Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza,
"Bread" = /obj/item/weapon/reagent_containers/food/snacks/variable/bread,
"Pie" = /obj/item/weapon/reagent_containers/food/snacks/variable/pie,
"Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake,
"Hot Pocket" = /obj/item/weapon/reagent_containers/food/snacks/variable/pocket,
"Kebab" = /obj/item/weapon/reagent_containers/food/snacks/variable/kebab,
"Waffles" = /obj/item/weapon/reagent_containers/food/snacks/variable/waffles,
"Cookie" = /obj/item/weapon/reagent_containers/food/snacks/variable/cookie,
"Donut" = /obj/item/weapon/reagent_containers/food/snacks/variable/donut,
)
/obj/machinery/appliance/cooker/oven/Initialize()
. = ..()
oven_loop = new(list(src), FALSE)
/obj/machinery/appliance/cooker/oven/Destroy()
QDEL_NULL(oven_loop)
return ..()
/obj/machinery/appliance/cooker/oven/update_icon()
if(!open)
if(!stat)
icon_state = "ovenclosed_on"
if(cooking == TRUE)
icon_state = "ovenclosed_cooking"
if(oven_loop)
oven_loop.start(src)
else
icon_state = "ovenclosed_on"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "ovenclosed_off"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "ovenopen"
if(oven_loop)
oven_loop.stop(src)
..()
/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user)
try_toggle_door(user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
/obj/machinery/appliance/cooker/oven/verb/toggle_door()
set src in oview(1)
set category = "Object"
set name = "Open/close oven door"
try_toggle_door(usr)
/obj/machinery/appliance/cooker/oven/proc/try_toggle_door(mob/user)
if(!isliving(usr) || isAI(user))
return
if(!usr.IsAdvancedToolUser())
to_chat(user, "<span class='notice'>You lack the dexterity to do that.</span>")
return
if(!Adjacent(usr))
to_chat(user, "<span class='notice'>You can't reach the [src] from there, get closer!</span>")
return
if(open)
open = FALSE
loss = (heating_power / resistance) * 0.5
cooking = TRUE
else
open = TRUE
loss = (heating_power / resistance) * 2 // Halve oven heat loss.
//When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open)
cooking = FALSE
playsound(src, 'sound/machines/hatch_open.ogg', 20, 1)
to_chat(user, "<span class='notice'>You [open ? "open" : "close"] the oven door.</span>")
update_icon()
/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I)
// check if someone's trying to manipulate the machine
if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer))
return TRUE
else
return FALSE
/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user)
if(!open && !manip(I))
to_chat(user, "<span class='warning'>You can't put anything in while the door is closed!</span>")
return 0
else
return ..()
//If an oven's door is open it will lose heat every proc, even if it also gained it
//But dont call equalize twice in one stack. A return value of -1 from the parent indicates equalize was already called
/obj/machinery/appliance/cooker/oven/heat_up()
.=..()
if(open && . != -1)
var/turf/T = get_turf(src)
if(temperature > T.temperature)
equalize_temperature()
/obj/machinery/appliance/cooker/oven/can_remove_items(var/mob/user, show_warning = TRUE)
if(!open)
if(show_warning)
to_chat(user, "<span class='warning'>You can't take anything out while the door is closed!</span>")
return 0
else
return ..()
//Oven has lots of recipes and combine options. The chance for interference is high, so
//If a combine target is set the oven will do it instead of checking recipes
/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI)
if(CI.combine_target)
CI.result_type = 3//Combination type. We're making something out of our ingredients
visible_message("<span class='notice'>\The [src] pings!</span>")
combination_cook(CI)
return
else
..()
/obj/machinery/appliance/cooker/oven
name = "oven"
desc = "Cookies are ready, dear."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "ovenopen"
cook_type = "baked"
appliancetype = OVEN
food_color = "#A34719"
can_burn_food = TRUE
var/datum/looping_sound/oven/oven_loop
circuit = /obj/item/weapon/circuitboard/oven
active_power_usage = 6 KILOWATTS
heating_power = 6 KILOWATTS
//Based on a double deck electric convection oven
resistance = 12 KILOWATTS // Approx. 12 minutes to heat up.
idle_power_usage = 2 KILOWATTS
//uses ~30% power to stay warm
optimal_power = 0.8 // Oven cooks .2 faster than the default speed.
light_x = 3
light_y = 4
max_contents = 5
container_type = /obj/item/weapon/reagent_containers/cooking_container/oven
stat = POWEROFF //Starts turned off
var/open = FALSE // Start closed just so people don't try to preheat with it open, lol.
output_options = list(
"Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza,
"Bread" = /obj/item/weapon/reagent_containers/food/snacks/variable/bread,
"Pie" = /obj/item/weapon/reagent_containers/food/snacks/variable/pie,
"Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake,
"Hot Pocket" = /obj/item/weapon/reagent_containers/food/snacks/variable/pocket,
"Kebab" = /obj/item/weapon/reagent_containers/food/snacks/variable/kebab,
"Waffles" = /obj/item/weapon/reagent_containers/food/snacks/variable/waffles,
"Cookie" = /obj/item/weapon/reagent_containers/food/snacks/variable/cookie,
"Donut" = /obj/item/weapon/reagent_containers/food/snacks/variable/donut,
)
/obj/machinery/appliance/cooker/oven/Initialize()
. = ..()
oven_loop = new(list(src), FALSE)
/obj/machinery/appliance/cooker/oven/Destroy()
QDEL_NULL(oven_loop)
return ..()
/obj/machinery/appliance/cooker/oven/update_icon()
if(!open)
if(!stat)
icon_state = "ovenclosed_on"
if(cooking == TRUE)
icon_state = "ovenclosed_cooking"
if(oven_loop)
oven_loop.start(src)
else
icon_state = "ovenclosed_on"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "ovenclosed_off"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "ovenopen"
if(oven_loop)
oven_loop.stop(src)
..()
/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user)
try_toggle_door(user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
/obj/machinery/appliance/cooker/oven/verb/toggle_door()
set src in oview(1)
set category = "Object"
set name = "Open/close oven door"
try_toggle_door(usr)
/obj/machinery/appliance/cooker/oven/proc/try_toggle_door(mob/user)
if(!isliving(usr) || isAI(user))
return
if(!usr.IsAdvancedToolUser())
to_chat(user, "<span class='notice'>You lack the dexterity to do that.</span>")
return
if(!Adjacent(usr))
to_chat(user, "<span class='notice'>You can't reach the [src] from there, get closer!</span>")
return
if(open)
open = FALSE
loss = (heating_power / resistance) * 0.5
cooking = TRUE
else
open = TRUE
loss = (heating_power / resistance) * 4
//When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open)
cooking = FALSE
playsound(src, 'sound/machines/hatch_open.ogg', 20, 1)
to_chat(user, "<span class='notice'>You [open? "open":"close"] the oven door</span>")
update_icon()
/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I)
// check if someone's trying to manipulate the machine
if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer))
return TRUE
else
return FALSE
/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user)
if(!open && !manip(I))
to_chat(user, "<span class='warning'>You can't put anything in while the door is closed!</span>")
return 0
else
return ..()
//If an oven's door is open it will lose heat every proc, even if it also gained it
//But dont call equalize twice in one stack. A return value of -1 from the parent indicates equalize was already called
/obj/machinery/appliance/cooker/oven/heat_up()
.=..()
if(open && . != -1)
var/turf/T = get_turf(src)
if(temperature > T.temperature)
equalize_temperature()
/obj/machinery/appliance/cooker/oven/can_remove_items(var/mob/user, show_warning = TRUE)
if(!open)
if(show_warning)
to_chat(user, "<span class='warning'>You can't take anything out while the door is closed!</span>")
return 0
else
return ..()
//Oven has lots of recipes and combine options. The chance for interference is high, so
//If a combine target is set the oven will do it instead of checking recipes
/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI)
if(CI.combine_target)
CI.result_type = 3//Combination type. We're making something out of our ingredients
visible_message("<span class='notice'>\The [src] pings!</span>")
combination_cook(CI)
return
else
..()
+35 -19
View File
@@ -29,10 +29,17 @@
/datum/recipe/bellefritter
appliance = FRYER
reagents = list("sugar" = 5, "batter" = 10)
coating = /datum/reagent/nutriment/coating/batter
reagents = list("sugar" = 5)
items = list(/obj/item/weapon/reagent_containers/food/snacks/frostbelle)
result = /obj/item/weapon/reagent_containers/food/snacks/bellefritter
/datum/recipe/onionrings
appliance = FRYER
coating = /datum/reagent/nutriment/coating/batter
fruit = list("onion" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/onionrings
//Meaty Recipes
//====================
/datum/recipe/cubancarp
@@ -86,6 +93,31 @@
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/friedmushroom
/datum/recipe/fishfingers
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
)
coating = /datum/reagent/nutriment/coating/batter
result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
reagent_mix = RECIPE_REAGENT_REPLACE
/datum/recipe/corn_dog
appliance = FRYER
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sausage
)
fruit = list("corn" = 1)
coating = /datum/reagent/nutriment/coating/batter
result = /obj/item/weapon/reagent_containers/food/snacks/corn_dog
/datum/recipe/sweet_and_sour
appliance = FRYER
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon,
/obj/item/weapon/reagent_containers/food/snacks/cutlet
)
reagents = list("soysauce" = 5, "batter" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour
//Sweet Recipes.
//==================
@@ -145,24 +177,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/pisanggoreng
coating = /datum/reagent/nutriment/coating/batter
/datum/recipe/corn_dog
appliance = FRYER
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sausage
)
fruit = list("corn" = 1)
coating = /datum/reagent/nutriment/coating/batter
result = /obj/item/weapon/reagent_containers/food/snacks/corn_dog
/datum/recipe/sweet_and_sour
appliance = FRYER
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon,
/obj/item/weapon/reagent_containers/food/snacks/cutlet
)
reagents = list("soysauce" = 5, "batter" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour
//VOREStation Add Start
/datum/recipe/generalschicken
appliance = FRYER
reagents = list("capsaicin" = 2, "sugar" = 2, "batter" = 10)
@@ -182,3 +197,4 @@
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box.
//VOREStation Add End
+19
View File
@@ -0,0 +1,19 @@
/datum/recipe/generalschicken
appliance = FRYER
reagents = list("capsaicin" = 2, "sugar" = 2, "batter" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken
/datum/recipe/chickenwings
appliance = FRYER
reagents = list("capsaicin" = 5, "batter" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box.
+92 -10
View File
@@ -13,7 +13,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/humanburger
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
/datum/recipe/syntiburger
appliance = GRILL
items = list(
@@ -85,7 +85,7 @@
/obj/item/clothing/head/beret
)
result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger
/datum/recipe/mouseburger
appliance = GRILL
items = list(
@@ -93,7 +93,7 @@
/obj/item/weapon/holder/mouse
)
result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger
/datum/recipe/bunbun
appliance = GRILL
items = list(
@@ -109,7 +109,7 @@
/obj/item/weapon/reagent_containers/food/snacks/sausage
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotdog
/datum/recipe/humankabob
appliance = GRILL
items = list(
@@ -127,7 +127,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat,
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
/datum/recipe/monkeykabob
appliance = GRILL
items = list(
@@ -154,7 +154,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tofu,
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob
/datum/recipe/fakespellburger
appliance = GRILL
items = list(
@@ -182,7 +182,7 @@
reagents = list("egg" = 3)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
/datum/recipe/superbiteburger
appliance = GRILL
fruit = list("tomato" = 1)
@@ -195,7 +195,7 @@
/obj/item/weapon/reagent_containers/food/snacks/boiledegg,
)
result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger
/datum/recipe/slimeburger
appliance = GRILL
reagents = list("slimejelly" = 5)
@@ -211,7 +211,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry
/datum/recipe/bearburger
appliance = GRILL
items = list(
@@ -229,7 +229,17 @@
/obj/item/weapon/reagent_containers/food/snacks/bacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon
/datum/recipe/omelette
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
reagents = list("egg" = 6)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/omelette
/datum/recipe/omurice
appliance = GRILL
reagents = list("rice" = 5, "ketchup" = 5, "egg" = 3)
@@ -244,3 +254,75 @@
appliance = GRILL
reagents = list("rice" = 5, "ketchup" = 5, "sodiumchloride" = 5, "egg" = 3)
result = /obj/item/weapon/reagent_containers/food/snacks/omurice/face
/datum/recipe/meatsteak
appliance = GRILL
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat)
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
/datum/recipe/honeytoast
appliance = GRILL
reagents = list("honey" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread
)
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/honeytoast
/datum/recipe/grilled_carp
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
reagents = list("spacespice" = 1)
fruit = list("cabbage" = 1, "lime" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp
/datum/recipe/grilledcheese
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese
/datum/recipe/toastedsandwich
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sandwich
)
result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
/datum/recipe/cheese_cracker
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spreads/butter,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
reagents = list("spacespice" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/cheese_cracker
result_quantity = 4
/datum/recipe/bacongrill
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spreads,
/obj/item/weapon/reagent_containers/food/snacks/rawbacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/bacon
/datum/recipe/chickenfillet //Also just combinable, like burgers and hot dogs.
appliance = GRILL
items = list(
/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu,
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet
+55 -423
View File
@@ -43,14 +43,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/devilledegg
/datum/recipe/waffles
reagents = list("sugar" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/waffles
/datum/recipe/donkpocket
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
@@ -72,15 +64,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL
/datum/recipe/omelette
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
reagents = list("egg" = 6)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/omelette
/datum/recipe/muffin
reagents = list("milk" = 5, "sugar" = 5)
reagent_mix = RECIPE_REAGENT_REPLACE
@@ -145,10 +128,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/microchips
/datum/recipe/mashedpotato
fruit = list("potato" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/mashedpotato
/datum/recipe/bangersandmash
items = list(
/obj/item/weapon/reagent_containers/food/snacks/mashedpotato,
@@ -182,25 +161,11 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie
/datum/recipe/meatsteak
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat)
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
/datum/recipe/syntisteak
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh)
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
/datum/recipe/pizzahawaiian
fruit = list("tomato" = 1, "pineapple" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple
/datum/recipe/spacylibertyduff
reagents = list("water" = 5, "vodka" = 5, "psilocybin" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
@@ -260,12 +225,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/sandwich
/datum/recipe/toastedsandwich
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sandwich
)
result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
/datum/recipe/peanutbutterjellysandwich
reagents = list("cherryjelly" = 5, "peanutbutter" = 5)
items = list(
@@ -274,13 +233,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/peanutbutter
/datum/recipe/grilledcheese
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese
/datum/recipe/tomatosoup
fruit = list("tomato" = 2)
@@ -379,11 +331,6 @@ I said no!
reagents = list("water" = 5, "sugar" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple
/datum/recipe/applepie
fruit = list("apple" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/applepie
/datum/recipe/twobread
reagents = list("wine" = 5)
items = list(
@@ -439,30 +386,6 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/sausage
result_quantity = 2
/datum/recipe/fishfingers
reagents = list("flour" = 10, "egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
)
result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
reagent_mix = RECIPE_REAGENT_REPLACE
/datum/recipe/zestfish
fruit = list("lemon" = 1)
reagents = list("sodiumchloride" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/zestfish
/datum/recipe/limezestfish
fruit = list("lime" = 1)
reagents = list("sodiumchloride" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/zestfish
/datum/recipe/kudzudonburi
fruit = list("kudzu" = 1)
reagents = list("rice" = 10)
@@ -494,11 +417,7 @@ I said no!
/datum/recipe/chawanmushi
fruit = list("mushroom" = 1)
reagents = list("water" = 5, "soysauce" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/egg,
/obj/item/weapon/reagent_containers/food/snacks/egg
)
reagents = list("water" = 5, "soysauce" = 5, "egg" = 6)
result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
/datum/recipe/beetsoup
@@ -545,17 +464,9 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/stuffing
/datum/recipe/tofurkey
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/stuffing,
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey
/datum/recipe/mashedpotato
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spreads/butter // to prevent conflicts with yellow curry
/obj/item/weapon/reagent_containers/food/snacks/spreads
)
fruit = list("potato" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/mashedpotato
@@ -574,27 +485,11 @@ I said no!
)
result = /obj/item/weapon/ruinedvirusdish
/datum/recipe/onionrings
fruit = list("onion" = 1)
reagents = list("flour" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/onionrings
/datum/recipe/onionsoup
fruit = list("onion" = 1)
reagents = list("water" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/onionsoup
//////////////////////////////////////////
// bs12 food port stuff
//////////////////////////////////////////
/datum/recipe/taco
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/taco
result = /obj/item/weapon/reagent_containers/food/snacks/soup/onion
/datum/recipe/microwavebun
items = list(
@@ -643,18 +538,6 @@ I said no!
reagents = list("sugar" = 5, "frostoil" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/mint
////////////////////////
// TGstation food ports
////////////////////////
/datum/recipe/meatbun
fruit = list("cabbage" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
/datum/recipe/sashimi
reagents = list("soysauce" = 5)
items = list(
@@ -739,53 +622,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/porkbowl
/datum/recipe/microwavetortilla
reagents = list("flour" = 5, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/tortilla
/datum/recipe/meatburrito
fruit = list("soybeans" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/cutlet
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatburrito
/datum/recipe/cheeseburrito
fruit = list("soybeans" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito
/datum/recipe/fuegoburrito
fruit = list("soybeans" = 1, "chili" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla
)
result = /obj/item/weapon/reagent_containers/food/snacks/fuegoburrito
/datum/recipe/nachos
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla
)
result = /obj/item/weapon/reagent_containers/food/snacks/nachos
/datum/recipe/cheesenachos
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheesenachos
/datum/recipe/cubannachos
fruit = list("chili" = 1)
reagents = list("ketchup" = 5)
@@ -861,15 +697,10 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/bageltwo
/////////////////////////////////////////////////////////////
//Synnono Meme Foods
//
//Most recipes replace reagents with RECIPE_REAGENT_REPLACE
//to simplify the end product and balance the amount of reagents
//Recipes that use RECIPE_REAGENT_REPLACE will
//simplify the end product and balance the amount of reagents
//in some foods. Many require the space spice reagent/condiment
//to reduce the risk of future recipe conflicts.
/////////////////////////////////////////////////////////////
/datum/recipe/redcurry
reagents = list("cream" = 5, "spacespice" = 2, "rice" = 5)
@@ -934,13 +765,6 @@ I said no!
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/lomein
/datum/recipe/chickenfillet //Also just combinable, like burgers and hot dogs.
items = list(
/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu,
/obj/item/weapon/reagent_containers/food/snacks/bun
)
result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet
/datum/recipe/chickennoodlesoup
fruit = list("carrot" = 1)
reagents = list("water" = 10)
@@ -964,45 +788,6 @@ I said no!
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries
/datum/recipe/meatbun
reagents = list("spacespice" = 1, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
)
reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
/datum/recipe/custardbun
reagents = list("spacespice" = 1, "water" = 5, "egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
reagent_mix = RECIPE_REAGENT_REPLACE //Water, egg used up in cooking
result = /obj/item/weapon/reagent_containers/food/snacks/custardbun
/datum/recipe/chickenmomo
reagents = list("spacespice" = 2, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/meat/chicken
)
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/chickenmomo
/datum/recipe/veggiemomo
reagents = list("spacespice" = 2, "water" = 5)
fruit = list("carrot" = 1, "cabbage" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here
result = /obj/item/weapon/reagent_containers/food/snacks/veggiemomo
/datum/recipe/risotto
reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1)
fruit = list("mushroom" = 1)
@@ -1017,32 +802,6 @@ I said no!
reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here
result = /obj/item/weapon/reagent_containers/food/snacks/poachedegg
/datum/recipe/honeytoast
reagents = list("honey" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread
)
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/honeytoast
/datum/recipe/donerkebab
fruit = list("tomato" = 1, "cabbage" = 1)
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab
/datum/recipe/sashimi
reagents = list("soysauce" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
/datum/recipe/nugget
reagents = list("flour" = 5)
items = list(
@@ -1052,12 +811,15 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/nugget
// Chip update
/datum/recipe/tortila
reagents = list("flour" = 5,"water" = 5)
/datum/recipe/microwavetortilla
reagents = list("flour" = 5, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/tortilla
reagent_mix = RECIPE_REAGENT_REPLACE //no gross flour or water
/datum/recipe/taconew
/datum/recipe/taco
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
@@ -1119,36 +881,61 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_vegan
/datum/recipe/burrito_spicy
fruit = list("chili" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/burrito
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_spicy
/datum/recipe/burrito_cheese
items = list(
/obj/item/weapon/reagent_containers/food/snacks/burrito,
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_cheese
/datum/recipe/burrito_cheese_spicy
fruit = list("chili" = 2)
fruit = list("chili" = 2, "soybeans" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/burrito,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy
/datum/recipe/burrito_hell
fruit = list("chili" = 10)
fruit = list("soybeans" = 1, "chili" = 10)
reagents = list("spacespice" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/meatball
)
result
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_hell
reagent_mix = RECIPE_REAGENT_REPLACE //Already hot sauce
/datum/recipe/meatburrito
fruit = list("soybeans" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/cutlet
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatburrito
/datum/recipe/cheeseburrito
fruit = list("soybeans" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito
/datum/recipe/fuegoburrito
fruit = list("soybeans" = 1, "chili" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tortilla
)
result = /obj/item/weapon/reagent_containers/food/snacks/fuegoburrito
/datum/recipe/breakfast_wrap
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon,
@@ -1160,18 +947,16 @@ I said no!
/datum/recipe/burrito_mystery
items = list(
/obj/item/weapon/reagent_containers/food/snacks/burrito,
/obj/item/weapon/reagent_containers/food/snacks/tortilla,
/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito_mystery
//Ligger food, and also bacon.
/datum/recipe/bacon
/datum/recipe/baconmicrowave
items = list(
/obj/item/weapon/reagent_containers/food/snacks/rawbacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/bacon
result = /obj/item/weapon/reagent_containers/food/snacks/bacon/microwave
/datum/recipe/chilied_eggs
items = list(
@@ -1212,9 +997,9 @@ I said no!
/datum/recipe/father_breakfast
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sausage,
/obj/item/weapon/reagent_containers/food/snacks/omelette,
/obj/item/weapon/reagent_containers/food/snacks/meatsteak
)
reagents = list("egg" = 6)
result = /obj/item/weapon/reagent_containers/food/snacks/father_breakfast
/datum/recipe/stuffed_meatball
@@ -1229,24 +1014,11 @@ I said no!
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/omelette
/obj/item/weapon/reagent_containers/food/snacks/meatball
)
reagents = list("egg" = 6)
result = /obj/item/weapon/reagent_containers/food/snacks/egg_pancake
/datum/recipe/grilled_carp
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
reagents = list("spacespice" = 1)
fruit = list("cabbage" = 1, "lime" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp
/datum/recipe/bacon_stick
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon,
@@ -1254,16 +1026,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/bacon_stick
/datum/recipe/cheese_cracker
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spreads/butter,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
reagents = list("spacespice" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/cheese_cracker
result_quantity = 4
/datum/recipe/bacon_and_eggs
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon,
@@ -1298,114 +1060,6 @@ I said no!
)
result = /obj/item/weapon/reagent_containers/food/snacks/blt
/datum/recipe/onionrings
fruit = list("onion" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
result = /obj/item/weapon/reagent_containers/food/snacks/onionrings
/datum/recipe/berrymuffin
reagents = list("milk" = 5, "sugar" = 5)
reagent_mix = RECIPE_REAGENT_REPLACE
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
fruit = list("berries" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/muffin
/datum/recipe/onionsoup
fruit = list("onion" = 1)
reagents = list("water" = 10)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/onion
/datum/recipe/porkbowl
reagents = list("water" = 5, "rice" = 10)
reagent_mix = RECIPE_REAGENT_REPLACE
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bacon
)
result = /obj/item/weapon/reagent_containers/food/snacks/porkbowl
/datum/recipe/sushi
fruit = list("cabbage" = 1)
reagents = list("rice" = 20)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi
/datum/recipe/goulash
fruit = list("tomato" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/spagetti
)
result = /obj/item/weapon/reagent_containers/food/snacks/goulash
/datum/recipe/donerkebab
fruit = list("tomato" = 1, "cabbage" = 1)
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab
/datum/recipe/roastbeef
fruit = list("carrot" = 2, "potato" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/roastbeef
/datum/recipe/reishicup
reagents = list("psilocybin" = 3, "sugar" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/weapon/reagent_containers/food/snacks/reishicup
/datum/recipe/hotandsoursoup
fruit = list("cabbage" = 1, "mushroom" = 1)
reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "water" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup
/datum/recipe/kitsuneudon
reagents = list("egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spagetti,
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon
/datum/recipe/pillbugball
reagents = list("carbon" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/bugball
/datum/recipe/mammi
fruit = list("orange" = 1)
reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/mammi
/datum/recipe/makaroni
reagents = list("flour" = 15, "milk" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat,
/obj/item/weapon/reagent_containers/food/snacks/egg,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/makaroni
/datum/recipe/gigapuddi
reagents = list("milk" = 15)
items = list(
@@ -1429,25 +1083,3 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/egg
)
result = /obj/item/weapon/reagent_containers/food/snacks/gigapuddi/anger
/datum/recipe/buchedenoel
fruit = list("berries" = 2)
reagents = list("milk" = 5, "flour" = 15, "cream" = 10, "coco" = 5, "egg" = 6)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel
/datum/recipe/turkey
fruit = list("carrot" = 2)
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/chicken,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey
/datum/recipe/cinnamonbun
reagents = list("sugar" = 15, "cream" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/cinnamonbun
result_quantity = 4
+79
View File
@@ -10,6 +10,85 @@
*/
// All of this shit needs to be gone through and reorganized into different recipes per machine - Rykka 7/16/2020
/datum/recipe/sushi
fruit = list("cabbage" = 1)
reagents = list("rice" = 20)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi
/datum/recipe/goulash
fruit = list("tomato" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/spagetti
)
result = /obj/item/weapon/reagent_containers/food/snacks/goulash
/datum/recipe/donerkebab
fruit = list("tomato" = 1, "cabbage" = 1)
reagents = list("sodiumchloride" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab
/datum/recipe/roastbeef
fruit = list("carrot" = 2, "potato" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat
)
result = /obj/item/weapon/reagent_containers/food/snacks/roastbeef
/datum/recipe/reishicup
reagents = list("psilocybin" = 3, "sugar" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/weapon/reagent_containers/food/snacks/reishicup
/datum/recipe/hotandsoursoup
fruit = list("cabbage" = 1, "mushroom" = 1)
reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "water" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup
/datum/recipe/kitsuneudon
reagents = list("egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/spagetti,
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon
/datum/recipe/pillbugball
reagents = list("carbon" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/bugball
/datum/recipe/mammi
fruit = list("orange" = 1)
reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/mammi
/datum/recipe/makaroni
reagents = list("flour" = 15, "milk" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat,
/obj/item/weapon/reagent_containers/food/snacks/egg,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/makaroni
/datum/recipe/carpsushi
fruit = list("cabbage" = 1)
reagents = list("rice" = 20)
+144 -30
View File
@@ -5,7 +5,8 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/ovenchips
//Roasts
//---------------
/datum/recipe/dionaroast
appliance = OVEN
@@ -15,15 +16,59 @@
result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast
reagent_mix = RECIPE_REAGENT_REPLACE //No eating polyacid
/datum/recipe/monkeysdelight
appliance = OVEN
fruit = list("banana" = 1)
reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
reagent_mix = RECIPE_REAGENT_REPLACE
/datum/recipe/ribplate //Putting this here for not seeing a roast section.
/datum/recipe/ribplate
appliance = OVEN
reagents = list("honey" = 5, "spacespice" = 2, "blackpepper" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/ribplate
/datum/recipe/turkey
appliance = OVEN
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/chicken,
/obj/item/weapon/reagent_containers/food/snacks/stuffing
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey
/datum/recipe/tofurkey
appliance = OVEN
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/stuffing
)
result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey
/datum/recipe/zestfish
appliance = OVEN
fruit = list("lemon" = 1)
reagents = list("sodiumchloride" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/zestfish
/datum/recipe/limezestfish
appliance = OVEN
fruit = list("lime" = 1)
reagents = list("sodiumchloride" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/zestfish
//Predesigned breads
@@ -197,7 +242,6 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie
/datum/recipe/amanita_pie
appliance = OVEN
reagents = list("amatoxin" = 5)
@@ -210,18 +254,24 @@
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie
/datum/recipe/applepie
appliance = OVEN
fruit = list("apple" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/applepie
/datum/recipe/pumpkinpie
appliance = OVEN
fruit = list("pumpkin" = 1)
reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10)
reagents = list("sugar" = 5)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
reagent_mix = RECIPE_REAGENT_REPLACE //We dont want raw egg in the result
/datum/recipe/appletart
appliance = OVEN
fruit = list("goldapple" = 1)
reagents = list("sugar" = 5, "milk" = 5, "flour" = 10, "egg" = 3)
reagents = list("sugar" = 10)
items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough)
result = /obj/item/weapon/reagent_containers/food/snacks/appletart
reagent_mix = RECIPE_REAGENT_REPLACE
@@ -292,7 +342,20 @@
reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies
/datum/recipe/buchedenoel
appliance = OVEN
fruit = list("berries" = 2)
reagents = list("milk" = 5, "flour" = 15, "cream" = 10, "coco" = 5, "egg" = 6)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/buchedenoel
/datum/recipe/cinnamonbun
appliance = OVEN
reagents = list("sugar" = 15, "cream" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/cinnamonbun
result_quantity = 4
//Pizzas
@@ -366,24 +429,15 @@
//Spicy
//================
/datum/recipe/enchiladas
appliance = OVEN
fruit = list("chili" = 2, "corn" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet)
result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
/datum/recipe/monkeysdelight
appliance = OVEN
fruit = list("banana" = 1)
reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10)
fruit = list("chili" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/tortilla
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
// Cakes.
@@ -485,15 +539,6 @@
reagents = list("milk" = 5, "egg" = 3,"honey" = 5)
result = /obj/item/weapon/reagent_containers/food/snacks/honeybun
/datum/recipe/enchiladas_new
appliance = OVEN
fruit = list("chili" = 2)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
/obj/item/weapon/reagent_containers/food/snacks/tortilla
)
result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
//Bacon
/datum/recipe/bacon_oven
appliance = OVEN
@@ -558,7 +603,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/weapon/reagent_containers/food/snacks/macncheese
/datum/recipe/suppermatter
appliance = OVEN
reagents = list("radium" = 5, "milk" = 5)
@@ -576,3 +621,72 @@
)
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/excitingsuppermatter
/datum/recipe/waffles
appliance = OVEN
reagents = list("sugar" = 10)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough
)
result = /obj/item/weapon/reagent_containers/food/snacks/waffles
/datum/recipe/loadedbakedpotatooven
appliance = OVEN
fruit = list("potato" = 1)
items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge)
result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
/datum/recipe/meatbun
appliance = OVEN
fruit = list("cabbage" = 1)
reagents = list("water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meatball,
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
)
reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
/datum/recipe/spicedmeatbun
appliance = OVEN
reagents = list("spacespice" = 2, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
)
reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking
result = /obj/item/weapon/reagent_containers/food/snacks/spicedmeatbun
/datum/recipe/custardbun
appliance = OVEN
reagents = list("spacespice" = 1, "water" = 5, "egg" = 3)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
reagent_mix = RECIPE_REAGENT_REPLACE //Water, egg used up in cooking
result = /obj/item/weapon/reagent_containers/food/snacks/custardbun
/datum/recipe/chickenmomo
appliance = OVEN
reagents = list("spacespice" = 2, "water" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/meat/chicken
)
reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product
result = /obj/item/weapon/reagent_containers/food/snacks/chickenmomo
/datum/recipe/veggiemomo
appliance = OVEN
reagents = list("spacespice" = 2, "water" = 5)
fruit = list("carrot" = 1, "cabbage" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice,
/obj/item/weapon/reagent_containers/food/snacks/doughslice
)
reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here
result = /obj/item/weapon/reagent_containers/food/snacks/veggiemomo
+5
View File
@@ -219,6 +219,11 @@
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
qdel(src)
return
else if(!isnull(seed.chems["pineapplejuice"]))
to_chat(user, "You slice \the [src] into rings.")
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
qdel(src)
return
else if(!isnull(seed.chems["soymilk"]))
to_chat(user, "You roughly chop up \the [src].")
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
+2 -2
View File
@@ -320,8 +320,8 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
/obj/item/seeds/eggyplant
seed_type = "egg-plant"
/obj/item/seeds/spineapple
seed_type = "spineapple"
/obj/item/seeds/pineapple
seed_type = "pineapple"
/obj/item/seeds/durian
seed_type = "durian"
+2 -2
View File
@@ -127,7 +127,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
@@ -185,7 +185,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
+2 -2
View File
@@ -33,7 +33,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
@@ -92,7 +92,7 @@
/obj/item/seeds/riceseed = 3,
/obj/item/seeds/rose = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/spineapple = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/shandseed = 2,
@@ -0,0 +1,49 @@
//pineapple and variants
/datum/seed/pineapple
name = "pineapple"
seed_name = "pineapple"
display_name = "pineapple"
kitchen_tag = "pineapple"
mutants = list("spineapple")
chems = list("nutriment" = list(1,5), "pineapplejuice" = list(1, 20))
/datum/seed/pineapple/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,1)
set_trait(TRAIT_POTENCY,13)
set_trait(TRAIT_PRODUCT_ICON,"pineapple")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"corn")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 4)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
//A pineapple that stings and produces enzymes.
/datum/seed/spineapple
name = "spineapple"
seed_name = "spineapple"
display_name = "spineapple"
kitchen_tag = "spineapple"
chems = list("nutriment" = list(1,5), "enzyme" = list(1,5), "pineapplejuice" = list(1, 20))
/datum/seed/spineapple/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,1)
set_trait(TRAIT_POTENCY,13)
set_trait(TRAIT_PRODUCT_ICON,"pineapple")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"corn")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 4)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_STINGS,1)
@@ -1,22 +0,0 @@
/datum/seed/spineapple
name = "spineapple"
seed_name = "spineapple"
display_name = "spineapple"
kitchen_tag = "pineapple"
chems = list("nutriment" = list(1,5), "enzyme" = list(1,5), "pineapplejuice" = list(1, 20))
/datum/seed/spineapple/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,1)
set_trait(TRAIT_POTENCY,13)
set_trait(TRAIT_PRODUCT_ICON,"pineapple")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"corn")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 4)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
set_trait(TRAIT_STINGS,1)
+14
View File
@@ -119,6 +119,20 @@
"ver", "stv", "pro", "ski"
)
/datum/language/clownish
name = LANGUAGE_CLOWNISH
desc = "A special elective language course for those studying at the Clown Planet Institute."
speech_verb = "honks"
ask_verb = "seins"
exclaim_verb = "crenks"
whisper_verb = "squeaks"
colour = "#F785F2" // Pink for the clown.
key = "<"
flags = WHITELISTED | CLOWN
syllables = list(
"honk", "knock", "salt", "slip", "lube", "banana", "flower", "pie", "did you hear", "🅱️", "haha", "bully", "going up",
)
/datum/language/drudakar
name = LANGUAGE_DRUDAKAR
desc = "The native language of the D'Rudak'Ar, a loosely tied together community of dragons and demi-dragons based in the Diul system. Features include many hard consonants and rolling 'r's."
+79
View File
@@ -465,3 +465,82 @@
clear_alert("handcuffed")
update_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
update_inv_handcuffed()
// Clears blood overlays
/mob/living/carbon/clean_blood()
. = ..()
if(src.r_hand)
src.r_hand.clean_blood()
if(src.l_hand)
src.l_hand.clean_blood()
if(src.back)
if(src.back.clean_blood())
src.update_inv_back(0)
if(ishuman(src))
var/mob/living/carbon/human/H = src
var/washgloves = 1
var/washshoes = 1
var/washmask = 1
var/washears = 1
var/washglasses = 1
if(H.wear_suit)
washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES)
washshoes = !(H.wear_suit.flags_inv & HIDESHOES)
if(H.head)
washmask = !(H.head.flags_inv & HIDEMASK)
washglasses = !(H.head.flags_inv & HIDEEYES)
washears = !(H.head.flags_inv & HIDEEARS)
if(H.wear_mask)
if (washears)
washears = !(H.wear_mask.flags_inv & HIDEEARS)
if (washglasses)
washglasses = !(H.wear_mask.flags_inv & HIDEEYES)
if(H.head)
if(H.head.clean_blood())
H.update_inv_head()
if(H.wear_suit)
if(H.wear_suit.clean_blood())
H.update_inv_wear_suit()
else if(H.w_uniform)
if(H.w_uniform.clean_blood())
H.update_inv_w_uniform()
if(H.gloves && washgloves)
if(H.gloves.clean_blood())
H.update_inv_gloves(0)
if(H.shoes && washshoes)
if(H.shoes.clean_blood())
H.update_inv_shoes(0)
if(H.wear_mask && washmask)
if(H.wear_mask.clean_blood())
H.update_inv_wear_mask(0)
if(H.glasses && washglasses)
if(H.glasses.clean_blood())
H.update_inv_glasses(0)
if(H.l_ear && washears)
if(H.l_ear.clean_blood())
H.update_inv_ears(0)
if(H.r_ear && washears)
if(H.r_ear.clean_blood())
H.update_inv_ears(0)
if(H.belt)
if(H.belt.clean_blood())
H.update_inv_belt(0)
else
if(src.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags
if(src.wear_mask.clean_blood())
src.update_inv_wear_mask(0)
@@ -2,5 +2,13 @@ GLOBAL_LIST_INIT(hair_gradients, list(
"None" = "none",
"Fade (Up)" = "fadeup",
"Fade (Down)" = "fadedown",
"Vertical Split" = "vsplit"
"Fade Low (Up)" = "fadeup_low",
"Bottom Flat" = "bottomflat",
"Fade Low (Down)" = "fadedown_low",
"Vertical Split" = "vsplit",
"Reflected" = "reflected",
"Reflected (Inverted)" = "reflected_inverse",
"Reflected High" = "reflected_high",
"Reflected High (Inverted)" = "reflected_inverse_high",
"Wavy" = "wavy"
))
@@ -1097,8 +1097,8 @@
if(species.default_language)
add_language(species.default_language)
//if(species.icon_scale_x != 1 || species.icon_scale_y != 1) //VOREStation Removal
// update_transform() //VOREStation Removal
if(species.icon_scale_x != 1 || species.icon_scale_y != 1)
update_transform()
if(example) //VOREStation Edit begin
if(!(example == src))
@@ -196,3 +196,11 @@
var/list/all_bits = internal_organs|organs
for(var/obj/item/organ/O in all_bits)
O.set_dna(dna)
/mob/living/carbon/human/proc/set_gender(var/g)
if(g != gender)
gender = g
if(dna.GetUIState(DNA_UI_GENDER) ^ gender == FEMALE) // XOR will catch both cases where they do not match
dna.SetUIState(DNA_UI_GENDER, gender == FEMALE)
sync_organ_dna(dna)
@@ -215,7 +215,6 @@ This saves us from having to call add_fingerprint() any time something is put in
if(slot_back)
src.back = W
W.equipped(src, slot)
worn_clothing += back
update_inv_back()
if(slot_wear_mask)
src.wear_mask = W
@@ -223,7 +222,6 @@ This saves us from having to call add_fingerprint() any time something is put in
update_hair() //rebuild hair
update_inv_ears()
W.equipped(src, slot)
worn_clothing += wear_mask
update_inv_wear_mask()
if(slot_handcuffed)
src.handcuffed = W
@@ -243,7 +241,6 @@ This saves us from having to call add_fingerprint() any time something is put in
if(slot_belt)
src.belt = W
W.equipped(src, slot)
worn_clothing += belt
update_inv_belt()
if(slot_wear_id)
src.wear_id = W
@@ -272,11 +269,11 @@ This saves us from having to call add_fingerprint() any time something is put in
if(slot_glasses)
src.glasses = W
W.equipped(src, slot)
worn_clothing += glasses
update_inv_glasses()
if(slot_gloves)
src.gloves = W
W.equipped(src, slot)
worn_clothing += glasses
update_inv_gloves()
if(slot_head)
src.head = W
@@ -287,22 +284,18 @@ This saves us from having to call add_fingerprint() any time something is put in
if(istype(W,/obj/item/clothing/head/kitty))
W.update_icon(src)
W.equipped(src, slot)
worn_clothing += head
update_inv_head()
if(slot_shoes)
src.shoes = W
W.equipped(src, slot)
worn_clothing += shoes
update_inv_shoes()
if(slot_wear_suit)
src.wear_suit = W
W.equipped(src, slot)
worn_clothing += wear_suit
update_inv_wear_suit()
if(slot_w_uniform)
src.w_uniform = W
W.equipped(src, slot)
worn_clothing += w_uniform
update_inv_w_uniform()
if(slot_l_store)
src.l_store = W
@@ -405,4 +398,4 @@ This saves us from having to call add_fingerprint() any time something is put in
if(l_hand)
. += l_hand
if(r_hand)
. += r_hand
. += r_hand
@@ -169,4 +169,29 @@ var/eggs = 0
layeggs--
return
*/
*/
/mob/living/proc/insect_sting()
set name = "Insect Sting"
set desc = "Sting a target and inject a small amount of toxin"
set category = "Abilities"
if(last_special > world.time)
return
var/list/victims = list()
for(var/mob/living/carbon/C in oview(1))
victims += C
var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims
if(!T)
return
if(T.isSynthetic())
to_chat(src, "<span class='notice'>We are unable to pierce the outer shell of [T].</span>")
return
to_chat(src, "<span class='notice'>You jab your stinger into [T].</span>")
to_chat(T, "<span class='danger'>You feel a stabbing pain as you are stung!</span>")
src.visible_message("<font color='red'>[src] sinks their stinger into [T]!</font>")
T.bloodstr.add_reagent("condensedcapsaicin_v",3)
last_special = world.time + 50 // Many little jabs instead of one big one
@@ -228,11 +228,11 @@
/datum/trait/agoraphobia/proc/check_mob_company(var/mob/living/carbon/human/H,var/mob/living/M,var/invis_matters = TRUE)
var/list/in_range = list()
if(!istype(M))
return in_range
var/social_check = !istype(M, /mob/living/carbon) && !istype(M, /mob/living/silicon/robot)
var/ckey_check = !M.ckey
var/overall_checks = M == H || M.stat == DEAD || social_check || ckey_check
if(!istype(M))
return in_range
if(invis_matters && M.invisibility > H.see_invisible)
return in_range
if(!overall_checks)
@@ -286,6 +286,8 @@
H.next_loneliness_time = world.time+500
/datum/trait/lonely/proc/check_mob_company(var/mob/living/carbon/human/H,var/mob/living/M)
if(!istype(M))
return 0
var/social_check = only_people && !istype(M, /mob/living/carbon) && !istype(M, /mob/living/silicon/robot)
var/self_invisible_check = M == H || M.invisibility > H.see_invisible
var/ckey_check = only_people && !M.ckey
@@ -296,3 +296,100 @@ YW change end */
var_changes = list("alcohol_mod" = 0.25) // 25% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
// Alcohol Traits End Here.
YW CHANGE STOP*/
// Body shape traits
/datum/trait/taller
name = "Tall"
desc = "Your body is taller than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_y" = 1.09)
excludes = list(/datum/trait/tall, /datum/trait/short, /datum/trait/shorter)
/datum/trait/taller/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/tall
name = "Slightly Tall"
desc = "Your body is a bit taller than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_y" = 1.05)
excludes = list(/datum/trait/taller, /datum/trait/short, /datum/trait/shorter)
/datum/trait/tall/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/short
name = "Slightly Short"
desc = "Your body is a bit shorter than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_y" = 0.95)
excludes = list(/datum/trait/taller, /datum/trait/tall, /datum/trait/shorter)
/datum/trait/short/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/shorter
name = "Short"
desc = "Your body is shorter than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_y" = 0.915)
excludes = list(/datum/trait/taller, /datum/trait/tall, /datum/trait/short)
/datum/trait/shorter/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/obese
name = "Very Bulky"
desc = "Your body is much wider than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_x" = 1.095)
excludes = list(/datum/trait/fat, /datum/trait/thin, /datum/trait/thinner)
/datum/trait/obese/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/fat
name = "Bulky"
desc = "Your body is wider than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_x" = 1.054)
excludes = list(/datum/trait/obese, /datum/trait/thin, /datum/trait/thinner)
/datum/trait/fat/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/thin
name = "Thin"
desc = "Your body is thinner than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_x" = 0.945)
excludes = list(/datum/trait/fat, /datum/trait/obese, /datum/trait/thinner)
/datum/trait/thin/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
/datum/trait/thinner
name = "Very Thin"
desc = "Your body is much thinner than average."
cost = 0
custom_only = FALSE
var_changes = list("icon_scale_x" = 0.905)
excludes = list(/datum/trait/fat, /datum/trait/obese, /datum/trait/thin)
/datum/trait/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.update_transform()
@@ -15,7 +15,7 @@
/datum/trait/succubus_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/succubus_bite
/datum/trait/nutritiongrow
name = "Growing"
desc = "After you consume enough nutrition, you start to slowly grow while metabolizing nutrition faster."
@@ -239,3 +239,13 @@
accuracy_dispersion = 25
incoming_hal_damage_percent = 1.75
incoming_oxy_damage_percent = 1.25
/datum/trait/insect_sting
name = "Insect Sting"
desc = "Allows you to sting your victim with a smalll amount of poison"
cost = 1
/datum/trait/insect_sting/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/insect_sting
@@ -123,7 +123,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
crash_with("CANARY: Old human update_icons_huds was called.")
/mob/living/carbon/human/update_transform()
/* VOREStation Edit START - TODO - Consider switching to icon_scale
/* VOREStation Edit START
// First, get the correct size.
var/desired_scale_x = icon_scale_x
var/desired_scale_y = icon_scale_y
@@ -137,8 +137,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(!isnull(M.icon_scale_y_percent))
desired_scale_y *= M.icon_scale_y_percent
*/
var/desired_scale_x = size_multiplier
var/desired_scale_y = size_multiplier
var/desired_scale_x = size_multiplier * icon_scale_x
var/desired_scale_y = size_multiplier * icon_scale_y
desired_scale_x *= species.icon_scale_x
desired_scale_y *= species.icon_scale_y
//VOREStation Edit End
// Regular stuff again.
@@ -151,14 +153,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
M.Turn(90)
M.Scale(desired_scale_x, desired_scale_y)
M.Scale(desired_scale_y, desired_scale_x)//VOREStation Edit
if(species.icon_height == 64)//VOREStation Edit
M.Translate(13,-22)
else
M.Translate(1,-6)
layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters
else
M.Scale(desired_scale_x, desired_scale_y)
M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit
M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit
layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters
@@ -234,10 +236,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
//Create a new, blank icon for our mob to use.
var/icon/stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank")
var/g = "male"
if(gender == FEMALE)
g = "female"
var/g = (gender == MALE ? "male" : "female")
var/icon_key = "[species.get_race_key(src)][g][s_tone][r_skin][g_skin][b_skin]"
if(lip_style)
icon_key += "[lip_style]"
@@ -488,7 +487,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(head_organ.transparent) //VOREStation Edit. For better slime limbs.
face_standing += rgb(,,,120)
overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER)
apply_layer(HAIR_LAYER)
+5 -5
View File
@@ -149,21 +149,21 @@ default behaviour is:
if((tmob.mob_always_swap || (tmob.a_intent == I_HELP || tmob.restrained()) && (a_intent == I_HELP || src.restrained())) && tmob.canmove && canmove && !tmob.buckled && !buckled && can_swap && can_move_mob(tmob, 1, 0)) // mutual brohugs all around!
var/turf/oldloc = loc
//VOREstation Edit - Begin
//check bumpnom chance, if it's a simplemob that's doing the bumping
var/mob/living/simple_mob/srcsimp = src
if(istype(srcsimp))
if(srcsimp.tryBumpNom(tmob))
now_pushing = 0
return
//if it's a simplemob being bumped, and the above didn't make them start getting bumpnommed, they get a chance to bumpnom
var/mob/living/simple_mob/tmobsimp = tmob
if(istype(tmobsimp))
if(tmobsimp.tryBumpNom(src))
now_pushing = 0
return
//VOREstation Edit - End
forceMove(tmob.loc)
//VOREstation Edit - Begin
@@ -1282,8 +1282,8 @@ default behaviour is:
/mob/living/update_transform()
// First, get the correct size.
var/desired_scale_x = size_multiplier //VOREStation edit
var/desired_scale_y = size_multiplier //VOREStation edit
var/desired_scale_x = size_multiplier * icon_scale_x //VOREStation edit
var/desired_scale_y = size_multiplier * icon_scale_y //VOREStation edit
// Now for the regular stuff.
var/matrix/M = matrix()
@@ -224,7 +224,8 @@
B.water = water
src.modules += B
R.icon = 'icons/mob/widerobot_vr.dmi'
R.icon = 'icons/mob/widerobot_sec_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_sec_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -334,6 +335,8 @@
R.icon = 'icons/mob/widerobot_vr.dmi'
src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test
R.icon = 'icons/mob/widerobot_med_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_med_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -469,7 +472,8 @@
G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20)
src.modules += G
R.icon = 'icons/mob/widerobot_yw.dmi' //YW edit - using yw icon files
R.icon = 'icons/mob/widerobot_jan_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_jan_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -544,7 +548,8 @@
C.synths = list(wire)
src.modules += C
R.icon = 'icons/mob/widerobot_vr.dmi'
R.icon = 'icons/mob/widerobot_sci_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_sci_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -696,6 +701,9 @@
src.modules += PS
//YW changes end, plasteel manipulator
R.icon = 'icons/mob/widerobot_vr.dmi'
R.icon = 'icons/mob/widerobot_eng_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_eng_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -771,7 +779,8 @@
src.modules += B
*/
R.icon = 'icons/mob/widerobot_vr.dmi'
R.icon = 'icons/mob/widerobot_ser_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_ser_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -823,7 +832,8 @@
B.water = water
src.modules += B
R.icon = 'icons/mob/widerobot_vr.dmi'
R.icon = 'icons/mob/widerobot_car_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_car_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
@@ -15,6 +15,7 @@
var/sitting = FALSE
var/bellyup = FALSE
does_spin = FALSE
var/wideborg_dept = 'icons/mob/widerobot_vr.dmi'
var/vr_icons = list(
"handy-hydro",
"handy-service",
@@ -145,7 +146,11 @@
return
if(wideborg == TRUE)
if(icontype== "Drake") // Why, Why can't we have normal nice things
icon = 'icons/mob/drakeborg/drakeborg_vr.dmi'
else
icon = wideborg_dept
return
if((!(original_icon == icon)) && (!(icon == 'icons/mob/robots_vr.dmi')))
original_icon = icon
if((icon_state in vr_icons) && (icon == 'icons/mob/robots.dmi'))
@@ -175,6 +175,10 @@
if(has_eye_glow)
add_eyes()
if(!IsAdvancedToolUser()) //CHOMPSTATION edit: Moved here so the verb is useable before initialising vorgans.
verbs |= /mob/living/simple_mob/proc/animal_nom
verbs |= /mob/living/proc/shred_limb
return ..()
/mob/living/simple_mob/Destroy()
@@ -54,7 +54,7 @@
/mob/living/simple_mob/Destroy()
release_vore_contents()
prey_excludes.Cut()
. = ..()
return ..()
//For all those ID-having mobs
/mob/living/simple_mob/GetIdCard()
@@ -86,6 +86,8 @@
icon_state = "[icon_rest]-[vore_fullness]"
/mob/living/simple_mob/proc/will_eat(var/mob/living/M)
M.init_vore()
init_vore()
if(client) //You do this yourself, dick!
//ai_log("vr/wont eat [M] because we're player-controlled", 3) //VORESTATION AI TEMPORARY REMOVAL
return 0
@@ -194,10 +196,6 @@
if(!vore_active || no_vore)
return
if(!IsAdvancedToolUser())
verbs |= /mob/living/simple_mob/proc/animal_nom
verbs |= /mob/living/proc/shred_limb
if(LAZYLEN(vore_organs))
return
@@ -4,7 +4,7 @@
maxHealth = 50
/mob/living/simple_mob/animal/passive/fish/koi/poisonous/Initialize()
..()
. = ..()
create_reagents(60)
reagents.add_reagent("toxin", 45)
reagents.add_reagent("impedrezene", 15)
@@ -140,7 +140,7 @@
nutriment_desc = list("sugar" = 1)
/obj/item/weapon/reagent_containers/food/snacks/snakesnack/Initialize()
..()
. = ..()
if(!snack_colour)
snack_colour = pick( list("yellow","green","pink","blue") )
icon_state = "snack_[snack_colour]"
@@ -57,7 +57,7 @@
return ..()
/mob/living/simple_mob/mechanical/mecha/Destroy()
qdel(sparks)
qdel_null(sparks)
return ..()
/mob/living/simple_mob/mechanical/mecha/death()
@@ -439,6 +439,7 @@
/mob/living/simple_mob/slime/xenobio/amber
)
/* VOREStation Edit. We've had enough server crashes.
/mob/living/simple_mob/slime/xenobio/amber/handle_special()
if(stat != DEAD)
feed_aura()
@@ -456,6 +457,7 @@
if(H.isSynthetic())
continue
H.nutrition = between(0, H.nutrition + rand(15, 25), 800)
*/
/mob/living/simple_mob/slime/xenobio/cerulean
desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none."
@@ -3,5 +3,5 @@
mob_bump_flag = SLIME
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
..()
. = ..()
Weaken(10)
@@ -1,280 +1,280 @@
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
max_nutrition = 1000
var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
var/maxHealth_adult = 200
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal,
/mob/living/simple_mob/slime/xenobio/blue,
/mob/living/simple_mob/slime/xenobio/purple
)
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
var/number = 0 // This is used to make the slime semi-unique for indentification.
var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
number = rand(1, 1000)
update_name()
. = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
if(my_predecessor)
inherit_information(my_predecessor)
/mob/living/simple_mob/slime/xenobio/Destroy()
if(victim)
stop_consumption() // Unbuckle us from our victim.
return ..()
// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
if(!predecessor)
return
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
ASSERT(istype(AI))
ASSERT(istype(previous_AI))
// Now to transfer the information.
// Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
AI.discipline = max(previous_AI.discipline - 1, 0)
AI.obedience = max(previous_AI.obedience - 1, 0)
AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
icon_rest = icon_dead
..() // This will apply the correct icon_state and do the other overlay-related things.
/mob/living/simple_mob/slime/xenobio/handle_special()
if(stat != DEAD)
handle_nutrition()
if(victim)
handle_consumption()
handle_stuttering() // ??
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
. = ..()
if(hat)
. += "It is wearing \a [hat]."
if(stat == DEAD)
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
. += "It appears to be incapacitated."
else if(harmless)
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
. += "It looks rather obedient."
else if(AI.discipline)
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
return
is_adult = TRUE
melee_damage_lower = round(melee_damage_lower * 2) // 20
melee_damage_upper = round(melee_damage_upper * 2) // 30
maxHealth = maxHealth_adult
max_nutrition = 1200
amount_grown = 0
update_icon()
update_name()
/mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return
name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
real_name = name
/mob/living/simple_mob/slime/xenobio/update_mood()
var/old_mood = mood
if(incapacitated(INCAPACITATION_DISABLED))
mood = "sad"
else if(harmless)
mood = ":33"
else if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
mood = "angry"
else if(AI.target)
mood = "mischevous"
else if(AI.discipline)
mood = "pout"
else
mood = ":3"
else
mood = ":3"
if(old_mood != mood)
update_icon()
/mob/living/simple_mob/slime/xenobio/proc/enrage()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.pacify()
faction = "neutral"
// If for whatever reason the mob AI (or player) decides to try to attack something anyways.
melee_damage_upper = 0
melee_damage_lower = 0
update_mood()
// These are verbs so that player slimes can evolve/split.
/mob/living/simple_mob/slime/xenobio/verb/evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
return
if(!is_adult)
if(amount_grown >= 10)
make_adult()
else
to_chat(src, span("warning", "I am not ready to evolve yet..."))
else
to_chat(src, span("warning", "I have already evolved..."))
/mob/living/simple_mob/slime/xenobio/verb/reproduce()
set category = "Slime"
set desc = "This will make you split into four new slimes."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
return
if(is_adult)
if(amount_grown >= 10)
// Check if there's enough 'room' to split.
var/list/nearby_things = orange(1, src)
var/free_tiles = 0
for(var/turf/T in nearby_things)
var/free = TRUE
if(T.density) // No walls.
continue
for(var/atom/movable/AM in T)
if(AM.density)
free = FALSE
break
if(free)
free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return
var/list/babies = list()
for(var/i = 1 to 4)
babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies)
new_slime.universal_speak = universal_speak
if(src.mind)
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
qdel(src)
else
to_chat(src, span("warning", "I am not ready to reproduce yet..."))
else
to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
// Used when reproducing or dying.
/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
var/t = src.type
if(desired_type)
t = desired_type
if(prob(mutation_chance / 10))
t = /mob/living/simple_mob/slime/xenobio/rainbow
else if(prob(mutation_chance) && slime_mutation.len)
t = slime_mutation[rand(1, slime_mutation.len)]
var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
// Handle 'inheriting' from parent slime.
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity
baby.faction = faction
baby.friends = friends.Copy()
step_away(baby, src)
return baby
/mob/living/simple_mob/slime/xenobio/get_description_interaction()
var/list/results = list()
if(!stat)
results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
results += ..()
return results
/mob/living/simple_mob/slime/xenobio/get_description_info()
var/list/lines = list()
var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
They can be extremely dangerous if not handled properly."
lines.Add(intro_line)
lines.Add(null) // To pad the line breaks.
var/list/rewards = list()
for(var/potential_color in slime_mutation)
var/mob/living/simple_mob/slime/S = potential_color
rewards.Add(initial(S.slime_color))
var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
lines.Add(reward_line)
lines.Add(null)
lines.Add(description_info)
return lines.Join("\n")
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
max_nutrition = 1000
var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
var/maxHealth_adult = 200
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal,
/mob/living/simple_mob/slime/xenobio/blue,
/mob/living/simple_mob/slime/xenobio/purple
)
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
var/number = 0 // This is used to make the slime semi-unique for indentification.
var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
number = rand(1, 1000)
update_name()
. = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
if(my_predecessor)
inherit_information(my_predecessor)
/mob/living/simple_mob/slime/xenobio/Destroy()
if(victim)
stop_consumption() // Unbuckle us from our victim.
return ..()
// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
if(!predecessor)
return
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
ASSERT(istype(AI))
ASSERT(istype(previous_AI))
// Now to transfer the information.
// Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
AI.discipline = max(previous_AI.discipline - 1, 0)
AI.obedience = max(previous_AI.obedience - 1, 0)
AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
icon_rest = icon_dead
..() // This will apply the correct icon_state and do the other overlay-related things.
/mob/living/simple_mob/slime/xenobio/handle_special()
if(stat != DEAD)
handle_nutrition()
if(victim)
handle_consumption()
handle_stuttering() // ??
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
. = ..()
if(hat)
. += "It is wearing \a [hat]."
if(stat == DEAD)
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
. += "It appears to be incapacitated."
else if(harmless)
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
. += "It looks rather obedient."
else if(AI.discipline)
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
return
is_adult = TRUE
melee_damage_lower = round(melee_damage_lower * 2) // 20
melee_damage_upper = round(melee_damage_upper * 2) // 30
maxHealth = maxHealth_adult
max_nutrition = 1200
amount_grown = 0
update_icon()
update_name()
/mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return
name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
real_name = name
/mob/living/simple_mob/slime/xenobio/update_mood()
var/old_mood = mood
if(incapacitated(INCAPACITATION_DISABLED))
mood = "sad"
else if(harmless)
mood = ":33"
else if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
mood = "angry"
else if(AI.target)
mood = "mischevous"
else if(AI.discipline)
mood = "pout"
else
mood = ":3"
else
mood = ":3"
if(old_mood != mood)
update_icon()
/mob/living/simple_mob/slime/xenobio/proc/enrage()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.pacify()
faction = "neutral"
// If for whatever reason the mob AI (or player) decides to try to attack something anyways.
melee_damage_upper = 0
melee_damage_lower = 0
update_mood()
// These are verbs so that player slimes can evolve/split.
/mob/living/simple_mob/slime/xenobio/verb/evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
return
if(!is_adult)
if(amount_grown >= 10)
make_adult()
else
to_chat(src, span("warning", "I am not ready to evolve yet..."))
else
to_chat(src, span("warning", "I have already evolved..."))
/mob/living/simple_mob/slime/xenobio/verb/reproduce()
set category = "Slime"
set desc = "This will make you split into four new slimes."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
return
if(is_adult)
if(amount_grown >= 10)
// Check if there's enough 'room' to split.
var/list/nearby_things = orange(1, src)
var/free_tiles = 0
for(var/turf/T in nearby_things)
var/free = TRUE
if(T.density) // No walls.
continue
for(var/atom/movable/AM in T)
if(AM.density || istype(AM, /mob/living/simple_mob/slime))
free = FALSE
break
if(free)
free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return
var/list/babies = list()
for(var/i = 1 to 4)
babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies)
new_slime.universal_speak = universal_speak
if(src.mind)
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
qdel(src)
else
to_chat(src, span("warning", "I am not ready to reproduce yet..."))
else
to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
// Used when reproducing or dying.
/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
var/t = src.type
if(desired_type)
t = desired_type
if(prob(mutation_chance / 10))
t = /mob/living/simple_mob/slime/xenobio/rainbow
else if(prob(mutation_chance) && slime_mutation.len)
t = slime_mutation[rand(1, slime_mutation.len)]
var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
// Handle 'inheriting' from parent slime.
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity
baby.faction = faction
baby.friends = friends.Copy()
step_away(baby, src)
return baby
/mob/living/simple_mob/slime/xenobio/get_description_interaction()
var/list/results = list()
if(!stat)
results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
results += ..()
return results
/mob/living/simple_mob/slime/xenobio/get_description_info()
var/list/lines = list()
var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
They can be extremely dangerous if not handled properly."
lines.Add(intro_line)
lines.Add(null) // To pad the line breaks.
var/list/rewards = list()
for(var/potential_color in slime_mutation)
var/mob/living/simple_mob/slime/S = potential_color
rewards.Add(initial(S.slime_color))
var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
lines.Add(reward_line)
lines.Add(null)
lines.Add(description_info)
return lines.Join("\n")
@@ -0,0 +1,94 @@
/mob/living/simple_mob/animal/passive/honkpet
name = "Hinkle"
desc = "The Silence into Laughter program mass produces these excessively hardy animals for each member to raise and take care of. They often switch personalities when smacked."
tt_desc = "Coulrian Honkus"
icon = 'icons/mob/animal_vr.dmi'
icon_state = "c_pet"
icon_living = "c_pet"
icon_dead = "c_pet_dead"
maxHealth = 1500
health = 1500
minbodytemp = 175 // Same as Sif mobs.
response_help = "pokes"
response_disarm = "subverts"
response_harm = "smacks"
harm_intent_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = list("honked")
armor = list(
"melee" = 80,
"bullet" = 20,
"laser" = 0,
"energy" = 0,
"bomb" = 0,
"bio" = 0,
"rad" = 0
)
armor_soak = list(
"melee" = 80,
"bullet" = 20,
"laser" = 0,
"energy" = 0,
"bomb" = 0,
"bio" = 0,
"rad" = 0
)
has_langs = list("Coulrian")
/mob/living/simple_mob/animal/passive/honkpet/attack_hand(mob/living/user as mob)
if(user.a_intent == I_DISARM)
return icon_state = pick("c_pet", "m_pet")
.=..()
/mob/living/simple_mob/animal/passive/mimepet
name = "Dave"
desc = "That's Dave."
tt_desc = "Polypodavesilencia"
icon = 'icons/mob/animal_vr.dmi'
icon_state = "dave1"
icon_living = "dave1"
icon_dead = "dave_dead"
movement_cooldown = 300
maxHealth = 1500
health = 1500
minbodytemp = 175 // Same as Sif mobs.
response_help = "pokes"
response_disarm = "shuffles"
response_harm = "smacks"
harm_intent_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = list("...")
armor = list(
"melee" = 80,
"bullet" = 20,
"laser" = 0,
"energy" = 0,
"bomb" = 0,
"bio" = 0,
"rad" = 0
)
armor_soak = list(
"melee" = 80,
"bullet" = 20,
"laser" = 0,
"energy" = 0,
"bomb" = 0,
"bio" = 0,
"rad" = 0
)
/mob/living/simple_mob/animal/passive/mimepet/attack_hand(mob/living/user as mob)
if(user.a_intent == I_DISARM)
icon_state = pick("dave1", "dave2", "dave3", "dave5" , "dave6" , "dave7" , "dave8" , "dave9" , "dave10")
.=..()

Some files were not shown because too many files have changed in this diff Show More