mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into nitrile
Conflicts: code/game/objects/structures/crates_lockers/closets/secure/medical.dm code/modules/clothing/gloves/boxing.dm code/modules/clothing/gloves/miscellaneous.dm
This commit is contained in:
@@ -4,13 +4,35 @@
|
||||
|
||||
#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
|
||||
|
||||
/proc/see_own_notes()
|
||||
if(!config.see_own_notes)
|
||||
return
|
||||
var/ckey = usr.client.ckey
|
||||
if(!ckey)
|
||||
usr << "<span class='warning'>Error: No ckey found.</span>"
|
||||
return
|
||||
var/savefile/notesfile = new(NOTESFILE)
|
||||
if(!notesfile)
|
||||
usr << "<span class='warning'>Error: Cannot access [NOTESFILE]</span>"
|
||||
return
|
||||
notesfile.cd = "/[ckey]"
|
||||
var/dat = "<b>Notes for [ckey]:</b><br>"
|
||||
while(!notesfile.eof)
|
||||
var/note
|
||||
notesfile >> note
|
||||
dat += note
|
||||
var/datum/browser/popup = new(usr, "player_notes", "Player Notes", 700, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
|
||||
datum/admins/proc/notes_show(var/ckey)
|
||||
usr << browse("<head><title>Player Notes</title></head><body>[notes_gethtml(ckey)]</body>","window=player_notes;size=700x400")
|
||||
|
||||
|
||||
datum/admins/proc/notes_gethtml(var/ckey)
|
||||
var/savefile/notesfile = new(NOTESFILE)
|
||||
if(!notesfile) return "<font color='red'>Error: Cannot access [NOTESFILE]</font>"
|
||||
if(!notesfile) return "<span class='warning'>Error: Cannot access [NOTESFILE]</span>"
|
||||
if(ckey)
|
||||
. = "<b>Notes for <a href='?_src_=holder;notes=show'>[ckey]</a>:</b> <a href='?_src_=holder;notes=add;ckey=[ckey]'>\[+\]</a><br>"
|
||||
notesfile.cd = "/[ckey]"
|
||||
|
||||
@@ -705,7 +705,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if ("laser tag red")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/red(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/redtag(M), slot_wear_suit)
|
||||
@@ -716,7 +716,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if ("laser tag blue")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/blue(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/blue(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/bluetag(M), slot_wear_suit)
|
||||
@@ -743,7 +743,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if("tunnel clown")//Tunnel clowns rule!
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
|
||||
@@ -764,7 +764,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if("masked killer")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
@@ -785,7 +785,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
M.equip_to_slot_or_del(U, slot_w_uniform)
|
||||
U.attachTie(new /obj/item/clothing/tie/waistcoat(M))
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
|
||||
@@ -821,7 +821,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if("centcom official")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
|
||||
@@ -951,7 +951,7 @@ var/global/list/g_fancy_list_of_types = null
|
||||
if("mobster")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/tommygun(M), slot_r_hand)
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpsegloves = /obj/item/clothing/gloves/yellow
|
||||
corpsegloves = /obj/item/clothing/gloves/color/yellow
|
||||
corpsehelmet = /obj/item/clothing/head/hardhat
|
||||
corpseid = 1
|
||||
corpseidjob = "Station Engineer"
|
||||
|
||||
@@ -133,6 +133,7 @@ var/next_external_rsc = 0
|
||||
if((global.comms_key == "default_pwd" || length(global.comms_key) <= 6) && global.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms.
|
||||
src << "<span class='danger'>The server's API key is either too short or is the default value! Consider changing it immediately!</span>"
|
||||
|
||||
add_verbs_from_config()
|
||||
set_client_age_from_db()
|
||||
|
||||
if (!ticker || ticker.current_state == GAME_STATE_PREGAME)
|
||||
@@ -218,6 +219,10 @@ var/next_external_rsc = 0
|
||||
var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');")
|
||||
query_accesslog.Execute()
|
||||
|
||||
/client/proc/add_verbs_from_config()
|
||||
if(config.see_own_notes)
|
||||
verbs += /client/proc/self_notes
|
||||
|
||||
|
||||
#undef TOPIC_SPAM_DELAY
|
||||
#undef UPLOAD_LIMIT
|
||||
@@ -306,4 +311,4 @@ var/next_external_rsc = 0
|
||||
'icons/stamp_icons/large_stamp-cap.png',
|
||||
'icons/stamp_icons/large_stamp-qm.png',
|
||||
'icons/stamp_icons/large_stamp-law.png'
|
||||
)
|
||||
)
|
||||
|
||||
@@ -37,6 +37,7 @@ datum/preferences
|
||||
var/ooccolor = "#002eb8"
|
||||
var/be_special = 0 //Special role selection
|
||||
var/UI_style = "Midnight"
|
||||
var/custom_pointer = 0
|
||||
var/toggles = TOGGLES_DEFAULT
|
||||
var/ghost_form = "ghost"
|
||||
|
||||
@@ -218,6 +219,7 @@ datum/preferences
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>General Settings</h2>"
|
||||
dat += "<b>UI Style:</b> <a href='?_src_=prefs;preference=ui'>[UI_style]</a><br>"
|
||||
dat += "<b>Use Custom Pointers:</b> <a href='?_src_=prefs;preference=pointer'>[custom_pointer ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Play admin midis:</b> <a href='?_src_=prefs;preference=hear_midis'>[(toggles & SOUND_MIDI) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Play lobby music:</b> <a href='?_src_=prefs;preference=lobby_music'>[(toggles & SOUND_LOBBY) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</a><br>"
|
||||
@@ -739,6 +741,9 @@ datum/preferences
|
||||
else
|
||||
UI_style = "Midnight"
|
||||
|
||||
if("pointer")
|
||||
custom_pointer = !custom_pointer
|
||||
|
||||
if("be_special")
|
||||
var/num = text2num(href_list["num"])
|
||||
be_special ^= (1<<num)
|
||||
|
||||
@@ -97,6 +97,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["ooccolor"] >> ooccolor
|
||||
S["lastchangelog"] >> lastchangelog
|
||||
S["UI_style"] >> UI_style
|
||||
S["custom_pointer"] >> custom_pointer
|
||||
S["be_special"] >> be_special
|
||||
S["default_slot"] >> default_slot
|
||||
S["toggles"] >> toggles
|
||||
@@ -110,6 +111,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor)))
|
||||
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
|
||||
UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro"), initial(UI_style))
|
||||
custom_pointer = sanitize_integer(custom_pointer, 0, 65535, initial(custom_pointer))
|
||||
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
|
||||
default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot))
|
||||
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
|
||||
@@ -129,6 +131,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["ooccolor"] << ooccolor
|
||||
S["lastchangelog"] << lastchangelog
|
||||
S["UI_style"] << UI_style
|
||||
S["custom_pointer"] << custom_pointer
|
||||
S["be_special"] << be_special
|
||||
S["default_slot"] << default_slot
|
||||
S["toggles"] << toggles
|
||||
|
||||
@@ -17,13 +17,3 @@
|
||||
/obj/item/clothing/gloves/boxing/yellow
|
||||
icon_state = "boxingyellow"
|
||||
item_state = "boxingyellow"
|
||||
|
||||
/obj/item/clothing/gloves/white
|
||||
name = "white gloves"
|
||||
desc = "These look pretty fancy."
|
||||
icon_state = "white"
|
||||
item_state = "wgloves"
|
||||
item_color="mime"
|
||||
|
||||
redcoat
|
||||
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/clothing/gloves/yellow
|
||||
/obj/item/clothing/gloves/color/yellow
|
||||
desc = "These gloves will protect the wearer from electric shock."
|
||||
name = "insulated gloves"
|
||||
icon_state = "yellow"
|
||||
@@ -7,118 +7,160 @@
|
||||
permeability_coefficient = 0.05
|
||||
item_color="yellow"
|
||||
|
||||
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
|
||||
/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
|
||||
desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly."
|
||||
name = "budget insulated gloves"
|
||||
icon_state = "yellow"
|
||||
item_state = "ygloves"
|
||||
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
item_color="yellow"
|
||||
|
||||
New()
|
||||
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
|
||||
/obj/item/clothing/gloves/color/fyellow/New()
|
||||
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
|
||||
|
||||
/obj/item/clothing/gloves/black
|
||||
/obj/item/clothing/gloves/color/black
|
||||
desc = "These gloves are fire-resistant."
|
||||
name = "black gloves"
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
item_color="brown"
|
||||
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
|
||||
|
||||
hos
|
||||
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
|
||||
/obj/item/clothing/gloves/color/black/hos
|
||||
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
|
||||
|
||||
ce
|
||||
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
|
||||
/obj/item/clothing/gloves/color/black/ce
|
||||
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/black/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
user << "<span class='notice'>You snip the fingertips off of [src].</span>"
|
||||
playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1)
|
||||
var/obj/item/clothing/gloves/fingerless/fingerless_gloves = new /obj/item/clothing/gloves/fingerless(user.loc)
|
||||
fingerless_gloves.icon_state = icon_state
|
||||
qdel(src)
|
||||
if(icon_state == initial(icon_state)) //only if not dyed
|
||||
user << "<span class='notice'>You snip the fingertips off of [src].</span>"
|
||||
playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1)
|
||||
new /obj/item/clothing/gloves/fingerless(user.loc)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/gloves/orange
|
||||
/obj/item/clothing/gloves/color/orange
|
||||
name = "orange gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "orange"
|
||||
item_state = "orangegloves"
|
||||
item_color="orange"
|
||||
|
||||
/obj/item/clothing/gloves/red
|
||||
/obj/item/clothing/gloves/color/red
|
||||
name = "red gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "red"
|
||||
item_state = "redgloves"
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/clothing/gloves/rainbow
|
||||
/obj/item/clothing/gloves/color/rainbow
|
||||
name = "rainbow gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "rainbow"
|
||||
item_state = "rainbowgloves"
|
||||
item_color = "rainbow"
|
||||
|
||||
clown
|
||||
item_color = "clown"
|
||||
/obj/item/clothing/gloves/color/rainbow/clown
|
||||
item_color = "clown"
|
||||
|
||||
/obj/item/clothing/gloves/blue
|
||||
/obj/item/clothing/gloves/color/blue
|
||||
name = "blue gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "blue"
|
||||
item_state = "bluegloves"
|
||||
item_color="blue"
|
||||
|
||||
/obj/item/clothing/gloves/purple
|
||||
/obj/item/clothing/gloves/color/purple
|
||||
name = "purple gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "purple"
|
||||
item_state = "purplegloves"
|
||||
item_color="purple"
|
||||
|
||||
/obj/item/clothing/gloves/green
|
||||
/obj/item/clothing/gloves/color/green
|
||||
name = "green gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "green"
|
||||
item_state = "greengloves"
|
||||
item_color="green"
|
||||
|
||||
/obj/item/clothing/gloves/grey
|
||||
/obj/item/clothing/gloves/color/grey
|
||||
name = "grey gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "gray"
|
||||
item_state = "graygloves"
|
||||
item_color="grey"
|
||||
|
||||
rd
|
||||
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
/obj/item/clothing/gloves/color/grey/rd
|
||||
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
|
||||
hop
|
||||
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
/obj/item/clothing/gloves/color/grey/hop
|
||||
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/light_brown
|
||||
/obj/item/clothing/gloves/color/light_brown
|
||||
name = "light brown gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "lightbrown"
|
||||
item_state = "lightbrowngloves"
|
||||
item_color="light brown"
|
||||
|
||||
/obj/item/clothing/gloves/brown
|
||||
/obj/item/clothing/gloves/color/brown
|
||||
name = "brown gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "brown"
|
||||
item_state = "browngloves"
|
||||
item_color="brown"
|
||||
|
||||
cargo
|
||||
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
|
||||
/obj/item/clothing/gloves/color/brown/cargo
|
||||
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/color/captain
|
||||
desc = "Regal blue gloves, with a nice gold trim. Swanky."
|
||||
name = "captain's gloves"
|
||||
icon_state = "captain"
|
||||
item_state = "egloves"
|
||||
item_color = "captain"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/gloves/color/latex
|
||||
name = "latex gloves"
|
||||
desc = "Cheap sterile gloves made from latex."
|
||||
icon_state = "latex"
|
||||
item_state = "lgloves"
|
||||
siemens_coefficient = 0.30
|
||||
permeability_coefficient = 0.01
|
||||
item_color="white"
|
||||
transfer_prints = TRUE
|
||||
|
||||
/obj/item/clothing/gloves/color/latex/cmo
|
||||
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/color/latex/nitrile
|
||||
name = "nitrile gloves"
|
||||
desc = "Pricy sterile gloves that are stronger than latex."
|
||||
icon_state = "nitrile"
|
||||
item_state = "nitrilegloves"
|
||||
transfer_prints = FALSE
|
||||
|
||||
/obj/item/clothing/gloves/color/white
|
||||
name = "white gloves"
|
||||
desc = "These look pretty fancy."
|
||||
icon_state = "white"
|
||||
item_state = "wgloves"
|
||||
item_color="mime"
|
||||
|
||||
/obj/item/clothing/gloves/color/white/redcoat
|
||||
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
|
||||
|
||||
@@ -1,49 +1,15 @@
|
||||
/obj/item/clothing/gloves/captain
|
||||
desc = "Regal blue gloves, with a nice gold trim. Swanky."
|
||||
name = "captain's gloves"
|
||||
icon_state = "captain"
|
||||
item_state = "egloves"
|
||||
item_color = "captain"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/gloves/combat
|
||||
name = "combat gloves"
|
||||
desc = "These tactical gloves are fireproof and shock resistant."
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
strip_delay = 80
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/latex
|
||||
name = "latex gloves"
|
||||
desc = "Cheap, sterile gloves made from latex."
|
||||
icon_state = "latex"
|
||||
item_state = "lgloves"
|
||||
siemens_coefficient = 0.30
|
||||
permeability_coefficient = 0.01
|
||||
item_color="white"
|
||||
/obj/item/clothing/gloves/fingerless
|
||||
name = "fingerless gloves"
|
||||
desc = "Plain black gloves without fingertips for the hard working."
|
||||
icon_state = "fingerless"
|
||||
item_state = "fingerless"
|
||||
item_color = null //So they don't wash.
|
||||
transfer_prints = TRUE
|
||||
|
||||
/obj/item/clothing/gloves/latex/nitrile
|
||||
name = "latex gloves"
|
||||
desc = "Expensive sterile gloves that are thicker than latex."
|
||||
icon_state = "nitrile"
|
||||
item_state = "nitrilegloves"
|
||||
transfer_prints = FALSE
|
||||
|
||||
cmo
|
||||
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
|
||||
strip_delay = 40
|
||||
put_on_delay = 20
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/botanic_leather
|
||||
name = "botanist's leather gloves"
|
||||
@@ -56,14 +22,15 @@
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/fingerless
|
||||
name = "fingerless gloves"
|
||||
desc = "Plain black gloves without fingertips for the hard working."
|
||||
icon_state = "fingerless"
|
||||
item_state = "fingerless"
|
||||
item_color = null //So they don't wash.
|
||||
transfer_prints = TRUE
|
||||
strip_delay = 40
|
||||
put_on_delay = 20
|
||||
/obj/item/clothing/gloves/combat
|
||||
name = "combat gloves"
|
||||
desc = "These tactical gloves are fireproof and shock resistant."
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
strip_delay = 80
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
@@ -54,13 +54,6 @@
|
||||
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
|
||||
strip_delay = 80
|
||||
|
||||
/obj/item/clothing/head/helmet/bulletproof
|
||||
name = "tactical helmet"
|
||||
desc = "An advanced helmet designed to protect against traditional projectile weaponry and explosives."
|
||||
icon_state = "bulletproof"
|
||||
armor = list(melee = 25, bullet = 60, laser = 25, energy = 10, bomb = 40, bio = 0, rad = 0)
|
||||
strip_delay = 70
|
||||
|
||||
/obj/item/clothing/head/helmet/thunderdome
|
||||
name = "\improper Thunderdome helmet"
|
||||
desc = "<i>'Let the battle commence!'</i>"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
body_parts_covered = CHEST
|
||||
cold_protection = CHEST|GROIN
|
||||
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "labcoat"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
var/open = 0
|
||||
action_button_name = "Toggle Labcoat Buttons"
|
||||
|
||||
@@ -253,24 +253,24 @@
|
||||
name = "captain's winter coat"
|
||||
icon_state = "coatcaptain"
|
||||
armor = list(melee = 50, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
|
||||
/obj/item/clothing/suit/toggle/wintercoat/security
|
||||
name = "security winter coat"
|
||||
icon_state = "coatsecurity"
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
|
||||
/obj/item/clothing/suit/toggle/wintercoat/medical
|
||||
name = "medical winter coat"
|
||||
icon_state = "coatmedical"
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/toggle/wintercoat/science
|
||||
name = "science winter coat"
|
||||
icon_state = "coatscience"
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/toggle/wintercoat/engineering
|
||||
|
||||
@@ -117,13 +117,13 @@
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/suit/space/santa, slot_wear_suit)
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/head/santa, slot_head)
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/mask/breath, slot_wear_mask)
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/gloves/red, slot_gloves)
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red, slot_gloves)
|
||||
santa.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red, slot_shoes)
|
||||
santa.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double, slot_belt)
|
||||
santa.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain, slot_ears)
|
||||
santa.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/santabag, slot_back)
|
||||
santa.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_r_store) //most blob spawn locations are really dark.
|
||||
|
||||
|
||||
var/obj/item/weapon/card/id/gold/santacard = new(santa)
|
||||
santacard.update_label("Santa Claus", "Santa")
|
||||
var/datum/job/captain/J = new/datum/job/captain
|
||||
@@ -147,5 +147,5 @@
|
||||
var/obj/effect/proc_holder/spell/targeted/area_teleport/teleport/telespell = new(santa)
|
||||
telespell.clothes_req = 0 //santa robes aren't actually magical.
|
||||
santa.mind.spell_list += telespell //does the station have chimneys? WHO KNOWS!
|
||||
|
||||
|
||||
santa << "<span class='userdanger'>You are Santa! Your objective is to bring joy to the people on this station. You can conjure more presents using a spell, and there are several presents in your bag.</span>"
|
||||
|
||||
@@ -20,7 +20,8 @@ mob/living/carbon/
|
||||
var/hal_crit = 0
|
||||
|
||||
mob/living/carbon/proc/handle_hallucinations()
|
||||
if(handling_hal) return
|
||||
if(handling_hal)
|
||||
return
|
||||
handling_hal = 1
|
||||
while(hallucination > 20)
|
||||
sleep(rand(200,500)/(hallucination/25))
|
||||
@@ -148,7 +149,6 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
src << sound('sound/AI/shuttledock.ogg')
|
||||
if(66 to 70)
|
||||
//Flashes of danger
|
||||
//src << "Danger Flash"
|
||||
if(!halbody)
|
||||
var/list/possible_points = list()
|
||||
for(var/turf/simulated/floor/F in view(src,world.view))
|
||||
@@ -162,8 +162,6 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER)
|
||||
if(4)
|
||||
halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER)
|
||||
// if(5)
|
||||
// halbody = image('xcomalien.dmi',target,"chryssalid",TURF_LAYER)
|
||||
|
||||
if(client) client.images += halbody
|
||||
spawn(rand(50,80)) //Only seen for a brief moment.
|
||||
@@ -171,55 +169,58 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
halbody = null
|
||||
if(71 to 72)
|
||||
//Fake death
|
||||
// src.sleeping_willingly = 1
|
||||
src.sleeping = 20
|
||||
hal_crit = 1
|
||||
hal_screwyhud = 1
|
||||
spawn(rand(50,100))
|
||||
// src.sleeping_willingly = 0
|
||||
src.sleeping = 0
|
||||
hal_crit = 0
|
||||
hal_screwyhud = 0
|
||||
if(73 to 75)
|
||||
fake_attack()
|
||||
handling_hal = 0
|
||||
|
||||
|
||||
/mob/living/carbon/proc/fake_attack()
|
||||
// var/list/possible_clones = new/list()
|
||||
var/mob/living/carbon/human/clone = null
|
||||
var/clone_weapon = null
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
if(H.stat || H.lying)
|
||||
continue
|
||||
// possible_clones += H
|
||||
clone = H
|
||||
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
|
||||
|
||||
/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
|
||||
// if(!possible_clones.len) return
|
||||
// clone = pick(possible_clones)
|
||||
if(!clone)
|
||||
return
|
||||
|
||||
if(!mocktxt)
|
||||
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
|
||||
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(src.loc)
|
||||
if(clone.l_hand)
|
||||
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
|
||||
clone_weapon = clone.l_hand.name
|
||||
F.weap = clone.l_hand
|
||||
else if (clone.r_hand)
|
||||
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
|
||||
clone_weapon = clone.r_hand.name
|
||||
F.weap = clone.r_hand
|
||||
|
||||
mocktxt = ""
|
||||
F.name = clone.name
|
||||
F.my_target = src
|
||||
F.weapon_name = clone_weapon
|
||||
src.hallucinations += F
|
||||
|
||||
var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\
|
||||
"Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\
|
||||
"OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Captain IQ","Retrieve Arms",\
|
||||
"Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry")
|
||||
F.left = image(clone,dir = WEST)
|
||||
F.right = image(clone,dir = EAST)
|
||||
F.up = image(clone,dir = NORTH)
|
||||
F.down = image(clone,dir = SOUTH)
|
||||
|
||||
if(mid_txts)
|
||||
while(mid_txts.len)
|
||||
var/mid_txt = pick(mid_txts)
|
||||
mocktxt += mid_txt
|
||||
mid_txts -= mid_txt
|
||||
F.updateimage()
|
||||
|
||||
while(buttons.len)
|
||||
|
||||
var/button = pick(buttons)
|
||||
|
||||
var/button_txt = pick(possible_txt)
|
||||
|
||||
mocktxt += "<a href='?src=\ref[src];[button]'>[button_txt]</a><br>"
|
||||
|
||||
buttons -= button
|
||||
possible_txt -= button_txt
|
||||
|
||||
return start_txt + mocktxt + end_txt + "</TT></BODY></HTML>"
|
||||
|
||||
proc/check_panel(mob/M)
|
||||
if (istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai))
|
||||
if(M.hallucination < 15)
|
||||
return 1
|
||||
return 0*/
|
||||
|
||||
/obj/effect/fake_attacker
|
||||
icon = null
|
||||
@@ -245,8 +246,11 @@ proc/check_panel(mob/M)
|
||||
|
||||
var/health = 100
|
||||
|
||||
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/user as mob)
|
||||
/obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/living/user as mob)
|
||||
step_away(src,my_target,2)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
|
||||
my_target.visible_message("<span class='danger'>[my_target] flails around wildly.</span>", \
|
||||
"<span class='danger'>[my_target] has attacked [src]!</span>")
|
||||
|
||||
@@ -303,11 +307,13 @@ proc/check_panel(mob/M)
|
||||
updateimage()
|
||||
else
|
||||
if(prob(15))
|
||||
src.do_attack_animation(my_target)
|
||||
if(weapon_name)
|
||||
my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg'))
|
||||
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
|
||||
my_target.staminaloss += 30
|
||||
if(prob(20)) my_target.eye_blurry += 3
|
||||
if(prob(20))
|
||||
my_target.eye_blurry += 3
|
||||
if(prob(33))
|
||||
if(!locate(/obj/effect/overlay) in my_target.loc)
|
||||
fake_blood(my_target)
|
||||
@@ -326,7 +332,7 @@ proc/check_panel(mob/M)
|
||||
collapse = 1
|
||||
updateimage()
|
||||
|
||||
/proc/fake_blood(var/mob/target)
|
||||
/obj/effect/fake_attacker/proc/fake_blood(var/mob/target)
|
||||
var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc)
|
||||
O.name = "blood"
|
||||
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
|
||||
@@ -350,65 +356,3 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
|
||||
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
|
||||
/obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\
|
||||
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)
|
||||
|
||||
/proc/fake_attack(var/mob/living/target)
|
||||
// var/list/possible_clones = new/list()
|
||||
var/mob/living/carbon/human/clone = null
|
||||
var/clone_weapon = null
|
||||
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
if(H.stat || H.lying) continue
|
||||
// possible_clones += H
|
||||
clone = H
|
||||
break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order.
|
||||
|
||||
// if(!possible_clones.len) return
|
||||
// clone = pick(possible_clones)
|
||||
if(!clone) return
|
||||
|
||||
//var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target))
|
||||
var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc)
|
||||
if(clone.l_hand)
|
||||
if(!(locate(clone.l_hand) in non_fakeattack_weapons))
|
||||
clone_weapon = clone.l_hand.name
|
||||
F.weap = clone.l_hand
|
||||
else if (clone.r_hand)
|
||||
if(!(locate(clone.r_hand) in non_fakeattack_weapons))
|
||||
clone_weapon = clone.r_hand.name
|
||||
F.weap = clone.r_hand
|
||||
|
||||
F.name = clone.name
|
||||
F.my_target = target
|
||||
F.weapon_name = clone_weapon
|
||||
target.hallucinations += F
|
||||
|
||||
|
||||
F.left = image(clone,dir = WEST)
|
||||
F.right = image(clone,dir = EAST)
|
||||
F.up = image(clone,dir = NORTH)
|
||||
F.down = image(clone,dir = SOUTH)
|
||||
|
||||
// F.base = new /icon(clone.stand_icon)
|
||||
// F.currentimage = new /image(clone)
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
F.left = new /icon(clone.stand_icon,dir=WEST)
|
||||
for(var/icon/i in clone.overlays)
|
||||
F.left.Blend(i)
|
||||
F.up = new /icon(clone.stand_icon,dir=NORTH)
|
||||
for(var/icon/i in clone.overlays)
|
||||
F.up.Blend(i)
|
||||
F.down = new /icon(clone.stand_icon,dir=SOUTH)
|
||||
for(var/icon/i in clone.overlays)
|
||||
F.down.Blend(i)
|
||||
F.right = new /icon(clone.stand_icon,dir=EAST)
|
||||
for(var/icon/i in clone.overlays)
|
||||
F.right.Blend(i)
|
||||
|
||||
target << F.up
|
||||
*/
|
||||
|
||||
F.updateimage()
|
||||
@@ -8,6 +8,8 @@
|
||||
required_reagents = list("soymilk" = 10)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 1
|
||||
mob_react=1
|
||||
|
||||
/datum/chemical_reaction/tofu/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
@@ -20,18 +22,21 @@
|
||||
result = null
|
||||
required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
|
||||
return
|
||||
|
||||
|
||||
/datum/chemical_reaction/chocolate_bar2
|
||||
name = "Chocolate Bar"
|
||||
id = "chocolate_bar"
|
||||
result = null
|
||||
required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
/datum/chemical_reaction/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
@@ -73,6 +78,7 @@
|
||||
required_reagents = list("milk" = 40)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
|
||||
@@ -84,6 +90,8 @@
|
||||
result = null
|
||||
required_reagents = list("blood" = 5, "clonexadone" = 1)
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
|
||||
|
||||
@@ -471,6 +471,13 @@
|
||||
force = 10
|
||||
throwforce = 10
|
||||
var/cooldown = 0
|
||||
var/list/can_be_placed_into = list(
|
||||
/obj/structure/table,
|
||||
/obj/structure/closet,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/structure/safe,
|
||||
/obj/machinery/disposal
|
||||
)
|
||||
|
||||
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
|
||||
if(cooldown <= 0)
|
||||
@@ -489,6 +496,9 @@
|
||||
if(target in user.contents)
|
||||
return
|
||||
if(proximity_flag)
|
||||
for(var/type in can_be_placed_into)
|
||||
if(istype(target, type))
|
||||
return
|
||||
CreateResonance(target, user)
|
||||
|
||||
/obj/effect/resonance
|
||||
|
||||
@@ -441,7 +441,6 @@ emp_act
|
||||
update_damage_overlays(0)
|
||||
updatehealth()
|
||||
|
||||
M.occupant_message("<span class='danger'>You hit [src].</span>")
|
||||
visible_message("<span class='danger'>[M.name] has hit [src]!</span>", \
|
||||
"<span class='userdanger'>[M.name] has hit [src]!</span>")
|
||||
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
|
||||
|
||||
@@ -460,11 +460,7 @@
|
||||
adjustOxyLoss(1)*/
|
||||
|
||||
if(hallucination)
|
||||
if(hallucination >= 20)
|
||||
if(prob(3))
|
||||
fake_attack(src)
|
||||
if(!handling_hal)
|
||||
spawn handle_hallucinations() //The not boring kind!
|
||||
spawn handle_hallucinations()
|
||||
|
||||
if(hallucination<=2)
|
||||
hallucination = 0
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
|
||||
name = "Podperson"
|
||||
id = "pod"
|
||||
specflags = list(MUTCOLORS,EYECOLOR)
|
||||
|
||||
/datum/species/plant/pod/spec_life(mob/living/carbon/human/H)
|
||||
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(PARALYZE)
|
||||
Paralyse(effect * blocked)
|
||||
if(IRRADIATE)
|
||||
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm", "Your clothes feel warm"))/100),0)//Rads auto check armor
|
||||
radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0)//Rads auto check armor
|
||||
if(STUTTER)
|
||||
if(status_flags & CANSTUN) // stun is usually associated with stutter
|
||||
stuttering = max(stuttering,(effect * blocked))
|
||||
@@ -75,6 +75,6 @@
|
||||
if(stutter) apply_effect(stutter, STUTTER, blocked)
|
||||
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
|
||||
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
|
||||
if(stamina) apply_effect(stamina, STAMINA, blocked)
|
||||
if(stamina) apply_damage(stamina, STAMINA, null, blocked)
|
||||
if(jitter) apply_effect(jitter, JITTER, blocked)
|
||||
return 1
|
||||
@@ -267,7 +267,8 @@
|
||||
for(var/mob/M in dead_mob_list)
|
||||
if(!M.client || istype(M, /mob/new_player))
|
||||
continue //skip monkeys, leavers and new players
|
||||
if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
|
||||
var/T = get_turf(src)
|
||||
if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
|
||||
M.show_message(message)
|
||||
|
||||
|
||||
|
||||
@@ -769,7 +769,8 @@
|
||||
gib()
|
||||
return
|
||||
|
||||
/mob/living/proc/do_attack_animation(atom/A)
|
||||
|
||||
/atom/movable/proc/do_attack_animation(atom/A)
|
||||
var/pixel_x_diff = 0
|
||||
var/pixel_y_diff = 0
|
||||
var/direction = get_dir(src, A)
|
||||
@@ -796,4 +797,8 @@
|
||||
pixel_y_diff = -8
|
||||
animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
|
||||
animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2)
|
||||
|
||||
|
||||
/mob/living/do_attack_animation(atom/A)
|
||||
..()
|
||||
floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
|
||||
|
||||
@@ -86,14 +86,12 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
|
||||
else
|
||||
return
|
||||
updatehealth()
|
||||
M.occupant_message("<span class='danger'>You hit [src].</span>")
|
||||
visible_message("<span class='danger'>[M.name] has hit [src]!</span>", \
|
||||
"<span class='userdanger'>[M.name] has hit [src]!</span>")
|
||||
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
|
||||
else
|
||||
step_away(src,M)
|
||||
add_logs(M.occupant, src, "pushed", object=M, admin=0)
|
||||
M.occupant_message("<span class='warning'>You push [src] out of the way.</span>")
|
||||
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
|
||||
|
||||
return
|
||||
@@ -196,7 +194,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
|
||||
|
||||
/mob/living/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0)
|
||||
M.emote("me", 1, "[M.friendly] [src]")
|
||||
M.visible_message("<span class='notice'>\The [M] [M.friendly] [src]!</span>")
|
||||
return 0
|
||||
else
|
||||
if(M.attack_sound)
|
||||
@@ -217,7 +215,10 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
|
||||
M << "No attacking people at spawn, you jackass."
|
||||
return 0
|
||||
|
||||
if (M.a_intent == "harm" && !M.is_muzzled())
|
||||
if (M.a_intent == "harm")
|
||||
if(M.is_muzzled() || (M.wear_mask && M.wear_mask.flags & MASKCOVERSMOUTH))
|
||||
M << "<span class='warning'>You can't bite with your mouth covered!</span>"
|
||||
return 0
|
||||
M.do_attack_animation(src)
|
||||
if (prob(75))
|
||||
add_logs(M, src, "attacked", admin=0)
|
||||
|
||||
@@ -18,9 +18,3 @@
|
||||
stat = CONSCIOUS
|
||||
return
|
||||
health = maxHealth - getBruteLoss() - getFireLoss()
|
||||
|
||||
/mob/living/silicon/pai/proc/follow_pai()
|
||||
while(card)
|
||||
loc = get_turf(card)
|
||||
sleep(5)
|
||||
qdel(src) //if there's no pAI we shouldn't exist
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
mouse_opacity = 0
|
||||
density = 0
|
||||
mob_size = 0
|
||||
invisibility = 101
|
||||
|
||||
var/network = "SS13"
|
||||
var/obj/machinery/camera/current = null
|
||||
@@ -51,7 +50,7 @@
|
||||
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
||||
make_laws()
|
||||
canmove = 0
|
||||
src.loc = get_turf(paicard)
|
||||
src.loc = paicard
|
||||
card = paicard
|
||||
sradio = new(src)
|
||||
if(card)
|
||||
@@ -66,7 +65,6 @@
|
||||
pda.owner = text("[]", src)
|
||||
pda.name = pda.owner + " (" + pda.ownjob + ")"
|
||||
|
||||
follow_pai()
|
||||
..()
|
||||
|
||||
/mob/living/silicon/pai/make_laws()
|
||||
|
||||
@@ -404,5 +404,5 @@
|
||||
return 1
|
||||
else
|
||||
visible_message("<span class='danger'>[M] punches [src], but doesn't leave a dent.</span>", \
|
||||
"<span class='userdanger'>[M] punches [src], but doesn't leave a dent.!</span>")
|
||||
"<span class='userdanger'>[M] punches [src], but doesn't leave a dent!</span>")
|
||||
return 0
|
||||
|
||||
+31
-7
@@ -75,28 +75,52 @@ var/next_mob_id = 0
|
||||
src << msg
|
||||
return
|
||||
|
||||
// Show a message to all mobs in sight of this one
|
||||
// Show a message to all mobs who sees the src mob and the src mob itself
|
||||
// This would be for visible actions by the src mob
|
||||
// message is the message output to anyone who can see e.g. "[src] does something!"
|
||||
// self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
// self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message)
|
||||
for(var/mob/M in viewers(src))
|
||||
var/list/atom_viewers = list()
|
||||
for(var/atom/movable/A in view(src))
|
||||
atom_viewers |= recursive_hear_check(A)
|
||||
atom_viewers |= src
|
||||
for(var/mob/M in atom_viewers)
|
||||
if(M.see_invisible < invisibility)
|
||||
continue //can't view the invisible
|
||||
var/msg = message
|
||||
if(self_message && M==src)
|
||||
msg = self_message
|
||||
M.show_message( msg, 1, blind_message, 2)
|
||||
M.show_message( msg, 1)
|
||||
if(blind_message)
|
||||
var/list/atom_hearers = list()
|
||||
for(var/atom/movable/O in get_hearers_in_view(7, src))
|
||||
if(O in atom_viewers)
|
||||
continue
|
||||
atom_hearers |= O
|
||||
for(var/mob/MOB in atom_hearers)
|
||||
MOB.show_message(blind_message, 2)
|
||||
|
||||
// Show a message to all mobs in sight of this atom
|
||||
// Show a message to all mobs who sees this atom
|
||||
// Use for objects performing visible actions
|
||||
// message is output to anyone who can see, e.g. "The [src] does something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
|
||||
/atom/proc/visible_message(var/message, var/blind_message)
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message( message, 1, blind_message, 2)
|
||||
var/list/atom_viewers = list()
|
||||
for(var/atom/movable/A in view(src))
|
||||
atom_viewers |= recursive_hear_check(A)
|
||||
for(var/mob/M in atom_viewers)
|
||||
M.show_message( message, 1)
|
||||
if(blind_message)
|
||||
var/list/atom_hearers = list()
|
||||
for(var/atom/movable/O in get_hearers_in_view(7, src))
|
||||
if(O in atom_viewers)
|
||||
continue
|
||||
atom_hearers |= O
|
||||
for(var/mob/MOB in atom_hearers)
|
||||
MOB.show_message(blind_message, 2)
|
||||
|
||||
// Show a message to all mobs in earshot of this one
|
||||
// This would be for audible actions by the src mob
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
density = 1
|
||||
layer = 4
|
||||
animate_movement = 2
|
||||
flags = NOREACT | HEAR
|
||||
flags = HEAR
|
||||
hud_possible = list(ANTAG_HUD)
|
||||
var/datum/mind/mind
|
||||
|
||||
|
||||
+17
-10
@@ -622,37 +622,41 @@ obj/structure/cable/proc/avail()
|
||||
var/path = "/obj/structure/cable" + (item_color == "red" ? "" : "/" + item_color)
|
||||
return new path (location)
|
||||
|
||||
// called when cable_coil is clicked on a turf/simulated/floor
|
||||
/obj/item/stack/cable_coil/proc/turf_place(turf/simulated/floor/F, mob/user)
|
||||
// called when cable_coil is clicked on a turf
|
||||
/obj/item/stack/cable_coil/proc/place_turf(turf/T, mob/user)
|
||||
if(!isturf(user.loc))
|
||||
return
|
||||
|
||||
if(!T.cancable)
|
||||
user << "You can only lay cables on catwalks and plating!"
|
||||
return
|
||||
|
||||
if(get_amount() < 1) // Out of cable
|
||||
user << "There is no cable left."
|
||||
return
|
||||
|
||||
if(get_dist(F,user) > 1) // Too far
|
||||
if(get_dist(T,user) > 1) // Too far
|
||||
user << "You can't lay cable at a place that far away."
|
||||
return
|
||||
|
||||
if(F.intact) // Ff floor is intact, complain
|
||||
if(T.intact) // Ff floor is intact, complain
|
||||
user << "You can't lay cable there unless the floor tiles are removed."
|
||||
return
|
||||
|
||||
else
|
||||
var/dirn
|
||||
|
||||
if(user.loc == F)
|
||||
if(user.loc == T)
|
||||
dirn = user.dir // if laying on the tile we're on, lay in the direction we're facing
|
||||
else
|
||||
dirn = get_dir(F, user)
|
||||
dirn = get_dir(T, user)
|
||||
|
||||
for(var/obj/structure/cable/LC in F)
|
||||
for(var/obj/structure/cable/LC in T)
|
||||
if(LC.d2 == dirn && LC.d1 == 0)
|
||||
user << "There's already a cable at that position."
|
||||
return
|
||||
|
||||
var/obj/structure/cable/C = get_new_cable (F)
|
||||
var/obj/structure/cable/C = get_new_cable(T)
|
||||
|
||||
//set up the new cable
|
||||
C.d1 = 0 //it's a O-X node cable
|
||||
@@ -695,14 +699,17 @@ obj/structure/cable/proc/avail()
|
||||
|
||||
|
||||
if(U == T) //if clicked on the turf we're standing on, try to put a cable in the direction we're facing
|
||||
turf_place(T,user)
|
||||
place_turf(T,user)
|
||||
return
|
||||
|
||||
var/dirn = get_dir(C, user)
|
||||
|
||||
// one end of the clicked cable is pointing towards us
|
||||
if(C.d1 == dirn || C.d2 == dirn)
|
||||
if(U.intact) // can't place a cable if the floor is complete
|
||||
if(!U.cancable) //checking if it's a plating or catwalk
|
||||
user << "You can only lay cables on catwalks and plating!"
|
||||
return
|
||||
if(U.intact) //can't place a cable if it's a plating with a tile on it
|
||||
user << "You can't lay cable there unless the floor tiles are removed."
|
||||
return
|
||||
else
|
||||
|
||||
@@ -321,7 +321,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
|
||||
updateDialog()
|
||||
if(prob(25)) // To help stop "Your clothes feel warm" spam.
|
||||
if(prob(25)) // To help stop "Your clothes feel warm." spam.
|
||||
pulse_radiation()
|
||||
|
||||
var/overlay_state = null
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
if(get_dist(src, user) > 1)
|
||||
return
|
||||
|
||||
coil.turf_place(T, user)
|
||||
coil.place_turf(T, user)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them.
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / min(1, get_dist(l, src)) ) ) )
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1, get_dist(l, src)) ) ) )
|
||||
|
||||
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
|
||||
var/rads = (power / 10) * sqrt( 1 / min(get_dist(l, src),1) )
|
||||
@@ -220,7 +220,9 @@
|
||||
/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob)
|
||||
user << "<span class = \"warning\">You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update.</span>"
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_hand(mob/user as mob)
|
||||
/obj/machinery/power/supermatter_shard/attack_hand(mob/living/user as mob)
|
||||
if(!istype(user))
|
||||
return
|
||||
user.visible_message("<span class=\"warning\">\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
|
||||
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
@@ -235,7 +237,9 @@
|
||||
R.receive_pulse(power/10)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||
/obj/machinery/power/supermatter_shard/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(!istype(W) || (W.flags & ABSTRACT) || !istype(user))
|
||||
return
|
||||
if(user.drop_item(W))
|
||||
Consume(W)
|
||||
user.visible_message("<span class=\"warning\">As [user] touches \the [src] with \a [W], silence fills the room...</span>",\
|
||||
@@ -252,9 +256,11 @@
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
else
|
||||
else if(isobj(AM) && !istype(AM, /obj/effect))
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class=\"warning\">You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
else
|
||||
return
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
@@ -267,7 +273,7 @@
|
||||
user.dust()
|
||||
power += 200
|
||||
message_admins("[src] has consumed [key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>(JMP)</a>.")
|
||||
else
|
||||
else if(isobj(AM) && !istype(AM, /obj/effect))
|
||||
qdel(AM)
|
||||
|
||||
investigate_log("has consumed [AM].", "supermatter")
|
||||
|
||||
@@ -105,3 +105,8 @@
|
||||
update_charge()
|
||||
update_reactor()
|
||||
update_mode()
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/turret
|
||||
name = "hybrid turret gun"
|
||||
desc = "A basic hybrid energy gun with two settings: Stun and kill."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
|
||||
@@ -168,13 +168,13 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/proc/sawoff(mob/user as mob)
|
||||
if(sawn_state == SAWN_OFF)
|
||||
user << "<span class='notice'>\The [src] is already shorten.</span>"
|
||||
user << "<span class='notice'>\The [src] is already shortened.</span>"
|
||||
return
|
||||
|
||||
if(sawn_state == SAWN_SAWING)
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>[user] begin to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] begins to shorten \the [src].</span>", "<span class='notice'>You begin to shorten \the [src].</span>")
|
||||
|
||||
//if there's any live ammo inside the gun, makes it go off
|
||||
if(blow_up(user))
|
||||
@@ -184,6 +184,7 @@
|
||||
sawn_state = SAWN_SAWING
|
||||
|
||||
if(do_after(user, 30))
|
||||
user.visible_message("<span class='warning'>[user] shortens \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
|
||||
name = "sawn-off [src.name]"
|
||||
desc = sawn_desc
|
||||
icon_state = initial(icon_state) + "-sawn"
|
||||
@@ -192,7 +193,6 @@
|
||||
slot_flags &= ~SLOT_BACK //you can't sling it on your back
|
||||
slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
|
||||
sawn_state = SAWN_OFF
|
||||
user.visible_message("<span class='warning'>[user] shorten \the [src]!</span>", "<span class='warning'>You shorten \the [src]!</span>")
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
if(hitsound)
|
||||
var/volume = vol_by_damage()
|
||||
playsound(loc, hitsound, volume, 1, -1)
|
||||
M.visible_message("<span class='danger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!", \
|
||||
"<span class='userdanger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
M.visible_message("<span class='danger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!</span>", \
|
||||
"<span class='userdanger'>[M] is hit by \a [src] in the [parse_zone(def_zone)]!</span>") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
add_logs(firer, M, "shot", object="[src]", addition=reagent_note)
|
||||
|
||||
var/turf/new_loc = get_turf(A)
|
||||
|
||||
@@ -39,9 +39,9 @@
|
||||
/obj/item/projectile/beam/disabler
|
||||
name = "disabler beam"
|
||||
icon_state = "omnilaser"
|
||||
damage = 33
|
||||
damage = 36
|
||||
damage_type = STAMINA
|
||||
hitsound = null
|
||||
hitsound = 'sound/weapons/tap.ogg'
|
||||
eyeblur = 0
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
|
||||
@@ -247,7 +247,9 @@ datum/reagents/proc/handle_reactions()
|
||||
else
|
||||
if(my_atom.type == C.required_container)
|
||||
matching_container = 1
|
||||
|
||||
if (isliving(my_atom)) //Makes it so certain chemical reactions don't occur in mobs
|
||||
if (C.mob_react)
|
||||
return
|
||||
if(!C.required_other)
|
||||
matching_other = 1
|
||||
|
||||
@@ -282,7 +284,7 @@ datum/reagents/proc/handle_reactions()
|
||||
ME2.Uses--
|
||||
if(ME2.Uses <= 0) // give the notification that the slime core is dead
|
||||
for(var/mob/M in seen)
|
||||
M << "<span class='notice'>\icon[my_atom] The [my_atom]'s power is consumed in the reaction.</span>"
|
||||
M << "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>"
|
||||
ME2.name = "used slime extract"
|
||||
ME2.desc = "This extract has been used up."
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
var/result_amount = 0
|
||||
var/secondary = 0 // set to nonzero if secondary reaction
|
||||
var/mob_react = 0 //Determines if a chemical reaction can occur inside a mob
|
||||
|
||||
/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
return
|
||||
@@ -384,6 +385,7 @@ silicate
|
||||
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
|
||||
result_amount = null
|
||||
secondary = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
@@ -448,6 +450,7 @@ silicate
|
||||
result = null
|
||||
required_reagents = list("iron" = 5, "frostoil" = 5, "plasma" = 20)
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/plasmasolidification/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
@@ -537,6 +540,7 @@ silicate
|
||||
result = null
|
||||
required_reagents = list("fluorosurfactant" = 1, "water" = 1)
|
||||
result_amount = 2
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
|
||||
@@ -566,6 +570,7 @@ silicate
|
||||
result = null
|
||||
required_reagents = list("aluminium" = 3, "foaming_agent" = 1, "pacid" = 1)
|
||||
result_amount = 5
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
|
||||
@@ -586,6 +591,7 @@ silicate
|
||||
result = null
|
||||
required_reagents = list("iron" = 3, "foaming_agent" = 1, "pacid" = 1)
|
||||
result_amount = 5
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/item/weapon/grenade/chem_grenade,
|
||||
/obj/machinery/bot/medbot,
|
||||
/obj/machinery/computer/pandemic,
|
||||
/obj/item/weapon/storage/secure/safe,
|
||||
/obj/structure/safe,
|
||||
/obj/machinery/disposal,
|
||||
/obj/machinery/hydroponics,
|
||||
/obj/machinery/biogenerator,
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
user << "<span class='notice'>You are unable to locate any blood.</span>"
|
||||
return
|
||||
if(target != user)
|
||||
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
|
||||
target.visible_message("<span class='danger'>[user] is trying to take a blood sample from [target]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to take a blood sample from [target]!</span>")
|
||||
if(!do_mob(user, target))
|
||||
return
|
||||
|
||||
@@ -97,9 +97,10 @@
|
||||
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
|
||||
..()
|
||||
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
|
||||
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
|
||||
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
|
||||
explosion(src.loc,-1,0,2, flame_range = 2)
|
||||
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
|
||||
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
|
||||
log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
|
||||
explosion(src.loc,-1,0,2, flame_range = 2)
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act()
|
||||
|
||||
+217
-221
@@ -55,198 +55,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
return
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
/////Non-Board Computer Stuff//////
|
||||
///////////////////////////////////
|
||||
|
||||
datum/design/intellicard
|
||||
name = "Intellicard AI Transportation System"
|
||||
desc = "Allows for the construction of an intellicard."
|
||||
id = "intellicard"
|
||||
req_tech = list("programming" = 4, "materials" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 1000, "$gold" = 200)
|
||||
build_path = /obj/item/device/aicard
|
||||
|
||||
datum/design/paicard
|
||||
name = "Personal Artificial Intelligence Card"
|
||||
desc = "Allows for the construction of a pAI Card."
|
||||
id = "paicard"
|
||||
req_tech = list("programming" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 500, "$metal" = 500)
|
||||
build_path = /obj/item/device/paicard
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Disk Construction Disks///////
|
||||
////////////////////////////////////////
|
||||
datum/design/design_disk
|
||||
name = "Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk"
|
||||
req_tech = list("programming" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list("$metal" = 30, "$glass" = 10)
|
||||
build_path = /obj/item/weapon/disk/design_disk
|
||||
|
||||
datum/design/tech_disk
|
||||
name = "Technology Data Storage Disk"
|
||||
desc = "Produce additional disks for storing technology data."
|
||||
id = "tech_disk"
|
||||
req_tech = list("programming" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list("$metal" = 30, "$glass" = 10)
|
||||
build_path = /obj/item/weapon/disk/tech_disk
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
/////////////////Mining//////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/jackhammer
|
||||
name = "Sonic Jackhammer"
|
||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||
id = "jackhammer"
|
||||
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/jackhammer
|
||||
|
||||
datum/design/drill
|
||||
name = "Mining Drill"
|
||||
desc = "Yours is the drill that will pierce through the rock walls."
|
||||
id = "drill"
|
||||
req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
|
||||
build_path = /obj/item/weapon/pickaxe/drill
|
||||
|
||||
datum/design/plasmacutter
|
||||
name = "Plasma Cutter"
|
||||
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
id = "plasmacutter"
|
||||
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
|
||||
datum/design/pick_diamond
|
||||
name = "Diamond Pickaxe"
|
||||
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
|
||||
id = "pick_diamond"
|
||||
req_tech = list("materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$diamond" = 3000)
|
||||
build_path = /obj/item/weapon/pickaxe/diamond
|
||||
|
||||
datum/design/drill_diamond
|
||||
name = "Diamond Mining Drill"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
id = "drill_diamond"
|
||||
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////Blue Space/////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/beacon
|
||||
name = "Tracking Beacon"
|
||||
desc = "A blue space tracking beacon."
|
||||
id = "beacon"
|
||||
req_tech = list("bluespace" = 1)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 20, "$glass" = 10)
|
||||
build_path = /obj/item/device/radio/beacon
|
||||
|
||||
datum/design/bag_holding
|
||||
name = "Bag of Holding"
|
||||
desc = "A backpack that opens into a localized pocket of Blue Space."
|
||||
id = "bag_holding"
|
||||
req_tech = list("bluespace" = 4, "materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
|
||||
reliability = 80
|
||||
build_path = /obj/item/weapon/storage/backpack/holding
|
||||
|
||||
datum/design/bluespace_crystal
|
||||
name = "Artificial Bluespace Crystal"
|
||||
desc = "A small blue crystal with mystical properties."
|
||||
id = "bluespace_crystal"
|
||||
req_tech = list("bluespace" = 4, "materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$diamond" = 1500, "$plasma" = 1500)
|
||||
reliability = 100
|
||||
build_path = /obj/item/bluespace_crystal/artificial
|
||||
|
||||
datum/design/telesci_gps
|
||||
name = "GPS Device"
|
||||
desc = "Little thingie that can track its position at all times."
|
||||
id = "telesci_gps"
|
||||
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 500, "$glass" = 1000)
|
||||
build_path = /obj/item/device/gps
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
/////////////////HUDs////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/health_hud
|
||||
name = "Health Scanner HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||
id = "health_hud"
|
||||
req_tech = list("biotech" = 2, "magnets" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/hud/health
|
||||
|
||||
datum/design/health_hud_night
|
||||
name = "Night Vision Health Scanner HUD"
|
||||
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
|
||||
id = "health_hud_night"
|
||||
req_tech = list("biotech" = 4, "magnets" = 5)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
|
||||
build_path = /obj/item/clothing/glasses/hud/health/night
|
||||
|
||||
datum/design/security_hud
|
||||
name = "Security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
|
||||
id = "security_hud"
|
||||
req_tech = list("magnets" = 3, "combat" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/hud/security
|
||||
|
||||
datum/design/security_hud_night
|
||||
name = "Night Vision Security HUD"
|
||||
desc = "A heads-up display which provides id data and vision in complete darkness."
|
||||
id = "security_hud_night"
|
||||
req_tech = list("magnets" = 5, "combat" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
|
||||
build_path = /obj/item/clothing/glasses/hud/security/night
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Test///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/* test
|
||||
name = "Test Design"
|
||||
desc = "A design to test the new protolathe."
|
||||
id = "protolathe_test"
|
||||
build_type = PROTOLATHE
|
||||
req_tech = list("materials" = 1)
|
||||
materials = list("$gold" = 3000, "iron" = 15, "copper" = 10, "$silver" = 2500)
|
||||
build_path = /obj/item/weapon/banhammer" */
|
||||
|
||||
////////////////////////////////////////
|
||||
//Disks for transporting design datums//
|
||||
////////////////////////////////////////
|
||||
@@ -266,28 +74,221 @@ datum/design/security_hud_night
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
///////////////////////////////////
|
||||
/////Non-Board Computer Stuff//////
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/intellicard
|
||||
name = "Intellicard AI Transportation System"
|
||||
desc = "Allows for the construction of an intellicard."
|
||||
id = "intellicard"
|
||||
req_tech = list("programming" = 4, "materials" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 1000, "$gold" = 200)
|
||||
build_path = /obj/item/device/aicard
|
||||
category = list("Electronics")
|
||||
|
||||
/datum/design/paicard
|
||||
name = "Personal Artificial Intelligence Card"
|
||||
desc = "Allows for the construction of a pAI Card."
|
||||
id = "paicard"
|
||||
req_tech = list("programming" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$glass" = 500, "$metal" = 500)
|
||||
build_path = /obj/item/device/paicard
|
||||
category = list("Electronics")
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Disk Construction Disks///////
|
||||
////////////////////////////////////////
|
||||
/datum/design/design_disk
|
||||
name = "Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk"
|
||||
req_tech = list("programming" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list("$metal" = 30, "$glass" = 10)
|
||||
build_path = /obj/item/weapon/disk/design_disk
|
||||
category = list("Electronics")
|
||||
|
||||
/datum/design/tech_disk
|
||||
name = "Technology Data Storage Disk"
|
||||
desc = "Produce additional disks for storing technology data."
|
||||
id = "tech_disk"
|
||||
req_tech = list("programming" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list("$metal" = 30, "$glass" = 10)
|
||||
build_path = /obj/item/weapon/disk/tech_disk
|
||||
category = list("Electronics")
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////Borg Upgrades//////////////
|
||||
/////////////////Mining//////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/borg_syndicate_module
|
||||
name = "Borg Illegal Weapons Upgrade"
|
||||
desc = "Allows for the construction of illegal upgrades for cyborgs"
|
||||
id = "borg_syndicate_module"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 4, "syndicate" = 3)
|
||||
build_path = /obj/item/borg/upgrade/syndicate
|
||||
materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
/datum/design/jackhammer
|
||||
name = "Sonic Jackhammer"
|
||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||
id = "jackhammer"
|
||||
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/jackhammer
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/drill
|
||||
name = "Mining Drill"
|
||||
desc = "Yours is the drill that will pierce through the rock walls."
|
||||
id = "drill"
|
||||
req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
|
||||
build_path = /obj/item/weapon/pickaxe/drill
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/plasmacutter
|
||||
name = "Plasma Cutter"
|
||||
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
id = "plasmacutter"
|
||||
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/pick_diamond
|
||||
name = "Diamond Pickaxe"
|
||||
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
|
||||
id = "pick_diamond"
|
||||
req_tech = list("materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$diamond" = 3000)
|
||||
build_path = /obj/item/weapon/pickaxe/diamond
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/drill_diamond
|
||||
name = "Diamond Mining Drill"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
id = "drill_diamond"
|
||||
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
|
||||
category = list("Mining Designs")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////Blue Space/////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/beacon
|
||||
name = "Tracking Beacon"
|
||||
desc = "A blue space tracking beacon."
|
||||
id = "beacon"
|
||||
req_tech = list("bluespace" = 1)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 20, "$glass" = 10)
|
||||
build_path = /obj/item/device/radio/beacon
|
||||
category = list("Bluespace Designs")
|
||||
|
||||
/datum/design/bag_holding
|
||||
name = "Bag of Holding"
|
||||
desc = "A backpack that opens into a localized pocket of Blue Space."
|
||||
id = "bag_holding"
|
||||
req_tech = list("bluespace" = 4, "materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
|
||||
reliability = 80
|
||||
build_path = /obj/item/weapon/storage/backpack/holding
|
||||
category = list("Bluespace Designs")
|
||||
|
||||
/datum/design/bluespace_crystal
|
||||
name = "Artificial Bluespace Crystal"
|
||||
desc = "A small blue crystal with mystical properties."
|
||||
id = "bluespace_crystal"
|
||||
req_tech = list("bluespace" = 4, "materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$diamond" = 1500, "$plasma" = 1500)
|
||||
reliability = 100
|
||||
build_path = /obj/item/bluespace_crystal/artificial
|
||||
category = list("Bluespace Designs")
|
||||
|
||||
/datum/design/telesci_gps
|
||||
name = "GPS Device"
|
||||
desc = "Little thingie that can track its position at all times."
|
||||
id = "telesci_gps"
|
||||
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 500, "$glass" = 1000)
|
||||
build_path = /obj/item/device/gps
|
||||
category = list("Bluespace Designs")
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
/////////////////HUDs////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/health_hud
|
||||
name = "Health Scanner HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||
id = "health_hud"
|
||||
req_tech = list("biotech" = 2, "magnets" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/hud/health
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/health_hud_night
|
||||
name = "Night Vision Health Scanner HUD"
|
||||
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
|
||||
id = "health_hud_night"
|
||||
req_tech = list("biotech" = 4, "magnets" = 5)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250)
|
||||
build_path = /obj/item/clothing/glasses/hud/health/night
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/security_hud
|
||||
name = "Security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
|
||||
id = "security_hud"
|
||||
req_tech = list("magnets" = 3, "combat" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/hud/security
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/security_hud_night
|
||||
name = "Night Vision Security HUD"
|
||||
desc = "A heads-up display which provides id data and vision in complete darkness."
|
||||
id = "security_hud_night"
|
||||
req_tech = list("magnets" = 5, "combat" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350)
|
||||
build_path = /obj/item/clothing/glasses/hud/security/night
|
||||
category = list("Equipement")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Test///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/* test
|
||||
name = "Test Design"
|
||||
desc = "A design to test the new protolathe."
|
||||
id = "protolathe_test"
|
||||
build_type = PROTOLATHE
|
||||
req_tech = list("materials" = 1)
|
||||
materials = list("$gold" = 3000, "iron" = 15, "copper" = 10, "$silver" = 2500)
|
||||
build_path = /obj/item/weapon/banhammer"
|
||||
category = list("Weapons") */
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Misc///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/welding_mask
|
||||
/datum/design/welding_mask
|
||||
name = "Welding Gas Mask"
|
||||
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
|
||||
id = "weldingmask"
|
||||
@@ -295,8 +296,9 @@ datum/design/welding_mask
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4000, "$glass" = 1000)
|
||||
build_path = /obj/item/clothing/mask/gas/welding
|
||||
category = list("Equipement")
|
||||
|
||||
datum/design/mesons
|
||||
/datum/design/mesons
|
||||
name = "Optical Meson Scanners"
|
||||
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
|
||||
id = "mesons"
|
||||
@@ -304,8 +306,9 @@ datum/design/mesons
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 300, "$plasma" = 100)
|
||||
build_path = /obj/item/clothing/glasses/meson
|
||||
category = list("Equipement")
|
||||
|
||||
datum/design/night_vision_goggles
|
||||
/datum/design/night_vision_goggles
|
||||
name = "Night Vision Goggles"
|
||||
desc = "Goggles that let you see through darkness unhindered."
|
||||
id = "night_visision_goggles"
|
||||
@@ -313,8 +316,9 @@ datum/design/night_vision_goggles
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 100, "$glass" = 100, "$uranium" = 1000)
|
||||
build_path = /obj/item/clothing/glasses/night
|
||||
category = list("Equipement")
|
||||
|
||||
datum/design/magboots
|
||||
/datum/design/magboots
|
||||
name = "Magnetic Boots"
|
||||
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
|
||||
id = "magboots"
|
||||
@@ -322,23 +326,13 @@ datum/design/magboots
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4500, "$silver" = 1500, "$gold" = 2500)
|
||||
build_path = /obj/item/clothing/shoes/magboots
|
||||
|
||||
datum/design/drone_shell
|
||||
name = "Drone Shell"
|
||||
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
|
||||
id = "drone_shell"
|
||||
req_tech = list("programming" = 2, "biotech" = 4)
|
||||
build_type = MECHFAB
|
||||
materials = list("$metal" = 800, "$glass" = 350)
|
||||
construction_time=150
|
||||
build_path = /obj/item/drone_shell
|
||||
category = list("Misc")
|
||||
category = list("Equipement")
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Janitor Designs//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
datum/design/advmop
|
||||
/datum/design/advmop
|
||||
name = "Advanced Mop"
|
||||
desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
|
||||
id = "advmop"
|
||||
@@ -346,12 +340,14 @@ datum/design/advmop
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2500, "$glass" = 200)
|
||||
build_path = /obj/item/weapon/mop/advanced
|
||||
category = list("Equipement")
|
||||
|
||||
datum/design/holosign
|
||||
/datum/design/holosign
|
||||
name = "Holographic Sign Projector"
|
||||
desc = "A holograpic projector used to project various warning signs."
|
||||
id = "holosign"
|
||||
req_tech = list("magnets" = 3, "powerstorage" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 1000)
|
||||
build_path = /obj/item/weapon/holosign_creator
|
||||
build_path = /obj/item/weapon/holosign_creator
|
||||
category = list("Equipement")
|
||||
|
||||
@@ -594,7 +594,10 @@
|
||||
construction_time = 500
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
//Cyborg Upgrade Modules
|
||||
/////////////////////////////////////////
|
||||
//////////////Borg Upgrades//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/borg_upgrade_reset
|
||||
name = "Cyborg Upgrade Module (Reset Module)"
|
||||
id = "borg_upgrade_reset"
|
||||
@@ -649,6 +652,17 @@
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_syndicate_module
|
||||
name = "Borg Illegal Weapons Upgrade"
|
||||
desc = "Allows for the construction of illegal upgrades for cyborgs"
|
||||
id = "borg_syndicate_module"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 4, "syndicate" = 3)
|
||||
build_path = /obj/item/borg/upgrade/syndicate
|
||||
materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
//Misc
|
||||
/datum/design/mecha_tracking
|
||||
name = "Exosuit Tracking Beacon"
|
||||
@@ -657,4 +671,15 @@
|
||||
build_path =/obj/item/mecha_parts/mecha_tracking
|
||||
materials = list("$metal"=500)
|
||||
construction_time = 50
|
||||
category = list("Misc")
|
||||
|
||||
/datum/design/drone_shell
|
||||
name = "Drone Shell"
|
||||
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
|
||||
id = "drone_shell"
|
||||
req_tech = list("programming" = 2, "biotech" = 4)
|
||||
build_type = MECHFAB
|
||||
materials = list("$metal" = 800, "$glass" = 350)
|
||||
construction_time=150
|
||||
build_path = /obj/item/drone_shell
|
||||
category = list("Misc")
|
||||
@@ -67,6 +67,7 @@ datum/design/pacman
|
||||
reliability = 79
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman
|
||||
category = list("Engineering Machinery")
|
||||
|
||||
datum/design/superpacman
|
||||
name = "Machine Design (SUPERPACMAN-type Generator Board)"
|
||||
@@ -77,6 +78,7 @@ datum/design/superpacman
|
||||
reliability = 76
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman/super
|
||||
category = list("Engineering Machinery")
|
||||
|
||||
datum/design/mrspacman
|
||||
name = "Machine Design (MRSPACMAN-type Generator Board)"
|
||||
@@ -87,3 +89,4 @@ datum/design/mrspacman
|
||||
reliability = 74
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/pacman/mrs
|
||||
category = list("Engineering Machinery")
|
||||
|
||||
@@ -27,8 +27,12 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
|
||||
var/list/categories = list(
|
||||
"Power Designs",
|
||||
"Stock Parts",
|
||||
"Medical Designs",
|
||||
"Bluespace Designs",
|
||||
"Stock Parts",
|
||||
"Equipement",
|
||||
"Mining Designs",
|
||||
"Electronics",
|
||||
"Weapons",
|
||||
"Ammo",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user