Merge remote-tracking branch 'upstream/dev' into pacman

Conflicts:
	code/modules/power/port_gen.dm
This commit is contained in:
mwerezak
2015-02-06 23:32:39 -05:00
874 changed files with 12762 additions and 47419 deletions
+2 -1
View File
@@ -653,6 +653,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=paintball'>Paintball Mode</A><BR>
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>
<A href='?src=\ref[src];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
<A href='?src=\ref[src];secretsfun=launchshuttle'>Launch a shuttle</A><BR>
@@ -948,7 +949,7 @@ var/global/floorIsLava = 0
return 2
return 1
if(M.mind in ticker.mode.syndicates)
if (ticker.mode.config_tag == "nuclear")
if (ticker.mode.config_tag == "mercenary")
return 2
return 1
if(M.mind in ticker.mode.wizards)
+29 -30
View File
@@ -46,6 +46,7 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_admin_create_centcom_report,
/client/proc/check_words, /*displays cult-words*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/rename_silicon, /*properly renames silicons*/
/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*/
@@ -77,7 +78,8 @@ var/list/admin_verbs_admin = list(
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
/client/proc/allow_character_respawn, /* Allows a ghost to respawn */
/client/proc/event_manager_panel
/client/proc/event_manager_panel,
/client/proc/empty_ai_core_toggle_latejoin
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -106,7 +108,8 @@ var/list/admin_verbs_fun = list(
)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
/client/proc/respawn_character
/client/proc/respawn_character,
/client/proc/virus2_editor
)
var/list/admin_verbs_server = list(
/client/proc/Set_Holiday,
@@ -147,8 +150,8 @@ var/list/admin_verbs_debug = list(
/client/proc/reload_admins,
/client/proc/reload_mentors,
/client/proc/restart_controller,
/client/proc/remake_distribution_map,
/client/proc/show_distribution_map,
/client/proc/print_random_map,
/client/proc/create_random_map,
/client/proc/show_plant_genes,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
@@ -282,7 +285,7 @@ var/list/admin_verbs_mentor = list(
if(holder.rights & R_SERVER) verbs += admin_verbs_server
if(holder.rights & R_DEBUG)
verbs += admin_verbs_debug
if(config.debugparanoid && !check_rights(R_ADMIN))
if(config.debugparanoid && !check_rights(R_ADMIN))
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
@@ -308,24 +311,7 @@ var/list/admin_verbs_mentor = list(
admin_verbs_rejuv,
admin_verbs_sounds,
admin_verbs_spawn,
/*Debug verbs added by "show debug verbs"*/
/client/proc/Cell,
/client/proc/do_not_use_these,
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/atmosscan,
/client/proc/powerdebug,
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/jump_to_dead_group,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/kaboom,
/client/proc/splash,
/client/proc/cmd_admin_areatest
debug_verbs
)
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
@@ -608,12 +594,14 @@ var/list/admin_verbs_mentor = list(
var/datum/disease2/disease/D = new /datum/disease2/disease()
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
var/severity = 1
var/greater = input("Is this a lesser, greater, or badmin disease?", "Give Disease") in list("Lesser", "Greater", "Badmin")
switch(greater)
if ("Lesser") severity = 1
if ("Greater") severity = 2
if ("Badmin") severity = 99
D.makerandom(severity)
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
@@ -626,8 +614,8 @@ var/list/admin_verbs_mentor = list(
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //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)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
@@ -706,6 +694,17 @@ var/list/admin_verbs_mentor = list(
if(holder)
src.holder.output_ai_laws()
/client/proc/rename_silicon(mob/living/silicon/S in world)
set name = "Rename Silicon"
set category = "Admin"
if(holder)
var/new_name = trim_strip_input(src, "Enter new name. Leave blank or as is to cancel.", "Enter new silicon name", S.real_name)
if(new_name && new_name != S.real_name)
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
S.SetName(new_name)
feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//---- bs12 verbs ----
+17 -1
View File
@@ -643,6 +643,12 @@
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Dionaea;jobban4=\ref[M]'>Dionaea</a></td>"
if(jobban_isbanned(M, "Borer"))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Borer;jobban4=\ref[M]'><font color=red>Borer</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Borer;jobban4=\ref[M]'>Borer</a></td>"
jobs += "</tr></table>"
@@ -1974,7 +1980,7 @@
if(!ticker)
alert("The game hasn't started yet!")
return
var/objective = copytext(sanitize(input("Enter an objective")),1,MAX_MESSAGE_LEN)
var/objective = sanitize(copytext(input("Enter an objective"),1,MAX_MESSAGE_LEN))
if(!objective)
return
feedback_inc("admin_secrets_fun_used",1)
@@ -2393,6 +2399,16 @@
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
if("paintball")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","PB")
for(var/species in all_species)
var/datum/species/S = all_species[species]
S.blood_color = "rainbow"
for(var/obj/effect/decal/cleanable/blood/B in world)
B.basecolor = "rainbow"
B.update_icon()
message_admins("[key_name_admin(usr)] activated Paintball mode")
if("eagles")//SCRAW
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","EgL")
+7 -82
View File
@@ -1,18 +1,8 @@
#define AHELP_ADMIN 1
#define AHELP_MENTOR 2
#define AHELP_DEV 3
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHELP_MENTOR,\
"Admin - Rule/Gameplay issue" = AHELP_ADMIN,\
"Dev - Bug report" = AHELP_DEV)
/client/proc/adminhelp_admin(message)
adminhelp("Admin - Rule/Gameplay issue", message)
/client/verb/adminhelp(selected_type in adminhelp_categories, msg as text)
/client/verb/adminhelp(msg as text)
set category = "Admin"
set name = "Adminhelp"
@@ -27,18 +17,6 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
/**src.verbs -= /client/verb/adminhelp
spawn(1200)
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
**/
if(!msg || alert("The following message will be sent to staff that administers\n the '[selected_type]' category:\n\n[msg]\n", "Admin Help", "Ok", "Cancel") == "Cancel")
return
var/selected_upper = uppertext(selected_type)
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
@@ -109,62 +87,12 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
var/ai_cl
if(ai_found)
ai_cl = " (<A HREF='?_src_=holder;adminchecklaws=\ref[mob]'>CL</A>)"
var/mentor_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_cl]:</b> [msg]"
var/dev_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 3, 0, 1, 0)][ai_cl]:</b> [msg]"
msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
var/mentor_msg = "\blue <b><font color=red>Request for Help: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_cl]:</b> [msg]"
msg = "\blue <b><font color=red>Request for Help:: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
var/admin_number_afk = 0
var/list/mentorholders = list()
var/list/debugholders = list()
var/list/adminholders = list()
for(var/client/X in admins)
if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors
mentorholders += X
if(X.is_afk())
admin_number_afk++
if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors
debugholders += X
if(!(R_ADMIN & X.holder.rights))
if(X.is_afk())
admin_number_afk++
if(R_ADMIN | R_MOD & X.holder.rights) // just admins here please
adminholders += X
if(X.is_afk())
admin_number_afk++
switch(adminhelp_categories[selected_type])
if(AHELP_MENTOR)
if(mentorholders.len)
for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << mentor_msg
if(adminholders.len)
for(var/client/X in adminholders) // Admins get the full monty
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if(AHELP_ADMIN)
if(adminholders.len)
for(var/client/X in adminholders) // Admins of course get everything in their helps
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
if(AHELP_DEV)
if(debugholders.len)
for(var/client/X in debugholders)
if(R_ADMIN | R_MOD & X.holder.rights) // Admins get every button & special highlights in theirs
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << msg
else
if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports.
if(X.prefs.toggles & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X << dev_msg
/*for(var/client/X in admins)
if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
@@ -173,20 +101,17 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
if(X.holder.rights == R_MENTOR)
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
else
X << msg*/
X << msg
//show it to the person adminhelping too
src << "<font color='blue'>PM to-<b>Staff ([selected_type])</b>: [original_msg]</font>"
src << "<font color='blue'>PM to-<b>Staff </b>: [original_msg]</font>"
var/admin_number_present = admins.len - admin_number_afk
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0)
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
else
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]")
send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)]")
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
#undef AHELP_ADMIN
#undef AHELP_MENTOR
#undef AHELP_DEV
+1 -1
View File
@@ -96,7 +96,7 @@
if(sender)
C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
else
adminhelp_admin(reply) //sender has left, adminhelp instead
adminhelp(reply) //sender has left, adminhelp instead
return
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "PM", src) + " to <span class='name'>[get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]</span>: <span class='message'>[msg]</span></span></span>"
C << "<span class='pm'><span class='in'>" + create_text_tag("pm_in", "", C) + " <b>\[[recieve_pm_type] PM\]</b> <span class='name'>[get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]</span>: <span class='message'>[msg]</span></span></span>"
+2 -2
View File
@@ -4,7 +4,7 @@
set hidden = 1
if(!check_rights(R_ADMIN)) return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
if(!msg) return
log_admin("[key_name(src)] : [msg]")
@@ -23,7 +23,7 @@
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("MOD: [key_name(src)] : [msg]")
if (!msg)
+267
View File
@@ -0,0 +1,267 @@
/proc/togglebuildmode(mob/M as mob in player_list)
set name = "Toggle Build Mode"
set category = "Special Verbs"
if(M.client)
if(M.client.buildmode)
log_admin("[key_name(usr)] has left build mode.")
M.client.buildmode = 0
M.client.show_popup_menus = 1
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == M.client)
del(H)
else
log_admin("[key_name(usr)] has entered build mode.")
M.client.buildmode = 1
M.client.show_popup_menus = 0
var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder()
var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H)
A.master = H
var/obj/effect/bmode/buildhelp/B = new/obj/effect/bmode/buildhelp(H)
B.master = H
var/obj/effect/bmode/buildmode/C = new/obj/effect/bmode/buildmode(H)
C.master = H
var/obj/effect/bmode/buildquit/D = new/obj/effect/bmode/buildquit(H)
D.master = H
H.builddir = A
H.buildhelp = B
H.buildmode = C
H.buildquit = D
M.client.screen += A
M.client.screen += B
M.client.screen += C
M.client.screen += D
H.cl = M.client
/obj/effect/bmode//Cleaning up the tree a bit
density = 1
anchored = 1
layer = 20
dir = NORTH
icon = 'icons/misc/buildmode.dmi'
var/obj/effect/bmode/buildholder/master = null
/obj/effect/bmode/builddir
icon_state = "build"
screen_loc = "NORTH,WEST"
Click()
switch(dir)
if(NORTH)
set_dir(EAST)
if(EAST)
set_dir(SOUTH)
if(SOUTH)
set_dir(WEST)
if(WEST)
set_dir(NORTHWEST)
if(NORTHWEST)
set_dir(NORTH)
return 1
/obj/effect/bmode/buildhelp
icon = 'icons/misc/buildmode.dmi'
icon_state = "buildhelp"
screen_loc = "NORTH,WEST+1"
Click()
switch(master.cl.buildmode)
if(1)
usr << "\blue ***********************************************************"
usr << "\blue Left Mouse Button = Construct / Upgrade"
usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
usr << "\blue Left Mouse Button + ctrl = R-Window"
usr << "\blue Left Mouse Button + alt = Airlock"
usr << ""
usr << "\blue Use the button in the upper left corner to"
usr << "\blue change the direction of built objects."
usr << "\blue ***********************************************************"
if(2)
usr << "\blue ***********************************************************"
usr << "\blue Right Mouse Button on buildmode button = Set object type"
usr << "\blue Left Mouse Button on turf/obj = Place objects"
usr << "\blue Right Mouse Button = Delete objects"
usr << ""
usr << "\blue Use the button in the upper left corner to"
usr << "\blue change the direction of built objects."
usr << "\blue ***********************************************************"
if(3)
usr << "\blue ***********************************************************"
usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
usr << "\blue ***********************************************************"
if(4)
usr << "\blue ***********************************************************"
usr << "\blue Left Mouse Button on turf/obj/mob = Select"
usr << "\blue Right Mouse Button on turf/obj/mob = Throw"
usr << "\blue ***********************************************************"
return 1
/obj/effect/bmode/buildquit
icon_state = "buildquit"
screen_loc = "NORTH,WEST+3"
Click()
togglebuildmode(master.cl.mob)
return 1
/obj/effect/bmode/buildholder
density = 0
anchored = 1
var/client/cl = null
var/obj/effect/bmode/builddir/builddir = null
var/obj/effect/bmode/buildhelp/buildhelp = null
var/obj/effect/bmode/buildmode/buildmode = null
var/obj/effect/bmode/buildquit/buildquit = null
var/atom/movable/throw_atom = null
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
var/varholder = "name"
var/valueholder = "derp"
var/objholder = /obj/structure/closet
Click(location, control, params)
var/list/pa = params2list(params)
if(pa.Find("left"))
switch(master.cl.buildmode)
if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 4
src.icon_state = "buildmode4"
if(4)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
else if(pa.Find("right"))
switch(master.cl.buildmode)
if(1)
return 1
if(2)
objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
if(!ispath(objholder))
objholder = /obj/structure/closet
alert("That path is not allowed.")
else
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
objholder = /obj/structure/closet
if(3)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
return 1
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return 1
switch(thetype)
if("text")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
if("number")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
if("mob-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
if("obj-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
return 1
/proc/build_click(var/mob/user, buildmode, params, var/obj/object)
var/obj/effect/bmode/buildholder/holder = null
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == user.client)
holder = H
break
if(!holder) return
var/list/pa = params2list(params)
switch(buildmode)
if(1)
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
if(istype(object,/turf/space))
var/turf/T = object
T.ChangeTurf(/turf/simulated/floor)
return
else if(istype(object,/turf/simulated/floor))
var/turf/T = object
T.ChangeTurf(/turf/simulated/wall)
return
else if(istype(object,/turf/simulated/wall))
var/turf/T = object
T.ChangeTurf(/turf/simulated/wall/r_wall)
return
else if(pa.Find("right"))
if(istype(object,/turf/simulated/wall))
var/turf/T = object
T.ChangeTurf(/turf/simulated/floor)
return
else if(istype(object,/turf/simulated/floor))
var/turf/T = object
T.ChangeTurf(/turf/space)
return
else if(istype(object,/turf/simulated/wall/r_wall))
var/turf/T = object
T.ChangeTurf(/turf/simulated/wall)
return
else if(istype(object,/obj))
del(object)
return
else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left"))
new/obj/machinery/door/airlock(get_turf(object))
else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("left"))
switch(holder.builddir.dir)
if(NORTH)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(NORTH)
if(SOUTH)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(SOUTH)
if(EAST)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(EAST)
if(WEST)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(WEST)
if(NORTHWEST)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(NORTHWEST)
if(2)
if(pa.Find("left"))
if(ispath(holder.buildmode.objholder,/turf))
var/turf/T = get_turf(object)
T.ChangeTurf(holder.buildmode.objholder)
else
var/obj/A = new holder.buildmode.objholder (get_turf(object))
A.set_dir(holder.builddir.dir)
else if(pa.Find("right"))
if(isobj(object)) del(object)
if(3)
if(pa.Find("left")) //I cant believe this shit actually compiles.
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder
else
usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
if(pa.Find("right"))
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder])
else
usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
if(4)
if(pa.Find("left"))
if(istype(object, /atom/movable))
holder.throw_atom = object
if(pa.Find("right"))
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
+2 -2
View File
@@ -25,11 +25,11 @@
if (src.holder.rights & R_MENTOR)
stafftype = "MENTOR"
if (src.holder.rights & R_ADMIN)
stafftype = "ADMIN"
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
log_admin("[key_name(src)] : [msg]")
if (!msg)
+10 -10
View File
@@ -736,8 +736,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_syndicate_commando()
if("nanotrasen representative")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/representative(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(M), slot_l_ear)
@@ -761,8 +761,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(W, slot_wear_id)
if("nanotrasen officer")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear)
M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
@@ -786,8 +786,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("nanotrasen captain")
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom_captain(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear)
M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head)
@@ -834,7 +834,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(M), slot_r_store)
@@ -983,7 +983,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!M.loc.loc)
continue
if(istype(M.loc.loc,/area/engine/engine_room))
if(istype(M.loc.loc,/area/engineering/engine_room))
if(istype(M,/obj/machinery/power/rad_collector))
var/obj/machinery/power/rad_collector/Rad = M
Rad.anchored = 1
@@ -1007,7 +1007,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
Pump.air2.gas["nitrogen"] = 3750 //The contents of 2 canisters.
Pump.air2.temperature = 50
Pump.air2.update_values()
Pump.on=1
Pump.use_power=1
Pump.target_pressure = 4500
Pump.update_icon()
@@ -1022,7 +1022,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
SMES.input_level = 200000
SMES.output_level = 75000
else if(istype(M.loc.loc,/area/engine/engine_smes)) //Set every SMES to charge and spit out 300,000 power between the 4 of them.
else if(istype(M.loc.loc,/area/engineering/engine_smes)) //Set every SMES to charge and spit out 300,000 power between the 4 of them.
if(istype(M,/obj/machinery/power/smes))
var/obj/machinery/power/smes/SMES = M
SMES.input_attempt = 1
+3 -3
View File
@@ -6,7 +6,7 @@
usr << "\red Speech is currently admin-disabled."
return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))
if(!msg) return
if(usr.client)
@@ -29,14 +29,14 @@
//log_admin("HELP: [key_name(src)]: [msg]")
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
/proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
+1 -1
View File
@@ -19,7 +19,7 @@ var/global/sent_strike_team = 0
var/input = null
while(!input)
input = copytext(sanitize(input(src, "Please specify which mission the death commando squad shall undertake.", "Specify Mission", "")),1,MAX_MESSAGE_LEN)
input = sanitize(copytext(input(src, "Please specify which mission the death commando squad shall undertake.", "Specify Mission", ""),1,MAX_MESSAGE_LEN))
if(!input)
if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes")
return
@@ -24,7 +24,7 @@ var/global/sent_syndicate_strike_team = 0
var/input = null
while(!input)
input = copytext(sanitize(input(src, "Please specify which mission the strike team shall undertake.", "Specify Mission", "")),1,MAX_MESSAGE_LEN)
input = sanitize(copytext(input(src, "Please specify which mission the strike team shall undertake.", "Specify Mission", ""),1,MAX_MESSAGE_LEN))
if(!input)
if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes")
return
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
w_class = 2.0
matter = list("metal" = 100)
throwforce = 2
+1 -1
View File
@@ -6,7 +6,7 @@
w_class = 3.0
throw_speed = 2
throw_range = 4
flags = FPRINT | TABLEPASS| CONDUCT //Copied this from old code, so this may or may not be necessary
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
+1 -1
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
item_state = "assembly"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
throwforce = 5
w_class = 2.0
throw_speed = 3
-1
View File
@@ -168,7 +168,6 @@
var/visible = 0.0
var/left = null
anchored = 1.0
flags = TABLEPASS
/obj/effect/beam/i_beam/proc/hit()
+1 -1
View File
@@ -6,7 +6,7 @@
var/obj/item/device/radio/electropack/part2 = null
var/status = 0
w_class = 5.0
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
/obj/item/assembly/shock_kit/Del()
del(part1)
+2 -2
View File
@@ -219,11 +219,11 @@
/obj/effect/landmark/corpse/commander
name = "Commander"
corpseuniform = /obj/item/clothing/under/rank/centcom_commander
corpseuniform = /obj/item/clothing/under/rank/centcom_captain
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
corpseradio = /obj/item/device/radio/headset/heads/captain
corpseglasses = /obj/item/clothing/glasses/eyepatch
corpsemask = /obj/item/clothing/mask/cigarette/cigar/cohiba
corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
corpsehelmet = /obj/item/clothing/head/centhat
corpsegloves = /obj/item/clothing/gloves/swat
corpseshoes = /obj/item/clothing/shoes/swat
+9 -1
View File
@@ -643,7 +643,7 @@ datum/preferences
if(restricted)
if(restricted == 1)
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='http://baystation12.net/forums/viewtopic.php?f=46&t=5319'>the forums</a>.</small></b></font></br>"
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='?src=\ref[user];preference=open_whitelist_forum'>the forums</a>.</small></b></font></br>"
else if(restricted == 2)
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race..</small></b></font></br>"
if(!restricted || check_rights(R_ADMIN, 0))
@@ -872,6 +872,14 @@ datum/preferences
if(!user) return
if(!istype(user, /mob/new_player)) return
if(href_list["preference"] == "open_whitelist_forum")
if(config.forumurl)
user << link(config.forumurl)
else
user << "<span class='danger'>The forum URL is not set in the server configuration.</span>"
return
if(href_list["preference"] == "job")
switch(href_list["task"])
if("close")
+21 -5
View File
@@ -288,6 +288,12 @@ var/global/list/gear_datums = list()
slot = slot_w_uniform
cost = 3
/datum/gear/blackjumpskirt
display_name = "jumpskirt, black"
path = /obj/item/clothing/under/blackjumpskirt
slot = slot_w_uniform
cost = 2
/datum/gear/skirt_blue
display_name = "plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
@@ -464,7 +470,7 @@ var/global/list/gear_datums = list()
/datum/gear/bomber
display_name = "bomber jacket"
path = /obj/item/clothing/suit/storage/bomber
path = /obj/item/clothing/suit/storage/toggle/bomber
cost = 4
slot = slot_wear_suit
@@ -492,12 +498,22 @@ var/global/list/gear_datums = list()
cost = 3
slot = slot_wear_suit
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
cost = 3
slot = slot_wear_suit
/datum/gear/hoodie
display_name = "hoodie, grey"
path = /obj/item/clothing/suit/hoodie
path = /obj/item/clothing/suit/storage/toggle/hoodie
cost = 2
slot = slot_wear_suit
/datum/gear/hoodie/black
display_name = "hoodie, black"
path = /obj/item/clothing/suit/storage/toggle/hoodie/black
/datum/gear/unathi_mantle
display_name = "hide mantle (Unathi)"
path = /obj/item/clothing/suit/unathi/mantle
@@ -517,7 +533,7 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
/datum/gear/gponcho
/datum/gear/bponcho
display_name = "poncho, blue"
path = /obj/item/clothing/suit/poncho/blue
cost = 3
@@ -529,7 +545,7 @@ var/global/list/gear_datums = list()
cost = 3
slot = slot_wear_suit
/datum/gear/rponcho
/datum/gear/pponcho
display_name = "poncho, purple"
path = /obj/item/clothing/suit/poncho/purple
cost = 3
@@ -657,7 +673,7 @@ var/global/list/gear_datums = list()
/datum/gear/dress_shoes
display_name = "shoes, dress"
path = /obj/item/clothing/shoes/centcom
path = /obj/item/clothing/shoes/laceup
cost = 1
slot = slot_shoes
+19 -15
View File
@@ -23,9 +23,8 @@
return 0
if(species_restricted && istype(M,/mob/living/carbon/human))
var/wearable = null
var/exclusive = null
var/wearable = null
var/mob/living/carbon/human/H = M
if("exclude" in species_restricted)
@@ -39,13 +38,15 @@
if(H.species.name in species_restricted)
wearable = 1
if(!wearable && (slot != 15 && slot != 16)) //Pockets.
M << "\red Your species cannot wear [src]."
if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store)))
H << "<span class='danger'>Your species cannot wear [src].</span>"
return 0
return 1
/obj/item/clothing/proc/refit_for_species(var/target_species)
if(!species_restricted)
return //this item doesn't use the species_restricted system
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
@@ -65,6 +66,9 @@
icon = initial(icon)
/obj/item/clothing/head/helmet/refit_for_species(var/target_species)
if(!species_restricted)
return //this item doesn't use the species_restricted system
//Set species_restricted list
switch(target_species)
if("Skrell")
@@ -227,7 +231,7 @@ BLIND // can't see anything
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
name = "mangled [name]"
name = "modified [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
@@ -352,6 +356,7 @@ BLIND // can't see anything
permeability_coefficient = 0.50
slowdown = SHOES_SLOWDOWN
force = 2
species_restricted = list("exclude","Unathi","Tajara")
sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi')
@@ -366,7 +371,6 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -387,7 +391,6 @@ BLIND // can't see anything
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
flags = FPRINT | TABLEPASS
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = 3
@@ -400,8 +403,6 @@ BLIND // can't see anything
*/
var/obj/item/clothing/tie/hastie = null
var/displays_id = 1
var/rolled_down = 0
var/basecolor
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
/obj/item/clothing/under/update_clothing_icon()
@@ -527,11 +528,14 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(copytext(item_color,-2) != "_d")
basecolor = item_color
if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi'))
body_parts_covered = "[basecolor]" ? LEGS|LOWER_TORSO : UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
if(initial(item_color) + "_d_s" in icon_states('icons/mob/uniform.dmi'))
if (item_color == initial(item_color))
body_parts_covered &= LOWER_TORSO|LEGS|FEET
item_color = "[initial(item_color)]_d"
else
body_parts_covered = initial(body_parts_covered)
item_color = initial(item_color)
update_clothing_icon()
else
usr << "<span class='notice'>You cannot roll down the uniform!</span>"
+1 -1
View File
@@ -7,7 +7,7 @@
desc = "Some stuff worn by skrell to adorn their head tentacles."
icon = 'icons/obj/clothing/ears.dmi'
w_class = 1
slot_flags = SLOT_EARS | SLOT_TWOEARS
slot_flags = SLOT_EARS
species_restricted = list("Skrell")
/obj/item/clothing/ears/skrell/chain
@@ -1,87 +0,0 @@
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
if(istype(src, /obj/item/clothing/gloves/boxing)) //quick fix for stunglove overlay not working nicely with boxing gloves.
user << "<span class='notice'>That won't work.</span>" //i'm not putting my lips on that!
..()
return
//add wires
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if (clipped)
user << "<span class='notice'>The [src] are too badly mangled for wiring.</span>"
return
if(wired)
user << "<span class='notice'>The [src] are already wired.</span>"
return
if(C.get_amount() < 2)
user << "<span class='notice'>There is not enough wire to cover the [src].</span>"
return
C.use(2)
wired = 1
siemens_coefficient = 3.0
user << "<span class='notice'>You wrap some wires around the [src].</span>"
update_icon()
return
//add cell
else if(istype(W, /obj/item/weapon/cell))
if(!wired)
user << "<span class='notice'>The [src] need to be wired first.</span>"
else if(!cell)
user.drop_item()
W.loc = src
cell = W
user << "<span class='notice'>You attach the [cell] to the [src].</span>"
update_icon()
else
user << "<span class='notice'>A [cell] is already attached to the [src].</span>"
return
else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
//stunglove stuff
if(cell)
cell.updateicon()
user << "<span class='notice'>You cut the [cell] away from the [src].</span>"
cell.loc = get_turf(src.loc)
cell = null
update_icon()
return
if(wired) //wires disappear into the void because fuck that shit
wired = 0
siemens_coefficient = initial(siemens_coefficient)
user << "<span class='notice'>You cut the wires away from the [src].</span>"
update_icon()
return
//clipping fingertips
if(!clipped)
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
name = "mangled [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
species_restricted -= "Tajara"
return
else
user << "<span class='notice'>The [src] have already been clipped!</span>"
update_icon()
return
return
..()
/obj/item/clothing/gloves/update_icon()
..()
overlays.Cut()
if(wired)
overlays += "gloves_wire"
if(cell)
overlays += "gloves_cell"
+3 -4
View File
@@ -2,7 +2,6 @@
name = "hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
icon_state = "hardhat0_yellow"
flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on
light_overlay = "hardhat_light"
@@ -21,7 +20,7 @@
item_state = "hardhat0_red"
item_color = "red"
name = "firefighter helmet"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -29,11 +28,11 @@
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
item_color = "white"
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
item_color = "dblue"
item_color = "dblue"
+7 -7
View File
@@ -2,7 +2,7 @@
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts."
icon_state = "helmet"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | THICKMATERIAL
flags = HEADCOVERSEYES | THICKMATERIAL
item_state = "helmet"
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -39,7 +39,7 @@
desc = "It's a helmet specifically designed to protect against close range attacks."
icon_state = "riot"
item_state = "helmet"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEEARS
siemens_coefficient = 0.7
@@ -48,7 +48,7 @@
name = "\improper SWAT helmet"
desc = "They're often used by highly trained Swat Members."
icon_state = "swat"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "swat"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -60,7 +60,7 @@
name = "\improper Thunderdome helmet"
desc = "<i>'Let the battle commence!'</i>"
icon_state = "thunderdome"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
@@ -71,7 +71,7 @@
name = "gladiator helmet"
desc = "Ave, Imperator, morituri te salutant."
icon_state = "gladiator"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 1
@@ -81,7 +81,7 @@
desc = "An armored helmet capable of being fitted with a multitude of attachments."
icon_state = "swathelm"
item_state = "helmet"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
@@ -95,7 +95,7 @@
name = "Augment Array"
desc = "A helmet with optical and cranial augments coupled to it."
icon_state = "v62"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "v62"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
+11 -14
View File
@@ -6,7 +6,6 @@
icon_state = "chefhat"
item_state = "chefhat"
desc = "The commander in chef's head wear."
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
//Captain: This probably shouldn't be space-worthy
@@ -14,7 +13,6 @@
name = "captain's hat"
icon_state = "captain"
desc = "It's good being the king."
flags = FPRINT|TABLEPASS
item_state = "caphat"
siemens_coefficient = 0.9
@@ -23,7 +21,6 @@
name = "captain's cap"
desc = "You fear to wear it for the negligence it brings."
icon_state = "capcap"
flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
cold_protection = HEAD
@@ -36,7 +33,7 @@
name = "chaplain's hood"
desc = "It's hood that covers the head. It keeps you warm during the space winters."
icon_state = "chaplain_hood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
body_parts_covered = HEAD|EYES
@@ -45,7 +42,7 @@
name = "nun hood"
desc = "Maximum piety in this star system."
icon_state = "nun_hood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
//Mime
@@ -53,7 +50,6 @@
name = "beret"
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -62,40 +58,41 @@
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "beret_badge"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/alt
name = "officer beret"
desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "officerberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/hos
name = "officer beret"
desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "hosberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/warden
name = "warden beret"
desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "wardenberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/eng
name = "engineering beret"
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
icon_state = "e_beret_badge"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/jan
name = "purple beret"
desc = "A stylish, if purple, beret."
icon_state = "purpleberet"
flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/officer
name = "officers beret"
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
icon_state = "centcomofficerberet"
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces."
icon_state = "centcomcaptain"
//Medical
/obj/item/clothing/head/surgery
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
flags = BLOCKHEADHAIR
/obj/item/clothing/head/surgery/purple
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple."
+10 -26
View File
@@ -4,7 +4,6 @@
name = "\improper CentComm. hat"
icon_state = "centcom"
desc = "It's good to be emperor."
flags = FPRINT|TABLEPASS
item_state = "centhat"
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -14,7 +13,6 @@
icon_state = "hairflower"
desc = "Smells nice."
item_state = "hairflower"
flags = FPRINT|TABLEPASS
slot_flags = SLOT_HEAD | SLOT_EARS
body_parts_covered = 0
@@ -29,7 +27,6 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -37,21 +34,18 @@
name = "redcoat's hat"
icon_state = "redcoat"
desc = "<i>'I guess it's a redhead.'</i>"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/mailman
name = "station cap"
icon_state = "mailman"
desc = "<i>Choo-choo</i>!"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/plaguedoctorhat
name = "plague doctor's hat"
desc = "These were once used by Plague doctors. They're pretty much useless."
icon_state = "plaguedoctor"
flags = FPRINT | TABLEPASS
permeability_coefficient = 0.01
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -60,14 +54,13 @@
name = "hastur's hood"
desc = "It's unspeakably stylish"
icon_state = "hasturhood"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
flags = HEADCOVERSEYES|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/head/nursehat
name = "nurse's hat"
desc = "It allows quick identification of trained medical personnel."
icon_state = "nursehat"
flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -76,7 +69,7 @@
icon_state = "syndicate"
item_state = "syndicate"
desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -85,7 +78,7 @@
name = "cueball helmet"
desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
icon_state = "cueball"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state="cueball"
flags_inv = 0
body_parts_covered = HEAD|FACE|EYES
@@ -95,7 +88,6 @@
desc = "It's a green bandana with some fine nanotech lining."
icon_state = "greenbandana"
item_state = "greenbandana"
flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
@@ -104,7 +96,7 @@
desc = "A helmet made out of a box."
icon_state = "cardborg_h"
item_state = "cardborg_h"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
@@ -113,7 +105,7 @@
desc = "fight for what's righteous!"
icon_state = "justicered"
item_state = "justicered"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
/obj/item/clothing/head/justice/blue
icon_state = "justiceblue"
@@ -135,7 +127,6 @@
name = "rabbit ears"
desc = "Wearing these makes you looks useless, and only good for your sex appeal."
icon_state = "bunny"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/flatcap
@@ -170,7 +161,6 @@
desc = "Gentleman, elite aboard!"
icon_state = "bowler"
item_state = "bowler"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
//stylish bs12 hats
@@ -180,7 +170,6 @@
icon_state = "bowler_hat"
item_state = "bowler_hat"
desc = "For the gentleman of distinction."
flags = FPRINT|TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/beaverhat
@@ -188,35 +177,30 @@
icon_state = "beaver_hat"
item_state = "beaver_hat"
desc = "Soft felt makes this hat both comfortable and elegant."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/boaterhat
name = "boater hat"
icon_state = "boater_hat"
item_state = "boater_hat"
desc = "The ultimate in summer fashion."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fedora
name = "\improper fedora"
icon_state = "fedora"
item_state = "fedora"
desc = "A sharp, stylish hat."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/feathertrilby
name = "\improper feather trilby"
icon_state = "feather_trilby"
item_state = "feather_trilby"
desc = "A sharp, stylish hat with a feather."
flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fez
name = "\improper fez"
icon_state = "fez"
item_state = "fez"
desc = "You should wear a fez. Fezzes are cool."
flags = FPRINT|TABLEPASS
//end bs12 hats
@@ -225,7 +209,7 @@
desc = "Eeeee~heheheheheheh!"
icon_state = "witch"
item_state = "witch"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 2.0
/obj/item/clothing/head/chicken
@@ -233,7 +217,7 @@
desc = "Bkaw!"
icon_state = "chickenhead"
item_state = "chickensuit"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 0.7
body_parts_covered = HEAD|FACE|EYES
@@ -242,7 +226,7 @@
desc = "Fuzzy."
icon_state = "bearpelt"
item_state = "bearpelt"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 0.7
/obj/item/clothing/head/xenos
@@ -250,7 +234,7 @@
icon_state = "xenos"
item_state = "xenos_helm"
desc = "A helmet made out of chitinous alien hide."
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -260,7 +244,7 @@
desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!"
icon_state = "philosopher_wig"
item_state = "philosopher_wig"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags = BLOCKHAIR
siemens_coefficient = 2.0 //why is it so conductive?!
body_parts_covered = 0
+11 -5
View File
@@ -15,7 +15,7 @@
name = "welding helmet"
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
icon_state = "welding"
flags = (FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH)
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
matter = list("metal" = 3000, "glass" = 1000)
var/up = 0
@@ -58,7 +58,7 @@
name = "cake-hat"
desc = "It's tasty looking!"
icon_state = "cake0"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
var/onfire = 0.0
var/status = 0
var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
@@ -123,7 +123,7 @@
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
item_color = "pumpkin"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES
brightness_on = 2
@@ -137,7 +137,6 @@
name = "kitty ears"
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
flags = FPRINT | TABLEPASS
body_parts_covered = 0
var/icon/mob
var/icon/mob2
@@ -153,4 +152,11 @@
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
var/icon/earbit2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner2")
mob.Blend(earbit, ICON_OVERLAY)
mob2.Blend(earbit2, ICON_OVERLAY)
mob2.Blend(earbit2, ICON_OVERLAY)
/obj/item/clothing/head/richard
name = "chicken mask"
desc = "You can hear the distant sounds of rhythmic electronica."
icon_state = "richard"
body_parts_covered = HEAD|FACE
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+1 -1
View File
@@ -2,7 +2,7 @@
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow color."
icon_state = "cargosoft"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
flags = HEADCOVERSEYES
item_state = "helmet"
item_color = "cargo"
var/flipped = 0
+3 -3
View File
@@ -3,7 +3,7 @@
desc = "LOADSAMONEY"
icon_state = "balaclava"
item_state = "balaclava"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = FACE
w_class = 2
@@ -17,7 +17,7 @@
desc = "Designed to both hide identities and keep your face comfy and warm."
icon_state = "swatclava"
item_state = "balaclava"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
sprite_sheets = list(
@@ -30,7 +30,7 @@
desc = "Worn by robust fighters, flying high to defeat their foes!"
icon_state = "luchag"
item_state = "luchag"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE
w_class = 2
+1 -1
View File
@@ -3,7 +3,7 @@
name = "breath mask"
icon_state = "breath"
item_state = "breath"
flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | AIRTIGHT
flags = MASKCOVERSMOUTH | AIRTIGHT
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.10
+3 -2
View File
@@ -2,7 +2,7 @@
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
icon_state = "gas_alt"
flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = FACE|EYES
w_class = 3.0
@@ -12,6 +12,7 @@
siemens_coefficient = 0.9
var/gas_filter_strength = 1 //For gas mask filters
var/list/filtered_gases = list("phoron", "sleeping_agent")
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/filtered = new
@@ -32,7 +33,7 @@
desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply."
icon_state = "plaguedoctor"
item_state = "gas_mask"
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0)
body_parts_covered = HEAD|FACE
/obj/item/clothing/mask/gas/swat
+9 -11
View File
@@ -3,7 +3,7 @@
desc = "To stop that awful noise."
icon_state = "muzzle"
item_state = "muzzle"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.90
@@ -20,17 +20,16 @@
icon_state = "sterile"
item_state = "sterile"
w_class = 2
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
body_parts_covered = 0
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
/obj/item/clothing/mask/fakemoustache
name = "fake moustache"
desc = "Warning: moustache is fake."
icon_state = "fake-moustache"
flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -38,7 +37,6 @@
name = "Snorkel"
desc = "For the Swimming Savant."
icon_state = "snorkel"
flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -49,7 +47,7 @@
desc = "A blue neck scarf."
icon_state = "blueneckscarf"
item_state = "blueneckscarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -58,7 +56,7 @@
desc = "A red and white checkered neck scarf."
icon_state = "redwhite_scarf"
item_state = "redwhite_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -67,7 +65,7 @@
desc = "A green neck scarf."
icon_state = "green_scarf"
item_state = "green_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -76,7 +74,7 @@
desc = "A stealthy, dark scarf."
icon_state = "ninja_scarf"
item_state = "ninja_scarf"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
siemens_coefficient = 0
@@ -86,7 +84,7 @@
desc = "A rubber pig mask."
icon_state = "pig"
item_state = "pig"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 0.9
@@ -97,7 +95,7 @@
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
icon_state = "horsehead"
item_state = "horsehead"
flags = FPRINT|TABLEPASS|BLOCKHAIR
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE|EYES
w_class = 2
+3
View File
@@ -3,6 +3,7 @@
name = "magboots"
icon_state = "magboots0"
species_restricted = null
force = 3
var/magpulse = 0
var/icon_base = "magboots"
icon_action_button = "action_blank"
@@ -13,12 +14,14 @@
flags &= ~NOSLIP
slowdown = SHOES_SLOWDOWN
magpulse = 0
force = 3
if(icon_base) icon_state = "[icon_base]0"
user << "You disable the mag-pulse traction system."
else
flags |= NOSLIP
slowdown = 2
magpulse = 1
force = 5
if(icon_base) icon_state = "[icon_base]1"
user << "You enable the mag-pulse traction system."
user.update_inv_shoes() //so our mob-overlays update
@@ -19,6 +19,7 @@
name = "\improper SWAT shoes"
desc = "When you want to turn up the heat."
icon_state = "swat"
force = 3
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags = NOSLIP
siemens_coefficient = 0.6
@@ -27,6 +28,7 @@
name = "combat boots"
desc = "When you REALLY want to turn up the heat"
icon_state = "swat"
force = 5
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags = NOSLIP
siemens_coefficient = 0.6
@@ -65,6 +67,7 @@
item_state = "clown_shoes"
slowdown = SHOES_SLOWDOWN+1
item_color = "clown"
force = 0
var/footstep = 1 //used for squeeks whilst walking
species_restricted = null
@@ -74,6 +77,7 @@
icon_state = "jackboots"
item_state = "jackboots"
item_color = "hosred"
force = 3
siemens_coefficient = 0.7
/obj/item/clothing/shoes/cult
@@ -82,6 +86,7 @@
icon_state = "cult"
item_state = "cult"
item_color = "cult"
force = 2
siemens_coefficient = 0.7
cold_protection = FEET
@@ -100,6 +105,7 @@
desc = "Fluffy!"
icon_state = "slippers"
item_state = "slippers"
force = 0
species_restricted = null
w_class = 2
@@ -108,6 +114,7 @@
desc = "Fluffy..."
icon_state = "slippers_worn"
item_state = "slippers_worn"
force = 0
w_class = 2
/obj/item/clothing/shoes/laceup
+1 -1
View File
@@ -54,7 +54,7 @@
/obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.6
flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES|STOPPRESSUREDAMAGE
species_restricted = list("Vox","Vox Armalis")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi',
+2 -2
View File
@@ -4,7 +4,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -18,7 +18,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPPRESSUREDAMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -17,7 +17,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPPRESSUREDAMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -34,7 +34,7 @@
icon_state = "deathsquad"
item_state = "deathsquad"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL
siemens_coefficient = 0.6
/obj/item/clothing/head/helmet/space/deathsquad/beret
@@ -42,7 +42,7 @@
desc = "An armored beret commonly used by special operations officers."
icon_state = "beret_badge"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
siemens_coefficient = 0.9
//Space santa outfit suit
@@ -50,7 +50,7 @@
name = "Santa's hat"
desc = "Ho ho ho. Merrry X-mas!"
icon_state = "santahat"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
body_parts_covered = HEAD
/obj/item/clothing/suit/space/santa
@@ -59,10 +59,9 @@
icon_state = "santa"
item_state = "santa"
slowdown = 0
flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
flags = ONESIZEFITSALL | STOPPRESSUREDAMAGE
allowed = list(/obj/item) //for stuffing exta special presents
//Space pirate outfit
/obj/item/clothing/head/helmet/space/pirate
name = "pirate hat"
@@ -70,7 +69,7 @@
icon_state = "pirate"
item_state = "pirate"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE
body_parts_covered = 0
siemens_coefficient = 0.9
@@ -85,5 +84,3 @@
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.9
body_parts_covered = UPPER_TORSO|ARMS
@@ -111,6 +111,16 @@
gun.Fire(target,holder.wearer)
return 1
/obj/item/rig_module/mounted/egun
name = "mounted energy gun"
desc = "A forearm-mounted energy projector."
interface_name = "mounted energy gun"
interface_desc = "A forearm-mounted suit-powered energy gun."
gun_type = /obj/item/weapon/gun/energy/gun/mounted
/obj/item/rig_module/mounted/taser
name = "mounted taser"
@@ -124,7 +134,7 @@
interface_name = "mounted energy gun"
interface_desc = "A shoulder-mounted cell-powered energy gun."
gun_type = /obj/item/weapon/gun/energy/gun/mounted
gun_type = /obj/item/weapon/gun/energy/taser/mounted
/obj/item/rig_module/mounted/energy_blade
@@ -142,6 +152,7 @@
toggleable = 1
use_power_cost = 50
active_power_cost = 5
passive_power_cost = 0
gun_type = /obj/item/weapon/gun/energy/crossbow/ninja
@@ -152,7 +163,7 @@
deactivate()
return 0
..()
return ..()
/obj/item/rig_module/mounted/energy_blade/activate()
@@ -334,6 +334,7 @@
var/atom/interfaced_with // Currently draining power from this device.
var/total_power_drained = 0
var/drain_loc
/obj/item/rig_module/power_sink/deactivate()
@@ -373,6 +374,7 @@
H << "<span class = 'danger'>You begin draining power from [target]!</span>"
interfaced_with = target
drain_loc = interfaced_with.loc
holder.spark_system.start()
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
@@ -406,35 +408,37 @@
drain_complete(H)
return
if(!interfaced_with || !interfaced_with.Adjacent(H))
if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc))
H << "<span class = 'warning'>Your power sink retracts into its casing.</span>"
drain_complete(H)
return
var/target_drained = interfaced_with.drain_power()
if(holder.cell.fully_charged())
H << "<span class = 'warning'>Your power sink flashes an amber light; your rig cell is full.</span>"
drain_complete(H)
return
// Attempts to drain up to 40kW, determines this value from remaining cell capacity to ensure we don't drain too much..
var/to_drain = min(40000, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE))
var/target_drained = interfaced_with.drain_power(0,0,to_drain)
if(target_drained <= 0)
H << "<span class = 'danger'>Your power sink flashes a red light; there is no power left in [interfaced_with].</span>"
drain_complete(H)
return
holder.cell.charge += target_drained
holder.cell.give(target_drained * CELLRATE)
total_power_drained += target_drained
if(holder.cell.charge > holder.cell.maxcharge)
H << "<span class = 'warning'>Your power sink flashes an amber light; your rig cell is full.</span>"
holder.cell.charge = holder.cell.maxcharge
drain_complete(H)
return
return 1
/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M)
if(!interfaced_with)
if(M) M << "<font color='blue'><b>Total power drained:</b> [total_power_drained]W.</font>"
if(M) M << "<font color='blue'><b>Total power drained:</b> [round(total_power_drained/1000)]kJ.</font>"
else
if(M) M << "<font color='blue'><b>Total power drained from [interfaced_with]:</b> [total_power_drained]W.</font>"
interfaced_with.drain_power(0,1) // Damage the victim.
if(M) M << "<font color='blue'><b>Total power drained from [interfaced_with]:</b> [round(total_power_drained/1000)]kJ.</font>"
interfaced_with.drain_power(0,1,0) // Damage the victim.
drain_loc = null
interfaced_with = null
total_power_drained = 0
@@ -147,6 +147,14 @@
usr << "<span class='warning'>The suit is not initialized.</span>"
return 0
if(usr.lying || usr.stat || usr.stunned || usr.paralysis)
usr << "<span class='warning'>You cannot use the suit in this state.</span>"
return 0
if(holder.wearer && holder.wearer.lying)
usr << "<span class='warning'>The suit cannot function while the wearer is prone.</span>"
return 0
if(holder.security_check_enabled && !holder.check_suit_access(usr))
usr << "<span class='danger'>Access denied.</span>"
return
@@ -19,6 +19,7 @@
use_power_cost = 5
active_power_cost = 1
passive_power_cost = 0
module_cooldown = 30
activate_string = "Enable Cloak"
deactivate_string = "Disable Cloak"
@@ -172,14 +173,14 @@
engage()
/obj/item/rig_module/self_destruct/engage()
explosion(get_turf(src), 0, 0, 3, 4)
explosion(get_turf(src), 1, 2, 4, 5)
if(holder && holder.wearer)
holder.wearer.drop_from_inventory(src)
del(holder)
del(src)
/obj/item/rig_module/self_destruct/small/engage()
explosion(get_turf(src), 0, 0, 1, 2)
explosion(get_turf(src), 0, 0, 3, 4)
if(holder && holder.wearer)
holder.wearer.drop_from_inventory(src)
del(holder)
@@ -0,0 +1,51 @@
//Weapon types intended to be used with rig modules
/obj/item/weapon/gun/energy/lasercannon/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
in_chamber = new /obj/item/projectile/beam/heavylaser(src)
return 1
return 0
/obj/item/weapon/gun/energy/gun/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
var/prog_path = text2path(projectile_type)
in_chamber = new prog_path(src)
return 1
return 0
/obj/item/weapon/gun/energy/taser/mounted/load_into_chamber()
if(in_chamber)
return 1
var/obj/item/rig_module/module = loc
if(!istype(module))
return 0
if(module.holder && module.holder.wearer)
var/mob/living/carbon/human/H = module.holder.wearer
if(istype(H) && H.back)
var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
var/prog_path = text2path(projectile_type)
in_chamber = new prog_path(src)
return 1
return 0
+52 -25
View File
@@ -22,6 +22,7 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.1
permeability_coefficient = 0.1
unacidable = 1
var/interface_path = "hardsuit.tmpl"
var/ai_interface_path = "hardsuit.tmpl"
@@ -127,6 +128,7 @@
chest = new chest_type(src)
if(allowed)
chest.allowed = allowed
chest.slowdown = offline_slowdown
verbs |= /obj/item/weapon/rig/proc/toggle_chest
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
@@ -136,11 +138,12 @@
piece.name = "[suit_type] [initial(piece.name)]"
piece.desc = "It seems to be part of a [src.name]."
piece.icon_state = "[initial(icon_state)]"
piece.armor = armor
piece.armor = armor.Copy()
piece.min_cold_protection_temperature = min_cold_protection_temperature
piece.max_heat_protection_temperature = max_heat_protection_temperature
piece.siemens_coefficient = siemens_coefficient
piece.permeability_coefficient = permeability_coefficient
piece.unacidable = unacidable
update_icon(1)
@@ -166,6 +169,16 @@
return 0
return 1
/obj/item/weapon/rig/proc/reset()
offline = 2
canremove = 1
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
if(!piece) continue
piece.icon_state = "[initial(icon_state)]"
piece.flags &= ~STOPPRESSUREDAMAGE
piece.flags &= ~AIRTIGHT
update_icon(1)
/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant)
if(sealing) return
@@ -214,7 +227,7 @@
if(!failed_to_seal && M.back == src && piece == compare_piece)
if(!instant)
if(!do_after(M,SEAL_DELAY))
if(!do_after(M,SEAL_DELAY,needhand=0))
failed_to_seal = 1
piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]"
@@ -235,13 +248,16 @@
if(!seal_target)
if(flags & AIRTIGHT)
helmet.flags |= AIRTIGHT
helmet.flags_inv |= (HIDEEYES|HIDEFACE|HIDEMASK)
helmet.body_parts_covered |= (FACE|EYES)
else
helmet.flags &= ~AIRTIGHT
helmet.flags_inv &= ~(HIDEEYES|HIDEFACE|HIDEMASK)
helmet.body_parts_covered &= ~(FACE|EYES)
helmet.update_light(wearer)
//sealed pieces become airtight, protecting against diseases
if (!seal_target)
piece.armor["bio"] = 100
else
piece.armor["bio"] = src.armor["bio"]
else
failed_to_seal = 1
@@ -259,13 +275,9 @@
if(canremove)
if(flags & AIRTIGHT)
helmet.flags |= AIRTIGHT
helmet.flags_inv |= (HIDEEYES|HIDEFACE)
helmet.body_parts_covered |= (FACE|EYES)
else
if(flags & AIRTIGHT)
helmet.flags &= ~AIRTIGHT
helmet.flags_inv &= ~(HIDEEYES|HIDEFACE)
helmet.body_parts_covered &= ~(FACE|EYES)
update_icon(1)
return 0
@@ -279,19 +291,24 @@
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
if(!piece) continue
if(canremove)
piece.flags &= ~STOPSPRESSUREDMAGE
piece.flags &= ~STOPPRESSUREDAMAGE
piece.flags &= ~AIRTIGHT
else
piece.flags |= STOPSPRESSUREDMAGE
piece.flags |= STOPPRESSUREDAMAGE
piece.flags |= AIRTIGHT
update_icon(1)
if(instant && air_supply)
wearer.internals = air_supply
wearer.internals.icon_state = "internal1"
/obj/item/weapon/rig/process()
// If we've lost any parts, grab them back.
var/mob/living/M
for(var/obj/item/piece in list(gloves,boots,helmet,chest))
if(piece.loc != src && !(wearer && piece.loc == wearer))
if(istype(piece.loc, /mob/living))
M = piece.loc
M.drop_from_inventory(piece)
piece.loc = src
if(!istype(wearer) || loc != wearer || wearer.back != src || canremove || !cell || cell.charge <= 0)
if(!cell || cell.charge <= 0)
if(electrified >0)
@@ -312,14 +329,14 @@
else
if(offline)
offline = 0
slowdown = initial(slowdown)
chest.slowdown = initial(slowdown)
if(offline)
if(offline == 1)
for(var/obj/item/rig_module/module in installed_modules)
module.deactivate()
offline = 2
slowdown = offline_slowdown
chest.slowdown = offline_slowdown
return
if(cell && cell.charge > 0 && electrified > 0)
@@ -498,6 +515,8 @@
return
if(href_list["toggle_piece"])
if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying))
return 0
toggle_piece(href_list["toggle_piece"], usr)
else if(href_list["toggle_seals"])
toggle_seals(usr)
@@ -520,12 +539,21 @@
module.charge_selected = href_list["charge_type"]
else if(href_list["toggle_ai_control"])
ai_override_enabled = !ai_override_enabled
notify_ai("Synthetic suit control has been [ai_override_enabled ? "enabled" : "disabled"].")
else if(href_list["toggle_suit_lock"])
locked = !locked
usr.set_machine(src)
src.add_fingerprint(usr)
return
return 1
/obj/item/weapon/rig/proc/notify_ai(var/message)
if(!message || !installed_modules || !installed_modules.len)
return
for(var/obj/item/rig_module/module in installed_modules)
for(var/mob/living/silicon/ai/ai in module.contents)
if(ai && ai.client && !ai.stat)
ai << "[message]"
/obj/item/weapon/rig/equipped(mob/living/carbon/human/M)
..()
@@ -547,16 +575,15 @@
/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode)
if(sealing)
return
if(!cell || !cell.charge)
H << "<span class='warning'>The suit is out of power.</span>"
if(sealing || !cell || !cell.charge)
return
if(!istype(wearer) || !wearer.back == src)
return
if(usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) // If the usr isn't wearing the suit it's probably an AI.
return
var/obj/item/check_slot
var/equip_to
var/obj/item/use_obj
@@ -708,4 +735,4 @@
#undef ONLY_DEPLOY
#undef ONLY_RETRACT
#undef SEAL_DELAY
#undef SEAL_DELAY
@@ -117,7 +117,10 @@
user << "There is not tank to remove."
return
user.put_in_hands(air_supply)
if(user.r_hand && user.l_hand)
air_supply.loc = get_turf(user)
else
user.put_in_hands(air_supply)
user << "You detach and remove \the [air_supply]."
air_supply = null
return
@@ -146,7 +149,10 @@
user << "You detatch \the [cell] from \the [src]'s battery mount."
for(var/obj/item/rig_module/module in installed_modules)
module.deactivate()
cell.loc = user.put_in_hands(cell)
if(user.r_hand && user.l_hand)
cell.loc = get_turf(user)
else
cell.loc = user.put_in_hands(cell)
cell = null
else
user << "There is nothing loaded in that mount."
@@ -174,7 +180,7 @@
installed_modules -= removed
update_icon()
return
return
// If we've gotten this far, all we have left to do before we pass off to root procs
// is check if any of the loaded modules want to use the item we've been given.
@@ -4,17 +4,18 @@
/obj/item/clothing/head/helmet/space/rig
name = "helmet"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
flags_inv = HIDEEARS
body_parts_covered = HEAD
heat_protection = HEAD
cold_protection = HEAD
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
heat_protection = HEAD|FACE|EYES
cold_protection = HEAD|FACE|EYES
brightness_on = 4
sprite_sheets = list("Tajara" = 'icons/mob/species/tajaran/helmet.dmi',"Skrell" = 'icons/mob/species/skrell/helmet.dmi',"Unathi" = 'icons/mob/species/unathi/helmet.dmi')
species_restricted = null
/obj/item/clothing/gloves/rig
name = "gauntlets"
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
body_parts_covered = HANDS
heat_protection = HANDS
cold_protection = HANDS
@@ -36,10 +37,11 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT|HIDETAIL
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
slowdown = 0
breach_threshold = 35
can_breach = 1
sprite_sheets = list("Tajara" = 'icons/mob/species/tajaran/suit.dmi',"Unathi" = 'icons/mob/species/unathi/suit.dmi')
supporting_limbs = list()
//TODO: move this to modules
@@ -64,4 +66,4 @@
if(module.engage(A))
return 1
return 0
return 0
@@ -120,8 +120,8 @@
/obj/item/weapon/rig/verb/toggle_seals_verb()
set name = "Toggle Seals"
set desc = "Activates or deactivates your rig seals."
set name = "Toggle Hardsuit"
set desc = "Activates or deactivates your rig."
set category = "Hardsuit"
set src = usr.contents
@@ -208,6 +208,8 @@
var/obj/item/rig_module/module = input("Which module do you wish to select?") as null|anything in selectable
if(!istype(module))
selected_module = null
usr << "<font color='blue'><b>Primary system is now: deselected.</b></font>"
return
selected_module = module
@@ -23,7 +23,6 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/datajack,
/obj/item/rig_module/mounted
)
/obj/item/weapon/rig/ert/engineer
@@ -62,5 +61,5 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/grenade_launcher,
/obj/item/rig_module/mounted
/obj/item/rig_module/mounted/egun,
)
@@ -7,7 +7,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
slowdown = 0
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
offline_slowdown = 0
offline_vision_restriction = 0
@@ -46,7 +46,7 @@
/obj/item/clothing/head/helmet/space/rig/mask
name = "mask"
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
/obj/item/weapon/rig/light/ninja
name = "ominous suit control module"
@@ -87,4 +87,4 @@
/obj/item/rig_module/teleporter,
/obj/item/rig_module/stealth_field,
/obj/item/rig_module/vision
)
)
@@ -6,7 +6,7 @@
name = "Space helmet"
icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT
item_state = "space"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
@@ -53,7 +53,7 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 3
@@ -91,4 +91,4 @@
for(var/datum/organ/external/E in supporting_limbs)
E.status &= ~ ORGAN_SPLINTED
user << "The suit stops supporting your [E.display_name]."
supporting_limbs = list()
supporting_limbs = list()
+13 -13
View File
@@ -55,6 +55,13 @@
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
..()
if(istype(helmet))
helmet.refit_for_species(target_species)
if(istype(boots))
boots.refit_for_species(target_species)
/obj/item/clothing/suit/space/void/equipped(mob/M)
..()
@@ -68,20 +75,15 @@
if(helmet)
if(H.head)
M << "You are unable to deploy your suit's helmet as \the [H.head] is in the way."
else
else if (H.equip_to_slot_if_possible(helmet, slot_head))
M << "Your suit's helmet deploys with a hiss."
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
if(boots)
if(H.shoes)
M << "You are unable to deploy your suit's magboots as \the [H.shoes] are in the way."
else
else if (H.equip_to_slot_if_possible(boots, slot_shoes))
M << "Your suit's boots deploy with a hiss."
boots.loc = H
H.equip_to_slot(boots, slot_shoes)
boots.canremove = 0
/obj/item/clothing/suit/space/void/dropped()
@@ -132,12 +134,10 @@
if(H.head)
H << "<span class='danger'>You cannot deploy your helmet while wearing another helmet.</span>"
return
//TODO: Species check, skull damage for forcing an unfitting helmet on?
helmet.loc = H
helmet.pickup(H)
H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
H << "<font color='blue'><b>You deploy your suit helmet, sealing you off from the world.</b></font>"
if(H.equip_to_slot_if_possible(helmet, slot_head))
helmet.pickup(H)
helmet.canremove = 0
H << "<font color='blue'><b>You deploy your suit helmet, sealing you off from the world.</b></font>"
helmet.update_light(H)
/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob)
+5 -6
View File
@@ -2,7 +2,7 @@
/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_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | THICKMATERIAL
flags = THICKMATERIAL
cold_protection = UPPER_TORSO|LOWER_TORSO
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
@@ -17,7 +17,7 @@
icon_state = "armor"
item_state = "armor"
blood_overlay_type = "armor"
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/security
@@ -71,7 +71,7 @@
item_state = "swat_suit"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
flags = STOPPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1
@@ -98,7 +98,7 @@
icon_state = "detective-armor"
item_state = "armor"
blood_overlay_type = "armor"
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
flags = ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
@@ -113,7 +113,6 @@
item_state = "reactiveoff"
blood_overlay_type = "armor"
slowdown = 1
flags = FPRINT | TABLEPASS
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/reactive/IsShield()
@@ -259,4 +258,4 @@
/obj/item/clothing/suit/armor/vest/ert/medical
name = "emergency response team medical armor"
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
icon_state = "ertarmor_med"
icon_state = "ertarmor_med"
+1 -2
View File
@@ -4,7 +4,7 @@
icon_state = "bio"
desc = "A hood that protects the head and face from biological comtaminants."
permeability_coefficient = 0.01
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -18,7 +18,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
+15 -14
View File
@@ -36,7 +36,6 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
@@ -45,7 +44,6 @@
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
flags = FPRINT | TABLEPASS
flags_inv = HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
@@ -55,7 +53,7 @@
desc = "Suit for a cyborg costume."
icon_state = "death"
item_state = "death"
flags = FPRINT | TABLEPASS | CONDUCT
flags = CONDUCT
fire_resist = T0C+5200
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -65,7 +63,6 @@
desc = "A heavy great coat"
icon_state = "nazi"
item_state = "nazi"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/johnny_coat
@@ -73,7 +70,6 @@
desc = "Johnny~~"
icon_state = "johnny"
item_state = "johnny"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/justice
@@ -81,7 +77,6 @@
desc = "This pretty much looks ridiculous."
icon_state = "justice"
item_state = "justice"
flags = FPRINT | TABLEPASS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -91,7 +86,6 @@
desc = "This robe commands authority."
icon_state = "judge"
item_state = "judge"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash)
flags_inv = HIDEJUMPSUIT
@@ -120,7 +114,6 @@
item_state = "space_suit_syndicate"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
flags = FPRINT | TABLEPASS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -223,21 +216,18 @@
desc = "A long, thick black leather coat."
icon_state = "leathercoat"
item_state = "leathercoat"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/browncoat
name = "brown leather coat"
desc = "A long, brown leather coat."
icon_state = "browncoat"
item_state = "browncoat"
flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/neocoat
name = "black coat"
desc = "A flowing, black coat."
icon_state = "neocoat"
item_state = "neocoat"
flags = FPRINT | TABLEPASS
//stripper
/obj/item/clothing/under/stripper
@@ -356,12 +346,13 @@
icon_state = "blueponcho"
item_state = "blueponcho"
/obj/item/clothing/suit/storage/bomber
/obj/item/clothing/suit/storage/toggle/bomber
name = "bomber jacket"
desc = "A thick, well-worn WW2 leather bomber jacket."
icon_state = "bomber"
item_state = "bomber"
flags = FPRINT | TABLEPASS
icon_open = "bomber_open"
icon_closed = "bomber"
body_parts_covered = UPPER_TORSO|ARMS
cold_protection = UPPER_TORSO|ARMS
min_cold_protection_temperature = T0C - 20
@@ -394,10 +385,20 @@
icon_open = "brown_jacket_nt_open"
icon_closed = "brown_jacket_nt"
/obj/item/clothing/suit/hoodie
/obj/item/clothing/suit/storage/toggle/hoodie
name = "grey hoodie"
desc = "A warm, grey sweatshirt."
icon_state = "grey_hoodie"
item_state = "grey_hoodie"
icon_open = "grey_hoodie_open"
icon_closed = "grey_hoodie"
min_cold_protection_temperature = T0C - 20
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/suit/storage/toggle/hoodie/black
name = "black hoodie"
desc = "A warm, black sweatshirt."
icon_state = "black_hoodie"
item_state = "black_hoodie"
icon_open = "black_hoodie_open"
icon_closed = "black_hoodie"
+3 -4
View File
@@ -21,7 +21,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
flags = STOPPRESSUREDAMAGE
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -47,7 +47,7 @@
name = "bomb hood"
desc = "Use in case of bomb."
icon_state = "bombsuit"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -62,7 +62,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT|HIDETAIL
@@ -89,7 +88,7 @@
name = "Radiation Hood"
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
-14
View File
@@ -3,7 +3,6 @@
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
@@ -17,21 +16,18 @@
icon_state = "blue"
item_state = "b_suit"
item_color = "blue"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
item_state = "gy_suit"
item_color = "grey"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
@@ -41,35 +37,30 @@
item_color = "orange"
has_sensor = 2
sensor_mode = 3
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
item_state = "p_suit"
item_color = "pink"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
@@ -88,7 +79,6 @@
desc = "aqua"
icon_state = "aqua"
item_color = "aqua"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/purple
name = "purple jumpsuit"
@@ -120,14 +110,12 @@
desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/brown
name = "brown jumpsuit"
desc = "brown"
icon_state = "brown"
item_color = "brown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/yellowgreen
name = "yellowgreen jumpsuit"
@@ -140,7 +128,6 @@
desc = "darkblue"
icon_state = "darkblue"
item_color = "darkblue"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lightred
name = "lightred jumpsuit"
@@ -153,4 +140,3 @@
desc = "darkred"
icon_state = "darkred"
item_color = "darkred"
flags = FPRINT | TABLEPASS
@@ -6,7 +6,6 @@
icon_state = "ba_suit"
item_state = "ba_suit"
item_color = "ba_suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
@@ -15,7 +14,6 @@
icon_state = "captain"
item_state = "caparmor"
item_color = "captain"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/cargo
@@ -32,7 +30,6 @@
icon_state = "cargotech"
item_state = "lb_suit"
item_color = "cargo"
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -42,7 +39,6 @@
icon_state = "chaplain"
item_state = "bl_suit"
item_color = "chapblack"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chef
@@ -50,7 +46,6 @@
name = "chef's uniform"
icon_state = "chef"
item_color = "chef"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/clown
@@ -59,7 +54,6 @@
icon_state = "clown"
item_state = "clown"
item_color = "clown"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/head_of_personnel
@@ -68,7 +62,6 @@
icon_state = "hop"
item_state = "b_suit"
item_color = "hop"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/head_of_personnel_whimsy
desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does."
@@ -76,7 +69,6 @@
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
item_color = "hopwhimsy"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/hydroponics
@@ -86,7 +78,6 @@
item_state = "g_suit"
item_color = "hydroponics"
permeability_coefficient = 0.50
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/internalaffairs
@@ -95,7 +86,6 @@
icon_state = "internalaffairs"
item_state = "internalaffairs"
item_color = "internalaffairs"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/janitor
@@ -104,13 +94,11 @@
icon_state = "janitor"
item_color = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer/black
@@ -176,7 +164,6 @@
icon_state = "mime"
item_state = "mime"
item_color = "mime"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
@@ -6,7 +6,6 @@
item_state = "g_suit"
item_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians."
@@ -14,7 +13,6 @@
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
@@ -23,7 +21,6 @@
item_state = "engi_suit"
item_color = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
@@ -8,7 +8,6 @@
item_state = "g_suit"
item_color = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/research_director/rdalt
desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication."
@@ -17,7 +16,6 @@
item_state = "rdalt"
item_color = "rdalt"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/research_director/dress_rd
name = "research director dress uniform"
@@ -25,7 +23,6 @@
icon_state = "dress_rd"
item_color = "dress_rd"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/rank/scientist
@@ -36,7 +33,6 @@
item_color = "sciencewhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chemist
@@ -68,7 +64,6 @@
item_color = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
@@ -116,28 +111,24 @@
item_color = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/blue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_color = "scrubsblue"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_color = "scrubsgreen"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_color = "scrubspurple"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
@@ -145,7 +136,6 @@
icon_state = "psych"
item_state = "w_suit"
item_color = "psych"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
@@ -153,7 +143,6 @@
icon_state = "psychturtle"
item_state = "b_suit"
item_color = "psychturtle"
flags = FPRINT | TABLEPASS
/*
+1 -8
View File
@@ -15,7 +15,6 @@
item_state = "r_suit"
item_color = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security
@@ -25,7 +24,6 @@
item_state = "r_suit"
item_color = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/dispatch
@@ -35,7 +33,6 @@
item_state = "dispatch"
item_color = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
siemens_coefficient = 0.9
@@ -46,7 +43,6 @@
item_state = "r_suit"
item_color = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
@@ -66,7 +62,6 @@
item_state = "swatunder"
item_color = "swatunder"
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/*
@@ -79,7 +74,6 @@
item_state = "det"
item_color = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/det/black
@@ -122,7 +116,6 @@
item_state = "r_suit"
item_color = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags = FPRINT | TABLEPASS
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
@@ -134,7 +127,7 @@
name = "Head of Security Hat"
desc = "The hat of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
flags = HEADCOVERSEYES
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
flags_inv = HIDEEARS
body_parts_covered = 0
+24 -11
View File
@@ -31,7 +31,6 @@
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/waiter
name = "waiter's outfit"
@@ -39,7 +38,6 @@
icon_state = "waiter"
item_state = "waiter"
item_color = "waiter"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
@@ -63,19 +61,30 @@
item_state = "gy_suit"
item_color = "vice"
/obj/item/clothing/under/rank/centcom_officer
desc = "It's a jumpsuit worn by CentCom Officers."
name = "\improper CentCom officer's jumpsuit"
/obj/item/clothing/under/rank/centcom
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign.\""
name = "\improper NanoTrasen Navy Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_commander
desc = "It's a jumpsuit worn by CentCom's highest-tier Commanders."
name = "\improper CentCom officer's jumpsuit"
/obj/item/clothing/under/rank/centcom_officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander.\""
name = "\improper NanoTrasen Officers Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
name = "\improper NanoTrasen Captains Uniform"
icon_state = "centcom"
item_state = "dg_suit"
item_color = "centcom"
displays_id = 0
/obj/item/clothing/under/ert
name = "ERT tactical uniform"
@@ -93,7 +102,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -106,7 +114,6 @@
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -118,7 +125,6 @@
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
item_color = "owl"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
@@ -400,6 +406,13 @@
item_color = "sundress_white"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/blackjumpskirt
name = "black jumpskirt"
desc = "A black jumpskirt, Sol size 0."
icon_state = "blackjumpskirt"
item_state = "blackjumpskirt"
item_color = "blackjumpskirt"
/obj/item/clothing/under/captainformal
name = "captain's formal uniform"
desc = "A captain's formal-wear, for special occasions."
-1
View File
@@ -2,7 +2,6 @@
name = "athletic shorts"
desc = "95% Polyester, 5% Spandex!"
gender = PLURAL
flags = FPRINT | TABLEPASS
body_parts_covered = LOWER_TORSO
/obj/item/clothing/under/shorts/red
-1
View File
@@ -5,7 +5,6 @@
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_TIE
w_class = 2.0
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
+1 -12
View File
@@ -407,7 +407,6 @@
item_state = "ciglit"
w_class = 1
body_parts_covered = null
flags = FPRINT|TABLEPASS
//Strange penlight, Nerezza: Asher Spock
@@ -787,7 +786,6 @@
name = "colonial marine beret"
desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front."
icon_state = "officerberet"
flags = FPRINT | TABLEPASS
////////////////////////////// Serithi - Adapted Security Helmet //////////////////////////////
@@ -841,7 +839,6 @@
/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle
icon = 'icons/obj/chemical.dmi'
flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first!
New(loc, var/color, var/labeled)
..()
name = "[labeled] bottle"
@@ -1073,7 +1070,6 @@
item_color = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
flags = FPRINT | TABLEPASS
//Suit roll-down toggle.
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
@@ -1137,7 +1133,6 @@
icon_state = "radi_pendant"
item_state = "radi_pendant"
item_color = "radi_pendant"
flags = FPRINT|TABLEPASS
w_class = 2.0
//////////// Masks ////////////
@@ -1149,7 +1144,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "flagmask"
item_state = "flagmask"
flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
*/
@@ -1159,7 +1154,6 @@
desc = "A silver and emerald shamrock pendant. It has the initials \"M.K.\" engraved on the back."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mara_kilpatrick_1"
flags = FPRINT|TABLEPASS
w_class = 2
/////////////// Oen'g Issek Medical Mask //////////////////////////
@@ -1182,7 +1176,6 @@
item_state = "altair_locket"
item_color = "altair_locket"
slot_flags = 0
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1196,7 +1189,6 @@
item_state = "konaahirano"
item_color = "konaahirano"
slot_flags = 0
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
var/obj/item/held //Item inside locket.
@@ -1226,7 +1218,6 @@
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
icon = 'icons/obj/custom_items.dmi'
icon_state = "nasir_khayyam_1"
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1237,7 +1228,6 @@
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
icon = 'icons/obj/custom_items.dmi'
icon_state = "ty_foster"
flags = FPRINT|TABLEPASS
w_class = 2
////// Apollon Pendant - Michael Guess - Dragor23
@@ -1246,7 +1236,6 @@
desc = "A pendant with the form of a sacrificial tripod, used in acient greece. It's a symbol of the Olympian Apollon, a god associated with oracles, poetry, the sun and healing."
icon = 'icons/obj/custom_items.dmi'
icon_state = "michael_guess_1"
flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK
body_parts_covered = 0
+12
View File
@@ -122,6 +122,18 @@
throw_speed = 3
throw_range = 5
/obj/item/weapon/f_card/add_fingerprint(mob/living/M as mob, ignoregloves = 0)
if(..())
var/mob/living/carbon/human/H = M
var/full_print = md5(H.dna.uni_identity)
fingerprints[full_print] = full_print
/obj/item/weapon/f_card/examine(mob/user)
..()
if(fingerprints.len)
user << "<span class='notice'>Fingerprints on this card:</span>"
for(var/print in fingerprints)
user << "<span class='notice'>\t[fingerprints[print]]</span>"
/obj/item/weapon/fcardholder
name = "fingerprint card case"
@@ -23,7 +23,7 @@
possible_transfer_amounts = list(5)
volume = 5
can_be_placed_into = null
flags = FPRINT | TABLEPASS | OPENCONTAINER | NOBLUDGEON
flags = OPENCONTAINER | NOBLUDGEON
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
return
+9 -1
View File
@@ -70,4 +70,12 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
fields["blood"] = blood
fields["area"] = other.fields["area"]
fields["time"] = other.fields["time"]
fields["time"] = other.fields["time"]
/datum/data/record/forensic/proc/update_prints(var/list/o_prints)
var/list/prints = fields["fprints"]
for(var/print in o_prints)
if(prints[print])
prints[print] = stringmerge(prints[print], o_prints[print])
.=1
fields["fprints"] = prints
+10 -2
View File
@@ -5,7 +5,7 @@
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
flags = CONDUCT | NOBLUDGEON
slot_flags = SLOT_BELT
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -104,4 +104,12 @@
if(old)
fresh.merge(old)
. = 1
stored["\ref [A]"] = fresh
stored["\ref [A]"] = fresh
/obj/item/device/detective_scanner/verb/wipe()
set name = "Wipe Forensic Data"
set category = "Object"
set src in view(1)
if (alert("Are you sure you want to wipe all data from [src]?",,"Yes","No") == "Yes")
stored = list()
usr << "<span class='notice'>Forensic data erase complete.</span>"
+13 -7
View File
@@ -59,17 +59,23 @@
fresh.fields["label"] = old.fields["label"]
files[fresh.uid] = fresh
//updating partial prints on other things
var/list/fprints = fresh.fields["fprints"]
if(fprints.len)
for(var/id in files)
var/datum/data/record/forensic/rec = files[id]
if(rec.update_prints(fprints))
files[id] = rec
/obj/machinery/computer/forensic_scanning/proc/process_card(var/obj/item/weapon/f_card/card)
if(card.fingerprints)
usr << "<span class='notice'>\The [src] sucks in \the [card] and whirrs, scanning it.</span>"
var/found = 0
for(var/id in files)
var/datum/data/record/forensic/rec = files[id]
var/list/prints = rec.fields["fprints"]
for(var/master_print in card.fingerprints)
if(prints[master_print])
prints[master_print] = master_print
found = 1
found = rec.update_prints(card.fingerprints)
if (found)
files[id] = rec
if(found)
usr << "<span class='notice'>Complete match found.</span>"
else
@@ -189,7 +195,7 @@
dat += "<br>NO RECORD SELECTED"
else
dat += get_printable_data(current)
dat += "<b>Labels:</b> "
dat += "<br><b>Labels:</b> "
dat += "<a href='?src=\ref[src];operation=label'>[current.fields["label"] ? current.fields["label"] : "None"]</a><br>"
dat += "<a href='?src=\ref[src];operation=print'>Print record</a><br>"
@@ -302,4 +308,4 @@
ping("Scan complete.")
var/datum/data/record/forensic/fresh = new(scanning)
add_record(fresh)
updateUsrDialog()
updateUsrDialog()
@@ -1,63 +1,60 @@
//This dm file includes some food processing machines:
// This dreammaker file includes the food processing machines:
// - I. Mill
// - II. Fermenter
// - III. Still
// - IV. Squeezer
// - V. Centrifuge
// I. The mill is intended to be loaded with produce and returns ground up items. For example: Wheat should become flour and grapes should become raisins.
/obj/machinery/mill
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/output = list()
var/obj/item/weapon/reagent_containers/food/milled_item
var/busy = 0
var/busy = 0
var/progress = 0
var/error = 0
var/error = 0
name = "\improper Mill"
desc = "It is a machine that grinds produce."
icon_state = "autolathe"
density = 1
anchored = 1
density = 1
anchored = 1
use_power = 1
idle_power_usage = 10
idle_power_usage = 10
active_power_usage = 1000
/obj/machinery/mill/process()
if(error)
if (error)
return
if(!busy)
if (!busy)
use_power = 1
if(input.len)
if (input.len)
milled_item = input[1]
input -= milled_item
progress = 0
busy = 1
use_power = 2
return
progress++
if(progress < 10) //Edit this value to make milling faster or slower
return //Not done yet.
switch(milled_item.type)
if(/obj/item/weapon/reagent_containers/food/snacks/grown/wheat) //Wheat becomes flour
if (progress < 10) // Edit this value to make milling faster or slower.
return // Not done yet.
switch (milled_item.type)
if (/obj/item/weapon/reagent_containers/food/snacks/grown/wheat) // Wheat becomes flour.
var/obj/item/weapon/reagent_containers/food/snacks/flour/F = new(src)
output += F
if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour
if (/obj/item/weapon/reagent_containers/food/snacks/flour) // Flour is still flour.
var/obj/item/weapon/reagent_containers/food/snacks/flour/F = new(src)
output += F
else
error = 1
del(milled_item)
busy = 0
/obj/machinery/mill/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
if (istype(W,/obj/item/weapon/reagent_containers/food))
user.u_equip(W)
W.loc = src
input += W
@@ -65,17 +62,11 @@
..()
/obj/machinery/mill/attack_hand(var/mob/user as mob)
for(var/obj/item/weapon/reagent_containers/food/F in output)
for (var/obj/item/weapon/reagent_containers/food/F in output)
F.loc = src.loc
output -= F
// II. The fermenter is intended to be loaded with food items and returns medium-strength alcohol items, sucha s wine and beer.
/obj/machinery/fermenter
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/output = list()
@@ -94,40 +85,40 @@
active_power_usage = 500
/obj/machinery/fermenter/process()
if(error)
if (error)
return
if(!busy)
if (!busy)
use_power = 1
if(input.len)
if (input.len)
fermenting_item = input[1]
input -= fermenting_item
progress = 0
busy = 1
use_power = 2
return
if(!water_level)
if (!water_level)
return
water_level--
progress++
if(progress < 10) //Edit this value to make milling faster or slower
return //Not done yet.
switch(fermenting_item.type)
if(/obj/item/weapon/reagent_containers/food/snacks/flour) //Flour is still flour
if (progress < 10) // Edit this value to make milling faster or slower.
return // Not done yet.
switch (fermenting_item.type)
if (/obj/item/weapon/reagent_containers/food/snacks/flour) // Flour is still flour.
var/obj/item/weapon/reagent_containers/food/drinks/cans/beer/B = new(src)
output += B
else
error = 1
del(fermenting_item)
busy = 0
/obj/machinery/fermenter/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
if (istype(W,/obj/item/weapon/reagent_containers/food))
user.u_equip(W)
W.loc = src
input += W
@@ -135,60 +126,57 @@
..()
/obj/machinery/fermenter/attack_hand(var/mob/user as mob)
for(var/obj/item/weapon/reagent_containers/food/F in output)
for (var/obj/item/weapon/reagent_containers/food/F in output)
F.loc = src.loc
output -= F
// III. The still is a machine that is loaded with food items and returns hard liquor, such as vodka.
/obj/machinery/still
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/output = list()
var/obj/item/weapon/reagent_containers/food/destilling_item
var/busy = 0
var/obj/item/weapon/reagent_containers/food/distilling_item
var/busy = 0
var/progress = 0
var/error = 0
var/error = 0
name = "\improper Still"
desc = "It is a machine that produces hard liquor from alcoholic drinks."
icon_state = "autolathe"
density = 1
anchored = 1
density = 1
anchored = 1
use_power = 1
idle_power_usage = 10
active_power_usage = 10000
/obj/machinery/still/process()
if(error)
if (error)
return
if(!busy)
if (!busy)
use_power = 1
if(input.len)
destilling_item = input[1]
input -= destilling_item
if (input.len)
distilling_item = input[1]
input -= distilling_item
progress = 0
busy = 1
use_power = 2
return
progress++
if(progress < 10) //Edit this value to make distilling faster or slower
return //Not done yet.
switch(destilling_item.type)
if(/obj/item/weapon/reagent_containers/food/drinks/cans/beer) //Flour is still flour
if (progress < 10) // Edit this value to make distilling faster or slower.
return // Not done yet.
switch (distilling_item.type)
if (/obj/item/weapon/reagent_containers/food/drinks/cans/beer) // Flour is still flour.
var/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/V = new(src)
output += V
else
error = 1
del(destilling_item)
del(distilling_item)
busy = 0
/obj/machinery/still/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
if (istype(W,/obj/item/weapon/reagent_containers/food))
user.u_equip(W)
W.loc = src
input += W
@@ -196,84 +184,75 @@
..()
/obj/machinery/still/attack_hand(var/mob/user as mob)
for(var/obj/item/weapon/reagent_containers/food/F in output)
for (var/obj/item/weapon/reagent_containers/food/F in output)
F.loc = src.loc
output -= F
// IV. The squeezer is intended to destroy inserted food items, but return some of the reagents they contain.
/obj/machinery/squeezer
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/obj/item/weapon/reagent_containers/food/squeezed_item
var/water_level = 0
var/busy = 0
var/progress = 0
var/error = 0
var/busy = 0
var/progress = 0
var/error = 0
name = "\improper Squeezer"
desc = "It is a machine that squeezes extracts from produce."
icon_state = "autolathe"
density = 1
anchored = 1
density = 1
anchored = 1
use_power = 1
idle_power_usage = 10
idle_power_usage = 10
active_power_usage = 500
// V. The centrifuge spins inserted food items. It is intended to squeeze out the reagents that are common food catalysts (enzymes currently)
/obj/machinery/centrifuge
var/list/obj/item/weapon/reagent_containers/food/input = list()
var/list/obj/item/weapon/reagent_containers/food/output = list()
var/obj/item/weapon/reagent_containers/food/spinning_item
var/busy = 0
var/busy = 0
var/progress = 0
var/error = 0
var/enzymes = 0
var/water = 0
var/error = 0
var/enzymes = 0
var/water = 0
name = "\improper Centrifuge"
desc = "It is a machine that spins produce."
icon_state = "autolathe"
density = 1
anchored = 1
density = 1
anchored = 1
use_power = 1
idle_power_usage = 10
idle_power_usage = 10
active_power_usage = 10000
/obj/machinery/centrifuge/process()
if(error)
if (error)
return
if(!busy)
if (!busy)
use_power = 1
if(input.len)
if (input.len)
spinning_item = input[1]
input -= spinning_item
progress = 0
busy = 1
use_power = 2
return
progress++
if(progress < 10) //Edit this value to make milling faster or slower
return //Not done yet.
if (progress < 10) // Edit this value to make milling faster or slower.
return // Not done yet.
var/transfer_enzymes = spinning_item.reagents.get_reagent_amount("enzyme")
if(transfer_enzymes)
if (transfer_enzymes)
enzymes += transfer_enzymes
spinning_item.reagents.remove_reagent("enzyme",transfer_enzymes)
output += spinning_item
busy = 0
/obj/machinery/centrifuge/attackby(var/obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/reagent_containers/food))
if (istype(W,/obj/item/weapon/reagent_containers/food))
user.u_equip(W)
W.loc = src
input += W
@@ -281,10 +260,9 @@
..()
/obj/machinery/centrifuge/attack_hand(var/mob/user as mob)
for(var/obj/item/weapon/reagent_containers/food/F in output)
for (var/obj/item/weapon/reagent_containers/food/F in output)
F.loc = src.loc
output -= F
while(enzymes >= 50)
while (enzymes >= 50)
enzymes -= 50
new/obj/item/weapon/reagent_containers/food/condiment/enzyme(src.loc)
+4 -23
View File
@@ -31,30 +31,11 @@
bundle = W
bundle.worth += src.worth
bundle.update_icon()
if (!istype(src.loc, /turf) && istype(user, /mob/living/carbon/human))
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/h_user = user
if(h_user.r_hand == src)
h_user.drop_from_inventory(src)
h_user.put_in_r_hand(bundle)
else if(h_user.l_hand == src)
h_user.drop_from_inventory(src)
h_user.put_in_l_hand(bundle)
else if (h_user.l_store == src)
h_user.drop_from_inventory(src)
bundle.loc = h_user
bundle.layer = 20
h_user.l_store = bundle
h_user.update_inv_pockets()
else if (h_user.r_store == src)
h_user.drop_from_inventory(src)
bundle.loc = h_user
bundle.layer = 20
h_user.r_store = bundle
h_user.update_inv_pockets()
else
src.loc = get_turf(h_user)
if(h_user.client) h_user.client.screen -= src
h_user.put_in_hands(bundle)
h_user.drop_from_inventory(src)
h_user.drop_from_inventory(bundle)
h_user.put_in_hands(bundle)
user << "<span class='notice'>You add [src.worth] Thalers worth of money to the bundles.<br>It holds [bundle.worth] Thalers now.</span>"
del(src)
+16 -8
View File
@@ -18,19 +18,27 @@
/datum/event/carp_migration/start()
if(severity == EVENT_LEVEL_MAJOR)
for(var/i = 1 to rand(3,5))
spawn_fish(landmarks_list.len)
else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(landmarks_list.len)
else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
else
spawn_fish(rand(1, 5))
spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5)
var/list/spawn_locations = list()
/datum/event/carp_migration/proc/spawn_fish(var/limit)
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc))
if(spawned_carp.len >= limit)
return
spawn_locations.Add(C.loc)
spawn_locations = shuffle(spawn_locations)
num_groups = min(num_groups, spawn_locations.len)
var/i = 1
while (i <= num_groups)
var/group_size = rand(group_size_min, group_size_max)
for (var/j = 1, j <= group_size, j++)
spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
i++
/datum/event/carp_migration/end()
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
+22 -22
View File
@@ -25,7 +25,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!next_event_time)
set_event_delay()
if(delayed)
if(delayed || !config.allow_random_events)
next_event_time += (world.time - last_world_time)
else if(world.time > next_event_time)
start_event()
@@ -139,32 +139,32 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
/datum/event_container/moderate
severity = EVENT_LEVEL_MODERATE
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 10),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 5, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_SECURITY = 25)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 50, list(ASSIGNMENT_AI = 25, ASSIGNMENT_SECURITY = 25)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 50)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 25, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 15, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 15)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 5, list(ASSIGNMENT_SECURITY = 5), 1),
new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5,list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 25, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SCIENTIST = 5)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
)
/datum/event_container/major
severity = EVENT_LEVEL_MAJOR
available_events = list(
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 50),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1320),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 3), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 60), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1),
)
+11 -3
View File
@@ -45,6 +45,10 @@
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
/datum/event_manager/proc/delay_events(var/severity, var/delay)
var/list/datum/event_container/EC = event_containers[severity]
EC.next_event_time += delay
/datum/event_manager/proc/Interact(var/mob/living/user)
var/html = GetInteractWindow()
@@ -75,6 +79,7 @@
/datum/event_manager/proc/GetInteractWindow()
var/html = "<A align='right' href='?src=\ref[src];refresh=1'>Refresh</A>"
html += "<A align='right' href='?src=\ref[src];pause_all=[!config.allow_random_events]'>Pause All - [config.allow_random_events ? "Pause" : "Resume"]</A>"
if(selected_event_container)
var/event_time = max(0, selected_event_container.next_event_time - world.time)
@@ -92,7 +97,7 @@
html += "<td>[EM.max_weight]</td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_oneshot=\ref[EM]'>[EM.one_shot]</A></td>"
html += "<td><A align='right' href='?src=\ref[src];toggle_enabled=\ref[EM]'>[EM.enabled]</A></td>"
html += "<td><span class='alert'>[EM.get_weight()]</span></td>"
html += "<td><span class='alert'>[EM.get_weight(number_active_with_role())]</span></td>"
html += "<td><A align='right' href='?src=\ref[src];remove=\ref[EM];EC=\ref[selected_event_container]'>Remove</A></td>"
html += "</tr>"
html += "</table>"
@@ -190,12 +195,12 @@
admin_log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
else if(href_list["dec_timer"])
var/datum/event_container/EC = locate(href_list["event"])
var/decrease = (60 * RaiseToPower(10, text2num(href_list["dec_timer"])))
var/decrease = 60 * (10 ** text2num(href_list["dec_timer"]))
EC.next_event_time -= decrease
admin_log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
else if(href_list["inc_timer"])
var/datum/event_container/EC = locate(href_list["event"])
var/increase = (60 * RaiseToPower(10, text2num(href_list["inc_timer"])))
var/increase = 60 * (10 ** text2num(href_list["inc_timer"]))
EC.next_event_time += increase
admin_log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).")
else if(href_list["select_event"])
@@ -207,6 +212,9 @@
var/datum/event_container/EC = locate(href_list["pause"])
EC.delayed = !EC.delayed
admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.")
else if(href_list["pause_all"])
config.allow_random_events = text2num(href_list["pause_all"])
admin_log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.")
else if(href_list["interval"])
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
if(delay && delay > 0)
+2 -1
View File
@@ -8,7 +8,8 @@
power_failure(0)
/datum/event/grid_check/announce()
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
if (prob(30))
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
/datum/event/grid_check/end()
power_restore()
+1 -1
View File
@@ -31,7 +31,7 @@
spawn_area_type = /area/crew_quarters/kitchen
locstring = "the kitchen"
if(LOC_ATMOS)
spawn_area_type = /area/atmos
spawn_area_type = /area/engineering/atmos
locstring = "atmospherics"
if(LOC_INCIN)
spawn_area_type = /area/maintenance/incinerator
+2 -2
View File
@@ -13,7 +13,7 @@
/datum/event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(rand(2,5))
meteor_wave(rand(2,5))
/datum/event/meteor_wave/end()
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
@@ -34,7 +34,7 @@
//meteor showers are lighter and more common,
/datum/event/meteor_shower/tick()
if(activeFor >= next_meteor)
spawn_meteors(rand(1,4))
meteor_wave(rand(1,4))
next_meteor += rand(20,100)
waves--
if(waves <= 0)
+4 -4
View File
@@ -30,12 +30,12 @@
/datum/event/radiation_storm/proc/radiate()
for(var/mob/living/carbon/C in living_mob_list)
var/turf/T = get_turf(C)
if(!T)
var/area/A = get_area(C)
if(!A)
continue
if(!(T.z in config.station_levels))
if(!(A.z in config.station_levels))
continue
if(istype(T.loc, /area/maintenance) || istype(T.loc, /area/crew_quarters))
if(A.rad_shielded)
continue
if(istype(C,/mob/living/carbon/human))
+29 -3
View File
@@ -1,11 +1,36 @@
datum/event/viral_infection
var/list/viruses = list()
datum/event/viral_infection/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
//generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
var/num_diseases = rand(1,3)
for (var/i=0, i < num_diseases, i++)
var/datum/disease2/disease/D = new /datum/disease2/disease
var/strength = 1 //whether the disease is of the greater or lesser variety
if (severity >= EVENT_LEVEL_MAJOR && prob(75))
strength = 2
D.makerandom(strength)
viruses += D
datum/event/viral_infection/announce()
command_announcement.Announce("Confirmed outbreak of level five biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
var/level
if (severity == EVENT_LEVEL_MUNDANE)
return
else if (severity == EVENT_LEVEL_MODERATE)
level = pick("one", "two", "three", "four")
else
level = "five"
if (severity == EVENT_LEVEL_MAJOR || prob(60))
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
if(!viruses.len) return
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
@@ -13,9 +38,10 @@ datum/event/viral_infection/start()
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
severity = severity == 1 ? 1 : severity - 1
severity = max(EVENT_LEVEL_MUNDANE, severity - 1)
var/actual_severity = severity * rand(1, 3)
while(actual_severity > 0 && candidates.len)
infect_mob_random_lesser(candidates[1])
var/datum/disease2/disease/D = pick(viruses)
infect_mob(candidates[1], D.getcopy())
candidates.Remove(candidates[1])
actual_severity--
+385
View File
@@ -0,0 +1,385 @@
var/global/list/holodeck_programs = list(
"emptycourt" = /area/holodeck/source_emptycourt, \
"boxingcourt" = /area/holodeck/source_boxingcourt, \
"basketball" = /area/holodeck/source_basketball, \
"thunderdomecourt" = /area/holodeck/source_thunderdomecourt, \
"beach" = /area/holodeck/source_beach, \
"desert" = /area/holodeck/source_desert, \
"space" = /area/holodeck/source_space, \
"picnicarea" = /area/holodeck/source_picnicarea, \
"snowfield" = /area/holodeck/source_snowfield, \
"theatre" = /area/holodeck/source_theatre, \
"meetinghall" = /area/holodeck/source_meetinghall, \
"courtroom" = /area/holodeck/source_courtroom, \
"burntest" = /area/holodeck/source_burntest, \
"wildlifecarp" = /area/holodeck/source_wildlife, \
"turnoff" = /area/holodeck/source_plating \
)
/obj/machinery/computer/HolodeckControl
name = "holodeck control console"
desc = "A computer used to control a nearby holodeck."
icon_state = "holocontrol"
use_power = 1
active_power_usage = 8000 //8kW for the scenery + 500W per holoitem
var/item_power_usage = 500
var/area/linkedholodeck = null
var/area/target = null
var/active = 0
var/list/holographic_items = list()
var/list/holographic_mobs = list()
var/damaged = 0
var/safety_disabled = 0
var/mob/last_to_emag = null
var/last_change = 0
var/last_gravity_change = 0
var/list/supported_programs = list( \
"Empty Court" = "emptycourt", \
"Basketball Court" = "basketball", \
"Thunderdome Court" = "thunderdomecourt", \
"Boxing Ring"="boxingcourt", \
"Beach" = "beach", \
"Desert" = "desert", \
"Space" = "space", \
"Picnic Area" = "picnicarea", \
"Snow Field" = "snowfield", \
"Theatre" = "theatre", \
"Meeting Hall" = "meetinghall", \
"Courtroom" = "courtroom" \
)
var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp")
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
if(..())
return
user.set_machine(src)
var/dat
dat += "<B>Holodeck Control System</B><BR>"
dat += "<HR>Current Loaded Programs:<BR>"
for(var/prog in supported_programs)
dat += "<A href='?src=\ref[src];program=[supported_programs[prog]]'>([prog])</A><BR>"
dat += "<BR>"
dat += "<A href='?src=\ref[src];program=turnoff'>(Turn Off)</A><BR>"
dat += "<BR>"
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(issilicon(user))
dat += "<BR>"
if(safety_disabled)
if (emagged)
dat += "<font color=red><b>ERROR</b>: Cannot re-enable Safety Protocols.</font><BR>"
else
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
else
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<BR>"
if(safety_disabled)
for(var/prog in restricted_programs)
dat += "<A href='?src=\ref[src];program=[restricted_programs[prog]]'>(<font color=red>Begin [prog]</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
if(linkedholodeck.has_gravity)
dat += "Gravity is <A href='?src=\ref[src];gravity=1'><font color=green>(ON)</font></A><BR>"
else
dat += "Gravity is <A href='?src=\ref[src];gravity=1'><font color=blue>(OFF)</font></A><BR>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/HolodeckControl/Topic(href, href_list)
if(..())
return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if(href_list["program"])
var/prog = href_list["program"]
if(prog in holodeck_programs)
target = locate(holodeck_programs[prog])
if(target)
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr))
return
if(safety_disabled && emagged)
return //if a traitor has gone through the trouble to emag the thing, let them keep it.
safety_disabled = !safety_disabled
update_projections()
if(safety_disabled)
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
log_game("[key_name(usr)] overrided the holodeck's safeties")
else
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
log_game("[key_name(usr)] restored the holodeck's safeties")
else if(href_list["gravity"])
toggleGravity(linkedholodeck)
src.add_fingerprint(usr)
src.updateUsrDialog()
return
/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
if(istype(D, /obj/item/weapon/card/emag))
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
last_to_emag = user //emag again to change the owner
if (!emagged)
emagged = 1
safety_disabled = 1
update_projections()
user << "<span class='notice'>You vastly increase projector power and override the safety and security protocols.</span>"
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
log_game("[key_name(usr)] emagged the Holodeck Control Computer")
src.updateUsrDialog()
return
/obj/machinery/computer/HolodeckControl/proc/update_projections()
if (safety_disabled)
item_power_usage = 2500
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = BRUTE
else
item_power_usage = initial(item_power_usage)
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = initial(H.damtype)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
C.set_safety(!safety_disabled)
if (last_to_emag)
C.friends = list(last_to_emag)
/obj/machinery/computer/HolodeckControl/New()
..()
linkedholodeck = locate(/area/holodeck/alphadeck)
//if(linkedholodeck)
// target = locate(/area/holodeck/source_emptycourt)
// if(target)
// loadProgram(target)
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Del()
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/meteorhit(var/obj/O as obj)
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/emp_act(severity)
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/ex_act(severity)
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/blob_act()
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/power_change()
var/oldstat
..()
if (stat != oldstat && active && (stat & NOPOWER))
emergencyShutdown()
/obj/machinery/computer/HolodeckControl/process()
for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down.
if(!(get_turf(item) in linkedholodeck))
derez(item, 0)
if (!safety_disabled)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
if (get_area(C.loc) != linkedholodeck)
holographic_mobs -= C
C.derez()
if(!..())
return
if(active)
use_power(item_power_usage * (holographic_items.len + holographic_mobs.len))
if(!checkInteg(linkedholodeck))
damaged = 1
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
active = 0
use_power = 1
for(var/mob/M in range(10,src))
M.show_message("The holodeck overloads!")
for(var/turf/T in linkedholodeck)
if(prob(30))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
T.ex_act(3)
T.hotspot_expose(1000,500,1)
/obj/machinery/computer/HolodeckControl/proc/derez(var/obj/obj , var/silent = 1)
holographic_items.Remove(obj)
if(obj == null)
return
if(isobj(obj))
var/mob/M = obj.loc
if(ismob(M))
M.u_equip(obj)
M.update_icons() //so their overlays update
if(!silent)
var/obj/oldobj = obj
visible_message("The [oldobj.name] fades away!")
del(obj)
/obj/machinery/computer/HolodeckControl/proc/checkInteg(var/area/A)
for(var/turf/T in A)
if(istype(T, /turf/space))
return 0
return 1
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
var/area/targetsource = locate(/area/holodeck/source_emptycourt)
holographic_items = targetsource.copy_contents_to(linkedholodeck)
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
spawn(20)
var/turf/T = get_turf(L)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
if(T)
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
active = 1
use_power = 2
else
for(var/item in holographic_items)
derez(item)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
last_change = world.time
return
last_change = world.time
active = 1
use_power = 2
for(var/item in holographic_items)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
del(B)
holographic_items = A.copy_contents_to(linkedholodeck , 1)
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
spawn(20)
var/turf/T = get_turf(L)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
if(T)
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn")
holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
if(L.name=="Holocarp Spawn Random")
if (prob(4)) //With 4 spawn points, carp should only appear 15% of the time.
holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
update_projections()
/obj/machinery/computer/HolodeckControl/proc/toggleGravity(var/area/A)
if(world.time < (last_gravity_change + 25))
if(world.time < (last_gravity_change + 15))//To prevent super-spam clicking
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating gravity field.")
last_change = world.time
return
last_gravity_change = world.time
active = 1
use_power = 1
if(A.has_gravity)
A.gravitychange(0,A)
else
A.gravitychange(1,A)
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items
for(var/item in holographic_items)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
//Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
+422
View File
@@ -0,0 +1,422 @@
// Holographic Items!
/turf/simulated/floor/holofloor/
thermal_conductivity = 0
/turf/simulated/floor/holofloor/grass
name = "Lush Grass"
icon_state = "grass1"
floor_type = /obj/item/stack/tile/grass
New()
icon_state = "grass[pick("1","2","3","4")]"
..()
spawn(4)
update_icon()
for(var/direction in cardinal)
if(istype(get_step(src,direction),/turf/simulated/floor))
var/turf/simulated/floor/FF = get_step(src,direction)
FF.update_icon() //so siding get updated properly
/turf/simulated/floor/holofloor/space
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
/turf/simulated/floor/holofloor/space/New()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
/turf/simulated/floor/holofloor/desert
name = "desert sand"
desc = "Uncomfortably gritty for a hologram."
icon_state = "asteroid"
/turf/simulated/floor/holofloor/desert/New()
..()
if(prob(10))
overlays += "asteroid[rand(0,9)]"
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
return
// HOLOFLOOR DOES NOT GIVE A FUCK
/obj/structure/table/holotable
name = "table"
desc = "A square piece of metal standing on four metal legs. It can not move."
icon = 'icons/obj/structures.dmi'
icon_state = "table"
density = 1
anchored = 1.0
layer = 2.8
throwpass = 1 //You can throw objects over this, despite it's density.
/obj/structure/table/holotable/attack_hand(mob/user as mob)
return // HOLOTABLE DOES NOT GIVE A FUCK
/obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holotable! There are no bolts!"
return
if(isrobot(user))
return
..()
/obj/structure/table/woodentable/holotable
name = "table"
desc = "A square piece of wood standing on four wooden legs. It can not move."
icon = 'icons/obj/structures.dmi'
icon_state = "wood_table"
/obj/structure/holostool
name = "stool"
desc = "Apply butt."
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1.0
pressure_resistance = 15
/obj/item/clothing/gloves/boxing/hologlove
name = "boxing gloves"
desc = "Because you really needed another excuse to punch your crewmates."
icon_state = "boxing"
item_state = "boxing"
/obj/structure/window/reinforced/holowindow/Del()
..()
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
if(!istype(W)) return//I really wish I did not need this
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(istype(G.affecting,/mob/living))
var/mob/living/M = G.affecting
var/state = G.state
del(W) //gotta delete it here because if window breaks, it won't get deleted
switch (state)
if(1)
M.visible_message("<span class='warning'>[user] slams [M] against \the [src]!</span>")
M.apply_damage(7)
hit(10)
if(2)
M.visible_message("<span class='danger'>[user] bashes [M] against \the [src]!</span>")
if (prob(50))
M.Weaken(1)
M.apply_damage(10)
hit(25)
if(3)
M.visible_message("<span class='danger'><big>[user] crushes [M] against \the [src]!</big></span>")
M.Weaken(5)
M.apply_damage(20)
hit(50)
return
if(W.flags & NOBLUDGEON) return
if(istype(W, /obj/item/weapon/screwdriver))
user << ("<span class='notice'>It's a holowindow, you can't unfasten it!</span>")
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
user << ("<span class='notice'>It's a holowindow, you can't pry it!</span>")
else if(istype(W, /obj/item/weapon/wrench) && !anchored && (!state || !reinf))
user << ("<span class='notice'>It's a holowindow, you can't dismantle it!</span>")
else
if(W.damtype == BRUTE || W.damtype == BURN)
hit(W.force)
if(health <= 7)
anchored = 0
update_nearby_icons()
step(src, get_dir(user, src))
else
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
..()
return
/obj/structure/window/reinforced/holowindow/shatter(var/display_message = 1)
playsound(src, "shatter", 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
del(src)
return
/obj/structure/window/reinforced/holowindow/disappearing/Del()
..()
/obj/machinery/door/window/holowindoor/Del()
..()
/obj/machinery/door/window/holowindoor/attackby(obj/item/weapon/I as obj, mob/user as mob)
if (src.operating == 1)
return
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
var/aforce = I.force
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\red <B>[src] was hit by [I].</B>")
if(I.damtype == BRUTE || I.damtype == BURN)
take_damage(aforce)
return
src.add_fingerprint(user)
if (!src.requiresID())
user = null
if (src.allowed(user))
if (src.density)
open()
else
close()
else if (src.density)
flick(text("[]deny", src.base_state), src)
return
/obj/machinery/door/window/holowindoor/shatter(var/display_message = 1)
src.density = 0
playsound(src, "shatter", 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
del(src)
/obj/structure/stool/bed/chair/holochair/Del()
..()
/obj/structure/stool/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
user << ("<span class='notice'>It's a holochair, you can't dismantle it!</span>")
return
/obj/item/weapon/holo
damtype = HALLOSS
/obj/item/weapon/holo/esword
desc = "May the force be within you. Sorta."
icon_state = "sword0"
force = 3.0
throw_speed = 1
throw_range = 5
throwforce = 0
w_class = 2.0
flags = NOSHIELD | NOBLOODY
var/active = 0
/obj/item/weapon/holo/esword/green
New()
item_color = "green"
/obj/item/weapon/holo/esword/red
New()
item_color = "red"
/obj/item/weapon/holo/esword/IsShield()
if(active)
return 1
return 0
/obj/item/weapon/holo/esword/attack(target as mob, mob/user as mob)
..()
/obj/item/weapon/holo/esword/New()
item_color = pick("red","blue","green","purple")
/obj/item/weapon/holo/esword/attack_self(mob/living/user as mob)
active = !active
if (active)
force = 30
icon_state = "sword[item_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
user << "<span class='notice'>[src] is now active.</span>"
else
force = 3
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user << "<span class='notice'>[src] can now be concealed.</span>"
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
add_fingerprint(user)
return
//BASKETBALL OBJECTS
/obj/item/weapon/beach_ball/holoball
icon = 'icons/obj/basketball.dmi'
icon_state = "basketball"
name = "basketball"
item_state = "basketball"
desc = "Here's your chance, do your dance at the Space Jam."
w_class = 4 //Stops people from hiding it in their bags/pockets
/obj/structure/holohoop
name = "basketball hoop"
desc = "Boom, Shakalaka!"
icon = 'icons/obj/basketball.dmi'
icon_state = "hoop"
anchored = 1
density = 1
throwpass = 1
/obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
user << "<span class='warning'>You need a better grip to do that!</span>"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
del(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", 3)
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if (istype(mover,/obj/item) && mover.throwing)
var/obj/item/I = mover
if(istype(I, /obj/item/projectile))
return
if(prob(50))
I.loc = src.loc
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", 3)
else
visible_message("<span class='warning'>\The [I] bounces off of \the [src]'s rim!</span>", 3)
return 0
else
return ..(mover, target, height, air_group)
/obj/machinery/readybutton
name = "Ready Declaration Device"
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
var/ready = 0
var/area/currentarea = null
var/eventstarted = 0
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
/obj/machinery/readybutton/attack_ai(mob/user as mob)
user << "The station AI is not to interact with these devices!"
return
/obj/machinery/readybutton/New()
..()
/obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob)
user << "The device is a solid button, there's nothing you can do with it!"
/obj/machinery/readybutton/attack_hand(mob/user as mob)
if(user.stat || stat & (NOPOWER|BROKEN))
user << "This device is not powered."
return
if(!user.IsAdvancedToolUser())
return 0
currentarea = get_area(src.loc)
if(!currentarea)
del(src)
if(eventstarted)
usr << "The event has already begun!"
return
ready = !ready
update_icon()
var/numbuttons = 0
var/numready = 0
for(var/obj/machinery/readybutton/button in currentarea)
numbuttons++
if (button.ready)
numready++
if(numbuttons == numready)
begin_event()
/obj/machinery/readybutton/update_icon()
if(ready)
icon_state = "auth_on"
else
icon_state = "auth_off"
/obj/machinery/readybutton/proc/begin_event()
eventstarted = 1
for(var/obj/structure/window/reinforced/holowindow/disappearing/W in currentarea)
del(W)
for(var/mob/M in currentarea)
M << "FIGHT!"
//Holorack
/obj/structure/table/rack/holorack
name = "rack"
desc = "Different from the Middle Ages version."
icon = 'icons/obj/objects.dmi'
icon_state = "rack"
/obj/structure/table/rack/holorack/attack_hand(mob/user as mob)
return
/obj/structure/table/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holorack! You can't unwrench it!"
return
//Holocarp
/mob/living/simple_animal/hostile/carp/holodeck
icon = 'icons/mob/AI.dmi'
icon_state = "holo4"
icon_living = "holo4"
icon_dead = "holo4"
icon_gib = null
meat_amount = 0
meat_type = null
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
if (safe)
faction = "neutral"
melee_damage_lower = 0
melee_damage_upper = 0
wall_smash = 0
destroy_surroundings = 0
else
faction = "carp"
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
wall_smash = initial(wall_smash)
destroy_surroundings = initial(destroy_surroundings)
/mob/living/simple_animal/hostile/carp/holodeck/gib()
derez() //holograms can't gib
/mob/living/simple_animal/hostile/carp/holodeck/death()
..()
derez()
/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
del(src)
+1 -4
View File
@@ -40,7 +40,6 @@
icon = 'icons/obj/harvest.dmi'
icon_state = "logs"
force = 5
flags = TABLEPASS
throwforce = 5
w_class = 3.0
throw_speed = 3
@@ -71,7 +70,6 @@
icon_state = "sunflower"
damtype = "fire"
force = 0
flags = TABLEPASS
throwforce = 1
w_class = 1.0
throw_speed = 1
@@ -89,7 +87,6 @@
icon_state = "nettle"
damtype = "fire"
force = 15
flags = TABLEPASS
throwforce = 1
w_class = 2.0
throw_speed = 1
@@ -183,6 +180,6 @@
..()
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual))
user << "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>"
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
new /obj/item/clothing/mask/smokable/pipe/cobpipe (user.loc)
del(src)
return
+10 -13
View File
@@ -168,7 +168,7 @@
/obj/item/weapon/plantspray
icon = 'icons/obj/hydroponics.dmi'
item_state = "spray"
flags = TABLEPASS | FPRINT | NOBLUDGEON
flags = NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
@@ -220,7 +220,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
flags = CONDUCT | NOBLUDGEON
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -236,7 +236,6 @@
name = "bottle of weedkiller"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS
var/toxicity = 0
var/weed_kill_str = 0
@@ -244,7 +243,6 @@
name = "bottle of glyphosate"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS
toxicity = 4
weed_kill_str = 2
@@ -252,7 +250,6 @@
name = "bottle of triclopyr"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle18"
flags = FPRINT | TABLEPASS
toxicity = 6
weed_kill_str = 4
@@ -260,7 +257,6 @@
name = "bottle of 2,4-D"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle15"
flags = FPRINT | TABLEPASS
toxicity = 8
weed_kill_str = 7
@@ -273,8 +269,8 @@
name = "fertilizer bottle"
desc = "A small glass bottle. Can hold up to 10 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
flags = FPRINT | TABLEPASS | OPENCONTAINER
icon_state = "bottle-4"
flags = 0
possible_transfer_amounts = null
w_class = 2.0
@@ -292,20 +288,21 @@
if(fertilizer)
reagents.add_reagent(fertilizer,10)
update_icon()
/obj/item/weapon/reagent_containers/glass/fertilizer/ez
name = "bottle of E-Z-Nutrient"
icon_state = "bottle16"
icon_state = "bottle-4"
fertilizer = "eznutrient"
/obj/item/weapon/reagent_containers/glass/fertilizer/l4z
name = "bottle of Left 4 Zed"
icon_state = "bottle18"
icon_state = "bottle-4"
fertilizer = "left4zed"
/obj/item/weapon/reagent_containers/glass/fertilizer/rh
name = "bottle of Robust Harvest"
icon_state = "bottle15"
icon_state = "bottle-4"
fertilizer = "robustharvest"
//Hatchets and things to kill kudzu
@@ -314,7 +311,7 @@
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
icon = 'icons/obj/weapons.dmi'
icon_state = "hatchet"
flags = FPRINT | TABLEPASS | CONDUCT
flags = CONDUCT
force = 12.0
w_class = 2.0
throwforce = 15.0
@@ -347,7 +344,7 @@
throw_speed = 1
throw_range = 3
w_class = 4.0
flags = FPRINT | TABLEPASS | NOSHIELD
flags = NOSHIELD
slot_flags = SLOT_BACK
origin_tech = "materials=2;combat=2"
attack_verb = list("chopped", "sliced", "cut", "reaped")
+1 -1
View File
@@ -13,7 +13,7 @@
// Plant maintenance vars.
var/waterlevel = 100 // Water (max 100)
var/nutrilevel = 100 // Nutrient (max 100)
var/nutrilevel = 10 // Nutrient (max 10)
var/pestlevel = 0 // Pests (max 10)
var/weedlevel = 0 // Weeds (max 10)
+20 -3
View File
@@ -183,7 +183,8 @@ proc/populate_seed_list()
list("seed-cocoapod", "cocoapod"),
list("seed-cherry", "cherry"),
list("seed-kudzu", "kudzu"),
list("seed-replicapod", "replicapod")
list("seed-replicapod", "replicapod"),
list("seed-tobacco", "tobacco")
))
packet_icon = plant_icons[1]
@@ -217,8 +218,8 @@ proc/populate_seed_list()
"water",
"potassium",
"plasticide",
"slimetoxin",
"aslimetoxin",
"mutationtoxin",
"amutationtoxin",
"inaprovaline",
"space_drugs",
"paroxetine",
@@ -1559,6 +1560,22 @@ proc/populate_seed_list()
potency = 10
growth_stages = 5
/datum/seed/tobacco
name = "tobacco"
seed_name = "tobacco"
display_name = "tobacco plant"
packet_icon = "seed-tobacco"
products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco)
plant_icon = "tobacco"
chems = list("nutriment" = list(1), "nicotine" = list(1,10))
lifespan = 50
maturation = 5
production = 5
yield = 4
potency = 10
growth_stages = 3
/datum/seed/kudzu
name = "kudzu"
seed_name = "kudzu"
+256
View File
@@ -0,0 +1,256 @@
/datum/seed_pile
var/name
var/amount
var/datum/seed/seed_type // Keeps track of what our seed is
var/list/obj/item/seeds/seeds = list() // Tracks actual objects contained in the pile
var/ID
/datum/seed_pile/New(var/obj/item/seeds/O, var/ID)
name = O.name
amount = 1
seed_type = O.seed
seeds += O
src.ID = ID
/datum/seed_pile/proc/matches(var/obj/item/seeds/O)
if (O.seed == seed_type)
return 1
return 0
/obj/machinery/seed_storage
name = "Seed storage"
desc = "It stores, sorts, and dispenses seeds."
icon = 'icons/obj/vending.dmi'
icon_state = "seeds"
density = 1
anchored = 1
use_power = 1
idle_power_usage = 100
var/initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction
var/list/datum/seed_pile/piles = list()
var/list/starting_seeds = list()
var/list/scanner = list() // What properties we can view
/obj/machinery/seed_storage/random // This is mostly for testing, but I guess admins could spawn it
name = "Random seed storage"
scanner = list("stats", "produce", "soil", "temperature", "light", "mutants")
starting_seeds = list(/obj/item/seeds/random = 50)
/obj/machinery/seed_storage/garden
name = "Garden seed storage"
scanner = list("stats")
starting_seeds = list(/obj/item/seeds/appleseed = 3, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3)
/obj/machinery/seed_storage/xenobotany
name = "Xenobotany seed storage"
scanner = list("stats", "produce", "soil", "temperature", "light", "mutants")
starting_seeds = list(/obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/appleseed = 3, /obj/item/seeds/amanitamycelium = 2, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3)
/obj/machinery/seed_storage/attack_hand(mob/user as mob)
user.set_machine(src)
interact(user)
/obj/machinery/seed_storage/interact(mob/user as mob)
if (..())
return
if (!initialized)
for(var/typepath in starting_seeds)
var/amount = starting_seeds[typepath]
if(isnull(amount)) amount = 1
for (var/i = 1 to amount)
var/O = new typepath
add(O)
initialized = 1
var/dat = "<center><h1>Seed storage contents</h1></center>"
if (piles.len == 0)
dat += "<font color='red'>No seeds</font>"
else
dat += "<table style='text-align:center;'><tr><td>Name</td>"
dat += "<td>Variety</td>"
if ("stats" in scanner)
dat += "<td>E</td><td>Y</td><td>L</td><td>M</td><td>Pr</td><td>Pt</td><td>Harvest</td>"
if ("produce" in scanner)
dat += "<td>Produce</td>"
if ("temperature" in scanner)
dat += "<td>Temp</td>"
if ("light" in scanner)
dat += "<td>Light</td>"
if ("soil" in scanner)
dat += "<td>Nutri</td><td>Water</td>"
dat += "<td>Notes</td><td>Amount</td><td></td></tr>"
for (var/datum/seed_pile/S in piles)
var/datum/seed/seed = S.seed_type
dat += "<tr>"
dat += "<td>[S.name]</td>"
dat += "<td>#[seed.uid]</td>"
if ("stats" in scanner)
dat += "<td>[seed.endurance]</td><td>[seed.yield]</td><td>[seed.lifespan]</td><td>[seed.maturation]</td><td>[seed.production]</td><td>[seed.potency]</td>"
if(seed.harvest_repeat)
dat += "<td>Multiple</td>"
else
dat += "<td>Single</td>"
if ("produce" in scanner)
if (seed.products && seed.products.len)
dat += "<td>Fruit: [seed.products.len]</td>"
else
dat += "<td>N/A</td>"
if ("temperature" in scanner)
dat += "<td>[seed.ideal_heat] K</td>"
if ("light" in scanner)
dat += "<td>[seed.ideal_light] L</td>"
if ("soil" in scanner)
if(seed.requires_nutrients)
if(seed.nutrient_consumption < 0.05)
dat += "<td>Low</td>"
else if(seed.nutrient_consumption > 0.2)
dat += "<td>High</td>"
else
dat += "<td>Norm</td>"
else
dat += "<td>No</td>"
if(seed.requires_water)
if(seed.water_consumption < 1)
dat += "<td>Low</td>"
else if(seed.water_consumption > 5)
dat += "<td>High</td>"
else
dat += "<td>Norm</td>"
else
dat += "<td>No</td>"
dat += "<td>"
if ("mutants" in scanner)
if(seed.mutants && seed.mutants.len)
dat += "SUBSP "
if(seed.immutable == -1)
dat += "MUT "
else if(seed.immutable > 0)
dat += "NOMUT "
switch(seed.carnivorous)
if(1)
dat += "CARN "
if(2)
dat += "<font color='red'>CARN </font>"
switch(seed.spread)
if(1)
dat += "VINE "
if(2)
dat += "<font color='red'>VINE </font>"
if ("pressure" in scanner)
if(seed.lowkpa_tolerance < 20)
dat += "LP "
if(seed.highkpa_tolerance > 220)
dat += "HP "
if ("temperature" in scanner)
if(seed.heat_tolerance > 30)
dat += "TEMRES "
else if(seed.heat_tolerance < 10)
dat += "TEMSEN "
if ("light" in scanner)
if(seed.light_tolerance > 10)
dat += "LIGRES "
else if(seed.light_tolerance < 3)
dat += "LIGSEN "
if(seed.toxins_tolerance < 3)
dat += "TOXSEN "
else if(seed.toxins_tolerance > 6)
dat += "TOXRES "
if(seed.pest_tolerance < 3)
dat += "PESTSEN "
else if(seed.pest_tolerance > 6)
dat += "PESTRES "
if(seed.weed_tolerance < 3)
dat += "WEEDSEN "
else if(seed.weed_tolerance > 6)
dat += "WEEDRES "
if(seed.parasite)
dat += "PAR "
if ("temperature" in scanner)
if(seed.alter_temp > 0)
dat += "TEMP+ "
if(seed.alter_temp < 0)
dat += "TEMP- "
if(seed.biolum)
dat += "LUM "
if(seed.flowers)
dat += "<br>[seed.flower_colour ? "<font color='[seed.flower_colour]'>FLOW</font>" : "FLOW"]."
dat += "</td>"
dat += "<td>[S.amount]</td>"
dat += "<td><a href='byond://?src=\ref[src];task=vend;id=[S.ID]'>Vend</a> <a href='byond://?src=\ref[src];task=purge;id=[S.ID]'>Purge</a></td>"
dat += "</tr>"
dat += "</table>"
user << browse(dat, "window=seedstorage")
onclose(user, "seedstorage")
/obj/machinery/seed_storage/Topic(var/href, var/list/href_list)
if (..())
return
var/task = href_list["task"]
var/ID = text2num(href_list["id"])
for (var/datum/seed_pile/N in piles)
if (N.ID == ID)
if (task == "vend")
var/obj/O = pick(N.seeds)
if (O)
--N.amount
N.seeds -= O
if (N.amount <= 0 || N.seeds.len <= 0)
piles -= N
del(N)
O.loc = src.loc
else
piles -= N
del(N)
else if (task == "purge")
for (var/obj/O in N.seeds)
del(O)
piles -= N
del(N)
break
updateUsrDialog()
/obj/machinery/seed_storage/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (istype(O, /obj/item/seeds))
add(O)
user.visible_message("[user] puts \the [O.name] into \the [src].", "You put \the [O] into \the [src].")
return
else if (istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/storage/P = O
var/loaded = 0
for(var/obj/item/seeds/G in P.contents)
++loaded
add(G)
if (loaded)
user.visible_message("[user] puts the seeds from \the [O.name] into \the [src].", "You put the seeds from \the [O.name] into \the [src].")
else
user << "<span class='notice'>There are no seeds in \the [O.name].</span>"
return
else if(istype(O, /obj/item/weapon/wrench))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
/obj/machinery/seed_storage/proc/add(var/obj/item/seeds/O as obj)
if (istype(O.loc, /mob))
var/mob/user = O.loc
user.drop_item(O)
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = O.loc
S.remove_from_storage(O, src)
O.loc = src
for (var/datum/seed_pile/N in piles)
if (N.matches(O))
++N.amount
N.seeds += (O)
return
piles += new /datum/seed_pile(O, piles.len)
return
+3 -1
View File
@@ -3,7 +3,6 @@
name = "packet of seeds"
icon = 'icons/obj/seeds.dmi'
icon_state = "seed"
flags = FPRINT | TABLEPASS
w_class = 2.0
var/seed_type
@@ -230,5 +229,8 @@
/obj/item/seeds/cherryseed
seed_type = "cherry"
/obj/item/seeds/tobaccoseed
seed_type = "tobacco"
/obj/item/seeds/kudzuseed
seed_type = "kudzu"
+4 -35
View File
@@ -20,7 +20,6 @@
// Life vars/
var/energy = 0
var/obj/effect/plant_controller/master = null
var/mob/living/buckled_mob
var/datum/seed/seed
/obj/effect/plantsegment/New()
@@ -56,7 +55,7 @@
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user)) del src
else
manual_unbuckle(user)
user_unbuckle_mob(user)
return
// Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
..()
@@ -71,39 +70,7 @@
update()
return
manual_unbuckle(user)
/obj/effect/plantsegment/proc/unbuckle()
if(buckled_mob)
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
buckled_mob.buckled = null
buckled_mob.anchored = initial(buckled_mob.anchored)
buckled_mob.update_canmove()
buckled_mob = null
return
/obj/effect/plantsegment/proc/manual_unbuckle(mob/user as mob)
if(buckled_mob)
if(prob(seed ? min(max(0,100 - seed.potency),100) : 50))
if(buckled_mob.buckled == src)
if(buckled_mob != user)
buckled_mob.visible_message(\
"<span class='notice'>[user.name] frees [buckled_mob.name] from [src].</span>",\
"<span class='notice'>[user.name] frees you from [src].</span>",\
"<span class='warning'>You hear shredding and ripping.</span>")
else
buckled_mob.visible_message(\
"<span class='notice'>[buckled_mob.name] struggles free of [src].</span>",\
"<span class='notice'>You untangle [src] from around yourself.</span>",\
"<span class='warning'>You hear shredding and ripping.</span>")
unbuckle()
else
var/text = pick("rips","tears","pulls")
user.visible_message(\
"<span class='notice'>[user.name] [text] at [src].</span>",\
"<span class='notice'>You [text] at [src].</span>",\
"<span class='warning'>You hear shredding and ripping.</span>")
return
user_unbuckle_mob(user)
/obj/effect/plantsegment/proc/grow()
@@ -362,6 +329,8 @@
SV.life()
if(!SV) continue
if(SV.energy < 2) //If tile isn't fully grown
var/chance
if(seed)
+4 -4
View File
@@ -179,7 +179,7 @@ var/list/rune_animation = list(
var/icon/base = icon('icons/effects/uristrunes.dmi', "")
for(var/i = 0, i < 10, i++)
if(rune_bits & (1 << i))
if(BITTEST(rune_bits, i))
base.Blend(icon('icons/effects/uristrunes.dmi', "rune-[1 << i]"), ICON_OVERLAY)
var/icon/result
@@ -217,7 +217,7 @@ var/list/rune_animation = list(
var/icon/I = icon('icons/effects/uristrunes.dmi', "blank")
for(var/i = 0, i < 10, i++)
if(rune & (1 << i))
if(BITTEST(rune, i))
I.Blend(icon('icons/effects/uristrunes.dmi', "rune-[1 << i]"), ICON_OVERLAY)
var/obj/o = new(locate(x, y, z))
@@ -229,7 +229,7 @@ var/list/rune_animation = list(
var/rune = rand(1, 1023)
for(var/i = 0, i < 10, i++)
if(rune & (1 << i))
if(BITTEST(rune, i))
I.Blend(icon('icons/effects/uristrunes.dmi', "rune-[1 << i]"), ICON_OVERLAY)
var/obj/o = new(t)
@@ -265,4 +265,4 @@ var/list/rune_animation = list(
list(0.250, 1),
list(0.125, 1),
))
*/
*/
-2
View File
@@ -126,7 +126,6 @@
throw_speed = 1
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
@@ -254,7 +253,6 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
+3 -3
View File
@@ -300,9 +300,9 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
if(checkoutperiod < 1)
checkoutperiod = 1
if(href_list["editbook"])
buffer_book = copytext(sanitize(input("Enter the book's title:") as text|null),1,MAX_MESSAGE_LEN)
buffer_book = sanitize(copytext(input("Enter the book's title:") as text|null,1,MAX_MESSAGE_LEN))
if(href_list["editmob"])
buffer_mob = copytext(sanitize(input("Enter the recipient's name:") as text|null),1,MAX_NAME_LEN)
buffer_mob = sanitize(copytext(input("Enter the recipient's name:") as text|null,1,MAX_NAME_LEN))
if(href_list["checkout"])
var/datum/borrowbook/b = new /datum/borrowbook
b.bookname = sanitize(buffer_book)
@@ -317,7 +317,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
var/obj/item/weapon/book/b = locate(href_list["delbook"])
inventory.Remove(b)
if(href_list["setauthor"])
var/newauthor = copytext(sanitize(input("Enter the author's name: ") as text|null),1,MAX_MESSAGE_LEN)
var/newauthor = sanitize(copytext(input("Enter the author's name: ") as text|null,1,MAX_MESSAGE_LEN))
if(newauthor)
scanner.cache.author = newauthor
if(href_list["setcategory"])
+133 -45
View File
@@ -6,74 +6,155 @@
icon_closed = "securecrate"
var/code = null
var/lastattempt = null
var/attempts = 3
var/attempts = 10
var/codelen = 4
locked = 1
var/min = 1
var/max = 10
/obj/structure/closet/crate/secure/loot/New()
..()
code = rand(min,max)
var/loot = rand(1,30)
var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
code = ""
for(var/i = 0, i < codelen, i++)
var/dig = pick(digits)
code += dig
digits -= dig // Player can enter codes with matching digits, but there are never matching digits in the answer
var/loot = rand(1, 100)
switch(loot)
if(1)
if(1 to 5) // Common things go, 5%
new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src)
new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src)
new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src)
new/obj/item/weapon/flame/lighter/zippo(src)
if(2)
if(6 to 10)
new/obj/item/weapon/pickaxe/drill(src)
new/obj/item/device/taperecorder(src)
new/obj/item/clothing/suit/space(src)
new/obj/item/clothing/head/helmet/space(src)
if(3)
return
if(4)
if(11 to 15)
new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src)
if(5 to 6)
if(16 to 20)
for(var/i = 0, i < 10, i++)
new/obj/item/weapon/ore/diamond(src)
if(7)
return
if(8)
return
if(9)
if(21 to 25)
for(var/i = 0, i < 3, i++)
new/obj/machinery/portable_atmospherics/hydroponics(src)
if(10)
if(26 to 30)
for(var/i = 0, i < 3, i++)
new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src)
if(11 to 13)
new/obj/item/weapon/melee/classic_baton(src)
if(14)
return
if(15)
if(31 to 35)
spawn_money(rand(300,800), src)
if(36 to 40)
new/obj/item/weapon/melee/baton(src)
if(41 to 45)
new/obj/item/clothing/under/shorts/red(src)
new/obj/item/clothing/under/shorts/blue(src)
if(46 to 50)
new/obj/item/clothing/under/chameleon(src)
for(var/i = 0, i < 7, i++)
new/obj/item/clothing/tie/horrible(src)
if(16)
new/obj/item/clothing/under/shorts(src)
new/obj/item/clothing/under/shorts/red(src)
new/obj/item/clothing/under/shorts/blue(src)
//Dummy crates start here.
if(17 to 29)
return
//Dummy crates end here.
if(30)
new/obj/item/weapon/melee/baton(src)
if(51 to 52) // Uncommon, 2% each
new/obj/item/weapon/melee/classic_baton(src)
if(53 to 54)
new/obj/item/latexballon(src)
if(55 to 56)
var/newitem = pick(typesof(/obj/item/toy/prize) - /obj/item/toy/prize)
new newitem(src)
if(57 to 58)
new/obj/item/toy/syndicateballoon(src)
if(59 to 60)
new/obj/item/weapon/rig(src)
if(61 to 62)
for(var/i = 0, i < 12, ++i)
new/obj/item/clothing/head/kitty(src)
if(63 to 64)
var/t = rand(4,7)
for(var/i = 0, i < t, ++i)
var/newcoin = pick(/obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/diamond, /obj/item/weapon/coin/phoron, /obj/item/weapon/coin/uranium, /obj/item/weapon/coin/platinum)
new newcoin(src)
if(65 to 66)
new/obj/item/clothing/suit/ianshirt(src)
if(67 to 68)
var/t = rand(4,7)
for(var/i = 0, i < t, ++i)
var/newitem = pick(typesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts - /obj/item/weapon/stock_parts/subspace)
new newitem(src)
if(69 to 70)
new/obj/item/weapon/pickaxe/silver(src)
if(71 to 72)
new/obj/item/weapon/pickaxe/drill(src)
if(73 to 74)
new/obj/item/weapon/pickaxe/jackhammer(src)
if(75 to 76)
new/obj/item/weapon/pickaxe/diamond(src)
if(77 to 78)
new/obj/item/weapon/pickaxe/diamonddrill(src)
if(79 to 80)
new/obj/item/weapon/pickaxe/gold(src)
if(81 to 82)
new/obj/item/weapon/pickaxe/plasmacutter(src)
if(83 to 84)
new/obj/item/toy/katana(src)
if(85 to 86)
new/obj/item/seeds/random(src)
if(87) // Rarest things, some are unobtainble otherwise, some are just robust, 1% each
new/obj/item/weed_extract(src)
if(88)
new/obj/item/xenos_claw(src)
if(89)
new/obj/item/organ/xenos/plasmavessel(src)
if(90)
new/obj/item/organ/heart(src)
if(91)
new/obj/item/device/soulstone(src)
if(92)
new/obj/item/weapon/katana(src)
if(93)
new/obj/item/weapon/dnainjector/xraymut(src) // Probably the least OP
if(94) // Why the hell not
new/obj/item/weapon/storage/backpack/clown(src)
new/obj/item/clothing/under/rank/clown(src)
new/obj/item/clothing/shoes/clown_shoes(src)
new/obj/item/device/pda/clown(src)
new/obj/item/clothing/mask/gas/clown_hat(src)
new/obj/item/weapon/bikehorn(src)
//new/obj/item/weapon/stamp/clown(src) I'd add it, but only clowns can use it
new/obj/item/toy/crayon/rainbow(src)
new/obj/item/toy/waterflower(src)
if(95)
new/obj/item/clothing/under/mime(src)
new/obj/item/clothing/shoes/black(src)
new/obj/item/device/pda/mime(src)
new/obj/item/clothing/gloves/white(src)
new/obj/item/clothing/mask/gas/mime(src)
new/obj/item/clothing/head/beret(src)
new/obj/item/clothing/suit/suspenders(src)
new/obj/item/toy/crayon/mime(src)
new/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(src)
if(96)
new/obj/item/weapon/vampiric(src)
if(97)
new/obj/item/weapon/archaeological_find(src)
if(98)
new/obj/item/weapon/melee/energy/sword(src)
if(99)
new/obj/item/weapon/storage/belt/champion(src)
new/obj/item/clothing/mask/luchador(src)
if(100)
new/obj/item/clothing/head/bearpelt(src)
/obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob)
if(locked)
user << "<span class='notice'>The crate is locked with a Deca-code lock.</span>"
var/input = input(usr, "Enter digit from [min] to [max].", "Deca-Code Lock", "") as num
var/input = input(usr, "Enter [codelen] digits.", "Deca-Code Lock", "") as text
if(in_range(src, user))
input = Clamp(input, 0, 10)
if (input == code)
user << "<span class='notice'>The crate unlocks!</span>"
locked = 0
overlays.Cut()
overlays += greenlight
else if (input == null || input > max || input < min)
else if (input == null || length(input) != codelen)
user << "<span class='notice'>You leave the crate alone.</span>"
else
user << "<span class='warning'>A red light flashes.</span>"
@@ -96,19 +177,26 @@
if (istype(W, /obj/item/weapon/card/emag))
user << "<span class='notice'>The crate unlocks!</span>"
locked = 0
if (istype(W, /obj/item/device/multitool))
if (istype(W, /obj/item/device/multitool)) // Greetings Urist McProfessor, how about a nice game of cows and bulls?
user << "<span class='notice'>DECA-CODE LOCK REPORT:</span>"
if (attempts == 1)
user << "<span class='warning'>* Anti-Tamper Bomb will activate on next failed access attempt.</span>"
else
user << "<span class='notice'>* Anti-Tamper Bomb will activate after [src.attempts] failed access attempts.</span>"
if (lastattempt == null)
user << "<span class='notice'> has been made to open the crate thus far.</span>"
return
// hot and cold
if (code > lastattempt)
user << "<span class='notice'>* Last access attempt lower than expected code.</span>"
else
user << "<span class='notice'>* Last access attempt higher than expected code.</span>"
if (lastattempt != null)
var/list/guess = list()
var/bulls = 0
var/cows = 0
for(var/i = 1, i < codelen + 1, i++)
var/a = copytext(lastattempt, i, i+1) // Stuff the code into the list
guess += a
guess[a] = i
for(var/i in guess) // Go through list and count matches
var/a = findtext(code, i)
if(a == guess[i])
++bulls
else if(a)
++cows
user << "<span class='notice'>Last code attempt had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.</span>"
else ..()
else ..()
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/items.dmi'
name = "Coin"
icon_state = "coin"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
force = 0.0
throwforce = 0.0
w_class = 1.0
@@ -1,233 +0,0 @@
//If anyone can think of a less shitty way to work out x,y points on a linear string of integers please tell me.
#define MAP_CELL ((y-1)*real_size)+x
#define MAP_CENTRE (((y-1)+size/2)*real_size)+(x+size/2)
#define MAP_TOP_LEFT ((y-1)*real_size)+x
#define MAP_TOP_RIGHT ((y-1)*real_size)+(x+size)
#define MAP_BOTTOM_LEFT (((y+size)-1)*real_size)+x
#define MAP_BOTTOM_RIGHT ((((y+size)-1)*real_size)+(x+size))
#define MAP_MID_TOP MAP_TOP_LEFT + (size/2)
#define MAP_MID_BOTTOM MAP_BOTTOM_LEFT + (size/2)
#define MAP_MID_LEFT (((y-1)+size/2)*real_size)+x
#define MAP_MID_RIGHT (((y-1)+size/2)*real_size)+(x+size)
#define MIN_SURFACE_COUNT 1000
#define MAX_SURFACE_COUNT 5000
#define MIN_RARE_COUNT 1000
#define MAX_RARE_COUNT 5000
#define MIN_DEEP_COUNT 100
#define MAX_DEEP_COUNT 300
#define ITERATE_BEFORE_FAIL 200
#define RESOURCE_HIGH_MAX 4
#define RESOURCE_HIGH_MIN 2
#define RESOURCE_MID_MAX 3
#define RESOURCE_MID_MIN 1
#define RESOURCE_LOW_MAX 1
#define RESOURCE_LOW_MIN 0
/*
Surface minerals:
silicates
iron
gold
silver
Rare minerals:
uranium
diamond
Deep minerals:
phoron
osmium (platinum)
tritium (hydrogen)
*/
/datum/ore_distribution
var/real_size = 65 //Overall map size ((must be power of 2)+1)
var/chunk_size = 4 //Size each cell represents on map (like hell we're generating up to 100 256^2 grids at roundstart)
var/list/map[4225] //The actual map. real_size squared.
var/range = 255 //Max random range of cells in map.
var/random_variance_chance = 25
var/random_element = 0.5
/datum/ore_distribution/proc/map_is_sane()
if(!map) return 0
var/rare_count = 0
var/surface_count = 0
var/deep_count = 0
for(var/cell in map)
if(cell>(range*0.60))
deep_count++
else if(cell>(range*0.40))
rare_count++
else
surface_count++
if(surface_count < MIN_SURFACE_COUNT || surface_count > MAX_SURFACE_COUNT) return 0
if(rare_count < MIN_RARE_COUNT || rare_count > MAX_RARE_COUNT) return 0
if(deep_count < MIN_DEEP_COUNT || deep_count > MAX_DEEP_COUNT) return 0
return 1
//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
/datum/ore_distribution/proc/populate_distribution_map()
//Seed beginning values.
var/x = 1
var/y = 1
var/size = real_size-1
map[MAP_TOP_LEFT] = (range/3)+rand(range/5)
map[MAP_TOP_RIGHT] = (range/3)+rand(range/5)
map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5)
map[MAP_BOTTOM_RIGHT] = (range/3)+rand(range/5)
//Fill in and smooth it out.
var/attempts = 0
do
attempts++
generate_distribution_map(1,1,size)
while(attempts < ITERATE_BEFORE_FAIL && !map_is_sane())
if(attempts >= ITERATE_BEFORE_FAIL)
world << "<b><font color='red'>Could not generate a sane distribution map. Aborting.</font></b>"
map = null
return
else
apply_to_asteroid()
/datum/ore_distribution/proc/clear_distribution_map()
for(var/x = 1, x <= real_size, x++)
for(var/y = 1, y <= real_size, y++)
map[MAP_CELL] = 0
/datum/ore_distribution/proc/print_distribution_map(var/mob/usr)
var/line = ""
for(var/x = 1, x <= real_size, x++)
for(var/y = 1, y <= real_size, y++)
line += num2text(round(map[MAP_CELL]/25.5))
if(usr)
usr << line
else
world << line
line = ""
/datum/ore_distribution/proc/generate_distribution_map(var/x,var/y,var/input_size)
var/size = input_size
map[MAP_MID_TOP] = (map[MAP_TOP_LEFT] + map[MAP_TOP_RIGHT])/2
map[MAP_MID_RIGHT] = (map[MAP_BOTTOM_RIGHT] + map[MAP_TOP_RIGHT])/2
map[MAP_MID_BOTTOM] = (map[MAP_BOTTOM_LEFT] + map[MAP_BOTTOM_RIGHT])/2
map[MAP_MID_LEFT] = (map[MAP_TOP_LEFT] + map[MAP_BOTTOM_RIGHT])/2
map[MAP_CENTRE] = (map[MAP_MID_LEFT]+map[MAP_MID_RIGHT]+map[MAP_MID_BOTTOM]+map[MAP_MID_TOP])/4
if(prob(random_variance_chance))
map[MAP_CENTRE] *= (rand(1) ? (1.0-random_element) : (1.0+random_element))
map[MAP_CENTRE] = max(0,min(range,map[MAP_CENTRE]))
if(size>3)
generate_distribution_map(x,y,input_size/2)
generate_distribution_map(x+(input_size/2),y,input_size/2)
generate_distribution_map(x,y+(input_size/2),input_size/2)
generate_distribution_map(x+(input_size/2),y+(input_size/2),input_size/2)
/datum/ore_distribution/proc/apply_to_asteroid()
// THESE VALUES DETERMINE THE AREA THAT THE DISTRIBUTION MAP IS APPLIED TO.
// IF YOU DO NOT RUN OFFICIAL BAYCODE ASTEROID MAP YOU NEED TO CHANGE THEM.
// ORIGIN IS THE BOTTOM LEFT CORNER OF THE SQUARE CONTAINING ALL ASTEROID
// TILES YOU WISH TO APPLY THE DISTRIBUTION MAP TO.
var/origin_x = 13 //We start here...
var/origin_y = 32 //...and here...
var/limit_x = 217 //...and iterate until here...
var/limit_y = 223 //...and here...
var/asteroid_z = 5 //...on this Z-level.
var/tx = origin_x
var/ty = origin_y
for(var/y = 1, y <= real_size, y++)
for(var/x = 1, x <= real_size, x++)
var/turf/target_turf
for(var/i=0,i<chunk_size,i++)
for(var/j=0,j<chunk_size,j++)
if(tx+j > limit_x || ty+i > limit_y)
continue
target_turf = locate(tx+j, ty+i, asteroid_z)
if(target_turf && target_turf.has_resources)
target_turf.resources = list()
target_turf.resources["silicates"] = rand(3,5)
target_turf.resources["carbonaceous rock"] = rand(3,5)
switch(map[MAP_CELL])
if(0 to 100)
target_turf.resources["iron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["diamond"] = 0
target_turf.resources["phoron"] = 0
target_turf.resources["osmium"] = 0
target_turf.resources["hydrogen"] = 0
if(100 to 124)
target_turf.resources["iron"] = 0
target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["diamond"] = 0
target_turf.resources["phoron"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["hydrogen"] = 0
if(125 to 255)
target_turf.resources["iron"] = 0
target_turf.resources["gold"] = 0
target_turf.resources["silver"] = 0
target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["phoron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
tx += chunk_size
tx = origin_x
ty += chunk_size
world << "<b><font color='red'>Resource map generation complete.</font></b>"
return
#undef MAP_CELL
#undef MAP_CENTRE
#undef MAP_TOP_LEFT
#undef MAP_TOP_RIGHT
#undef MAP_BOTTOM_LEFT
#undef MAP_BOTTOM_RIGHT
#undef MAP_MID_TOP
#undef MAP_MID_BOTTOM
#undef MAP_MID_LEFT
#undef MAP_MID_RIGHT
#undef MIN_SURFACE_COUNT
#undef MAX_SURFACE_COUNT
#undef MIN_RARE_COUNT
#undef MAX_RARE_COUNT
#undef MIN_DEEP_COUNT
#undef MAX_DEEP_COUNT
#undef ITERATE_BEFORE_FAIL
#undef RESOURCE_HIGH_MAX
#undef RESOURCE_HIGH_MIN
#undef RESOURCE_MID_MAX
#undef RESOURCE_MID_MIN
#undef RESOURCE_LOW_MAX
#undef RESOURCE_LOW_MIN
+9 -8
View File
@@ -49,21 +49,22 @@
/*****************************Pickaxe********************************/
/obj/item/weapon/pickaxe
name = "pickaxe"
name = "mining drill"
desc = "The most basic of mining drills, for short excavations and small mineral extractions."
icon = 'icons/obj/items.dmi'
icon_state = "pickaxe"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
throwforce = 4.0
item_state = "pickaxe"
icon_state = "pickaxe"
item_state = "jackhammer"
w_class = 4.0
matter = list("metal" = 3750)
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
origin_tech = "materials=1;engineering=1"
attack_verb = list("hit", "pierced", "sliced", "attacked")
attack_verb = list("hit", "pierced", "sliced", "attacked", "drilled")
var/drill_sound = 'sound/weapons/Genhit.ogg'
var/drill_verb = "picking"
var/drill_verb = "drilling"
sharp = 1
var/excavation_amount = 100
@@ -82,7 +83,7 @@
desc = "This makes no metallurgic sense."
/obj/item/weapon/pickaxe/drill
name = "mining drill" // Can dig sand as well!
name = "advanced mining drill" // Can dig sand as well!
icon_state = "handdrill"
item_state = "jackhammer"
digspeed = 30
@@ -150,7 +151,7 @@
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/items.dmi'
icon_state = "shovel"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
+5 -4
View File
@@ -29,7 +29,8 @@
/turf/simulated/mineral/New()
MineralSpread()
spawn(0)
MineralSpread()
spawn(2)
var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
@@ -86,7 +87,7 @@
if(mineral && mineral.spread)
for(var/trydir in cardinal)
if(prob(mineral.spread_chance))
var/turf/simulated/mineral/random/target_turf = get_step(src, trydir)
var/turf/simulated/mineral/target_turf = get_step(src, trydir)
if(istype(target_turf) && !target_turf.mineral)
target_turf.mineral = mineral
target_turf.UpdateMineral()
@@ -363,7 +364,7 @@
/turf/simulated/mineral/random
name = "Mineral deposit"
var/mineralSpawnChanceList = list("Uranium" = 5, "Platinum" = 5, "Iron" = 35, "Coal" = 35, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Phoron" = 10)
var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit
var/mineralChance = 100 //10 //means 10% chance of this plot changing to a mineral deposit
/turf/simulated/mineral/random/New()
if (prob(mineralChance) && !mineral)
@@ -379,7 +380,7 @@
. = ..()
/turf/simulated/mineral/random/high_chance
mineralChance = 25
mineralChance = 100 //25
mineralSpawnChanceList = list("Uranium" = 10, "Platinum" = 10, "Iron" = 20, "Coal" = 20, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Phoron" = 20)
+1 -1
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
flags = FPRINT | TABLEPASS| CONDUCT
flags = CONDUCT
force = 10.0
throwforce = 2.0
w_class = 4.0
+16 -10
View File
@@ -26,7 +26,7 @@
/mob/dead/observer/New(mob/body)
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER
see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE
see_in_dark = 100
verbs += /mob/dead/observer/proc/dead_tele
@@ -143,7 +143,7 @@ Works together with spawning an observer, noted above.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
ghost.key = key
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
return ghost
@@ -404,14 +404,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "\blue Heat Capacity: [round(environment.heat_capacity(),0.1)]"
/mob/dead/observer/verb/toggle_darkness()
set name = "Toggle Darkness"
/mob/dead/observer/verb/toggle_sight()
set name = "Toggle Sight"
set category = "Ghost"
if (see_invisible == SEE_INVISIBLE_OBSERVER_NOLIGHTING)
see_invisible = SEE_INVISIBLE_OBSERVER
else
see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING
switch(see_invisible)
if(SEE_INVISIBLE_OBSERVER_AI_EYE)
see_invisible = SEE_INVISIBLE_OBSERVER_NOOBSERVERS
usr << "<span class='notice'>You no longer see other observers or the AI eye.</span>"
if(SEE_INVISIBLE_OBSERVER_NOOBSERVERS)
see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING
usr << "<span class='notice'>You no longer see darkness.</span>"
else
see_invisible = SEE_INVISIBLE_OBSERVER_AI_EYE
usr << "<span class='notice'>You again see everything.</span>"
/mob/dead/observer/verb/become_mouse()
set name = "Become mouse"
@@ -557,8 +563,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(src.invisibility != 0)
user.visible_message( \
"<span class='warning'>[user] drags ghost, [src], to our plan of reality!</span>", \
"<span class='warning'>You drag [src] to our plan of reality!</span>" \
"<span class='warning'>[user] drags ghost, [src], to our plane of reality!</span>", \
"<span class='warning'>You drag [src] to our plane of reality!</span>" \
)
toggle_visibility(1)
else
+2
View File
@@ -52,6 +52,8 @@
if(stat == DEAD)
return 0
facing_dir = null
if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it.
src.visible_message("<b>\The [src.name]</b> [deathmessage]")
+2 -2
View File
@@ -12,7 +12,7 @@
var/input
if(!message)
input = copytext(sanitize(input(src,"Choose an emote to display.") as text|null),1,MAX_MESSAGE_LEN)
input = sanitize(copytext(input(src,"Choose an emote to display.") as text|null,1,MAX_MESSAGE_LEN))
else
input = message
if(input)
@@ -108,7 +108,7 @@
var/input
if(!message)
input = copytext(sanitize(input(src, "Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN)
input = sanitize(copytext(input(src, "Choose an emote to display.") as text|null, 1, MAX_MESSAGE_LEN))
else
input = message

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