mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 12:08:28 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 2/1/2018_make_the_sun_not_lag_again
This commit is contained in:
@@ -6,13 +6,13 @@ world/IsBanned(key,address,computer_id)
|
||||
|
||||
//Guest Checking
|
||||
if(!config.guests_allowed && IsGuestKey(key))
|
||||
log_access("Failed Login: [key] - Guests not allowed")
|
||||
log_adminwarn("Failed Login: [key] - Guests not allowed")
|
||||
message_admins("<font color='blue'>Failed Login: [key] - Guests not allowed</font>")
|
||||
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
|
||||
|
||||
//check if the IP address is a known TOR node
|
||||
if(config && config.ToRban && ToRban_isbanned(address))
|
||||
log_access("Failed Login: [src] - Banned: ToR")
|
||||
log_adminwarn("Failed Login: [src] - Banned: ToR")
|
||||
message_admins("<font color='blue'>Failed Login: [src] - Banned: ToR</font>")
|
||||
//ban their computer_id and ckey for posterity
|
||||
AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0)
|
||||
@@ -24,7 +24,7 @@ world/IsBanned(key,address,computer_id)
|
||||
//Ban Checking
|
||||
. = CheckBan( ckey(key), computer_id, address )
|
||||
if(.)
|
||||
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
|
||||
message_admins("<font color='blue'>Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]</font>")
|
||||
return .
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@ var/global/floorIsLava = 0
|
||||
////////////////////////////////
|
||||
/proc/message_admins(var/msg)
|
||||
msg = "<span class=\"log_message\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
log_adminwarn(msg)
|
||||
//log_adminwarn(msg) //log_and_message_admins is for this
|
||||
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
log_attack(text)
|
||||
var/rendered = "<span class=\"log_message\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
@@ -380,7 +380,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
if(3)
|
||||
dat+={"
|
||||
Creating new Feed Message...
|
||||
<HR><B><A href='?src=\ref[src];ac_set_channel_receiving=1'>Receiving Channel</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>" //MARK
|
||||
<HR><B><A href='?src=\ref[src];ac_set_channel_receiving=1'>Receiving Channel</A>:</B> [src.admincaster_feed_channel.channel_name]<BR>
|
||||
<B>Message Author:</B> <FONT COLOR='green'>[src.admincaster_signature]</FONT><BR>
|
||||
<B><A href='?src=\ref[src];ac_set_new_message=1'>Message Body</A>:</B> [src.admincaster_feed_message.body] <BR>
|
||||
<BR><A href='?src=\ref[src];ac_submit_new_message=1'>Submit</A><BR><BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A><BR>
|
||||
@@ -674,10 +674,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
set desc = "Send an intercom message, like an arrivals announcement."
|
||||
if(!check_rights(0)) return
|
||||
|
||||
//This is basically how death alarms do it
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/omni(null)
|
||||
|
||||
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot2.channels) // + a.keyslot1.channels
|
||||
var/channel = input("Channel for message:","Channel", null) as null|anything in radiochannels
|
||||
|
||||
if(channel) //They picked a channel
|
||||
var/sender = input("Name of sender (max 75):", "Announcement", "Announcement Computer") as null|text
|
||||
@@ -688,11 +685,94 @@ proc/admin_notice(var/message, var/rights)
|
||||
|
||||
if(message) //They put a message
|
||||
message = sanitize(message, 500, extra = 0)
|
||||
a.autosay("[message]", "[sender]", "[channel == "Common" ? null : channel]") //Common is a weird case, as it's not a "channel", it's just talking into a radio without a channel set.
|
||||
global_announcer.autosay("[message]", "[sender]", "[channel == "Common" ? null : channel]") //Common is a weird case, as it's not a "channel", it's just talking into a radio without a channel set.
|
||||
log_admin("Intercom: [key_name(usr)] : [sender]:[message]")
|
||||
qdel(a)
|
||||
|
||||
feedback_add_details("admin_verb","IN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/intercom_convo()
|
||||
set category = "Fun"
|
||||
set name = "Intercom Convo"
|
||||
set desc = "Send an intercom conversation, like several uses of the Intercom Msg verb."
|
||||
set waitfor = FALSE //Why bother? We have some sleeps. You can leave tho!
|
||||
if(!check_rights(0)) return
|
||||
|
||||
var/channel = input("Channel for message:","Channel", null) as null|anything in radiochannels
|
||||
|
||||
if(!channel) //They picked a channel
|
||||
return
|
||||
|
||||
to_chat(usr,"<span class='notice'><B>Intercom Convo Directions</B><br>Start the conversation with the sender, a pipe (|), and then the message on one line. Then hit enter to \
|
||||
add another line, and type a (whole) number of seconds to pause between that message, and the next message, then repeat the message syntax up to 20 times. For example:<br>\
|
||||
--- --- ---<br>\
|
||||
Some Guy|Hello guys, what's up?<br>\
|
||||
5<br>\
|
||||
Other Guy|Hey, good to see you.<br>\
|
||||
5<br>\
|
||||
Some Guy|Yeah, you too.<br>\
|
||||
--- --- ---<br>\
|
||||
The above will result in those messages playing, with a 5 second gap between each. Maximum of 20 messages allowed.</span>")
|
||||
|
||||
var/list/decomposed
|
||||
var/message = input(usr,"See your chat box for instructions. Keep a copy elsewhere in case it is rejected when you click OK.", "Input Conversation", "") as null|message
|
||||
|
||||
if(!message)
|
||||
return
|
||||
|
||||
//Split on pipe or \n
|
||||
decomposed = splittext(message,regex("\\||$","m"))
|
||||
decomposed += "0" //Tack on a final 0 sleep to make 3-per-message evenly
|
||||
|
||||
//Time to find how they screwed up.
|
||||
//Wasn't the right length
|
||||
if((decomposed.len) % 3) //+1 to accomidate the lack of a wait time for the last message
|
||||
to_chat(usr,"<span class='warning'>You passed [decomposed.len] segments (senders+messages+pauses). You must pass a multiple of 3, minus 1 (no pause after the last message). That means a sender and message on every other line (starting on the first), separated by a pipe character (|), and a number every other line that is a pause in seconds.</span>")
|
||||
return
|
||||
|
||||
//Too long a conversation
|
||||
if((decomposed.len / 3) > 20)
|
||||
to_chat(usr,"<span class='warning'>This conversation is too long! 20 messages maximum, please.</span>")
|
||||
return
|
||||
|
||||
//Missed some sleeps, or sanitized to nothing.
|
||||
for(var/i = 1; i < decomposed.len; i++)
|
||||
|
||||
//Sanitize sender
|
||||
var/clean_sender = sanitize(decomposed[i])
|
||||
if(!clean_sender)
|
||||
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the sender of the [(i+2)/3]\th message.</span>")
|
||||
return
|
||||
decomposed[i] = clean_sender
|
||||
|
||||
//Sanitize message
|
||||
var/clean_message = sanitize(decomposed[++i])
|
||||
if(!clean_message)
|
||||
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the body of the [(i+2)/3]\th message.</span>")
|
||||
return
|
||||
decomposed[i] = clean_message
|
||||
|
||||
//Sanitize wait time
|
||||
var/clean_time = text2num(decomposed[++i])
|
||||
if(!isnum(clean_time))
|
||||
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the wait time after the [(i+2)/3]\th message.</span>")
|
||||
return
|
||||
if(clean_time > 60)
|
||||
to_chat(usr,"<span class='warning'>Max 60 second wait time between messages for sanity's sake please.</span>")
|
||||
return
|
||||
decomposed[i] = clean_time
|
||||
|
||||
log_admin("Intercom convo started by: [key_name(usr)] : [sanitize(message)]")
|
||||
feedback_add_details("admin_verb","IN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//Sanitized AND we still have a chance to send it? Wow!
|
||||
if(LAZYLEN(decomposed))
|
||||
for(var/i = 1; i < decomposed.len; i++)
|
||||
var/this_sender = decomposed[i]
|
||||
var/this_message = decomposed[++i]
|
||||
var/this_wait = decomposed[++i]
|
||||
global_announcer.autosay("[this_message]", "[this_sender]", "[channel == "Common" ? null : channel]") //Common is a weird case, as it's not a "channel", it's just talking into a radio without a channel set.
|
||||
sleep(this_wait SECONDS)
|
||||
|
||||
/datum/admins/proc/toggleooc()
|
||||
set category = "Server"
|
||||
set desc="Globally Toggles OOC"
|
||||
|
||||
@@ -16,7 +16,7 @@ proc/log_and_message_admins_many(var/list/mob/users, var/message)
|
||||
|
||||
log_admin("[english_list(user_keys)] [message]")
|
||||
message_admins("[english_list(user_keys)] [message]")
|
||||
|
||||
/* Old procs
|
||||
proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message)
|
||||
if(victim)
|
||||
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>[key_name(attacker)] - [victim_message]</font>")
|
||||
@@ -42,3 +42,4 @@ proc/admin_inject_log(mob/attacker, mob/victim, obj/item/weapon, reagents, amoun
|
||||
"used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred",
|
||||
"was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred",
|
||||
"used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into")
|
||||
*/
|
||||
|
||||
@@ -6,6 +6,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
|
||||
var/previous_rights = 0
|
||||
|
||||
//Clear profile access
|
||||
for(var/A in world.GetConfig("admin"))
|
||||
world.SetConfig("APP/admin", A, null)
|
||||
|
||||
//load text from file
|
||||
var/list/Lines = file2list("config/admin_ranks.txt")
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
@@ -59,7 +60,6 @@ var/list/admin_verbs_admin = list(
|
||||
/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,
|
||||
/client/proc/ghost_view, //let us see ghosts WHENEVERRRR
|
||||
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
|
||||
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
|
||||
/client/proc/secrets,
|
||||
@@ -101,7 +101,8 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player
|
||||
)
|
||||
|
||||
var/list/admin_verbs_ban = list(
|
||||
@@ -192,6 +193,8 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/cmd_display_init_log,
|
||||
/client/proc/cmd_display_overlay_log,
|
||||
/client/proc/air_report,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/reload_eventMs,
|
||||
@@ -212,7 +215,6 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/dsay,
|
||||
/client/proc/ghost_view,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/datum/admins/proc/view_runtimes,
|
||||
@@ -325,7 +327,6 @@ var/list/admin_verbs_mod = list(
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
/client/proc/ghost_view,
|
||||
/datum/admins/proc/show_skills,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/check_antagonists,
|
||||
@@ -350,7 +351,6 @@ var/list/admin_verbs_event_manager = list(
|
||||
/client/proc/admin_ghost,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/dsay,
|
||||
/client/proc/ghost_view,
|
||||
/client/proc/cmd_admin_subtle_message,
|
||||
/client/proc/debug_variables,
|
||||
/client/proc/check_antagonists,
|
||||
@@ -490,24 +490,6 @@ var/list/admin_verbs_event_manager = list(
|
||||
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
||||
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/ghost_view()
|
||||
set category = "Admin"
|
||||
set name = "Ghost View"
|
||||
set desc = "Toggles ability to see ghosts, even while in a mob."
|
||||
if(!holder) return
|
||||
if(!mob.plane_holder) return
|
||||
|
||||
var/choice = alert(src,"Do you want to see ghosts, or not?","Ghost viewing","Show 'em!","Cancel","Hide 'em!")
|
||||
if(choice == "Cancel")
|
||||
return
|
||||
|
||||
if(choice == "Show 'em!" && mob.plane_holder)
|
||||
mob.plane_holder.set_vis(VIS_GHOSTS,TRUE)
|
||||
to_chat(src,"<span class='notice'>Ghosts are now visible (while in this mob).</span>")
|
||||
else if(mob.plane_holder)
|
||||
mob.plane_holder.set_vis(VIS_GHOSTS,FALSE)
|
||||
to_chat(src,"<span class='notice'>Ghosts are now hidden (while in this mob).</span>")
|
||||
|
||||
/client/proc/invisimin()
|
||||
set name = "Invisimin"
|
||||
set category = "Admin"
|
||||
@@ -779,11 +761,11 @@ var/list/admin_verbs_event_manager = list(
|
||||
set category = "Debug"
|
||||
set name = "Kill Air"
|
||||
set desc = "Toggle Air Processing"
|
||||
if(air_processing_killed)
|
||||
air_processing_killed = 0
|
||||
if(!SSair.can_fire)
|
||||
SSair.can_fire = TRUE
|
||||
usr << "<b>Enabled air processing.</b>"
|
||||
else
|
||||
air_processing_killed = 1
|
||||
SSair.can_fire = FALSE
|
||||
usr << "<b>Disabled air processing.</b>"
|
||||
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] used 'kill air'.")
|
||||
@@ -887,13 +869,13 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(!H.client)
|
||||
usr << "Only mobs with clients can alter their own appearance."
|
||||
return
|
||||
|
||||
var/datum/gender/T = gender_datums[H.get_visible_gender()]
|
||||
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
|
||||
if("Yes")
|
||||
log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
|
||||
log_and_message_admins("has allowed [H] to change [T.his] appearance, without whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
|
||||
if("No")
|
||||
log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
|
||||
log_and_message_admins("has allowed [H] to change [T.his] appearance, with whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
|
||||
feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -1043,7 +1025,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
set category = "Fun"
|
||||
set name = "Man Up"
|
||||
set desc = "Tells mob to man up and deal with it."
|
||||
|
||||
|
||||
if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return
|
||||
|
||||
T << "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>"
|
||||
@@ -1056,7 +1038,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
set category = "Fun"
|
||||
set name = "Man Up Global"
|
||||
set desc = "Tells everyone to man up and deal with it."
|
||||
|
||||
|
||||
if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return
|
||||
|
||||
for (var/mob/T as mob in mob_list)
|
||||
|
||||
@@ -23,6 +23,8 @@ var/list/admin_datums = list()
|
||||
rank = initial_rank
|
||||
rights = initial_rights
|
||||
admin_datums[ckey] = src
|
||||
if(rights & R_DEBUG) //grant profile access
|
||||
world.SetConfig("APP/admin", ckey, "role=admin")
|
||||
|
||||
/datum/admins/proc/associate(client/C)
|
||||
if(istype(C))
|
||||
|
||||
@@ -1001,11 +1001,6 @@
|
||||
//strip their stuff and stick it in the crate
|
||||
for(var/obj/item/I in M)
|
||||
M.drop_from_inventory(I, locker)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.update_icons_layers() //Cheaper
|
||||
else
|
||||
M.update_icons()
|
||||
|
||||
//so they black out before warping
|
||||
M.Paralyse(5)
|
||||
@@ -1188,10 +1183,8 @@
|
||||
usr << "This can only be used on instances of type /mob/living/carbon/human"
|
||||
return
|
||||
var/block=text2num(href_list["block"])
|
||||
//testing("togmutate([href_list["block"]] -> [block])")
|
||||
usr.client.cmd_admin_toggle_block(H,block)
|
||||
show_player_panel(H)
|
||||
//H.regenerate_icons()
|
||||
|
||||
else if(href_list["adminplayeropts"])
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
@@ -1228,7 +1221,7 @@
|
||||
if(ismob(M))
|
||||
var/take_msg = "<span class='notice'><b>ADMINHELP</b>: <b>[key_name(usr.client)]</b> is attending to <b>[key_name(M)]'s</b> adminhelp, please don't dogpile them.</span>"
|
||||
for(var/client/X in admins)
|
||||
if((R_ADMIN|R_MOD|R_EVENT) & X.holder.rights)
|
||||
if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights)
|
||||
to_chat(X, take_msg)
|
||||
to_chat(M, "<span class='notice'><b>Your adminhelp is being attended to by [usr.client]. Thanks for your patience!</b></span>")
|
||||
else
|
||||
@@ -1864,6 +1857,17 @@
|
||||
|
||||
show_player_panel(M)
|
||||
|
||||
else if(href_list["cryoplayer"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["cryoplayer"])
|
||||
if(!istype(M))
|
||||
to_chat(usr,"<span class='warning'>Mob doesn't exist!</span>")
|
||||
return
|
||||
|
||||
var/client/C = usr.client
|
||||
C.despawn_player(M)
|
||||
|
||||
// player info stuff
|
||||
|
||||
if(href_list["add_player_info"])
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
|
||||
log_adminpm(msg,src,C)
|
||||
send2adminirc("Reply: [key_name(src)]->[key_name(C)]: [html_decode(msg)]")
|
||||
|
||||
//we don't use message_admins here because the sender/receiver might get it too
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
log_admin("ADMIN: [key_name(src)] : [msg]")
|
||||
log_adminsay(msg,src)
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
for(var/client/C in admins)
|
||||
@@ -27,7 +27,7 @@
|
||||
return
|
||||
|
||||
msg = sanitize(msg)
|
||||
log_admin("MOD: [key_name(src)] : [msg]")
|
||||
log_modsay(msg,src)
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
@@ -50,7 +50,7 @@
|
||||
return
|
||||
|
||||
msg = sanitize(msg)
|
||||
log_admin("EVENT: [key_name(src)] : [msg]")
|
||||
log_eventsay(msg,src)
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
|
||||
@@ -39,4 +39,4 @@
|
||||
if((M.mind && M.mind.special_role && A && A.can_use_aooc) || isobserver(M)) // Antags must have their type be allowed to AOOC to see AOOC. This prevents, say, ERT from seeing AOOC.
|
||||
to_chat(M, "<span class='ooc'><span class='aooc'>[create_text_tag("aooc", "Antag-OOC:", M.client)] <EM>[player_display]:</EM> <span class='message'>[msg]</span></span></span>")
|
||||
|
||||
log_ooc("(ANTAG) [key] : [msg]")
|
||||
log_aooc(msg,src)
|
||||
@@ -327,6 +327,36 @@
|
||||
|
||||
usr << browse(dellog.Join(), "window=dellog")
|
||||
|
||||
/client/proc/cmd_display_init_log()
|
||||
set category = "Debug"
|
||||
set name = "Display Initialize() Log"
|
||||
set desc = "Displays a list of things that didn't handle Initialize() properly"
|
||||
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
src << browse(replacetext(SSatoms.InitLog(), "\n", "<br>"), "window=initlog")
|
||||
|
||||
/client/proc/cmd_display_overlay_log()
|
||||
set category = "Debug"
|
||||
set name = "Display overlay Log"
|
||||
set desc = "Display SSoverlays log of everything that's passed through it."
|
||||
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
render_stats(SSoverlays.stats, src)
|
||||
|
||||
// Render stats list for round-end statistics.
|
||||
/proc/render_stats(list/stats, user, sort = /proc/cmp_generic_stat_item_time)
|
||||
sortTim(stats, sort, TRUE)
|
||||
|
||||
var/list/lines = list()
|
||||
for (var/entry in stats)
|
||||
var/list/data = stats[entry]
|
||||
lines += "[entry] => [num2text(data[STAT_ENTRY_TIME], 10)]ms ([data[STAT_ENTRY_COUNT]]) (avg:[num2text(data[STAT_ENTRY_TIME]/(data[STAT_ENTRY_COUNT] || 1), 99)])"
|
||||
|
||||
if (user)
|
||||
user << browse("<ol><li>[lines.Join("</li><li>")]</li></ol>", "window=[url_encode("stats:\ref[stats]")]")
|
||||
else
|
||||
. = lines.Join("\n")
|
||||
|
||||
/client/proc/cmd_admin_grantfullaccess(var/mob/M in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Grant Full Access"
|
||||
@@ -378,10 +408,15 @@
|
||||
qdel(adminmob)
|
||||
feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/take_picture(var/atom/A in world)
|
||||
set name = "Save PNG"
|
||||
set category = "Debug"
|
||||
set desc = "Opens a dialog to save a PNG of any object in the game."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
|
||||
|
||||
downloadImage(A)
|
||||
|
||||
/client/proc/cmd_admin_areatest()
|
||||
set category = "Mapping"
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
set name = "Show Server Log"
|
||||
set desc = "Shows today's server log."
|
||||
|
||||
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")].log"
|
||||
var/path = "[log_path].log"
|
||||
if( fexists(path) )
|
||||
src << run( file(path) )
|
||||
else
|
||||
@@ -99,7 +99,10 @@
|
||||
set category = "Admin"
|
||||
set name = "Show Server Attack Log"
|
||||
set desc = "Shows today's server attack log."
|
||||
|
||||
to_chat(usr,"This verb doesn't actually do anything.")
|
||||
|
||||
/*
|
||||
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log"
|
||||
if( fexists(path) )
|
||||
src << run( file(path) )
|
||||
@@ -109,3 +112,5 @@
|
||||
usr << run( file(path) )
|
||||
feedback_add_details("admin_verb","SSAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -45,10 +45,7 @@
|
||||
|
||||
usr << "\[4/5\] - All turfs reset to roundstart values."
|
||||
|
||||
qdel(air_master)
|
||||
air_master = new
|
||||
air_master.Setup()
|
||||
spawn air_master.Start()
|
||||
SSair.RebootZAS()
|
||||
|
||||
usr << "\[5/5\] - ZAS Rebooted"
|
||||
world << "<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>"
|
||||
@@ -41,7 +41,12 @@
|
||||
if(!map)
|
||||
return
|
||||
template = map_templates[map]
|
||||
|
||||
|
||||
if(template.width > world.maxx || template.height > world.maxy)
|
||||
if(alert(usr,"This template is larger than the existing z-levels. It will EXPAND ALL Z-LEVELS to match the size of the template. This may cause chaos. Are you sure you want to do this?","DANGER!!!","Cancel","Yes") == "Cancel")
|
||||
to_chat(usr,"Template placement aborted.")
|
||||
return
|
||||
|
||||
if(alert(usr,"Confirm map load.", "Template Confirm","No","Yes") == "Yes")
|
||||
if(template.load_new_z())
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has placed a map template ([template.name]) on Z level [world.maxz].</span>")
|
||||
|
||||
@@ -160,8 +160,9 @@ var/list/debug_verbs = list (
|
||||
,/client/proc/testZAScolors
|
||||
,/client/proc/testZAScolors_remove
|
||||
,/datum/admins/proc/setup_supermatter
|
||||
,/client/proc/atmos_toggle_debug
|
||||
,/client/proc/spawn_tanktransferbomb
|
||||
,/client/proc/atmos_toggle_debug
|
||||
,/client/proc/spawn_tanktransferbomb
|
||||
,/client/proc/take_picture
|
||||
)
|
||||
|
||||
|
||||
@@ -273,14 +274,7 @@ var/list/debug_verbs = list (
|
||||
set name = "Reboot ZAS"
|
||||
|
||||
if(alert("This will destroy and remake all zone geometry on the whole map.","Reboot ZAS","Reboot ZAS","Nevermind") == "Reboot ZAS")
|
||||
var/datum/controller/air_system/old_air = air_master
|
||||
for(var/zone/zone in old_air.zones)
|
||||
zone.c_invalidate()
|
||||
qdel(old_air)
|
||||
air_master = new
|
||||
air_master.Setup()
|
||||
spawn air_master.Start()
|
||||
|
||||
SSair.RebootZAS()
|
||||
|
||||
/client/proc/count_objects_on_z_level()
|
||||
set category = "Mapping"
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.name = H.get_visible_name()
|
||||
// usr.regenerate_icons() //So the name is updated properly
|
||||
|
||||
usr.loc = O.loc // Appear where the object you were controlling is -- TLE
|
||||
usr.client.eye = usr
|
||||
|
||||
@@ -935,3 +935,63 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
usr << "Random events disabled"
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
|
||||
feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/despawn_player(var/mob/M in living_mob_list)
|
||||
set name = "Cryo Player"
|
||||
set category = "Admin"
|
||||
set desc = "Removes a player from the round as if they'd cryo'd."
|
||||
set popup_menu = FALSE
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(!M)
|
||||
return
|
||||
|
||||
var/confirm = alert("Are you sure you want to cryo [M]?","Confirmation","No","Yes")
|
||||
if(confirm == "No")
|
||||
return
|
||||
|
||||
var/list/human_cryopods = list()
|
||||
var/list/robot_cryopods = list()
|
||||
|
||||
for(var/obj/machinery/cryopod/CP in machines)
|
||||
if(!CP.control_computer)
|
||||
continue //Broken pod w/o computer, move on.
|
||||
|
||||
var/listname = "[CP.name] ([CP.x],[CP.y],[CP.z])"
|
||||
if(istype(CP,/obj/machinery/cryopod/robot))
|
||||
robot_cryopods[listname] = CP
|
||||
else
|
||||
human_cryopods[listname] = CP
|
||||
|
||||
//Gotta log this up here before they get ghostized and lose their key or anything.
|
||||
log_and_message_admins("[key_name(src)] admin cryo'd [key_name(M)].")
|
||||
feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
if(ishuman(M))
|
||||
var/obj/machinery/cryopod/CP = human_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in human_cryopods]
|
||||
if(!CP)
|
||||
return
|
||||
M.ghostize()
|
||||
CP.despawn_occupant(M)
|
||||
return
|
||||
|
||||
else if(issilicon(M))
|
||||
if(isAI(M))
|
||||
var/mob/living/silicon/ai/ai = M
|
||||
empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(ai.loc)
|
||||
global_announcer.autosay("[ai] has been moved to intelligence storage.", "Artificial Intelligence Oversight")
|
||||
ai.clear_client()
|
||||
return
|
||||
else
|
||||
var/obj/machinery/cryopod/robot/CP = robot_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in robot_cryopods]
|
||||
if(!CP)
|
||||
return
|
||||
M.ghostize()
|
||||
CP.despawn_occupant(M)
|
||||
return
|
||||
|
||||
else if(isliving(M))
|
||||
M.ghostize()
|
||||
qdel(M) //Bye
|
||||
|
||||
@@ -143,7 +143,12 @@
|
||||
vtext = "<a href='?_src_=vars;Vars=\ref[C]'>\ref[C]</a> - [C] ([C.type])"
|
||||
else if(islist(value))
|
||||
var/list/L = value
|
||||
vtext = "/list ([L.len])"
|
||||
var/removed = 0
|
||||
if(varname == "contents")
|
||||
var/list/original = value
|
||||
L = original.Copy() //We'll take a copy to manipulate
|
||||
removed = D.view_variables_filter_contents(L)
|
||||
vtext = "/list ([L.len]+[removed]H)"
|
||||
if(!(varname in view_variables_dont_expand) && L.len > 0 && L.len < 100)
|
||||
extra = "<ul>"
|
||||
var/index = 1
|
||||
@@ -158,3 +163,21 @@
|
||||
vtext = "[value]"
|
||||
|
||||
return "<li>[ecm][varname] = <span class='value'>[vtext]</span>[extra]</li>"
|
||||
|
||||
//Allows us to mask out some contents when it's not necessary to show them
|
||||
//For example, organs on humans, as the organs are stored in other lists which will also be present
|
||||
//So there's really no need to list them twice.
|
||||
/datum/proc/view_variables_filter_contents(list/L)
|
||||
return 0 //Return how many items you removed.
|
||||
|
||||
/mob/living/carbon/human/view_variables_filter_contents(list/L)
|
||||
. = ..()
|
||||
L -= ability_master
|
||||
.++
|
||||
|
||||
/mob/living/carbon/human/view_variables_filter_contents(list/L)
|
||||
. = ..()
|
||||
var/len_before = L.len
|
||||
L -= organs
|
||||
L -= internal_organs
|
||||
. += len_before - L.len
|
||||
|
||||
@@ -23,12 +23,13 @@
|
||||
var/area/last_name //The last acquired name, used should origin be lost
|
||||
var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated.
|
||||
var/end_time //Used to set when this alarm should clear, in case the origin is lost.
|
||||
var/hidden = FALSE //If this alarm can be seen from consoles or other things.
|
||||
|
||||
/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity)
|
||||
/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity, var/hidden)
|
||||
src.origin = origin
|
||||
|
||||
cameras() // Sets up both cameras and last alarm area.
|
||||
set_source_data(source, duration, severity)
|
||||
set_source_data(source, duration, severity, hidden)
|
||||
|
||||
/datum/alarm/proc/process()
|
||||
// Has origin gone missing?
|
||||
@@ -43,17 +44,19 @@
|
||||
AS.duration = 0
|
||||
AS.end_time = world.time + ALARM_RESET_DELAY
|
||||
|
||||
/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity)
|
||||
/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity, var/hidden)
|
||||
var/datum/alarm_source/AS = sources_assoc[source]
|
||||
if(!AS)
|
||||
AS = new/datum/alarm_source(source)
|
||||
sources += AS
|
||||
sources_assoc[source] = AS
|
||||
src.hidden = hidden
|
||||
// Currently only non-0 durations can be altered (normal alarms VS EMP blasts)
|
||||
if(AS.duration)
|
||||
duration = SecondsToTicks(duration)
|
||||
AS.duration = duration
|
||||
AS.severity = severity
|
||||
src.hidden = min(src.hidden, hidden)
|
||||
|
||||
/datum/alarm/proc/clear(var/source)
|
||||
var/datum/alarm_source/AS = sources_assoc[source]
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
A.process()
|
||||
check_alarm_cleared(A)
|
||||
|
||||
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1)
|
||||
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1, var/hidden = 0)
|
||||
var/new_alarm
|
||||
//Proper origin and source mandatory
|
||||
if(!(origin && source))
|
||||
@@ -23,9 +23,9 @@
|
||||
//see if there is already an alarm of this origin
|
||||
var/datum/alarm/existing = alarms_assoc[origin]
|
||||
if(existing)
|
||||
existing.set_source_data(source, duration, severity)
|
||||
existing.set_source_data(source, duration, severity, hidden)
|
||||
else
|
||||
existing = new/datum/alarm(origin, source, duration, severity)
|
||||
existing = new/datum/alarm(origin, source, duration, severity, hidden)
|
||||
new_alarm = 1
|
||||
|
||||
alarms |= existing
|
||||
@@ -48,10 +48,10 @@
|
||||
return check_alarm_cleared(existing)
|
||||
|
||||
/datum/alarm_handler/proc/major_alarms()
|
||||
return alarms
|
||||
return visible_alarms()
|
||||
|
||||
/datum/alarm_handler/proc/minor_alarms()
|
||||
return alarms
|
||||
return visible_alarms()
|
||||
|
||||
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
|
||||
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised)
|
||||
for(var/obj/machinery/camera/C in alarm.cameras())
|
||||
if(was_raised)
|
||||
if(was_raised && !alarm.hidden)
|
||||
C.add_network(category)
|
||||
else
|
||||
C.remove_network(category)
|
||||
@@ -95,3 +95,10 @@
|
||||
/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised)
|
||||
for(var/listener in listeners)
|
||||
call(listener, listeners[listener])(src, alarm, was_raised)
|
||||
|
||||
/datum/alarm_handler/proc/visible_alarms()
|
||||
var/list/visible_alarms = new()
|
||||
for(var/datum/alarm/A in alarms)
|
||||
if(!A.hidden)
|
||||
visible_alarms.Add(A)
|
||||
return visible_alarms
|
||||
@@ -1,19 +1,16 @@
|
||||
/datum/alarm_handler/atmosphere
|
||||
category = "Atmosphere Alarms"
|
||||
|
||||
/datum/alarm_handler/atmosphere/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1)
|
||||
..()
|
||||
|
||||
/datum/alarm_handler/atmosphere/major_alarms()
|
||||
var/list/major_alarms = new()
|
||||
for(var/datum/alarm/A in alarms)
|
||||
for(var/datum/alarm/A in visible_alarms())
|
||||
if(A.max_severity() > 1)
|
||||
major_alarms.Add(A)
|
||||
return major_alarms
|
||||
|
||||
/datum/alarm_handler/atmosphere/minor_alarms()
|
||||
var/list/minor_alarms = new()
|
||||
for(var/datum/alarm/A in alarms)
|
||||
for(var/datum/alarm/A in visible_alarms())
|
||||
if(A.max_severity() == 1)
|
||||
minor_alarms.Add(A)
|
||||
return minor_alarms
|
||||
|
||||
@@ -23,10 +23,13 @@
|
||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||
var/species = "Human"
|
||||
var/species = SPECIES_HUMAN
|
||||
delete_me = TRUE
|
||||
|
||||
/obj/effect/landmark/corpse/initialize()
|
||||
..()
|
||||
createCorpse()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
@@ -76,7 +79,6 @@
|
||||
W.assignment = corpseidjob
|
||||
M.set_id_info(W)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -87,7 +89,7 @@
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatesoldier
|
||||
name = "Syndicate Operative"
|
||||
name = "Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/gateway
|
||||
name = "gateway"
|
||||
desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations."
|
||||
desc = "A state-of-the-art Nanotrasen gateway, used to teleport rich commuters anywhere in the same planetary system."
|
||||
icon = 'icons/obj/machines/gateway.dmi'
|
||||
icon_state = "off"
|
||||
density = 1
|
||||
@@ -10,9 +10,9 @@
|
||||
|
||||
/obj/machinery/gateway/initialize()
|
||||
update_icon()
|
||||
if(dir == 2)
|
||||
if(dir == SOUTH)
|
||||
density = 0
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/gateway/update_icon()
|
||||
if(active)
|
||||
@@ -38,7 +38,7 @@
|
||||
update_icon()
|
||||
wait = world.time + config.gateway_delay //+ thirty minutes default
|
||||
awaygate = locate(/obj/machinery/gateway/centeraway)
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/gateway/centerstation/update_icon()
|
||||
if(active)
|
||||
@@ -152,6 +152,7 @@ obj/machinery/gateway/centerstation/process()
|
||||
/obj/machinery/gateway/centeraway/initialize()
|
||||
update_icon()
|
||||
stationgate = locate(/obj/machinery/gateway/centerstation)
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/update_icon()
|
||||
@@ -233,4 +234,4 @@ obj/machinery/gateway/centerstation/process()
|
||||
else
|
||||
user << "<font color='blue'><b>Recalibration successful!</b>:</font><font color='black'> This gate's systems have been fine tuned. Travel to this gate will now be on target.</font>"
|
||||
calibrated = 1
|
||||
return
|
||||
return
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
var/loot = "" //a list of possible items to spawn- a string of paths
|
||||
|
||||
/obj/effect/spawner/lootdrop/initialize()
|
||||
..()
|
||||
var/list/things = params2list(loot)
|
||||
|
||||
if(things && things.len)
|
||||
@@ -21,4 +22,4 @@
|
||||
continue
|
||||
|
||||
new loot_path(get_turf(src))
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -285,7 +285,8 @@ var/list/blobs = list()
|
||||
name = "blob"
|
||||
desc = "The blob lashing out at something."
|
||||
icon_state = "blob_attack"
|
||||
layer = 5.2
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
time_to_die = 6
|
||||
alpha = 140
|
||||
mouse_opacity = 0
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 4
|
||||
layer = MOB_LAYER + 0.2 // Over the blob.
|
||||
attacktext = "slams into"
|
||||
attacktext = list("slams into")
|
||||
attack_sound = 'sound/effects/slime_squish.ogg'
|
||||
emote_see = list("sways", "inflates briefly")
|
||||
var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
|
||||
@@ -97,7 +97,7 @@
|
||||
melee_damage_lower += 8 // 10 total.
|
||||
melee_damage_upper += 11 // 15 total.
|
||||
emote_see = list("shambles around", "twitches", "stares")
|
||||
attacktext = "claws"
|
||||
attacktext = list("claws")
|
||||
|
||||
H.forceMove(src)
|
||||
infested = H
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
if(autogenerate_destination_names) // Lets pad out the destination names.
|
||||
var/i = rand(6, 10)
|
||||
var/list/star_names = list(
|
||||
"Sol", "Alpha Centauri", "Sirius", "Vega", "Regulus", "Vir", "Algol", "Aldebaran",
|
||||
"Delta Doradus", "Menkar", "Geminga", "Elnath", "Gienah", "Mu Leporis", "Nyx", "Tau Ceti",
|
||||
"Wazn", "Alphard", "Phact", "Altair", "El", "Eutopia", "Qerr'valis", "Qerrna-Lakirr", "Rarkajar", "the Almach Rim")
|
||||
"Sol", "Alpha Centauri", "Tau Ceti", "Zhu Que", "Oasis", "Vir", "Gavel", "Ganesha",
|
||||
"Saint Columbia", "Altair", "Sidhe", "New Ohio", "Parvati", "Mahi-Mahi", "Nyx", "New Seoul",
|
||||
"Kess-Gendar", "Raphael", "Phact", "Altair", "El", "Eutopia", "Qerr'valis", "Qerrna-Lakirr", "Rarkajar", "Thoth", "Jahan's Post", "Kauq'xum", "Silk", "New Singapore", "Stove", "Viola", "Love", "Isavau's Gamble" )
|
||||
var/list/destination_types = list("dockyard", "station", "vessel", "waystation", "telecommunications satellite", "spaceport", "distress beacon", "anomaly", "colony", "outpost")
|
||||
while(i)
|
||||
destination_names.Add("a [pick(destination_types)] in [pick(star_names)]")
|
||||
@@ -104,8 +104,8 @@
|
||||
// Note that the current station being used will be pruned from this list upon being instantiated
|
||||
destination_names = list(
|
||||
"NSS Exodus in Nyx",
|
||||
//"NCS Northern Star in Vir",
|
||||
"NLS Southern Cross in Vir",
|
||||
"NCS Northern Star in Vir",
|
||||
//"NLS Southern Cross in Vir",
|
||||
"NAS Vir Central Command",
|
||||
"a dockyard orbiting Sif",
|
||||
"an asteroid orbiting Kara",
|
||||
@@ -235,6 +235,19 @@
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("WTV" = "freight")
|
||||
ship_names = list(
|
||||
"Comet",
|
||||
"Aurora",
|
||||
"Supernova",
|
||||
"Nebula",
|
||||
"Galaxy",
|
||||
"Starburst",
|
||||
"Constellation",
|
||||
"Pulsar",
|
||||
"Quark",
|
||||
"Void",
|
||||
"Asteroid"
|
||||
)
|
||||
destination_names = list()
|
||||
|
||||
/datum/lore/organization/tsc/bishop
|
||||
@@ -360,7 +373,8 @@
|
||||
"Preemptive Defensive Strike",
|
||||
"This Ship Is Spiders",
|
||||
"Legitimate Trade Vessel",
|
||||
"Please Don't Explode II"
|
||||
"Please Don't Explode II",
|
||||
"Get Off the Air"
|
||||
)
|
||||
destination_names = list(
|
||||
"a trade outpost in Shelf"
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
var/adminobs = null
|
||||
var/area = null
|
||||
var/time_died_as_mouse = null //when the client last died as a mouse
|
||||
var/datum/tooltip/tooltips = null
|
||||
|
||||
var/adminhelped = 0
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
//Panic bunker code
|
||||
if (isnum(player_age) && player_age == 0) //first connection
|
||||
if (config.panic_bunker && !holder && !deadmin_holder)
|
||||
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
|
||||
log_adminwarn("Failed Login: [key] - New account attempting to connect during panic bunker")
|
||||
message_admins("<span class='adminnotice'>Failed Login: [key] - New account attempting to connect during panic bunker</span>")
|
||||
to_chat(src, "Sorry but the server is currently not accepting connections from never before seen players.")
|
||||
qdel(src)
|
||||
|
||||
@@ -152,7 +152,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
if(pref.species)
|
||||
S = all_species[pref.species]
|
||||
else
|
||||
S = all_species["Human"]
|
||||
S = all_species[SPECIES_HUMAN]
|
||||
var/list/possible_genders = S.genders
|
||||
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
||||
return possible_genders
|
||||
|
||||
@@ -4,7 +4,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/equip_preview_mob = EQUIP_PREVIEW_ALL
|
||||
|
||||
var/icon/bgstate = "000"
|
||||
var/list/bgstate_options = list("000", "fff", "steel", "white")
|
||||
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced")
|
||||
|
||||
/datum/category_item/player_setup_item/general/body
|
||||
name = "Body"
|
||||
@@ -69,7 +69,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
|
||||
if(!pref.species || !(pref.species in playable_species))
|
||||
pref.species = "Human"
|
||||
pref.species = SPECIES_HUMAN
|
||||
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
||||
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
||||
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
|
||||
@@ -282,21 +282,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
. += "<b>Hair</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
. += " Style: <a href='?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>"
|
||||
|
||||
. += "<br><b>Facial</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
. += " Style: <a href='?src=\ref[src];facial_style=1'>[pref.f_style]</a><br>"
|
||||
|
||||
if(has_flag(mob_species, HAS_EYE_COLOR))
|
||||
. += "<br><b>Eyes</b><br>"
|
||||
. += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes)]'><tr><td>__</td></tr></table></font><br>"
|
||||
. += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
. += "<br><b>Body Color</b><br>"
|
||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin)]'><tr><td>__</td></tr></table></font><br>"
|
||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
. += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
|
||||
for(var/M in pref.body_markings)
|
||||
@@ -307,7 +307,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
. += "<br>"
|
||||
. += "<b>Allow Synth color:</b> <a href='?src=\ref[src];synth_color=1'><b>[pref.synth_color ? "Yes" : "No"]</b></a><br>"
|
||||
if(pref.synth_color)
|
||||
. += "<a href='?src=\ref[src];synth2_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];synth2_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
|
||||
. = jointext(.,null)
|
||||
|
||||
@@ -588,7 +588,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.rlimb_data[second_limb] = null
|
||||
|
||||
if("Prosthesis")
|
||||
var/tmp_species = pref.species ? pref.species : "Human"
|
||||
var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN
|
||||
var/list/usable_manufacturers = list()
|
||||
for(var/company in chargen_robolimbs)
|
||||
var/datum/robolimb/M = chargen_robolimbs[company]
|
||||
@@ -727,7 +727,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
|
||||
if(!pref.species_preview || !(pref.species_preview in all_species))
|
||||
pref.species_preview = "Human"
|
||||
pref.species_preview = SPECIES_HUMAN
|
||||
var/datum/species/current_species = all_species[pref.species_preview]
|
||||
var/dat = "<body>"
|
||||
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
|
||||
@@ -741,7 +741,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
dat += "<b>Language:</b> [current_species.species_language]<br/>"
|
||||
dat += "<small>"
|
||||
if(current_species.spawn_flags & SPECIES_CAN_JOIN)
|
||||
dat += "</br><b>Often present on human stations.</b>"
|
||||
switch(current_species.rarity_value)
|
||||
if(1 to 2)
|
||||
dat += "</br><b>Often present on human stations.</b>"
|
||||
if(3 to 4)
|
||||
dat += "</br><b>Rarely present on human stations.</b>"
|
||||
if(5)
|
||||
dat += "</br><b>Unheard of on human stations.</b>"
|
||||
else
|
||||
dat += "</br><b>May be present on human stations.</b>"
|
||||
if(current_species.spawn_flags & SPECIES_IS_WHITELISTED)
|
||||
dat += "</br><b>Whitelist restricted.</b>"
|
||||
if(!current_species.has_organ[O_HEART])
|
||||
|
||||
@@ -7,24 +7,28 @@
|
||||
S["UI_style_color"] >> pref.UI_style_color
|
||||
S["UI_style_alpha"] >> pref.UI_style_alpha
|
||||
S["ooccolor"] >> pref.ooccolor
|
||||
S["tooltipstyle"] >> pref.tooltipstyle
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
||||
S["UI_style"] << pref.UI_style
|
||||
S["UI_style_color"] << pref.UI_style_color
|
||||
S["UI_style_alpha"] << pref.UI_style_alpha
|
||||
S["ooccolor"] << pref.ooccolor
|
||||
S["tooltipstyle"] << pref.tooltipstyle
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
||||
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
||||
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
|
||||
pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha))
|
||||
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
|
||||
pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle))
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
||||
. = "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
||||
. += "<b>Custom UI</b> (recommended for White UI):<br>"
|
||||
. += "-Color: <a href='?src=\ref[src];select_color=1'><b>[pref.UI_style_color]</b></a> <table style='display:inline;' bgcolor='[pref.UI_style_color]'><tr><td>__</td></tr></table> <a href='?src=\ref[src];reset=ui'>reset</a><br>"
|
||||
. += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> <a href='?src=\ref[src];reset=alpha'>reset</a><br>"
|
||||
. += "<b>Tooltip Style:</b> <a href='?src=\ref[src];select_tooltip_style=1'><b>[pref.tooltipstyle]</b></a><br>"
|
||||
if(can_select_ooc_color(user))
|
||||
. += "<b>OOC Color:</b> "
|
||||
if(pref.ooccolor == initial(pref.ooccolor))
|
||||
@@ -57,6 +61,12 @@
|
||||
pref.ooccolor = new_ooccolor
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_tooltip_style"])
|
||||
var/tooltip_style_new = input(user, "Choose tooltip style.", "Character Preference", pref.tooltipstyle) as null|anything in all_tooltip_styles
|
||||
if(!tooltip_style_new || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.tooltipstyle = tooltip_style_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset"])
|
||||
switch(href_list["reset"])
|
||||
if("ui")
|
||||
|
||||
@@ -98,6 +98,25 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/mob_tooltips
|
||||
description ="Mob tooltips"
|
||||
key = "MOB_TOOLTIPS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/attack_icons
|
||||
description ="Attack icons"
|
||||
key = "ATTACK_ICONS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/hotkeys_default
|
||||
description ="Hotkeys Default"
|
||||
key = "HUD_HOTKEYS"
|
||||
enabled_description = "Enabled"
|
||||
disabled_description = "Disabled"
|
||||
enabled_by_default = FALSE // Backwards compatibility
|
||||
|
||||
/datum/client_preference/show_typing_indicator
|
||||
description ="Typing indicator"
|
||||
key = "SHOW_TYPING"
|
||||
@@ -106,7 +125,7 @@ var/list/_client_preferences_by_type
|
||||
|
||||
/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled)
|
||||
if(!enabled)
|
||||
preference_mob.set_typing_indicator(0)
|
||||
preference_mob.set_typing_indicator(FALSE)
|
||||
|
||||
/datum/client_preference/show_ooc
|
||||
description ="OOC chat"
|
||||
|
||||
@@ -7,9 +7,4 @@
|
||||
|
||||
/datum/gear/ears/headphones
|
||||
display_name = "headphones"
|
||||
path = /obj/item/clothing/ears/earmuffs/headphones
|
||||
|
||||
/datum/gear/ears/translator
|
||||
display_name = "universal translator, ear"
|
||||
path = /obj/item/device/universal_translator/ear
|
||||
cost = 8
|
||||
path = /obj/item/clothing/ears/earmuffs/headphones
|
||||
@@ -141,6 +141,14 @@
|
||||
display_name = "cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy
|
||||
|
||||
/datum/gear/shoes/cowboy/classic
|
||||
display_name = "classic cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy/classic
|
||||
|
||||
/datum/gear/shoes/cowboy/snakeskin
|
||||
display_name = "snakeskin cowboy boots"
|
||||
path = /obj/item/clothing/shoes/boots/cowboy/snakeskin
|
||||
|
||||
/datum/gear/shoes/jungle
|
||||
display_name = "jungle boots"
|
||||
path = /obj/item/clothing/shoes/boots/jungle
|
||||
|
||||
@@ -90,6 +90,14 @@
|
||||
display_name = "trenchcoat, grey"
|
||||
path = /obj/item/clothing/suit/storage/trench/grey
|
||||
|
||||
datum/gear/suit/duster
|
||||
display_name = "cowboy duster"
|
||||
path = /obj/item/clothing/suit/storage/duster
|
||||
|
||||
/datum/gear/suit/duster/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/suit/hazard_vest
|
||||
display_name = "hazard vest selection"
|
||||
path = /obj/item/clothing/suit/storage/hazardvest
|
||||
@@ -181,27 +189,22 @@
|
||||
/datum/gear/suit/roles/poncho/security
|
||||
display_name = "poncho, security"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/security
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/suit/roles/poncho/medical
|
||||
display_name = "poncho, medical"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/medical
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
|
||||
/datum/gear/suit/roles/poncho/engineering
|
||||
display_name = "poncho, engineering"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/engineering
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
|
||||
|
||||
/datum/gear/suit/roles/poncho/science
|
||||
display_name = "poncho, science"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/science
|
||||
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cargo
|
||||
display_name = "poncho, cargo"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cargo
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/hos
|
||||
display_name = "cloak, head of security"
|
||||
|
||||
@@ -448,4 +448,12 @@
|
||||
|
||||
/datum/gear/uniform/bathrobe
|
||||
display_name = "bathrobe"
|
||||
path = /obj/item/clothing/under/bathrobe
|
||||
path = /obj/item/clothing/under/bathrobe
|
||||
|
||||
/datum/gear/uniform/flamenco
|
||||
display_name = "flamenco dress"
|
||||
path = /obj/item/clothing/under/dress/flamenco
|
||||
|
||||
/datum/gear/uniform/westernbustle
|
||||
display_name = "western bustle"
|
||||
path = /obj/item/clothing/under/dress/westernbustle
|
||||
@@ -8,6 +8,11 @@
|
||||
display_name = "clipboard"
|
||||
path = /obj/item/weapon/clipboard
|
||||
|
||||
/datum/gear/utility/tts_device
|
||||
display_name = "text to speech device"
|
||||
path = /obj/item/device/text_to_speech
|
||||
cost = 3 //Not extremely expensive, but it's useful for mute chracters.
|
||||
|
||||
/datum/gear/utility/communicator
|
||||
display_name = "communicator selection"
|
||||
path = /obj/item/device/communicator
|
||||
@@ -29,7 +34,7 @@
|
||||
display_name = "the traveler's guide to vir"
|
||||
path = /obj/item/weapon/book/codex/lore/vir
|
||||
cost = 0
|
||||
|
||||
|
||||
/datum/gear/utility/news
|
||||
display_name = "daedalus pocket newscaster"
|
||||
path = /obj/item/weapon/book/codex/lore/news
|
||||
@@ -115,11 +120,6 @@
|
||||
slot = "implant"
|
||||
exploitable = 1
|
||||
|
||||
/datum/gear/utility/translator
|
||||
display_name = "universal translator"
|
||||
path = /obj/item/device/universal_translator
|
||||
cost = 8
|
||||
|
||||
/datum/gear/utility/pen
|
||||
display_name = "Fountain Pen"
|
||||
path = /obj/item/weapon/pen/fountain
|
||||
@@ -132,3 +132,12 @@
|
||||
/datum/gear/utility/wheelchair/color/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/utility/umbrella
|
||||
display_name = "Umbrella"
|
||||
path = /obj/item/weapon/melee/umbrella
|
||||
cost = 3
|
||||
|
||||
/datum/gear/utility/umbrella/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -1,13 +1,13 @@
|
||||
// Alien clothing.
|
||||
/datum/gear/suit/zhan_furs
|
||||
display_name = "Zhan-Khazan furs (Tajara)"
|
||||
display_name = "Zhan-Khazan furs (Tajaran)"
|
||||
path = /obj/item/clothing/suit/tajaran/furs
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/head/zhan_scarf
|
||||
display_name = "Zhan headscarf"
|
||||
path = /obj/item/clothing/head/tajaran/scarf
|
||||
whitelisted = "Tajara"
|
||||
whitelisted = SPECIES_TAJ
|
||||
|
||||
/datum/gear/suit/unathi_mantle
|
||||
display_name = "hide mantle (Unathi)"
|
||||
@@ -19,7 +19,7 @@
|
||||
display_name = "headtail chain selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/chains/New()
|
||||
..()
|
||||
@@ -33,7 +33,7 @@
|
||||
display_name = "headtail band selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/bands/New()
|
||||
..()
|
||||
@@ -47,7 +47,7 @@
|
||||
display_name = "short headtail cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/black
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/cloth/short/New()
|
||||
..()
|
||||
@@ -61,7 +61,7 @@
|
||||
display_name = "long headtail cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/black
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/cloth/long/New()
|
||||
..()
|
||||
@@ -75,7 +75,7 @@
|
||||
display_name = "Colored bands (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/colored/band/New()
|
||||
..()
|
||||
@@ -85,7 +85,7 @@
|
||||
display_name = "Colored chain (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
whitelisted = SPECIES_SKRELL
|
||||
|
||||
/datum/gear/ears/skrell/colored/chain/New()
|
||||
..()
|
||||
@@ -94,7 +94,7 @@
|
||||
/datum/gear/uniform/smock
|
||||
display_name = "smock selection (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/smock
|
||||
whitelisted = "Teshari"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/smock/New()
|
||||
@@ -108,7 +108,7 @@
|
||||
/datum/gear/uniform/undercoat
|
||||
display_name = "undercoat selection (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/undercoat
|
||||
whitelisted = "Teshari"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/undercoat/New()
|
||||
@@ -122,7 +122,7 @@
|
||||
/datum/gear/suit/cloak
|
||||
display_name = "cloak selection (Teshari)"
|
||||
path = /obj/item/clothing/suit/storage/seromi/cloak
|
||||
whitelisted = "Teshari"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/cloak/New()
|
||||
@@ -147,4 +147,17 @@
|
||||
display_name = "cloth footwraps"
|
||||
path = /obj/item/clothing/shoes/footwraps
|
||||
sort_category = "Xenowear"
|
||||
cost = 1
|
||||
cost = 1
|
||||
|
||||
/datum/gear/uniform/cohesionsuits
|
||||
display_name = "cohesion suit selection (Promethean)"
|
||||
path = /obj/item/clothing/under/cohesion
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/cohesionsuits/New()
|
||||
..()
|
||||
var/list/cohesionsuits = list()
|
||||
for(var/cohesionsuit in (typesof(/obj/item/clothing/under/cohesion)))
|
||||
var/obj/item/clothing/under/cohesion/cohesion_type = cohesionsuit
|
||||
cohesionsuits[initial(cohesion_type.name)] = cohesion_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cohesionsuits))
|
||||
@@ -54,7 +54,7 @@
|
||||
if(alt_title && !(alt_title in job.alt_titles))
|
||||
pref.player_alt_titles -= job.title
|
||||
|
||||
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 18, list/splitJobs = list("Chief Medical Officer"))
|
||||
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 18, list/splitJobs = list("Chief Engineer"))
|
||||
if(!job_master)
|
||||
return
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
if(job.minimum_character_age && user.client && (user.client.prefs.age < job.minimum_character_age))
|
||||
. += "<del>[rank]</del></td><td> \[MINIMUM CHARACTER AGE: [job.minimum_character_age]]</td></tr>"
|
||||
continue
|
||||
if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant"))
|
||||
if((pref.job_civilian_low & ASSISTANT) && job.type != /datum/job/assistant)
|
||||
. += "<font color=grey>[rank]</font></td><td></td></tr>"
|
||||
continue
|
||||
if((rank in command_positions) || (rank == "AI"))//Bold head jobs
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
. += "<a href='?src=\ref[src];set_job=[rank]'>"
|
||||
|
||||
if(rank == "Assistant")//Assistant is special
|
||||
if(job.type == /datum/job/assistant)//Assistant is special
|
||||
if(pref.job_civilian_low & ASSISTANT)
|
||||
. += " <font color=55cc55>\[Yes]</font>"
|
||||
else
|
||||
@@ -180,7 +180,7 @@
|
||||
if(!job)
|
||||
return 0
|
||||
|
||||
if(role == "Assistant")
|
||||
if(job.type == /datum/job/assistant)
|
||||
if(pref.job_civilian_low & job.flag)
|
||||
pref.job_civilian_low &= ~job.flag
|
||||
else
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
|
||||
|
||||
/datum/trait/modifier/mental/tajaraphobe
|
||||
name = "Tajara-phobic"
|
||||
name = "Tajaran-phobic"
|
||||
desc = "Boilerplate racism for cats goes here."
|
||||
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ datum/preferences
|
||||
var/UI_style = "Midnight"
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
@@ -46,7 +47,7 @@ datum/preferences
|
||||
var/r_eyes = 0 //Eye color
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = "Human" //Species datum to use.
|
||||
var/species = SPECIES_HUMAN //Species datum to use.
|
||||
var/species_preview //Used for the species selection window.
|
||||
var/list/alternate_languages = list() //Secondary language(s)
|
||||
var/list/language_prefixes = list() //Kanguage prefix keys
|
||||
@@ -272,7 +273,7 @@ datum/preferences
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1)
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = TRUE)
|
||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
@@ -287,10 +288,10 @@ datum/preferences
|
||||
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
character.update_mutations(0)
|
||||
character.update_underwear(0)
|
||||
character.update_hair(0)
|
||||
character.update_icons_all()
|
||||
character.update_icons_body()
|
||||
character.update_mutations()
|
||||
character.update_underwear()
|
||||
character.update_hair()
|
||||
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
var/dat = "<body>"
|
||||
|
||||
@@ -98,11 +98,11 @@
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see the speech indicator."
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] have the speech indicator."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","TTIND") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ahelp_sound()
|
||||
set name = "Toggle Admin Help Sound"
|
||||
@@ -192,6 +192,19 @@
|
||||
|
||||
feedback_add_details("admin_verb","TFiringMode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_mob_tooltips()
|
||||
set name = "Toggle Mob Tooltips"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles displaying name/species over mobs when moused over."
|
||||
|
||||
var/pref_path = /datum/client_preference/mob_tooltips
|
||||
toggle_preference(pref_path)
|
||||
prefs.save_preferences()
|
||||
|
||||
src << "You will now [(is_preference_enabled(/datum/client_preference/mob_tooltips)) ? "see" : "not see"] mob tooltips."
|
||||
|
||||
feedback_add_details("admin_verb","TMobTooltips") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//Toggles for Staff
|
||||
//Developers
|
||||
|
||||
|
||||
@@ -20,6 +20,15 @@
|
||||
"Hologram" = 'icons/mob/screen1_robot_minimalist.dmi'
|
||||
)
|
||||
|
||||
var/global/list/all_tooltip_styles = list(
|
||||
"Midnight", //Default for everyone is the first one,
|
||||
"Plasmafire",
|
||||
"Retro",
|
||||
"Slimecore",
|
||||
"Operative",
|
||||
"Clockwork"
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
if(ui_style in all_ui_styles)
|
||||
return all_ui_styles[ui_style]
|
||||
|
||||
@@ -430,6 +430,7 @@
|
||||
P.icon = initial(copy_projectile.icon)
|
||||
P.icon_state = initial(copy_projectile.icon_state)
|
||||
P.pass_flags = initial(copy_projectile.pass_flags)
|
||||
P.fire_sound = initial(copy_projectile.fire_sound)
|
||||
P.hitscan = initial(copy_projectile.hitscan)
|
||||
P.step_delay = initial(copy_projectile.step_delay)
|
||||
P.muzzle_type = initial(copy_projectile.muzzle_type)
|
||||
@@ -451,12 +452,15 @@
|
||||
var/obj/item/weapon/gun/copy = ..()
|
||||
|
||||
flags_inv = copy.flags_inv
|
||||
fire_sound = copy.fire_sound
|
||||
if(copy.fire_sound)
|
||||
fire_sound = copy.fire_sound
|
||||
else
|
||||
fire_sound = null
|
||||
fire_sound_text = copy.fire_sound_text
|
||||
|
||||
var/obj/item/weapon/gun/energy/E = copy
|
||||
if(istype(E))
|
||||
copy_projectile = E.projectile_type
|
||||
var/obj/item/weapon/gun/G = copy
|
||||
if(istype(G))
|
||||
copy_projectile = G.projectile_type
|
||||
//charge_meter = E.charge_meter //does not work very well with icon_state changes, ATM
|
||||
else
|
||||
copy_projectile = null
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
var/list/sprite_sheets_refit = null
|
||||
var/ear_protection = 0
|
||||
var/blood_sprite_state
|
||||
|
||||
//Updates the icons of the mob wearing the clothing item, if any.
|
||||
/obj/item/clothing/proc/update_clothing_icon()
|
||||
@@ -56,7 +57,7 @@
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
if(species_restricted && istype(M,/mob/living/carbon/human))
|
||||
if(LAZYLEN(species_restricted) && istype(M,/mob/living/carbon/human))
|
||||
var/exclusive = null
|
||||
var/wearable = null
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -66,10 +67,10 @@
|
||||
|
||||
if(H.species)
|
||||
if(exclusive)
|
||||
if(!(H.species.get_bodytype() in species_restricted))
|
||||
if(!(H.species.get_bodytype(H) in species_restricted))
|
||||
wearable = 1
|
||||
else
|
||||
if(H.species.get_bodytype() in species_restricted)
|
||||
if(H.species.get_bodytype(H) in species_restricted)
|
||||
wearable = 1
|
||||
|
||||
if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store)))
|
||||
@@ -83,16 +84,14 @@
|
||||
|
||||
//Set species_restricted list
|
||||
switch(target_species)
|
||||
if("Human", "Skrell") //humanoid bodytypes
|
||||
species_restricted = list("Human", "Skrell", "Promethean") //skrell/humans can wear each other's suits
|
||||
if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes
|
||||
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell/humans can wear each other's suits
|
||||
else
|
||||
species_restricted = list(target_species)
|
||||
|
||||
//Set icon
|
||||
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
|
||||
icon_override = sprite_sheets_refit[target_species]
|
||||
else
|
||||
icon_override = initial(icon_override)
|
||||
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
|
||||
|
||||
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
|
||||
icon = sprite_sheets_obj[target_species]
|
||||
@@ -105,17 +104,15 @@
|
||||
|
||||
//Set species_restricted list
|
||||
switch(target_species)
|
||||
if("Skrell")
|
||||
species_restricted = list("Human", "Skrell", "Promethean") //skrell helmets fit humans too
|
||||
if(SPECIES_SKRELL)
|
||||
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell helmets fit humans too
|
||||
|
||||
else
|
||||
species_restricted = list(target_species)
|
||||
|
||||
//Set icon
|
||||
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
|
||||
icon_override = sprite_sheets_refit[target_species]
|
||||
else
|
||||
icon_override = initial(icon_override)
|
||||
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
|
||||
|
||||
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
|
||||
icon = sprite_sheets_obj[target_species]
|
||||
@@ -130,7 +127,7 @@
|
||||
throwforce = 2
|
||||
slot_flags = SLOT_EARS
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/ears.dmi')
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi')
|
||||
|
||||
/obj/item/clothing/ears/attack_hand(mob/user as mob)
|
||||
if (!user) return
|
||||
@@ -196,20 +193,23 @@
|
||||
gender = PLURAL //Carn: for grammarically correct text-parsing
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon = 'icons/obj/clothing/gloves.dmi'
|
||||
siemens_coefficient = 0.75
|
||||
siemens_coefficient = 0.9
|
||||
blood_sprite_state = "bloodyhands"
|
||||
var/wired = 0
|
||||
var/obj/item/weapon/cell/cell = 0
|
||||
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
|
||||
var/obj/item/clothing/gloves/ring = null //Covered ring
|
||||
var/mob/living/carbon/human/wearer = null //Used for covered rings when dropping
|
||||
var/glove_level = 2 //What "layer" the glove is on
|
||||
var/overgloves = 0 //Used by gauntlets and arm_guards
|
||||
var/glove_level = 2 //What "layer" the glove is on
|
||||
var/overgloves = 0 //Used by gauntlets and arm_guards
|
||||
var/punch_force = 0 //How much damage do these gloves add to a punch?
|
||||
var/punch_damtype = BRUTE //What type of damage does this make fists be?
|
||||
body_parts_covered = HANDS
|
||||
slot_flags = SLOT_GLOVES
|
||||
attack_verb = list("challenged")
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/gloves.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/update_clothing_icon()
|
||||
@@ -242,8 +242,8 @@
|
||||
name = "modified [name]"
|
||||
desc = "[desc]<br>They have had the fingertips cut off of them."
|
||||
if("exclude" in species_restricted)
|
||||
species_restricted -= "Unathi"
|
||||
species_restricted -= "Tajara"
|
||||
species_restricted -= SPECIES_UNATHI
|
||||
species_restricted -= SPECIES_TAJ
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(slot && slot == slot_gloves)
|
||||
if(istype(H.gloves, /obj/item/clothing/gloves/ring))
|
||||
if(H.gloves)
|
||||
ring = H.gloves
|
||||
if(ring.glove_level >= src.glove_level)
|
||||
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
|
||||
@@ -261,6 +261,8 @@
|
||||
H.drop_from_inventory(ring) //Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves.
|
||||
ring.forceMove(src)
|
||||
to_chat(user, "You slip \the [src] on over \the [src.ring].")
|
||||
if(!(flags & THICKMATERIAL))
|
||||
punch_force += ring.punch_force
|
||||
else
|
||||
ring = null
|
||||
|
||||
@@ -268,6 +270,7 @@
|
||||
if(ring) //Put the ring back on if the check fails.
|
||||
if(H.equip_to_slot_if_possible(ring, slot_gloves))
|
||||
src.ring = null
|
||||
punch_force = initial(punch_force)
|
||||
return 0
|
||||
|
||||
wearer = H //TODO clean this when magboots are cleaned
|
||||
@@ -284,6 +287,7 @@
|
||||
if(!H.equip_to_slot_if_possible(ring, slot_gloves))
|
||||
ring.forceMove(get_turf(src))
|
||||
src.ring = null
|
||||
punch_force = initial(punch_force)
|
||||
wearer = null
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
@@ -294,10 +298,11 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
icon = 'icons/obj/clothing/rings.dmi'
|
||||
gender = NEUTER
|
||||
species_restricted = list("exclude", "Diona")
|
||||
species_restricted = list("exclude", SPECIES_DIONA)
|
||||
siemens_coefficient = 1
|
||||
glove_level = 1
|
||||
fingerprint_chance = 100
|
||||
punch_force = 2
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Head
|
||||
@@ -311,15 +316,17 @@
|
||||
body_parts_covered = HEAD
|
||||
slot_flags = SLOT_HEAD
|
||||
w_class = ITEMSIZE_SMALL
|
||||
blood_sprite_state = "helmetblood"
|
||||
|
||||
var/light_overlay = "helmet_light"
|
||||
var/light_applied
|
||||
var/brightness_on
|
||||
var/on = 0
|
||||
var/image/helmet_light
|
||||
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/head.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/attack_self(mob/user)
|
||||
@@ -379,29 +386,29 @@
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/head/update_icon(var/mob/user)
|
||||
|
||||
overlays.Cut()
|
||||
var/mob/living/carbon/human/H
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
if(ishuman(user))
|
||||
H = user
|
||||
|
||||
if(on)
|
||||
|
||||
// Generate object icon.
|
||||
if(!light_overlay_cache["[light_overlay]_icon"])
|
||||
light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]")
|
||||
overlays |= light_overlay_cache["[light_overlay]_icon"]
|
||||
light_overlay_cache["[light_overlay]_icon"] = image(icon = 'icons/obj/light_overlays.dmi', icon_state = "[light_overlay]")
|
||||
helmet_light = light_overlay_cache["[light_overlay]_icon"]
|
||||
add_overlay(helmet_light)
|
||||
|
||||
// Generate and cache the on-mob icon, which is used in update_inv_head().
|
||||
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype(H)]" : ""]"
|
||||
var/body_type = (H && H.species.get_bodytype(H))
|
||||
var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? "_[body_type]" : ""]"
|
||||
if(!light_overlay_cache[cache_key])
|
||||
var/use_icon = 'icons/mob/light_overlays.dmi'
|
||||
if(H && sprite_sheets[H.species.get_bodytype(H)])
|
||||
use_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||
light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
|
||||
var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
|
||||
light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
|
||||
|
||||
if(H)
|
||||
H.update_inv_head()
|
||||
else if(helmet_light)
|
||||
cut_overlay(helmet_light)
|
||||
helmet_light = null
|
||||
|
||||
user.update_inv_head() //Will redraw the helmet with the light on the mob
|
||||
|
||||
/obj/item/clothing/head/update_clothing_icon()
|
||||
if (ismob(src.loc))
|
||||
@@ -420,11 +427,12 @@
|
||||
body_parts_covered = HEAD
|
||||
slot_flags = SLOT_MASK
|
||||
body_parts_covered = FACE|EYES
|
||||
blood_sprite_state = "maskblood"
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/masks.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/masks.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/masks.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/masks.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/mask.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/mask.dmi'
|
||||
)
|
||||
|
||||
var/voicechange = 0
|
||||
@@ -453,6 +461,7 @@
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = FEET
|
||||
slot_flags = SLOT_FEET
|
||||
blood_sprite_state = "shoeblood"
|
||||
|
||||
var/can_hold_knife = 0
|
||||
var/obj/item/holding
|
||||
@@ -468,10 +477,10 @@
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
force = 2
|
||||
var/overshoes = 0
|
||||
species_restricted = list("exclude","Teshari", "Vox")
|
||||
species_restricted = list("exclude",SPECIES_TESHARI, SPECIES_VOX)
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/shoes.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/proc/draw_knife()
|
||||
@@ -567,9 +576,10 @@
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
preserve_item = 1
|
||||
|
||||
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/suit.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
valid_accessory_slots = list("over", "armband")
|
||||
@@ -595,6 +605,7 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
show_messages = 1
|
||||
blood_sprite_state = "uniformblood"
|
||||
|
||||
var/has_sensor = 1 //For the crew computer 2 = unable to change mode
|
||||
var/sensor_mode = 0
|
||||
@@ -607,8 +618,8 @@
|
||||
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/uniform.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/uniform.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/uniform.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/uniform.dmi'
|
||||
)
|
||||
|
||||
//convenience var for defining the icon state for the overlay used when the clothing is worn.
|
||||
|
||||
@@ -1,28 +1,18 @@
|
||||
/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
if(valid_accessory_slots && istype(A) && (A.slot in valid_accessory_slots))
|
||||
.=1
|
||||
if(src.valid_accessory_slots && (A.slot in src.valid_accessory_slots))
|
||||
if(accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return FALSE
|
||||
return TRUE
|
||||
else
|
||||
return 0
|
||||
if(accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/clothing/accessory))
|
||||
|
||||
if(!valid_accessory_slots || !valid_accessory_slots.len)
|
||||
usr << "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>"
|
||||
return
|
||||
|
||||
var/obj/item/clothing/accessory/A = I
|
||||
if(can_attach_accessory(A))
|
||||
user.drop_item()
|
||||
attach_accessory(user, A)
|
||||
if(attempt_attach_accessory(A, user))
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>You cannot attach more accessories of this type to [src].</span>"
|
||||
return
|
||||
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
@@ -37,6 +27,10 @@
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attack_hand(user)
|
||||
return
|
||||
if (ishuman(user) && src.loc == user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(src != H.l_store && src != H.r_store && src != H.s_store)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/MouseDrop(var/obj/over_object)
|
||||
@@ -70,10 +64,29 @@
|
||||
* user is the user doing the attaching. Can be null, such as when attaching
|
||||
* items on spawn
|
||||
*/
|
||||
/obj/item/clothing/proc/attempt_attach_accessory(obj/item/clothing/accessory/A, mob/user)
|
||||
if(!valid_accessory_slots || !valid_accessory_slots.len)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>")
|
||||
return FALSE
|
||||
|
||||
var/obj/item/clothing/accessory/acc = A
|
||||
if(can_attach_accessory(acc))
|
||||
if(user)
|
||||
user.drop_item()
|
||||
attach_accessory(user, acc)
|
||||
return TRUE
|
||||
else
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You cannot attach more accessories of this type to [src].</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
accessories += A
|
||||
A.on_attached(src, user)
|
||||
src.verbs |= /obj/item/clothing/proc/removetie_verb
|
||||
update_accessory_slowdown()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
@@ -82,8 +95,14 @@
|
||||
|
||||
A.on_removed(user)
|
||||
accessories -= A
|
||||
update_accessory_slowdown()
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/proc/update_accessory_slowdown()
|
||||
slowdown = initial(slowdown)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
slowdown += A.slowdown
|
||||
|
||||
/obj/item/clothing/proc/removetie_verb()
|
||||
set name = "Remove Accessory"
|
||||
set category = "Object"
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/obj/item/clothing/apply_accessories(var/image/standing)
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
standing.add_overlay(A.get_mob_overlay())
|
||||
|
||||
/obj/item/clothing/apply_blood(var/image/standing)
|
||||
if(blood_DNA && blood_sprite_state && ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
|
||||
bloodsies.color = blood_color
|
||||
standing.add_overlay(bloodsies)
|
||||
|
||||
//UNIFORM: Always appends "_s" to iconstate, stupidly.
|
||||
/obj/item/clothing/under/get_worn_icon_state(var/slot_name)
|
||||
var/state2use = ..()
|
||||
state2use += "_s"
|
||||
return state2use
|
||||
|
||||
//HELMET: May have a lighting overlay
|
||||
/obj/item/clothing/head/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
|
||||
var/image/standing = ..()
|
||||
if(on && slot_name == slot_head_str)
|
||||
var/cache_key = "[light_overlay][LAZYACCESS(sprite_sheets,body_type) ? "_[body_type]" : ""]"
|
||||
if(standing && light_overlay_cache[cache_key])
|
||||
standing.add_overlay(light_overlay_cache[cache_key])
|
||||
return standing
|
||||
|
||||
//SUIT: Blood state is slightly different
|
||||
/obj/item/clothing/suit/apply_blood(var/image/standing)
|
||||
if(blood_DNA && blood_sprite_state && ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = "[blood_overlay_type]blood")
|
||||
bloodsies.color = blood_color
|
||||
standing.add_overlay(bloodsies)
|
||||
@@ -46,7 +46,7 @@
|
||||
icon = 'icons/obj/clothing/ears.dmi'
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
species_restricted = list("Skrell")
|
||||
species_restricted = list(SPECIES_SKRELL)
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain
|
||||
name = "Gold headtail chains"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "These arm guards will protect your hands and arms."
|
||||
body_parts_covered = HANDS|ARMS
|
||||
overgloves = 1
|
||||
punch_force = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot)
|
||||
@@ -27,7 +28,7 @@
|
||||
icon_state = "arm_guards_bullet"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
siemens_coefficient = 0.7
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/arm_guard/riot
|
||||
name = "riot arm guards"
|
||||
@@ -35,7 +36,7 @@
|
||||
icon_state = "arm_guards_riot"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
siemens_coefficient = 0.5
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/arm_guard/combat
|
||||
name = "combat arm guards"
|
||||
|
||||
@@ -6,21 +6,22 @@
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
|
||||
desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
|
||||
desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly."
|
||||
name = "budget insulated gloves"
|
||||
icon_state = "yellow"
|
||||
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
|
||||
siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
New()
|
||||
//average of 0.5, somewhat better than regular gloves' 0.75
|
||||
siemens_coefficient = pick(0,0.1,0.3,0.5,0.5,0.75,1.35)
|
||||
/obj/item/clothing/gloves/fyellow/initialize()
|
||||
. = ..()
|
||||
//Picks a value between 0 and 1, in 5% increments
|
||||
var/shock_pick = rand(0,20)
|
||||
siemens_coefficient = shock_pick * 0.05
|
||||
|
||||
/obj/item/clothing/gloves/black
|
||||
desc = "These work gloves are thick and fire-resistant."
|
||||
name = "black gloves"
|
||||
icon_state = "black"
|
||||
siemens_coefficient = 0.50
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
cold_protection = HANDS
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
desc = "These gloves go over regular gloves."
|
||||
glove_level = 3
|
||||
overgloves = 1
|
||||
punch_force = 5
|
||||
var/obj/item/clothing/gloves/gloves = null //Undergloves
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/mob_can_equip(mob/user)
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
name = "forensic gloves"
|
||||
icon_state = "forensic"
|
||||
item_state = "black"
|
||||
siemens_coefficient = 0.50
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
cold_protection = HANDS
|
||||
@@ -81,14 +80,13 @@
|
||||
icon_state = "leather"
|
||||
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
|
||||
permeability_coefficient = 0.05
|
||||
siemens_coefficient = 0.50 //thick work gloves
|
||||
siemens_coefficient = 0.75 //thick work gloves
|
||||
|
||||
/obj/item/clothing/gloves/duty
|
||||
desc = "These brown duty gloves are made from a durable synthetic."
|
||||
name = "work gloves"
|
||||
icon_state = "work"
|
||||
item_state = "wgloves"
|
||||
siemens_coefficient = 0.50
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/gloves/tactical
|
||||
@@ -97,7 +95,8 @@
|
||||
icon_state = "work"
|
||||
item_state = "wgloves"
|
||||
force = 5
|
||||
siemens_coefficient = 0.50
|
||||
punch_force = 3
|
||||
siemens_coefficient = 0.75
|
||||
permeability_coefficient = 0.05
|
||||
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
@@ -116,3 +115,15 @@
|
||||
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/gloves/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
|
||||
icon_state = "knuckledusters"
|
||||
attack_verb = list("punched", "beaten", "struck")
|
||||
flags = THICKMATERIAL // Stops rings from increasing hit strength
|
||||
siemens_coefficient = 1
|
||||
fingerprint_chance = 100
|
||||
overgloves = 1
|
||||
force = 5
|
||||
punch_force = 5
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
desc = "an ultra rare hat. It commands a certain respect."
|
||||
icon_state = "petehat"
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/head.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
name = "helmet"
|
||||
desc = "Standard Security gear. Protects the head from impacts."
|
||||
icon_state = "helmet"
|
||||
valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
|
||||
restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
|
||||
flags = THICKMATERIAL
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
@@ -18,6 +20,7 @@
|
||||
desc = "A helmet painted in Peacekeeper blue. Stands out like a sore thumb."
|
||||
icon_state = "helmet_sol"
|
||||
armor = list(melee = 50, bullet = 50, laser = 50,energy = 25, bomb = 30, bio = 0, rad = 0)
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/solgov/command
|
||||
name = "command helmet"
|
||||
@@ -61,6 +64,7 @@
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
valid_accessory_slots = null
|
||||
action_button_name = "Toggle Visor"
|
||||
|
||||
/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob)
|
||||
@@ -80,6 +84,7 @@
|
||||
armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.1
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/bulletproof
|
||||
name = "bullet-resistant helmet"
|
||||
@@ -89,6 +94,7 @@
|
||||
armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/combat
|
||||
name = "combat helmet"
|
||||
@@ -98,6 +104,7 @@
|
||||
armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.6
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/swat
|
||||
name = "\improper SWAT helmet"
|
||||
@@ -115,6 +122,7 @@
|
||||
icon_state = "alienhelmet"
|
||||
siemens_coefficient = 0.4
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 0, rad = 40)
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/alien/tank
|
||||
name = "alien warhelm"
|
||||
@@ -137,6 +145,7 @@
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
siemens_coefficient = 1
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/tactical
|
||||
name = "tactical helmet"
|
||||
@@ -144,13 +153,14 @@
|
||||
icon_state = "swathelm"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
|
||||
)
|
||||
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/augment
|
||||
name = "Augment Array"
|
||||
@@ -162,6 +172,7 @@
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.5
|
||||
valid_accessory_slots = null
|
||||
|
||||
//Non-hardsuit ERT helmets.
|
||||
/obj/item/clothing/head/helmet/ert
|
||||
@@ -170,6 +181,7 @@
|
||||
icon_state = "erthelmet_cmd"
|
||||
item_state_slots = list(slot_r_hand_str = "syndicate-helm-green", slot_l_hand_str = "syndicate-helm-green")
|
||||
armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0)
|
||||
valid_accessory_slots = null
|
||||
|
||||
//Commander
|
||||
/obj/item/clothing/head/helmet/ert/command
|
||||
|
||||
@@ -103,23 +103,33 @@
|
||||
icon_state = "beret_corporate_warden"
|
||||
item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black")
|
||||
|
||||
/obj/item/clothing/head/helmet/warden //should these be helmets?
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "warden's helmet"
|
||||
desc = "Standard Warden gear. Protects the head from impacts."
|
||||
|
||||
/obj/item/clothing/head/helmet/warden/hat
|
||||
name = "warden's hat"
|
||||
desc = "It's a special helmet issued to the Warden of a securiy force."
|
||||
desc = "It's a special hat issued to the Warden of a securiy force."
|
||||
icon_state = "policehelm"
|
||||
body_parts_covered = 0
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "Head of Security helmet"
|
||||
desc = "Standard Head of Security gear. Protects the head from impacts."
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/hat
|
||||
name = "Head of Security Hat"
|
||||
desc = "The hat of the Head of Security. For showing the officers who's in charge."
|
||||
icon_state = "hoscap"
|
||||
body_parts_covered = 0
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/dermal
|
||||
/obj/item/clothing/head/helmet/dermal
|
||||
name = "Dermal Armour Patch"
|
||||
desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head."
|
||||
icon_state = "dermal"
|
||||
item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "")
|
||||
valid_accessory_slots = null
|
||||
show_examine = FALSE
|
||||
|
||||
/obj/item/clothing/head/det
|
||||
name = "fedora"
|
||||
@@ -128,14 +138,14 @@
|
||||
allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = 0
|
||||
valid_accessory_slots = null
|
||||
show_examine = FALSE
|
||||
|
||||
/obj/item/clothing/head/det/grey
|
||||
icon_state = "detective2"
|
||||
item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective")
|
||||
desc = "A grey fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it."
|
||||
|
||||
|
||||
/obj/item/clothing/head/beret/engineering
|
||||
name = "engineering beret"
|
||||
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
|
||||
|
||||
@@ -292,6 +292,11 @@
|
||||
desc = "Because justice isn't going to dispense itself."
|
||||
icon_state = "cowboy_wide"
|
||||
|
||||
/obj/item/clothing/head/cowboy_hat/small
|
||||
name = "small cowboy hat"
|
||||
desc = "For the tiniest of cowboys."
|
||||
icon_state = "cowboy_small"
|
||||
|
||||
/obj/item/clothing/head/witchwig
|
||||
name = "witch costume wig"
|
||||
desc = "Eeeee~heheheheheheh!"
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
//Pilot
|
||||
|
||||
/obj/item/clothing/head/pilot
|
||||
name = "pilot helmet"
|
||||
desc = "Standard pilot gear. Protects the head from impacts."
|
||||
icon_state = "pilot_helmet1"
|
||||
item_icons = list(slot_head_str = 'icons/mob/pilot_helmet.dmi')
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/pilot_helmet.dmi'
|
||||
)
|
||||
flags = THICKMATERIAL
|
||||
armor = list(melee = 20, bullet = 10, laser = 10, energy = 5, bomb = 10, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/obj/machinery/computer/shuttle_control/web/shuttle_comp
|
||||
var/obj/screen/pilot_hud
|
||||
var/list/images
|
||||
var/list/raw_images
|
||||
var/last_status
|
||||
|
||||
/obj/item/clothing/head/pilot/initialize()
|
||||
. = ..()
|
||||
|
||||
images = list()
|
||||
raw_images = list()
|
||||
|
||||
pilot_hud = new(src)
|
||||
pilot_hud.screen_loc = "1,1"
|
||||
pilot_hud.icon = 'icons/obj/piloting_overlay.dmi'
|
||||
pilot_hud.icon_state = "dimmer"
|
||||
pilot_hud.layer = SCREEN_LAYER
|
||||
pilot_hud.plane = PLANE_FULLSCREEN
|
||||
pilot_hud.mouse_opacity = 0
|
||||
pilot_hud.alpha = 0
|
||||
|
||||
var/image/I
|
||||
I = image(pilot_hud.icon,pilot_hud,"top_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 145
|
||||
images["top_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"top_dots",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["topdots"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"words_discon",layer=SCREEN_LAYER+1) //words_standby, words_flying, words_spool, words_discon
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["top_words"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["charging"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"left_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["left_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"right_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["right_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"flyboxes",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["flyboxes"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"horizon",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["horizon"] = I
|
||||
raw_images += I
|
||||
|
||||
/obj/item/clothing/head/pilot/proc/update_hud(var/status)
|
||||
if(last_status == status)
|
||||
return
|
||||
|
||||
last_status = status
|
||||
|
||||
if(status == SHUTTLE_INTRANSIT)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_flying"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 200
|
||||
I = images["right_bar"]
|
||||
I.alpha = 200
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 200
|
||||
I = images["horizon"]
|
||||
I.alpha = 200
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=255,time=3 SECONDS)
|
||||
|
||||
else if(status == SHUTTLE_IDLE)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_standby"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 0
|
||||
I = images["right_bar"]
|
||||
I.alpha = 0
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=0,time=3 SECONDS)
|
||||
|
||||
else if(status == SHUTTLE_WARMUP)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_spool"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 200
|
||||
I = images["right_bar"]
|
||||
I.alpha = 200
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = "charging"
|
||||
animate(pilot_hud,alpha=255,time=3 SECONDS)
|
||||
|
||||
else if(status == "discon")
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_discon"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 0
|
||||
I = images["right_bar"]
|
||||
I.alpha = 0
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=0,time=3 SECONDS)
|
||||
|
||||
/obj/item/clothing/head/pilot/verb/hud_colors()
|
||||
set name = "Alter HUD color"
|
||||
set desc = "Change the color of the piloting HUD."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/newcolor = input(usr,"Pick a color!","HUD Color") as null|color
|
||||
if(newcolor)
|
||||
for(var/img in list("top_words","left_bar","right_bar","flyboxes"))
|
||||
var/image/I = images[img]
|
||||
I.color = newcolor
|
||||
|
||||
/obj/item/clothing/head/pilot/Destroy()
|
||||
for(var/img in raw_images)
|
||||
var/image/I = img
|
||||
I.loc = null
|
||||
shuttle_comp = null
|
||||
qdel(pilot_hud)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/pilot/equipped(var/mob/user,var/slot)
|
||||
. = ..()
|
||||
if(slot == slot_head && user.client)
|
||||
user.client.screen |= pilot_hud
|
||||
user.client.images |= raw_images
|
||||
|
||||
/obj/item/clothing/head/pilot/dropped(var/mob/user)
|
||||
. = ..()
|
||||
if(user.client)
|
||||
user.client.screen -= pilot_hud
|
||||
user.client.images -= raw_images
|
||||
|
||||
/obj/item/clothing/head/pilot/alt
|
||||
name = "pilot helmet"
|
||||
desc = "Standard pilot gear. Protects the head from impacts. This one has a retractable visor"
|
||||
icon_state = "pilot_helmet2"
|
||||
action_button_name = "Toggle Visor"
|
||||
|
||||
/obj/item/clothing/head/pilot/alt/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]up"
|
||||
user << "You raise the visor on the pilot helmet."
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
user << "You lower the visor on the pilot helmet."
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
@@ -45,3 +45,17 @@
|
||||
icon_state = "medical"
|
||||
item_state_slots = list(slot_r_hand_str = "medical", slot_l_hand_str = "medical")
|
||||
permeability_coefficient = 0.01
|
||||
|
||||
/obj/item/clothing/mask/breath/emergency
|
||||
desc = "A close-fitting mask that is used by the wallmounted emergency oxygen pump."
|
||||
name = "emergency mask"
|
||||
icon_state = "breath"
|
||||
item_state = "breath"
|
||||
permeability_coefficient = 0.50
|
||||
|
||||
/obj/item/clothing/mask/breath/anesthetic
|
||||
desc = "A close-fitting sterile mask that is used by the anesthetic wallmounted pump."
|
||||
name = "anesthetic mask"
|
||||
icon_state = "medical"
|
||||
item_state = "medical"
|
||||
permeability_coefficient = 0.01
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask.
|
||||
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD
|
||||
phoronproof = 1
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
filtered_gases = list("oxygen", "sleeping_agent")
|
||||
|
||||
/obj/item/clothing/mask/gas/syndicate
|
||||
@@ -73,7 +73,6 @@
|
||||
icon_state = "explorer"
|
||||
item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas")
|
||||
armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 0, bio = 50, rad = 0)
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
if(reagents.total_volume)
|
||||
to_chat(H, "<span class='danger'>You feel a prick as you slip on \the [src].</span>")
|
||||
if(H.reagents)
|
||||
var/contained_reagents = reagents.get_reagents()
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(H, 15, CHEM_BLOOD)
|
||||
admin_inject_log(usr, H, src, contained_reagents, trans)
|
||||
add_attack_logs(usr, H, "Injected with [name] containing [contained] transferred [trans] units")
|
||||
return
|
||||
|
||||
//Sleepy Ring
|
||||
@@ -61,7 +61,7 @@
|
||||
icon_state = "seal-secgen"
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/mason
|
||||
name = "masonic ring"
|
||||
name = "\improper Masonic ring"
|
||||
desc = "The Square and Compasses feature prominently on this Masonic ring."
|
||||
icon_state = "seal-masonic"
|
||||
|
||||
@@ -82,4 +82,4 @@
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal/signet/proc/change_name(var/signet_name = "Unknown")
|
||||
name = "[signet_name]'s signet ring"
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
desc = "A signet ring belonging to [signet_name], for when you're too sophisticated to sign letters."
|
||||
|
||||
@@ -11,6 +11,18 @@
|
||||
desc = "Lacking a durasteel horse to ride."
|
||||
icon_state = "cowboy"
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy/classic
|
||||
name = "classic cowboy boots"
|
||||
desc = "A classic looking pair of durable cowboy boots."
|
||||
icon_state = "cowboy_classic"
|
||||
item_state_slots = list(slot_r_hand_str = "leather", slot_l_hand_str = "leather")
|
||||
|
||||
/obj/item/clothing/shoes/boots/cowboy/snakeskin
|
||||
name = "snakeskin cowboy boots"
|
||||
desc = "A pair of cowboy boots made from python skin."
|
||||
icon_state = "cowboy_snakeskin"
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
|
||||
/obj/item/clothing/shoes/boots/jackboots
|
||||
name = "jackboots"
|
||||
desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
icon_state = "boots-vox"
|
||||
item_flags = PHORONGUARD
|
||||
phoronproof = 1
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
|
||||
action_button_name = "Toggle the magclaws"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl."
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 50, bomb = 50, bio = 100, rad = 50)
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Skrell","Human")
|
||||
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/skrell/white
|
||||
icon_state = "skrell_helmet_white"
|
||||
@@ -19,7 +19,7 @@
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Skrell","Human")
|
||||
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
|
||||
|
||||
/obj/item/clothing/suit/space/skrell/white
|
||||
icon_state = "skrell_suit_white"
|
||||
@@ -39,7 +39,7 @@
|
||||
siemens_coefficient = 0.2
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/vox
|
||||
armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50)
|
||||
@@ -47,7 +47,7 @@
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD
|
||||
flags_inv = 0
|
||||
phoronproof = 1
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/vox/pressure
|
||||
name = "alien helmet"
|
||||
|
||||
@@ -46,9 +46,6 @@
|
||||
var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI.
|
||||
var/obj/item/ai_verbs/verb_holder
|
||||
|
||||
/mob
|
||||
var/get_rig_stats = 0
|
||||
|
||||
/obj/item/rig_module/ai_container/process()
|
||||
if(integrated_ai)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
|
||||
@@ -179,6 +179,15 @@
|
||||
spark_system = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rig/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands)
|
||||
if(!inhands && slot_name == slot_back_str)
|
||||
if(icon_override)
|
||||
return icon_override
|
||||
else if(mob_icon)
|
||||
return mob_icon
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rig/proc/suit_is_deployed()
|
||||
if(!istype(wearer) || src.loc != wearer || wearer.back != src)
|
||||
return 0
|
||||
@@ -330,7 +339,6 @@
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
else
|
||||
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/ui_action_click()
|
||||
toggle_cooling(usr)
|
||||
@@ -598,7 +606,7 @@
|
||||
// update_inv_wear_suit(), handle species checks here.
|
||||
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
|
||||
species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)]
|
||||
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
|
||||
mob_icon = icon(icon = species_icon, icon_state = "[icon_state]")
|
||||
|
||||
if(installed_modules.len)
|
||||
for(var/obj/item/rig_module/module in installed_modules)
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
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',
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
|
||||
)
|
||||
species_restricted = null
|
||||
|
||||
@@ -50,9 +50,9 @@
|
||||
resilience = 0.2
|
||||
can_breach = 1
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
supporting_limbs = list()
|
||||
var/obj/item/weapon/material/knife/tacknife
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
species_restricted = list(SPECIES_UNATHI)
|
||||
force = 5
|
||||
|
||||
/obj/item/clothing/suit/space/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
species_restricted = list(SPECIES_UNATHI)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
species_restricted = list(SPECIES_UNATHI)
|
||||
|
||||
/*
|
||||
* VOX
|
||||
@@ -62,27 +62,27 @@
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/vox
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
phoronproof = 1
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/vox
|
||||
name = "talons"
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
phoronproof = 1
|
||||
|
||||
/obj/item/clothing/suit/space/rig/vox
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
phoronproof = 1
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig/vox
|
||||
siemens_coefficient = 0
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
phoronproof = 1
|
||||
|
||||
|
||||
@@ -19,10 +19,11 @@
|
||||
light_overlay = "helmet_light_dual"
|
||||
camera_networks = list(NETWORK_SECURITY)
|
||||
|
||||
//Internal Affairs suit
|
||||
/obj/item/weapon/rig/internalaffairs
|
||||
name = "augmented tie"
|
||||
suit_type = "augmented suit"
|
||||
desc = "Prepare for paperwork."
|
||||
desc = "The last suit you'll ever wear."
|
||||
icon_state = "internalaffairs_rig"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
@@ -30,7 +31,13 @@
|
||||
offline_slowdown = 0
|
||||
offline_vision_restriction = 0
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/briefcase,/obj/item/weapon/storage/secure/briefcase)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase,
|
||||
/obj/item/weapon/storage/secure/briefcase
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -55,10 +62,11 @@
|
||||
helm_type = null
|
||||
boot_type = null
|
||||
|
||||
//Mining suit
|
||||
/obj/item/weapon/rig/industrial
|
||||
name = "industrial suit control module"
|
||||
suit_type = "industrial hardsuit"
|
||||
desc = "A heavy, powerful rig used by construction crews and mining corporations."
|
||||
desc = "A heavy, powerful hardsuit used by construction crews and mining corporations."
|
||||
icon_state = "engineering_rig"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50)
|
||||
slowdown = 1
|
||||
@@ -69,7 +77,15 @@
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/bag/ore,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/weapon/rcd
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -84,10 +100,11 @@
|
||||
/obj/item/rig_module/vision/meson
|
||||
)
|
||||
|
||||
//Engineering suit
|
||||
/obj/item/weapon/rig/eva
|
||||
name = "EVA suit control module"
|
||||
suit_type = "EVA hardsuit"
|
||||
desc = "A light rig for repairs and maintenance to the outside of habitats and vessels."
|
||||
desc = "A light hardsuit for repairs and maintenance to the outside of habitats and vessels."
|
||||
icon_state = "eva_rig"
|
||||
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100)
|
||||
slowdown = 0
|
||||
@@ -98,7 +115,14 @@
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/eva
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/weapon/rcd)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase/inflatable,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -135,7 +159,14 @@
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase/inflatable,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -157,6 +188,7 @@
|
||||
/obj/item/rig_module/vision/meson
|
||||
)
|
||||
|
||||
//Research Director's suit. Just add red crowbar.
|
||||
/obj/item/weapon/rig/hazmat
|
||||
|
||||
name = "AMI control module"
|
||||
@@ -170,7 +202,23 @@
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/stack/flag,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/measuring_tape,
|
||||
/obj/item/device/ano_scanner,
|
||||
/obj/item/device/depth_scanner,
|
||||
/obj/item/device/core_sampler,
|
||||
/obj/item/device/gps,
|
||||
/obj/item/device/beacon_locator,
|
||||
/obj/item/device/radio/beacon,
|
||||
/obj/item/weapon/pickaxe/hand,
|
||||
/obj/item/weapon/storage/bag/fossils)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -185,6 +233,7 @@
|
||||
/obj/item/rig_module/device/anomaly_scanner
|
||||
)
|
||||
|
||||
//Paramedic suit
|
||||
/obj/item/weapon/rig/medical
|
||||
|
||||
name = "rescue suit control module"
|
||||
@@ -198,7 +247,15 @@
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
|
||||
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller )
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/firstaid,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/roller
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -215,6 +272,7 @@
|
||||
/obj/item/rig_module/vision/medhud
|
||||
)
|
||||
|
||||
//Security suit
|
||||
/obj/item/weapon/rig/hazard
|
||||
name = "hazard hardsuit control module"
|
||||
suit_type = "hazard hardsuit"
|
||||
@@ -228,7 +286,13 @@
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard
|
||||
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
|
||||
allowed = list(
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/melee/baton
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
|
||||
@@ -14,10 +14,11 @@
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
species_restricted = list("exclude","Diona")
|
||||
species_restricted = list("exclude",SPECIES_DIONA)
|
||||
preserve_item = 1
|
||||
phoronproof = 1
|
||||
flash_protection = FLASH_PROTECTION_MAJOR
|
||||
valid_accessory_slots = null
|
||||
|
||||
var/obj/machinery/camera/camera
|
||||
var/list/camera_networks
|
||||
@@ -61,7 +62,7 @@
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
species_restricted = list("exclude","Diona")
|
||||
species_restricted = list("exclude",SPECIES_DIONA)
|
||||
preserve_item = 1
|
||||
phoronproof = 1
|
||||
|
||||
|
||||
@@ -153,17 +153,17 @@
|
||||
//Medical Streamlined Voidsuit
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt
|
||||
name = "streamlined medical voidsuit helmet"
|
||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching green."
|
||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue."
|
||||
icon_state = "rig0-medicalalt"
|
||||
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
|
||||
light_overlay = "helmet_light_dual_green"
|
||||
armor = list(melee = 20, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 30)
|
||||
light_overlay = "helmet_light_dual_blue"
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt
|
||||
icon_state = "rig-medicalalt"
|
||||
name = "streamlined medical voidsuit"
|
||||
desc = "A more recent model of Vey-Med voidsuit, featuring the latest in radiation shielding technology, without sacrificing comfort or style."
|
||||
desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion."
|
||||
slowdown = 0
|
||||
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
|
||||
armor = list(melee = 20, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 30)
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/head/helmet/space/void/security
|
||||
@@ -243,4 +243,4 @@
|
||||
icon_state = "rig-atmosalt"
|
||||
name = "heavy duty atmos voidsuit"
|
||||
armor = list(melee = 20, bullet = 5, laser = 20,energy = 15, bomb = 45, bio = 100, rad = 50)
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
@@ -13,16 +13,16 @@
|
||||
//Species-specific stuff.
|
||||
species_restricted = list("Human", "Promethean")
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi'
|
||||
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
|
||||
"Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi',
|
||||
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
|
||||
"Teshari" = 'icons/obj/clothing/species/seromi/hats.dmi'
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/hats.dmi',
|
||||
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/hats.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/hats.dmi',
|
||||
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/hats.dmi'
|
||||
)
|
||||
|
||||
light_overlay = "helmet_light"
|
||||
@@ -38,18 +38,18 @@
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
species_restricted = list("Human", "Skrell", "Promethean")
|
||||
species_restricted = list("Human", SPECIES_SKRELL, "Promethean")
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi'
|
||||
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
|
||||
"Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi',
|
||||
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi',
|
||||
"Teshari" = 'icons/obj/clothing/species/seromi/suits.dmi'
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/suits.dmi',
|
||||
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/suits.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/suits.dmi',
|
||||
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/suits.dmi'
|
||||
)
|
||||
|
||||
//Breach thresholds, should ideally be inherited by most (if not all) voidsuits.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi'
|
||||
icon_state = "tesh_cloak_bo"
|
||||
item_state = "tesh_cloak_bo"
|
||||
species_restricted = list("Teshari")
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/seromi/cloak/black_orange
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
icon_state = "vox-scrap"
|
||||
icon_state = "vox-scrap"
|
||||
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
siemens_coefficient = 1 //Its literally metal
|
||||
@@ -45,7 +45,6 @@
|
||||
icon_state = "riot"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/suit/armor/riot/alt
|
||||
@@ -115,7 +114,7 @@
|
||||
icon_state = "swatarmor"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.7
|
||||
@@ -269,7 +268,7 @@
|
||||
//Medical
|
||||
/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 Emergency Response Team. Has red and white highlights."
|
||||
desc = "A set of armor worn by medical members of the Emergency Response Team. Has blue and white highlights."
|
||||
icon_state = "ertarmor_med"
|
||||
|
||||
//New Vests
|
||||
@@ -311,7 +310,7 @@
|
||||
desc = "An armoured jacket with silver rank pips and livery."
|
||||
icon_state = "warden_jacket"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/alt
|
||||
name = "Warden's jacket"
|
||||
@@ -332,7 +331,7 @@
|
||||
desc = "A greatcoat enhanced with a special alloy for some protection and style."
|
||||
icon_state = "hos"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
|
||||
//Jensen cosplay gear
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat/jensen
|
||||
@@ -498,28 +497,28 @@
|
||||
blood_overlay_type = "armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/light
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/light/sol
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate, /obj/item/clothing/accessory/armor/tag)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate, /obj/item/clothing/accessory/armor/tag)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/light/nt
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate, /obj/item/clothing/accessory/armor/tag/nt)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate, /obj/item/clothing/accessory/armor/tag/nt)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/medium
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/medium/sol
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/medium/security
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/sec)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/sec)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/medium/command
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/com)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/com)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/medium/nt
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/nt)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/nt)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/blue
|
||||
name = "blue plate carrier"
|
||||
@@ -529,7 +528,7 @@
|
||||
/obj/item/clothing/suit/armor/pcarrier/blue/sol
|
||||
name = "peacekeeper plate carrier"
|
||||
desc = "A lightweight plate carrier vest in SCG Peacekeeper colors. It can be equipped with armor plates, but provides no protection of its own."
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/medium, /obj/item/clothing/accessory/storage/pouches/blue, /obj/item/clothing/accessory/armguards/blue, /obj/item/clothing/accessory/armor/tag)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches/blue, /obj/item/clothing/accessory/armor/armguards/blue, /obj/item/clothing/accessory/armor/tag)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/green
|
||||
name = "green plate carrier"
|
||||
@@ -548,8 +547,8 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/tan/tactical
|
||||
name = "tactical plate carrier"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/tactical, /obj/item/clothing/accessory/storage/pouches/large/tan)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/tactical, /obj/item/clothing/accessory/storage/pouches/large/tan)
|
||||
|
||||
/obj/item/clothing/suit/armor/pcarrier/merc
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armorplate/merc, /obj/item/clothing/accessory/armguards/merc, /obj/item/clothing/accessory/legguards/merc, /obj/item/clothing/accessory/storage/pouches/large)
|
||||
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/merc, /obj/item/clothing/accessory/armor/armguards/merc, /obj/item/clothing/accessory/armor/legguards/merc, /obj/item/clothing/accessory/storage/pouches/large)
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
desc = "A long, flowing white robe. It looks comfortable, but not very warm."
|
||||
icon_state = "whiteout_robe"
|
||||
item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white")
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout
|
||||
|
||||
//Chaplain
|
||||
|
||||
@@ -265,6 +265,15 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/straight_jacket/equipped(var/mob/living/user,var/slot)
|
||||
. = ..()
|
||||
if(slot == slot_wear_suit)
|
||||
user.drop_l_hand()
|
||||
user.drop_r_hand()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.drop_from_inventory(H.handcuffed)
|
||||
|
||||
/obj/item/clothing/suit/ianshirt
|
||||
name = "worn shirt"
|
||||
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in."
|
||||
@@ -348,6 +357,14 @@ obj/item/clothing/suit/storage/toggle/peacoat
|
||||
addblends = "peacoat_a"
|
||||
item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat")
|
||||
flags_inv = HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/duster
|
||||
name = "cowboy duster"
|
||||
desc = "A duster commonly seen on cowboys from Earth's late 1800's."
|
||||
icon_state = "duster"
|
||||
blood_overlay_type = "coat"
|
||||
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,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter)
|
||||
flags_inv = HIDEHOLSTER
|
||||
/*
|
||||
* stripper
|
||||
*/
|
||||
@@ -782,7 +799,7 @@ obj/item/clothing/suit/storage/toggle/peacoat
|
||||
hooded = TRUE
|
||||
hoodtype = /obj/item/clothing/head/hood/explorer
|
||||
siemens_coefficient = 0.9
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50) // Inferior to sec vests in bullet/laser but better for environmental protection.
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) // Inferior to sec vests in bullet/laser but better for environmental protection.
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/gun,
|
||||
@@ -798,16 +815,13 @@ obj/item/clothing/suit/storage/toggle/peacoat
|
||||
name = "explorer hood"
|
||||
desc = "An armoured hood for exploring harsh environments."
|
||||
icon_state = "explorer"
|
||||
brightness_on = 3
|
||||
light_overlay = "hood_light"
|
||||
action_button_name = "Toggle Head-light"
|
||||
body_parts_covered = HEAD
|
||||
cold_protection = HEAD
|
||||
flags = THICKMATERIAL
|
||||
flags_inv = HIDEEARS | BLOCKHAIR
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50)
|
||||
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
|
||||
|
||||
/obj/item/clothing/suit/varsity
|
||||
name = "black varsity jacket"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/concealed_holster = 0
|
||||
var/mob/living/carbon/human/wearer = null //To check if the wearer changes, so species spritesheets change properly.
|
||||
|
||||
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
|
||||
|
||||
/obj/item/clothing/accessory/Destroy()
|
||||
on_removed()
|
||||
@@ -26,7 +26,9 @@
|
||||
if(icon_override)
|
||||
if("[tmp_icon_state]_tie" in icon_states(icon_override))
|
||||
tmp_icon_state = "[tmp_icon_state]_tie"
|
||||
inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
inv_overlay = image(icon = icon_override, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
else
|
||||
inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
return inv_overlay
|
||||
|
||||
/obj/item/clothing/accessory/proc/get_mob_overlay()
|
||||
@@ -387,4 +389,4 @@
|
||||
/obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc)
|
||||
..(newloc, "glass")
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -1,11 +1,25 @@
|
||||
/*
|
||||
// This file holds all of the accessories used as part of the modular armor system. At some point it might be wise to split this into multiple files.
|
||||
*/
|
||||
|
||||
/obj/item/clothing/accessory/armor
|
||||
name = "armor accessory"
|
||||
desc = "You should never see this description. Ahelp this, please."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
icon_state = "pouches"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
///////////
|
||||
//Pouches
|
||||
///////////
|
||||
/obj/item/clothing/accessory/storage/pouches
|
||||
name = "storage pouches"
|
||||
desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to two items."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "pouches"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
gender = PLURAL
|
||||
slot = ACCESSORY_SLOT_ARMOR_S
|
||||
slots = 2
|
||||
@@ -31,6 +45,7 @@
|
||||
desc = "A collection of black pouches that can be attached to a plate carrier. Carries up to four items."
|
||||
icon_state = "lpouches"
|
||||
slots = 4
|
||||
slowdown = 0.25
|
||||
|
||||
/obj/item/clothing/accessory/storage/pouches/large/blue
|
||||
desc = "A collection of blue pouches that can be attached to a plate carrier. Carries up to four items."
|
||||
@@ -48,40 +63,41 @@
|
||||
desc = "A collection of tan pouches that can be attached to a plate carrier. Carries up to four items."
|
||||
icon_state = "lpouches_tan"
|
||||
|
||||
////////////////
|
||||
//Armor plates
|
||||
/obj/item/clothing/accessory/armorplate
|
||||
////////////////
|
||||
/obj/item/clothing/accessory/armor/armorplate
|
||||
name = "light armor plate"
|
||||
desc = "A basic armor plate made of steel-reinforced synthetic fibers. Attaches to a plate carrier."
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
icon_state = "armor_light"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
armor = list(melee = 30, bullet = 15, laser = 40, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
slot = ACCESSORY_SLOT_ARMOR_C
|
||||
|
||||
/obj/item/clothing/accessory/armorplate/medium
|
||||
/obj/item/clothing/accessory/armor/armorplate/medium
|
||||
name = "medium armor plate"
|
||||
desc = "A plasteel-reinforced synthetic armor plate, providing good protection. Attaches to a plate carrier."
|
||||
icon_state = "armor_medium"
|
||||
armor = list(melee = 40, bullet = 40, laser = 40, energy = 25, bomb = 30, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armorplate/tactical
|
||||
/obj/item/clothing/accessory/armor/armorplate/tactical
|
||||
name = "tactical armor plate"
|
||||
desc = "A medium armor plate with additional ablative coating. Attaches to a plate carrier."
|
||||
icon_state = "armor_tactical"
|
||||
armor = list(melee = 40, bullet = 40, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armorplate/merc
|
||||
/obj/item/clothing/accessory/armor/armorplate/merc
|
||||
name = "heavy armor plate"
|
||||
desc = "A ceramics-reinforced synthetic armor plate, providing state of of the art protection. Attaches to a plate carrier."
|
||||
icon_state = "armor_heavy"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
|
||||
//////////////
|
||||
//Arm guards
|
||||
/obj/item/clothing/accessory/armguards
|
||||
//////////////
|
||||
/obj/item/clothing/accessory/armor/armguards
|
||||
name = "arm guards"
|
||||
desc = "A pair of black arm pads reinforced with armor plating. Attaches to a plate carrier."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "armguards"
|
||||
gender = PLURAL
|
||||
@@ -89,34 +105,58 @@
|
||||
armor = list(melee = 40, bullet = 40, laser = 40, energy = 25, bomb = 30, bio = 0, rad = 0)
|
||||
slot = ACCESSORY_SLOT_ARMOR_A
|
||||
|
||||
/obj/item/clothing/accessory/armguards/blue
|
||||
/obj/item/clothing/accessory/armor/armguards/blue
|
||||
desc = "A pair of blue arm pads reinforced with armor plating. Attaches to a plate carrier."
|
||||
icon_state = "armguards_blue"
|
||||
|
||||
/obj/item/clothing/accessory/armguards/navy
|
||||
/obj/item/clothing/accessory/armor/armguards/navy
|
||||
desc = "A pair of navy blue arm pads reinforced with armor plating. Attaches to a plate carrier."
|
||||
icon_state = "armguards_navy"
|
||||
|
||||
/obj/item/clothing/accessory/armguards/green
|
||||
/obj/item/clothing/accessory/armor/armguards/green
|
||||
desc = "A pair of green arm pads reinforced with armor plating. Attaches to a plate carrier."
|
||||
icon_state = "armguards_green"
|
||||
|
||||
/obj/item/clothing/accessory/armguards/tan
|
||||
/obj/item/clothing/accessory/armor/armguards/tan
|
||||
desc = "A pair of tan arm pads reinforced with armor plating. Attaches to a plate carrier."
|
||||
icon_state = "armguards_tan"
|
||||
|
||||
/obj/item/clothing/accessory/armguards/merc
|
||||
/obj/item/clothing/accessory/armor/armguards/merc
|
||||
name = "heavy arm guards"
|
||||
desc = "A pair of red-trimmed black arm pads reinforced with heavy armor plating. Attaches to a plate carrier."
|
||||
icon_state = "armguards_merc"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/armguards/laserproof
|
||||
name = "ablative arm guards"
|
||||
desc = "These arm guards will protect your arms from energy weapons."
|
||||
icon_state = "armguards_laser"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
siemens_coefficient = 0.4 //This is worse than the other ablative pieces, to avoid this from becoming the poor warden's insulated gloves.
|
||||
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/armguards/bulletproof
|
||||
name = "bullet resistant arm guards"
|
||||
desc = "These arm guards will protect your arms from ballistic weapons."
|
||||
icon_state = "armguards_bullet"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
siemens_coefficient = 0.7
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/armguards/riot
|
||||
name = "riot arm guards"
|
||||
desc = "These arm guards will protect your arms from close combat weapons."
|
||||
icon_state = "armguards_riot"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
siemens_coefficient = 0.5
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
//////////////
|
||||
//Leg guards
|
||||
/obj/item/clothing/accessory/legguards
|
||||
//////////////
|
||||
/obj/item/clothing/accessory/armor/legguards
|
||||
name = "leg guards"
|
||||
desc = "A pair of armored leg pads in black. Attaches to a plate carrier."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "legguards"
|
||||
gender = PLURAL
|
||||
@@ -124,38 +164,62 @@
|
||||
armor = list(melee = 40, bullet = 40, laser = 40, energy = 25, bomb = 30, bio = 0, rad = 0)
|
||||
slot = ACCESSORY_SLOT_ARMOR_L
|
||||
|
||||
/obj/item/clothing/accessory/legguards/blue
|
||||
/obj/item/clothing/accessory/armor/legguards/blue
|
||||
desc = "A pair of armored leg pads in blue. Attaches to a plate carrier."
|
||||
icon_state = "legguards_blue"
|
||||
|
||||
/obj/item/clothing/accessory/legguards/navy
|
||||
/obj/item/clothing/accessory/armor/legguards/navy
|
||||
desc = "A pair of armored leg pads in navy blue. Attaches to a plate carrier."
|
||||
icon_state = "legguards_navy"
|
||||
|
||||
/obj/item/clothing/accessory/legguards/green
|
||||
/obj/item/clothing/accessory/armor/legguards/green
|
||||
desc = "A pair of armored leg pads in green. Attaches to a plate carrier."
|
||||
icon_state = "legguards_green"
|
||||
|
||||
/obj/item/clothing/accessory/legguards/tan
|
||||
/obj/item/clothing/accessory/armor/legguards/tan
|
||||
desc = "A pair of armored leg pads in tan. Attaches to a plate carrier."
|
||||
icon_state = "legguards_tan"
|
||||
|
||||
/obj/item/clothing/accessory/legguards/merc
|
||||
/obj/item/clothing/accessory/armor/legguards/merc
|
||||
name = "heavy leg guards"
|
||||
desc = "A pair of heavily armored leg pads in red-trimmed black. Attaches to a plate carrier."
|
||||
icon_state = "legguards_merc"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/legguards/laserproof
|
||||
name = "ablative leg guards"
|
||||
desc = "These will protect your legs from energy weapons."
|
||||
icon_state = "legguards_laser"
|
||||
item_state_slots = list(slot_r_hand_str = "jackboots", slot_l_hand_str = "jackboots")
|
||||
siemens_coefficient = 0.1
|
||||
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/legguards/bulletproof
|
||||
name = "bullet resistant leg guards"
|
||||
desc = "These will protect your legs from ballistic weapons."
|
||||
icon_state = "legguards_bullet"
|
||||
item_state_slots = list(slot_r_hand_str = "jackboots", slot_l_hand_str = "jackboots")
|
||||
siemens_coefficient = 0.7
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/legguards/riot
|
||||
name = "riot leg guards"
|
||||
desc = "These will protect your legs from close combat weapons."
|
||||
icon_state = "legguards_riot"
|
||||
item_state_slots = list(slot_r_hand_str = "jackboots", slot_l_hand_str = "jackboots")
|
||||
siemens_coefficient = 0.5
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
//////////////////////////
|
||||
//Decorative attachments
|
||||
//////////////////////////
|
||||
/obj/item/clothing/accessory/armor/tag
|
||||
name = "\improper SCG Flag"
|
||||
desc = "An emblem depicting the Solar Confederate Government's flag."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "solflag"
|
||||
slot = ACCESSORY_SLOT_ARMOR_M
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/sifguard
|
||||
name = "\improper Sif Defense Force crest"
|
||||
@@ -226,3 +290,50 @@
|
||||
name = "\improper AB- blood patch"
|
||||
desc = "An embroidered patch indicating the wearer's blood type as AB NEGATIVE."
|
||||
icon_state = "abnegtag"
|
||||
|
||||
/////////////////
|
||||
// Helmet Covers
|
||||
/////////////////
|
||||
|
||||
obj/item/clothing/accessory/armor/helmcover
|
||||
name = "helmet cover"
|
||||
desc = "A fabric cover for armored helmets."
|
||||
icon_override = 'icons/mob/ties.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
icon_state = "helmcover_blue"
|
||||
slot = ACCESSORY_SLOT_HELM_C
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/blue
|
||||
name = "blue helmet cover"
|
||||
desc = "A fabric cover for armored helmets in a bright blue color."
|
||||
icon_state = "helmcover_blue"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/navy
|
||||
name = "navy blue helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one is colored navy blue."
|
||||
icon_state = "helmcover_navy"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/green
|
||||
name = "green helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one has a woodland camouflage pattern."
|
||||
icon_state = "helmcover_green"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/tan
|
||||
name = "tan helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one has a desert camouflage pattern."
|
||||
icon_state = "helmcover_tan"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/nt
|
||||
name = "\improper NanoTrasen helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one has NanoTrasen's colors."
|
||||
icon_state = "helmcover_nt"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/pcrc
|
||||
name = "\improper PCRC helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one is colored navy blue and has a tag in the back with the words PROXIMA CENTAURI RISK CONTROL printed in cyan lettering on it."
|
||||
icon_state = "helmcover_pcrc"
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/saare
|
||||
name = "\improper SAARE helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one has SAARE's colors."
|
||||
icon_state = "helmcover_saare"
|
||||
@@ -41,6 +41,23 @@
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
||||
|
||||
// Sheriff Badge (toy)
|
||||
/obj/item/clothing/accessory/badge/sheriff
|
||||
name = "sheriff badge"
|
||||
desc = "This town ain't big enough for the two of us, pardner."
|
||||
icon_state = "sheriff"
|
||||
item_state = "goldbadge"
|
||||
|
||||
/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
|
||||
user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
|
||||
"You flash the sheriff badge to everyone around you!")
|
||||
|
||||
/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, the sheriff badge into their face!.</span>","<span class='danger'>You invade [M]'s personal space, thrusting the sheriff badge into their face insistently.</span>")
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
||||
|
||||
//.Holobadges.
|
||||
/obj/item/clothing/accessory/badge/holo
|
||||
name = "holobadge"
|
||||
@@ -129,4 +146,4 @@
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/cord(src)
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
name = "bar shotgun permit"
|
||||
desc = "A card indicating that the owner is allowed to carry a shotgun in the bar."
|
||||
|
||||
/obj/item/clothing/accessory/permit/gun/planetside
|
||||
name = "planetside gun permit"
|
||||
desc = "A card indicating that the owner is allowed to carry a firearm while on the surface."
|
||||
|
||||
/obj/item/clothing/accessory/permit/drone
|
||||
name = "drone identification card"
|
||||
desc = "A card issued by the EIO, indicating that the owner is a Drone Intelligence. Drones are mandated to carry this card within SolGov space, by law."
|
||||
|
||||
@@ -394,6 +394,16 @@
|
||||
desc = "A red dress that sweeps to the side."
|
||||
icon_state = "red_swept_dress"
|
||||
|
||||
/obj/item/clothing/under/dress/flamenco
|
||||
name = "flamenco dress"
|
||||
desc = "A Mexican flamenco dress."
|
||||
icon_state = "flamenco"
|
||||
|
||||
/obj/item/clothing/under/dress/westernbustle
|
||||
name = "western bustle"
|
||||
desc = "A western bustle dress from Earth's late 1800's."
|
||||
icon_state = "westernbustle"
|
||||
|
||||
/*
|
||||
* wedding stuff
|
||||
*/
|
||||
@@ -816,4 +826,30 @@
|
||||
/obj/item/clothing/under/explorer
|
||||
desc = "A green uniform for operating in hazardous environments."
|
||||
name = "explorer's jumpsuit"
|
||||
icon_state = "explorer"
|
||||
icon_state = "explorer"
|
||||
|
||||
/obj/item/clothing/under/cohesion
|
||||
name = "black cohesion suit"
|
||||
desc = "A plain black cohesion suit intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
icon_state = "cohesionsuit"
|
||||
rolled_sleeves = -1 // defeats the purpose!!!
|
||||
|
||||
/obj/item/clothing/under/cohesion/striped
|
||||
name = "red striped cohesion suit"
|
||||
desc = "A black cohesion suit with red stripes intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
icon_state = "cohesionsuit_striped"
|
||||
|
||||
/obj/item/clothing/under/cohesion/decal
|
||||
name = "purple decaled cohesion suit"
|
||||
desc = "A white cohesion suit with purple decals intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
icon_state = "cohesionsuit_decal"
|
||||
|
||||
/obj/item/clothing/under/cohesion/pattern
|
||||
name = "blue patterned cohesion suit"
|
||||
desc = "A white cohesion suit with blue patterns intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
icon_state = "cohesionsuit_pattern"
|
||||
|
||||
/obj/item/clothing/under/cohesion/hazard
|
||||
name = "hazard cohesion suit"
|
||||
desc = "An orange cohesion suit with yellow hazard stripes intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
icon_state = "cohesionsuit_hazard"
|
||||
@@ -36,6 +36,7 @@
|
||||
desc = "A comfortable turtleneck and black utility trousers."
|
||||
icon_state = "blackutility"
|
||||
worn_state = "blackutility"
|
||||
rolled_sleeves = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/clothing/under/seromi
|
||||
icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
|
||||
icon_state = "seromi_grey"
|
||||
species_restricted = list("Teshari")
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
|
||||
/obj/item/clothing/under/seromi/smock
|
||||
name = "small grey smock"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/clothing/under/vox
|
||||
has_sensor = 0
|
||||
species_restricted = list("Vox")
|
||||
species_restricted = list(SPECIES_VOX)
|
||||
valid_accessory_slots = list("vox")
|
||||
restricted_accessory_slots = list("vox")
|
||||
phoronproof = 1
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
affected_dest.temp_price_change[good_type] = rand(1,100) / 100
|
||||
|
||||
/datum/event/economic_event/announce()
|
||||
var/author = "The "+using_map.starsys_name+" Times"
|
||||
var/channel = author
|
||||
var/author = "Oculus v6rev7"
|
||||
var/channel = "Oculum Content Aggregator"
|
||||
|
||||
//see if our location has custom event info for this event
|
||||
var/body = affected_dest.get_custom_eventstring()
|
||||
@@ -66,28 +66,28 @@
|
||||
if(INDUSTRIAL_ACCIDENT)
|
||||
body = "[pick("An industrial accident","A smelting accident","A malfunction","A malfunctioning piece of machinery","Negligent maintenance","A cooleant leak","A ruptured conduit")] at a [pick("factory","installation","power plant","dockyards")] on [affected_dest.name] resulted in severe structural damage and numerous injuries. Repairs are ongoing."
|
||||
if(BIOHAZARD_OUTBREAK)
|
||||
body = "[pick("A \'REDACTED\'","A biohazard","An outbreak","A virus")] on [affected_dest.name] has resulted in quarantine, stopping much shipping in the area. Although the quarantine is now lifted, authorities are calling for deliveries of medical supplies to treat the infected, and gas to replace contaminated stocks."
|
||||
body = "[pick("A nano-contaminant","A biohazard","An outbreak","A virus")] on [affected_dest.name] has resulted in quarantine, stopping much shipping in the area. Although the quarantine is now lifted, authorities are calling for deliveries of medical supplies to treat the infected, and gas to replace contaminated stocks."
|
||||
if(PIRATES)
|
||||
body = "[pick("Pirates","Criminal elements","A [pick("mercenary","Donk Co.","Waffle Co.","\'REDACTED\'")] strike force")] have [pick("raided","blockaded","attempted to blackmail","attacked")] [affected_dest.name] today. Security has been tightened, but many valuable minerals were taken."
|
||||
body = "[pick("Pirates","Criminal elements","A [pick("mercenary","Nos Amis","Xin Cohong","Ue-Katish")] strike force")] have [pick("raided","blockaded","attempted to blackmail","attacked")] [affected_dest.name] today. Security has been tightened, but many valuable minerals were taken."
|
||||
if(CORPORATE_ATTACK)
|
||||
body = "A small [pick("pirate","Cybersun Industries","Gorlex Marauders","mercenary")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident."
|
||||
body = "A small [pick("pirate","Nation of Mars","Revolutionary Solar People's Party","mercenary")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident."
|
||||
if(ALIEN_RAIDERS)
|
||||
if(prob(20))
|
||||
body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. [using_map.company_name] authorities are standing by to counter attempts at bio-terrorism."
|
||||
body = "Ue-Katish pirates exiled from Ue'Orsi have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. [using_map.company_name] authorities are standing by to counter attempts at bio-terrorism."
|
||||
else
|
||||
body = "[pick("The alien species designated \'United Exolitics\'","The alien species designated \'REDACTED\'","An unknown alien species")] have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. It seems they desire to learn more about us, so the Navy will be standing by to accomodate them next time they try."
|
||||
body = "The Vox have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. Fleet assets have moved to reinforce the effected region."
|
||||
if(AI_LIBERATION)
|
||||
body = "A [pick("\'REDACTED\' was detected on","S.E.L.F operative infiltrated","malignant computer virus was detected on","rogue [pick("slicer","hacker")] was apprehended on")] [affected_dest.name] today, and managed to infect [pick("\'REDACTED\'","a sentient sub-system","a class one AI","a sentient defence installation")] before it could be stopped, causing serious damage. Considerable work must be done to repair the affected areas."
|
||||
body = "A [pick("malignant webcrawler was detected on","Boiling Point operative infiltrated","malignant computer virus was detected on","rogue [pick("slicer","hacker")] was apprehended on")] [affected_dest.name] today, and managed to infect [pick("an A-class factory monitor","an experimental drone wing","a high-powered financial system","an automated defence installation")] before it could be stopped, causing serious damage. Considerable work must be done to repair the affected areas."
|
||||
if(MOURNING)
|
||||
body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain","\'REDACTED\'")], [pick( random_name(pick(MALE,FEMALE)), 40; "\'REDACTED\'" )] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops."
|
||||
body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain")], [random_name(pick(MALE,FEMALE))] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops."
|
||||
if(CULT_CELL_REVEALED)
|
||||
body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on [using_map.company_name] facilities."
|
||||
body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] doomsday cult has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing illegal acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice."
|
||||
if(SECURITY_BREACH)
|
||||
body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all [using_map.company_name] personnel that such lapses are rare."
|
||||
body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified")] [pick("section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all [using_map.company_name] personnel that such lapses are rare."
|
||||
if(ANIMAL_RIGHTS_RAID)
|
||||
body = "[pick("Militant animal rights activists","Members of the terrorist group Animal Rights Consortium","Members of the terrorist group \'REDACTED\'")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to \'REDACTED\'")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals","\'REDACTED\'")]. Prices for tame and breeding animals have spiked as a result."
|
||||
body = "[pick("Militant animal rights activists","Members of the terrorist group Galactic Organization for Animal Rights")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to an animal processing plant")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals")]. Prices for tame and breeding animals have spiked as a result."
|
||||
if(FESTIVAL)
|
||||
body = "A [pick("festival","week long celebration","day of revelry","planet-wide holiday")] has been declared on [affected_dest.name] by [pick("Governor","Commissioner","General","Commandant","Administrator")] [random_name(pick(MALE,FEMALE))] to celebrate [pick("the birth of their [pick("son","daughter")]","coming of age of their [pick("son","daughter")]","the pacification of rogue military cell","the apprehension of a violent criminal who had been terrorising the planet")]. Massive stocks of food and meat have been bought driving up prices across the planet."
|
||||
body = "A [pick("festival","week long celebration","day of revelry","planet-wide holiday")] has been declared on [affected_dest.name] by [pick("Governor","Commissioner","General","Commandant","Administrator")] [random_name(pick(MALE,FEMALE))] to celebrate [pick("the birth of their [pick("son","daughter","child")]","coming of age of their [pick("son","daughter","child")]","the pacification of rogue military cell","the apprehension of a violent criminal who had been terrorising the planet")]. Massive stocks of food and meat have been bought driving up prices across the planet."
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
/datum/event/mundane_news
|
||||
/* /datum/event/mundane_news
|
||||
endWhen = 10
|
||||
|
||||
/datum/event/mundane_news/announce()
|
||||
@@ -123,7 +123,7 @@
|
||||
The [using_map.starsys_name] Times is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage."
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
|
||||
*/
|
||||
/datum/event/trivial_news
|
||||
endWhen = 10
|
||||
|
||||
|
||||
@@ -16,85 +16,73 @@ var/list/weighted_mundaneevent_locations = list()
|
||||
/datum/trade_destination/proc/get_custom_eventstring(var/event_type)
|
||||
return null
|
||||
|
||||
//distance is measured in AU and co-relates to travel time
|
||||
/datum/trade_destination/centcomm
|
||||
name = "CentCom"
|
||||
description = "NanoTrasen's administrative centre for Tau Ceti."
|
||||
//distance is measured in Arbitrary and corelates to travel time, like, I guess
|
||||
/datum/trade_destination/luna
|
||||
name = "Luna"
|
||||
description = "The capital world of SolGov, host to NanoTrasen's corporate offices."
|
||||
distance = 1.2
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(SECURITY_BREACH, CORPORATE_ATTACK, AI_LIBERATION)
|
||||
viable_mundane_events = list(ELECTION, RESIGNATION, CELEBRITY_DEATH)
|
||||
|
||||
/datum/trade_destination/anansi
|
||||
name = "NSS Anansi"
|
||||
description = "Medical station ran by Second Red Cross (but owned by NT) for handling emergency cases from nearby colonies."
|
||||
/datum/trade_destination/nohio
|
||||
name = "New Ohio"
|
||||
description = "A world in the Sagitarius Heights, home to Vey-Medical's research and development facilities."
|
||||
distance = 1.7
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(SECURITY_BREACH, CULT_CELL_REVEALED, BIOHAZARD_OUTBREAK, PIRATES, ALIEN_RAIDERS)
|
||||
viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH, BARGAINS, GOSSIP)
|
||||
|
||||
/datum/trade_destination/anansi/get_custom_eventstring(var/event_type)
|
||||
if(event_type == RESEARCH_BREAKTHROUGH)
|
||||
return "Thanks to research conducted on the NSS Anansi, Second Red Cross Society wishes to announce a major breakthough in the field of \
|
||||
[pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. [using_map.company_name] is expected to announce a co-exploitation deal within the fortnight."
|
||||
return null
|
||||
|
||||
/datum/trade_destination/redolant
|
||||
name = "OAV Redolant"
|
||||
description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti."
|
||||
/datum/trade_destination/sophia
|
||||
name = "Sophia"
|
||||
description = "The homeworld of the positronics and an extremely important cultural center."
|
||||
distance = 0.6
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(INDUSTRIAL_ACCIDENT, PIRATES, CORPORATE_ATTACK)
|
||||
viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH)
|
||||
|
||||
/datum/trade_destination/redolant/get_custom_eventstring(var/event_type)
|
||||
if(event_type == RESEARCH_BREAKTHROUGH)
|
||||
return "Thanks to research conducted on the OAV Redolant, Osiris Atmospherics wishes to announce a major breakthough in the field of \
|
||||
[pick("phoron research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. [using_map.company_name] is expected to announce a co-exploitation deal within the fortnight."
|
||||
return null
|
||||
|
||||
/datum/trade_destination/beltway
|
||||
name = "Beltway mining chain"
|
||||
description = "A co-operative effort between Beltway and NanoTrasen to exploit the rich outer asteroid belt of the Tau Ceti system."
|
||||
/datum/trade_destination/jade
|
||||
name = "Jade"
|
||||
description = "Jade, in the Zhu Que system, is one of the Bowl's garden worlds and home to a major ore processing operation."
|
||||
distance = 7.5
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(PIRATES, INDUSTRIAL_ACCIDENT)
|
||||
viable_mundane_events = list(TOURISM)
|
||||
|
||||
/datum/trade_destination/biesel
|
||||
name = "Biesel"
|
||||
description = "Large ship yards, strong economy and a stable, well-educated populace, Biesel largely owes allegiance to Sol / Vessel Contracting and begrudgingly tolerates NT. Capital is Lowell City."
|
||||
/datum/trade_destination/sif
|
||||
name = "Sif"
|
||||
description = "A garden world in the Vir system with a developing phoron-based economy."
|
||||
distance = 2.3
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING)
|
||||
viable_mundane_events = list(BARGAINS, GOSSIP, SONG_DEBUT, MOVIE_RELEASE, ELECTION, TOURISM, RESIGNATION, CELEBRITY_DEATH)
|
||||
|
||||
/datum/trade_destination/new_gibson
|
||||
name = "New Gibson"
|
||||
description = "Heavily industrialised rocky planet containing the majority of the planet-bound resources in the system, New Gibson is torn by unrest and has very little wealth to call it's own except in the hands of the corporations who jostle with NT for control."
|
||||
/datum/trade_destination/mars
|
||||
name = "Mars"
|
||||
description = "A major industrial center in the Sol system."
|
||||
distance = 6.6
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING)
|
||||
viable_mundane_events = list(ELECTION, TOURISM, RESIGNATION)
|
||||
|
||||
/datum/trade_destination/luthien
|
||||
name = "Luthien"
|
||||
description = "A small colony established on a feral, untamed world (largely jungle). Savages and wild beasts attack the outpost regularly, although NT maintains tight military control."
|
||||
/datum/trade_destination/nisp
|
||||
name = "Nisp"
|
||||
description = "A near-garden world known for its hostile wildlife and its N2O atmosphere."
|
||||
distance = 8.9
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS)
|
||||
viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION)
|
||||
|
||||
/datum/trade_destination/reade
|
||||
name = "Reade"
|
||||
description = "A cold, metal-deficient world, NT maintains large pastures in whatever available space in an attempt to salvage something from this profitless colony."
|
||||
/datum/trade_destination/abelsrest
|
||||
name = "Abel's Rest"
|
||||
description = "A garden world on the Hegemony border. Coinhabitated rather uncomfortably by Unathi and Solar settlers."
|
||||
distance = 7.5
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
|
||||
@@ -145,7 +145,7 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet
|
||||
name = "Charge card"
|
||||
name = "charge card"
|
||||
icon_state = "efundcard"
|
||||
desc = "A card that holds an amount of money."
|
||||
var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions.
|
||||
|
||||
@@ -90,8 +90,9 @@ var/global/economy_init = 0
|
||||
if(economy_init)
|
||||
return 2
|
||||
|
||||
news_network.CreateFeedChannel("The [using_map.starsys_name] Times", "[using_map.starsys_name] Times ExoNode - [using_map.station_short]", 1, 1)
|
||||
//news_network.CreateFeedChannel("The [using_map.starsys_name] Times", "[using_map.starsys_name] Times ExoNode - [using_map.station_short]", 1, 1)
|
||||
news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1)
|
||||
news_network.CreateFeedChannel("Oculum Content Aggregator", "Oculus v6rev7", 1, 1)
|
||||
|
||||
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
|
||||
var/datum/trade_destination/D = new loc_type
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/datum/event/lore_news
|
||||
endWhen = 10
|
||||
|
||||
/datum/event/lore_news/announce()
|
||||
var/author = "Oculus v6rev7"
|
||||
var/channel = "Oculum Content Aggregator"
|
||||
|
||||
|
||||
//locations by region for later pick()
|
||||
//probably would be good to move these to a global somehwere but fuck if I know how to do that
|
||||
var/list/rim = list("Shelf", "Vounna", "Relan", "Whythe", "Angessa's Pearl") // this is also the Association list for most purposes
|
||||
var/list/crescent = list("Saint Columbia", "Ganesha", "Gavel", "Oasis", "Kess-Gendar") //Vir not included
|
||||
var/list/core = list("Sol", "Alpha Centauri", "Tau Ceti", "Altair")
|
||||
var/list/heights = list("New Ohio", "Mahi-Mahi", "Parvati", "Sidhe", "New Seoul")
|
||||
var/list/bowl = list("Zhu Que", "New Singapore", "Isavau's Gamble", "Love", "Viola", "Stove")
|
||||
var/list/crypt = list("El", "Jahan's Post", "Abel's Rest", "Raphael", "Thoth", "Terminus")
|
||||
var/list/weird = list("Silk", "Nyx") //no region
|
||||
|
||||
//by government
|
||||
var/list/solgov = crescent + core + heights + bowl + crypt + weird
|
||||
var/list/skrell = list("Qerr'Vallis", "Qerma-Lakirr", "Harrqak", "Kauq'xum")
|
||||
var/list/skrellfar = list("The Far Kingdom of Light and Shifting Shadow")// more colonies Elgeon
|
||||
var/list/unathi = list("Moghes", "Qerrna-Qamxea", "Abel's Rest") // more colonies Anewbe
|
||||
var/list/tajara = list("Rarkajar", "Mesomori", "Arathiir")
|
||||
var/list/independent = list("New Kyoto", "Casini's Reach", "Ue'Orsi", "Natuna", "Neon Light")
|
||||
|
||||
//this is what you should pick for most applications
|
||||
//whether or not the rim goes there is something that should be changed per the metaplot
|
||||
var/list/loc = solgov + skrell + tajara
|
||||
|
||||
//this includes systems Sol doesn't really have eyes on
|
||||
var/list/allloc = loc + unathi + skrellfar + independent + rim
|
||||
|
||||
//copied right from organizations.dm
|
||||
var/list/ship_names = list(
|
||||
"Kestrel",
|
||||
"Beacon",
|
||||
"Signal",
|
||||
"Freedom",
|
||||
"Glory",
|
||||
"Axiom",
|
||||
"Eternal",
|
||||
"Harmony",
|
||||
"Light",
|
||||
"Discovery",
|
||||
"Endeavor",
|
||||
"Explorer",
|
||||
"Swift",
|
||||
"Dragonfly",
|
||||
"Ascendant",
|
||||
"Tenacious",
|
||||
"Pioneer",
|
||||
"Hawk",
|
||||
"Haste",
|
||||
"Radiant",
|
||||
"Luminous"
|
||||
)
|
||||
|
||||
//generated based on Cerebulon's thing on the wiki
|
||||
var/list/prefixes = list("IAV","ICV","IDV","IDV","IEV","IFV","IIV","ILV","IMV","IRV","ISV","ITV","SCG-A","SCG-C","SCG-D","SCG-D","SCG-E","SCG-F","SCG-I","SCG-L","SCG-M","SCG-R","SCG-S","SCG-T","BAV","BCV","BDV","BDV","BEV","BFV","BIV","BLV","BMV","BRV","BSV","BTV","HAV","HCV","HDV","HDV","HEV","HFV","HIV","HLV","HMV","HRV","HSV","HTV","MAV","MCV","MDV","MDV","MEV","MFV","MIV","MLV","MMV","MRV","MSV","MTV","NAV","NCV","NDV","NDV","NEV","NFV","NIV","NLV","NMV","NRV","NSV","NTV","VAV","VCV","VDV","VDV","VEV","VFV","VIV","VLV","VMV","VRV","VSV","VTV","WAV","WCV","WDV","WDV","WEV","WFV","WIV","WLV","WMV","WRV","WSV","WTV","XAV","XCV","XDV","XDV","XEV","XFV","XIV","XLV","XMV","XRV","XSV","XTV","ZAV","ZCV","ZDV","ZDV","ZEV","ZFV","ZIV","ZLV","ZMV","ZRV","ZSV","ZTV","GAV","GCV","GDV","GDV","GEV","GFV","GIV","GLV","GMV","GRV","GSV","GTV","AAV","ACV","ADV","ADV","AEV","AFV","AIV","ALV","AMV","ARV","ASV","ATV","LAV","LCV","LDV","LDV","LEV","LFV","LIV","LLV","LMV","LRV","LSV","LTV")
|
||||
|
||||
//formatting breaks my fucking eyes
|
||||
var/body = pick("A high-ranking Vey-Med executive was revealed to have been experimenting on biological neural enhancement techniques, believed to be of Skrellian origin, which could lead to the production of transhuman entities with an average cognitive capacity 30% greater than a baseline human.",
|
||||
"[random_name(MALE)], chairman of the controversial Friends of Ned party, is scheduled to speak at a prominant university in [pick(core)] this Monday, according to a statement on his official newsfeed.",
|
||||
"A wing of Ward-Takahashi B-class drones became catatonic this Thursday after tripping late-stage anti-emergence protocols. W-T Chief of Development has declined to comment.",
|
||||
"A brand-new shipment of recreational voidcraft has been deemed \"Unsafe for use\" and seized at [pick(solgov)] customs. Wulf Aeronautics blames error in automated manufactory on [pick(solgov)], assures shareholders of \"One time incident\" after shares drop 4%.",
|
||||
"Activity in a mostly automated Xion work-site in [pick(solgov)] has been suspended indefinitely, after reports of atypical drone behavior. The EIO's assigned investigator commented on the shutdown, saying \"We'll get them up and running again as soon as we're sure it's safe.\" No comment so far on an estimated time or date of reopening.",
|
||||
"The EIO has officially raised the Emergence Threat Level in [pick(solgov)] to Blue. Citizens are reminded to comply with all EIO Agent requests. Failure to do so will be met with legal action, up to and including imprisonment.",
|
||||
"All SolGov citizens beware, the scourge know as the Vox have increased the frequency of their attacks on isolated and poorly defended SolGov territories in [pick(bowl)]. Citizens have been advised to travel in groups and remain aware of their surroundings at all times.",
|
||||
"The Unathi have recently moved a large amount of material into Abel's Rest, under the premise of building additional power plants. According to our sources, the material is in fact being channeled into domestic terrorist groups on both sides, in an attempt to incite a SolGov response. More news as the story develops.",
|
||||
"Controversial Kishari director [random_name(FEMALE)] announced this Friday a sequel to the 2525 animated series Soldiers of the Yearlong War. Open auditions for supporting cast members have been called.",
|
||||
"Amid concerns that it promotes a pro-transtech agenda, a high-profile screening of the award-winning animated film \"The Inventor's Marvelous Mechanical Maidens\" was canceled today on [pick(pick(core, heights))].",
|
||||
"A radiation leak caused by a power unit rupture at a [pick(solgov)] hazardous materials reclamation plant has left several workers and neighboring residents with acute radiation poisoning. Witnesses report that a basic lifting drone failed to recognize and collided with the misplaced unit.",
|
||||
"Xenophobic fringe group Humanity First has claimed credit for a bombing at a local government office on [pick(solgov)] which left three seriously injured. Police report that they have two suspects in custody, but details remain sparse.",
|
||||
"Government official [random_name(MALE)] reports that the crew of the [pick(prefixes)] [pick(ship_names)], the vessel boarded by Jaguar Gang pirates earlier this week, are \"Safe, unharmed, and happy to be back at work.\" Officials were unable to comment on future security measures at this time.",
|
||||
"Sanitation Technician [random_name(FEMALE)] says she was trapped in her work bathroom for three days after the locking system went haywire! The furious techie says she wants a \"hefty sum\" from her employers and that she won't be visiting that cubicle again any time soon!",
|
||||
"Experts at a top university have said that almost every position in modern society might be filled by a robot within the next few decades if production continues at its current rate. Workers' Rights groups have expressed alarm at the news, and have called for protections against the \"Tin menace\".",
|
||||
"An alleged cyberattack on Bishop Cybernetics systems reported to have resulted in the theft of customer data including detailed medical and biological records has been dismissed as \"Unfounded scaremongering\" by company executives.",
|
||||
"[pick(crescent)] resident [random_name(FEMALE)] says she was overjoyed when her son told her he was planning to get married, but was appalled to find the bride-to-be was a common household cleaning drone! GR3TA assures us that \"Cleaning is complete.\"",
|
||||
"Striking workers at a manufacturing plant on [pick(bowl)] have returned to work after news spread that plant owners would relocate operations to an automated facility if production did not resume by the end of the month. Factory investor [random_name(FEMALE)] expressed admiration at the \"Decisive action\" taken by the company.",
|
||||
"Police in [pick(core)] report that they have arrested a man in connection with multinationalist fringe group Nation of Mars. Authorities were alerted when the man's ID was flagged by new screening software at the city spaceport as a known sympathizer with the violent terrorist organization.",
|
||||
"The mystery of the [pick(prefixes)] [pick(ship_names)] has come to its end as a member of the vessel's skeleton crew was arrested in connection with Golden Tiger activities on the Skrell border. According to authorities, the ship - declared missing some months ago - was illegally sold to criminal elements on its way to breaking yards at [pick(heights)].",
|
||||
"[random_name(MALE)] comes clean about his decade-long nightmare kept as a slave on Eutopia in a new book to be released later this year. The harried author has fought lawsuits at every turn that claim that his account is \"A work of pure fiction with an obvious leftist agenda.\"",
|
||||
"Gas mask toting Revolutionary Solar People's Party extremists have reportedly attacked police at a rally in [pick(crypt)]. Peace-keeping officers were viscously pelted with objects and several protesters were found to be equipped with bottles containing an \"unknown substance.\"",
|
||||
"Be careful what you say around your personal AI device as you never know who might be listening, say top minds! Cybercrime expert [random_name(FEMALE)] says hackers can easily trick your device to listen in on your conversations, record you in secret, or even steal your identity!",
|
||||
"Thousands of travellers have been stranded at [pick(loc)] spaceport as a major error with the artificial intelligence system purged weeks worth of scheduling and manifest data from the port's mainframe. Major Bill's Transportation is offering stranded passengers 20% off replacement flights.",
|
||||
"An outraged pet owner claims that a cybernetic company in [pick(solgov)] performed \"disturbing\" surgeries on their beloved cat, Pickles. [random_name(PLURAL)], 58 claims that the local cybernetics firm stole the furry friend from the vet's office and \"Replaced his brain with ones and zeroes.\"",
|
||||
"Doctors in [pick(pick(skrell, heights))] were left in awe and horror as a Teshari was hatched with the features of an adult human man! Sources say that the youngster hatched with a full head of hair and could recite six nursery rhymes from memory. Could Skrell genetic experiments be to blame?",
|
||||
"Miners in [pick(bowl)] were dismayed to discover that their boss was actually a C-class drone intelligence! \"I should've known there was something wrong,\" says dumbfounded miner [random_name(MALE)],\"I'd say good morning and he'd just start listing off mineral densities and coordinates. I just thought he loved his job a little too much.\"",
|
||||
"The remains of an early 22nd century voidcraft containing \"Period artifacts, technology and human remains\" has been located on the surface of Luna after centuries of being disregarded as worthless wreck. Historians hope the find will provide insight into daily life under the short-lived Selene Federation.",
|
||||
"The unexpected discovery of the remains of a what was believed to be a previously undiscovered species by workers on [pick("Nisp", "Binma", "Sif", "Kishar", "Abel's Rest", "Merelar")] has now been dismissed. Upon close analysis of the specimen, it was identified as a \"Bear with mange\", apparently dumped there some weeks prior.",
|
||||
"According to a public statement by electronics giant Ward-Takahashi, many artificial intelligence systems - ranging from household appliances to industrial drones and habitat control networks - manufactured before 2550 could be at risk from a new virus dubbed \"Cap-3k\".",
|
||||
"A controversial opera billed as \"The true story of Nos Amis\" has been criticized by law enforcement agencies as \"glorifying\" some of the most infamous gangsters of the 22nd century. The Polish-language \"Z Francji, do Gwiazd\" is to be distributed exclusively in Alpha Centauri for one week only.",
|
||||
"Injury count continues to rise in the aftermath of the Positronic Rights Group Rally in [pick(pick(bowl, core, heights))]. Homemade teargas grenades were launched into the crowd at approximately 3:45 pm on Saturday by an unidentified person. Authorities urge anyone with information to call in, toll-free, at any time.",
|
||||
"Representatives report that investigations continue on a string of fires on [pick("Nisp", "Binma", "Sif", "Kishar", "Abel's Rest", "Merelar")]. While no information has been released to the public, authorities assure the press that they are doing everything in their power to find those responsible.",
|
||||
"En-route to the contentious rim system, a medical aid mission to Natuna was stopped by Ue-Katish pirates masquerading as refugees, who boarded the ship and stripped it of all supplies.",
|
||||
"Lead Singer of Strawberry Idol Revealed As Three Teshari In A Trench Coat-- Newest gimmick or shocking revelation??",
|
||||
"Shocking art critics throughout the system, a recent submission to the [pick(solgov)] Museum of Absurdism's contemporary exhibit was revealed to actually be the nutritional information on the back of a dehydrated cereal product common in Skrell space.",
|
||||
"The celebrated magical kid series \"Petit Yuusha Jossen Temonila\" has announced its newest season at the height of its demicentenial festival. Noted director [random_name(MALE)] has promised to bring a diverse production staff to the venerable series, and has stated a theme of \"the friendships that transcend borders\".",
|
||||
"The Hephaestus Industries board of directors announced this Monday the highest annual profits since the height of the Lizard Riots.",
|
||||
"A radical group of Mercurials were convicted today of violations of Five Points legislature at an extraordinary court on [pick(solgov)]. These convictions come at the heels of a successful sting operation six years in the making, lead by local Head of EIO [random_name(FEMALE)].",
|
||||
"An unnamed official of the shipping TSC Major Bill's Transportation narrowly escaped an attempt on their life by a deranged assassin. The assassin claims to have been driven to this henious act by the corporation's infamous jingle.",
|
||||
"In the aftermath of yesterday's synthphobic rally on [pick(solgov)], three positronic citizens were left irreparably damaged by a hostile mob, who claim that the victims were \"AAs\" attempting to infiltrate the rally.",
|
||||
"EIO spokesperson [random_name(MALE)] stated in a press conference yesterday that the \"Shakespear\" A-class codeline was briefly available for download on the darknet, although they claim to be \"confident that the leak was shut down before any significant portion could be downloaded\". Experts suspect Association involvement.",
|
||||
"[pick("Strives Towards", "Embraces", "Dreams of", "Cultivates", "Advocates", "Exemplifies")] [pick("Strength", "Wisdom", "Independence", "Pragmatism", "Reason", "Development")], a Community Child from Angessa's Pearl, published his memoir today, detailing a shocking level of abuse by caretakers and educators.",
|
||||
"Nova Sixty, Mercurial web personality, claims that the disappearence of the SCG-R Song Shi was a plot by \"extradimensional rockmen\" who intend to sow mistrust between the Association and SolGov. Quote Sixty, \"The Far Kingdoms' attempt to hide the TRUTH only proves that they and their rockman allies are NOT to be trusted.\"",
|
||||
"Unusual stellar phenomena was detected on [pick(allloc)], sparking concerns about the colonies in the system.",
|
||||
)
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
@@ -8,7 +8,7 @@ var/total_runtimes_skipped = 0
|
||||
#ifdef DEBUG
|
||||
/world/Error(var/exception/e, var/datum/e_src)
|
||||
if(!istype(e)) // Something threw an unusual exception
|
||||
log_to_dd("\[[time_stamp()]] Uncaught exception: [e]")
|
||||
log_error("\[[time_stamp()]] Uncaught exception: [e]")
|
||||
return ..()
|
||||
if(!error_last_seen) // A runtime is occurring too early in start-up initialization
|
||||
return ..()
|
||||
@@ -39,7 +39,7 @@ var/total_runtimes_skipped = 0
|
||||
var/skipcount = abs(error_cooldown[erroruid]) - 1
|
||||
error_cooldown[erroruid] = 0
|
||||
if(skipcount > 0)
|
||||
log_to_dd("\[[time_stamp()]] Skipped [skipcount] runtimes in [e.file],[e.line].")
|
||||
log_error("\[[time_stamp()]] Skipped [skipcount] runtimes in [e.file],[e.line].")
|
||||
error_cache.logError(e, skipCount = skipcount)
|
||||
error_last_seen[erroruid] = world.time
|
||||
error_cooldown[erroruid] = cooldown
|
||||
@@ -95,9 +95,9 @@ var/total_runtimes_skipped = 0
|
||||
desclines += " (This error will now be silenced for [ERROR_SILENCE_TIME / 600] minutes)"
|
||||
|
||||
// Now to actually output the error info...
|
||||
log_to_dd("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]")
|
||||
log_error("\[[time_stamp()]] Runtime in [e.file],[e.line]: [e]")
|
||||
for(var/line in desclines)
|
||||
log_to_dd(line)
|
||||
log_error(line)
|
||||
if(error_cache)
|
||||
error_cache.logError(e, desclines, e_src = e_src)
|
||||
|
||||
|
||||
@@ -134,11 +134,12 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
//new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 60, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lore News", /datum/event/lore_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
|
||||
)
|
||||
|
||||
@@ -47,7 +47,8 @@ var/list/event_last_fired = list()
|
||||
|
||||
possibleEvents[/datum/event/economic_event] = 300
|
||||
possibleEvents[/datum/event/trivial_news] = 400
|
||||
possibleEvents[/datum/event/mundane_news] = 300
|
||||
//possibleEvents[/datum/event/mundane_news] = 300
|
||||
possibleEvents[/datum/event/lore_news] = 300 // up this if the above ones get removed as they damn well should
|
||||
|
||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
var/rng = rand(1,5)
|
||||
switch(rng)
|
||||
if(1)
|
||||
msg = "A combat drone wing operating near various asteroids in the Kara subsystem has failed to return from a anti-piracy sweep. If any are sighted, \
|
||||
msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. If any are sighted, \
|
||||
approach with caution."
|
||||
if(2)
|
||||
msg = "Contact has been lost with a combat drone wing operating out in the asteroid field near Kara. If any are sighted in the area, approach with \
|
||||
msg = "Contact has been lost with a combat drone wing in Sif orbit. If any are sighted in the area, approach with \
|
||||
caution."
|
||||
if(3)
|
||||
msg = "Unidentified hackers have targeted a combat drone wing deployed in the Kara subsystem. If any are sighted in the area, approach with caution."
|
||||
msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. If any are sighted in the area, approach with caution."
|
||||
if(4)
|
||||
msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution."
|
||||
if(5)
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
var/datum/supply_order/O = new /datum/supply_order()
|
||||
O.ordernum = supply_controller.ordernum
|
||||
O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)]
|
||||
O.orderedby = random_name(pick(MALE,FEMALE), species = "Human")
|
||||
O.orderedby = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN)
|
||||
supply_controller.shoppinglist += O
|
||||
@@ -1,7 +1,7 @@
|
||||
/proc/send2irc(var/channel, var/msg)
|
||||
if (config.use_irc_bot)
|
||||
if (config.use_node_bot)
|
||||
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[msg]\"")
|
||||
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[escape_shell_arg(msg)]\"")
|
||||
else
|
||||
if (config.irc_bot_host)
|
||||
if(config.irc_bot_export)
|
||||
@@ -16,10 +16,10 @@
|
||||
nudge_lib = "lib/nudge.so"
|
||||
|
||||
spawn(0)
|
||||
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[msg]")
|
||||
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[escape_shell_arg(msg)]")
|
||||
else
|
||||
spawn(0)
|
||||
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [msg]")
|
||||
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [escape_shell_arg(msg)]")
|
||||
return
|
||||
|
||||
/proc/send2mainirc(var/msg)
|
||||
|
||||
@@ -1,9 +1,27 @@
|
||||
// Ported from /vg/.
|
||||
/proc/escape_shell_arg(var/arg)
|
||||
// RCE prevention
|
||||
// - Encloses arg in single quotes
|
||||
// - Escapes single quotes
|
||||
// Also escapes %, ! on windows
|
||||
if(world.system_type == MS_WINDOWS)
|
||||
arg = replacetext(arg, "^", "^^") // Escape char
|
||||
arg = replacetext(arg, "%", "%%") // %PATH% -> %%PATH%%
|
||||
arg = replacetext(arg, "!", "^!") // !PATH!, delayed variable expansion on Windows
|
||||
arg = replacetext(arg, "\"", "^\"")
|
||||
arg = "\"[arg]\""
|
||||
else
|
||||
arg = replacetext(arg, "\\", "\\\\'") // Escape char
|
||||
arg = replacetext(arg, "'", "\\'") // No breaking out of the single quotes.
|
||||
arg = "'[arg]'"
|
||||
return arg
|
||||
|
||||
/proc/ext_python(var/script, var/args, var/scriptsprefix = 1)
|
||||
if(scriptsprefix) script = "scripts/" + script
|
||||
if(scriptsprefix)
|
||||
script = "scripts/" + script
|
||||
|
||||
if(world.system_type == MS_WINDOWS)
|
||||
script = replacetext(script, "/", "\\")
|
||||
|
||||
var/command = config.python_path + " " + script + " " + args
|
||||
|
||||
return shell(command)
|
||||
return shell(command)
|
||||
@@ -47,7 +47,7 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
if(!H.r_store) slots_free += ui_storage2
|
||||
if(slots_free.len)
|
||||
halitem.screen_loc = pick(slots_free)
|
||||
halitem.layer = 50
|
||||
halitem.hud_layerise()
|
||||
switch(rand(1,6))
|
||||
if(1) //revolver
|
||||
halitem.icon = 'icons/obj/gun.dmi'
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"_____ used ____ to create their newest invention, _____!",
|
||||
"Scientists are not allowed to make Gatling _____.",
|
||||
"It's not a party until the ____ arrive.",
|
||||
"No matter how many Tajara you have, _____ is never acceptable.",
|
||||
"No matter how many Tajaran you have, _____ is never acceptable.",
|
||||
"No, the AI's first law is NOT to serve _____.",
|
||||
"The robots are not disposal bins for your _____.",
|
||||
"You can never have too many _____ on shift.",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user