mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-22 04:28:33 +01:00
Merge remote-tracking branch 'upstream/dev' into pacman
Conflicts: code/modules/power/port_gen.dm
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 ----
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
@@ -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>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -168,7 +168,6 @@
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
anchored = 1.0
|
||||
flags = TABLEPASS
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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--
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,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"
|
||||
@@ -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)
|
||||
|
||||
@@ -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),
|
||||
))
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]")
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user