Merge branch 'master' into AI_langs

This commit is contained in:
Atermonera
2017-09-25 11:40:40 -07:00
committed by GitHub
1349 changed files with 67646 additions and 27065 deletions
+7 -7
View File
@@ -82,7 +82,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)"
var/DBQuery/query_insert = dbcon.NewQuery(sql)
query_insert.Execute()
usr << "\blue Ban saved to database."
usr << "<font color='blue'>Ban saved to database.</font>"
message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1)
@@ -136,17 +136,17 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
ban_number++;
if(ban_number == 0)
usr << "\red Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin."
usr << "<font color='red'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</font>"
return
if(ban_number > 1)
usr << "\red Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin."
usr << "<font color='red'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</font>"
return
if(istext(ban_id))
ban_id = text2num(ban_id)
if(!isnum(ban_id))
usr << "\red Database update failed due to a ban ID mismatch. Contact the database admin."
usr << "<font color='red'>Database update failed due to a ban ID mismatch. Contact the database admin.</font>"
return
DB_ban_unban_by_id(ban_id)
@@ -231,11 +231,11 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
ban_number++;
if(ban_number == 0)
usr << "\red Database update failed due to a ban id not being present in the database."
usr << "<font color='red'>Database update failed due to a ban id not being present in the database.</font>"
return
if(ban_number > 1)
usr << "\red Database update failed due to multiple bans having the same ID. Contact the database admin."
usr << "<font color='red'>Database update failed due to multiple bans having the same ID. Contact the database admin.</font>"
return
if(!src.owner || !istype(src.owner, /client))
@@ -271,7 +271,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
establish_db_connection()
if(!dbcon.IsConnected())
usr << "\red Failed to establish database connection"
usr << "<font color='red'>Failed to establish database connection</font>"
return
var/output = "<div align='center'><table width='90%'><tr>"
+3 -3
View File
@@ -7,13 +7,13 @@ world/IsBanned(key,address,computer_id)
//Guest Checking
if(!config.guests_allowed && IsGuestKey(key))
log_access("Failed Login: [key] - Guests not allowed")
message_admins("\blue 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")
message_admins("\blue 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)
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
@@ -25,7 +25,7 @@ world/IsBanned(key,address,computer_id)
. = CheckBan( ckey(key), computer_id, address )
if(.)
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
message_admins("\blue Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]")
message_admins("<font color='blue'>Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]</font>")
return .
return ..() //default pager ban stuff
+2 -2
View File
@@ -106,7 +106,7 @@ var/savefile/Banlist
Banlist.cd = "/base"
if ( Banlist.dir.Find("[ckey][computerid]") )
usr << text("\red Ban already exists.")
usr << text("<font color='red'>Ban already exists.</font>")
return 0
else
Banlist.dir.Add("[ckey][computerid]")
@@ -168,7 +168,7 @@ var/savefile/Banlist
/datum/admins/proc/unbanpanel()
var/count = 0
var/dat
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
//var/dat = "<HR><B>Unban Player:</B> <font color='blue'>(U) = Unban</font> , (E) = Edit Ban <font color='green'>(Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 ></font>"
Banlist.cd = "/base"
for (var/A in Banlist.dir)
count++
+16 -11
View File
@@ -114,8 +114,7 @@ proc/admin_notice(var/message, var/rights)
else if(ishuman(M))
body += {"<A href='?src=\ref[src];makeai=\ref[M]'>Make AI</A> |
<A href='?src=\ref[src];makerobot=\ref[M]'>Make Robot</A> |
<A href='?src=\ref[src];makealien=\ref[M]'>Make Alien</A> |
<A href='?src=\ref[src];makeslime=\ref[M]'>Make slime</A>
<A href='?src=\ref[src];makealien=\ref[M]'>Make Alien</A>
"}
//Simple Animals
@@ -146,6 +145,11 @@ proc/admin_notice(var/message, var/rights)
body += {"<br><br>
<b>Rudimentary transformation:</b><font size=2><br>These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.</font><br>
<A href='?src=\ref[src];simplemake=observer;mob=\ref[M]'>Observer</A> |
\[ Xenos: <A href='?src=\ref[src];simplemake=larva;mob=\ref[M]'>Larva</A>
<A href='?src=\ref[src];simplemake=human;species=Xenomorph Drone;mob=\ref[M]'>Drone</A>
<A href='?src=\ref[src];simplemake=human;species=Xenomorph Hunter;mob=\ref[M]'>Hunter</A>
<A href='?src=\ref[src];simplemake=human;species=Xenomorph Sentinel;mob=\ref[M]'>Sentinel</A>
<A href='?src=\ref[src];simplemake=human;species=Xenomorph Queen;mob=\ref[M]'>Queen</A> \] |
\[ Crew: <A href='?src=\ref[src];simplemake=human;mob=\ref[M]'>Human</A>
<A href='?src=\ref[src];simplemake=human;species=Unathi;mob=\ref[M]'>Unathi</A>
<A href='?src=\ref[src];simplemake=human;species=Tajaran;mob=\ref[M]'>Tajaran</A>
@@ -673,7 +677,7 @@ proc/admin_notice(var/message, var/rights)
//This is basically how death alarms do it
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/ert(null)
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot1.channels + a.keyslot2.channels)
var/channel = input("Channel for message:","Channel", null) as null|anything in (list("Common") + a.keyslot2.channels) // + a.keyslot1.channels
if(channel) //They picked a channel
var/sender = input("Name of sender (max 75):", "Announcement", "Announcement Computer") as null|text
@@ -783,6 +787,7 @@ proc/admin_notice(var/message, var/rights)
return
if(ticker.current_state == GAME_STATE_PREGAME)
ticker.current_state = GAME_STATE_SETTING_UP
Master.SetRunLevel(RUNLEVEL_SETUP)
log_admin("[usr.key] has started the game.")
message_admins("<font color='blue'>[usr.key] has started the game.</font>")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -801,7 +806,7 @@ proc/admin_notice(var/message, var/rights)
else
world << "<B>New players may now enter the game.</B>"
log_admin("[key_name(usr)] toggled new player game entering.")
message_admins("\blue [key_name_admin(usr)] toggled new player game entering.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled new player game entering.</font>", 1)
world.update_status()
feedback_add_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -827,7 +832,7 @@ proc/admin_notice(var/message, var/rights)
world << "<B>You may now respawn.</B>"
else
world << "<B>You may no longer respawn :(</B>"
message_admins("\blue [key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].</font>", 1)
log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].")
world.update_status()
feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -859,7 +864,7 @@ proc/admin_notice(var/message, var/rights)
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
return //alert("Round end delayed", null, null, null, null, null)
round_progressing = !round_progressing
if (!round_progressing)
@@ -875,7 +880,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin jumping"
set name="Toggle Jump"
config.allow_admin_jump = !(config.allow_admin_jump)
message_admins("\blue Toggled admin jumping to [config.allow_admin_jump].")
message_admins("<font color='blue'>Toggled admin jumping to [config.allow_admin_jump].</font>")
feedback_add_details("admin_verb","TJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adspawn()
@@ -883,7 +888,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin spawning"
set name="Toggle Spawn"
config.allow_admin_spawning = !(config.allow_admin_spawning)
message_admins("\blue Toggled admin item spawning to [config.allow_admin_spawning].")
message_admins("<font color='blue'>Toggled admin item spawning to [config.allow_admin_spawning].</font>")
feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/adrev()
@@ -891,7 +896,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Toggle admin revives"
set name="Toggle Revive"
config.allow_admin_rev = !(config.allow_admin_rev)
message_admins("\blue Toggled reviving to [config.allow_admin_rev].")
message_admins("<font color='blue'>Toggled reviving to [config.allow_admin_rev].</font>")
feedback_add_details("admin_verb","TAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/immreboot()
@@ -901,7 +906,7 @@ proc/admin_notice(var/message, var/rights)
if(!usr.client.holder) return
if( alert("Reboot server?",,"Yes","No") == "No")
return
world << "\red <b>Rebooting world!</b> \blue Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!"
world << "<font color='red'><b>Rebooting world!</b></font> <font color='blue'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</font>"
log_admin("[key_name(usr)] initiated an immediate reboot.")
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
@@ -1165,7 +1170,7 @@ proc/admin_notice(var/message, var/rights)
else
world << "<B>Guests may now enter the game.</B>"
log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.")
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.</font>", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/output_ai_laws()
+21 -14
View File
@@ -47,7 +47,7 @@ var/list/admin_verbs_admin = list(
/client/proc/jumptomob, //allows us to jump to a specific mob,
/client/proc/jumptoturf, //allows us to jump to a specific turf,
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm,
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
/client/proc/cmd_admin_create_centcom_report,
@@ -68,8 +68,9 @@ var/list/admin_verbs_admin = list(
/datum/admins/proc/toggledsay, //toggles dsay on/off for everyone,
/client/proc/game_panel, //game panel, allows to change game-mode etc,
/client/proc/cmd_admin_say, //admin-only ooc chat,
/datum/admins/proc/PlayerNotes,
/client/proc/cmd_mod_say,
/client/proc/cmd_event_say,
/datum/admins/proc/PlayerNotes,
/datum/admins/proc/show_player_info,
/client/proc/free_slot, //frees slot for chosen job,
/client/proc/cmd_admin_change_custom_event,
@@ -136,7 +137,10 @@ var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_atom, //allows us to spawn instances,
/client/proc/respawn_character,
/client/proc/virus2_editor,
/client/proc/spawn_chemdisp_cartridge
/client/proc/spawn_chemdisp_cartridge,
/client/proc/map_template_load,
/client/proc/map_template_upload,
/client/proc/map_template_load_on_new_z
)
var/list/admin_verbs_server = list(
/datum/admins/proc/capture_map,
@@ -176,6 +180,7 @@ var/list/admin_verbs_debug = list(
/client/proc/debug_controller,
/client/proc/debug_antagonist_template,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_using_map,
/client/proc/cmd_admin_delete,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
@@ -183,13 +188,13 @@ var/list/admin_verbs_debug = list(
/client/proc/reload_admins,
/client/proc/reload_mentors,
/client/proc/restart_controller,
/datum/admins/proc/restart,
/client/proc/print_random_map,
/client/proc/create_random_map,
/client/proc/apply_random_map,
/client/proc/overlay_random_map,
/client/proc/delete_random_map,
/client/proc/show_plant_genes,
/client/proc/show_xenobio_genes,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/callproc_target,
@@ -286,6 +291,7 @@ var/list/admin_verbs_hideable = list(
/client/proc/debug_controller,
/client/proc/startSinglo,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_using_map,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
@@ -302,6 +308,7 @@ var/list/admin_verbs_mod = list(
/datum/admins/proc/PlayerNotes,
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
/client/proc/cmd_mod_say,
/client/proc/cmd_event_say,
/datum/admins/proc/show_player_info,
/client/proc/player_panel_new,
/client/proc/dsay,
@@ -447,11 +454,11 @@ var/list/admin_verbs_mentor = list(
if(holder && mob)
if(mob.invisibility == INVISIBILITY_OBSERVER)
mob.invisibility = initial(mob.invisibility)
mob << "\red <b>Invisimin off. Invisibility reset.</b>"
mob << "<font color='red'><b>Invisimin off. Invisibility reset.</b></font>"
mob.alpha = max(mob.alpha + 100, 255)
else
mob.invisibility = INVISIBILITY_OBSERVER
mob << "\blue <b>Invisimin on. You are now as invisible as a ghost.</b>"
mob << "<font color='blue'><b>Invisimin on. You are now as invisible as a ghost.</b></font>"
mob.alpha = max(mob.alpha - 100, 0)
@@ -617,7 +624,7 @@ var/list/admin_verbs_mentor = list(
var/light_impact_range = input("Light impact range (in tiles):") as num
var/flash_range = input("Flash range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
message_admins("<font color='blue'>[ckey] creating an admin explosion at [epicenter.loc].</font>")
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
@@ -649,7 +656,7 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].</font>", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
@@ -662,7 +669,7 @@ var/list/admin_verbs_mentor = list(
for (var/mob/V in hearers(O))
V.show_message(message, 2)
log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound")
message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound.</font>", 1)
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -696,7 +703,7 @@ var/list/admin_verbs_mentor = list(
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'.")
message_admins("\blue [key_name_admin(usr)] used 'kill air'.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] used 'kill air'.</font>", 1)
/client/proc/readmin_self()
set name = "Re-Admin self"
@@ -837,7 +844,7 @@ var/list/admin_verbs_mentor = list(
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!"
usr << "<font color='red'>You can only do this to humans!</font>"
return
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Tajaran can result in unintended consequences.",,"Yes","No"))
if("No")
@@ -957,7 +964,7 @@ var/list/admin_verbs_mentor = list(
T << "<span class='notice'>Move on.</span>"
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
message_admins("\blue [key_name_admin(usr)] told [key_name(T)] to man up and deal with it.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.</font>", 1)
/client/proc/global_man_up()
set category = "Fun"
@@ -969,7 +976,7 @@ var/list/admin_verbs_mentor = list(
T << 'sound/voice/ManUp1.ogg'
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
message_admins("\blue [key_name_admin(usr)] told everyone to man up and deal with it.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] told everyone to man up and deal with it.</font>", 1)
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
set category = "Fun"
@@ -980,4 +987,4 @@ var/list/admin_verbs_mentor = list(
T.spell_list += new S
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the spell [S].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] gave [key_name(T)] the spell [S].</font>", 1)
+12 -12
View File
@@ -141,7 +141,7 @@ var/savefile/Banlistjob
Banlistjob.cd = "/base"
if ( Banlistjob.dir.Find("[ckey][computerid][rank]") )
usr << text("\red Banjob already exists.")
usr << text("<font color='red'>Banjob already exists.</font>")
return 0
else
Banlistjob.dir.Add("[ckey][computerid][rank]")
@@ -206,7 +206,7 @@ var/savefile/Banlistjob
/datum/admins/proc/unjobbanpanel()
var/count = 0
var/dat
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
//var/dat = "<HR><B>Unban Player:</B> <font color='blue'>(U) = Unban , (E) = Edit Ban</font> <font color='green'>(Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 </font>>"
Banlistjob.cd = "/base"
for (var/A in Banlistjob.dir)
count++
@@ -219,24 +219,24 @@ var/savefile/Banlistjob
/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job))
M << "\red<BIG><B>You have been banned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a permanent ban."
M << "<font color='red'><BIG><B>You have been banned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
log_admin("[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
/datum/admins/proc/timejobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 1, mins, job))
M << "\red<BIG><B>You have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a temporary ban, it will be removed in [mins] minutes."
M << "<font color='red'><BIG><B>You have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>"
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
log_admin("[usr.client.ckey] has jobbanned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")*/
message_admins("<font color='blue'>[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")*/
//////////////////////////////////// DEBUG ////////////////////////////////////
/proc/CreateBansjob()
@@ -51,13 +51,13 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
usr << "\red You do not have permission to do this!"
usr << "<font color='red'>You do not have permission to do this!</font>"
return
establish_db_connection()
if(!dbcon.IsConnected())
usr << "\red Failed to establish database connection"
usr << "<font color='red'>Failed to establish database connection</font>"
return
if(!adm_ckey || !new_rank)
@@ -85,14 +85,14 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
log_query.Execute()
usr << "\blue New admin added."
usr << "<font color='blue'>New admin added.</font>"
else
if(!isnull(admin_id) && isnum(admin_id))
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
log_query.Execute()
usr << "\blue Admin rank changed."
usr << "<font color='blue'>Admin rank changed.</font>"
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
if(config.admin_legacy_system) return
@@ -101,12 +101,12 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
usr << "\red You do not have permission to do this!"
usr << "<font color='red'>You do not have permission to do this!</font>"
return
establish_db_connection()
if(!dbcon.IsConnected())
usr << "\red Failed to establish database connection"
usr << "<font color='red'>Failed to establish database connection</font>"
return
if(!adm_ckey || !new_permission)
@@ -140,10 +140,10 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
log_query.Execute()
usr << "\blue Permission removed."
usr << "<font color='blue'>Permission removed.</font>"
else //This admin doesn't have this permission, so we are adding it.
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')")
log_query.Execute()
usr << "\blue Permission added."
usr << "<font color='blue'>Permission added.</font>"
+2 -2
View File
@@ -103,7 +103,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
infos += P
info << infos
message_admins("\blue [key_name_admin(user)] has edited [key]'s notes.")
message_admins("<font color='blue'>[key_name_admin(user)] has edited [key]'s notes.</font>")
log_admin("[key_name(user)] has edited [key]'s notes.")
del(info) // savefile, so NOT qdel
@@ -128,7 +128,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
infos.Remove(item)
info << infos
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
message_admins("<font color='blue'>[key_name_admin(usr)] deleted one of [key]'s notes.</font>")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
qdel(info)
@@ -0,0 +1,7 @@
/datum/admin_secret_item/random_event/trigger_xenomorph_infestation
name = "Trigger a Xenomorph Infestation"
/datum/admin_secret_item/random_event/trigger_xenomorph_infestation/execute(var/mob/user)
. = ..()
if(.)
return xenomorphs.attempt_random_spawn()
+53 -53
View File
@@ -197,7 +197,7 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] called the Emergency Shuttle to the station.</font>", 1)
if("2")
if (!( ticker ) || !emergency_shuttle.location())
@@ -205,12 +205,12 @@
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
log_admin("[key_name(usr)] called the Emergency Shuttle")
message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] called the Emergency Shuttle to the station.</font>", 1)
else if (emergency_shuttle.can_recall())
emergency_shuttle.recall()
log_admin("[key_name(usr)] sent the Emergency Shuttle back")
message_admins("\blue [key_name_admin(usr)] sent the Emergency Shuttle back", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] sent the Emergency Shuttle back.</font>", 1)
href_list["secretsadmin"] = "check_antagonist"
@@ -223,14 +223,14 @@
emergency_shuttle.launch_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's launch time to [new_time_left]")
message_admins("\blue [key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited the Emergency Shuttle's launch time to [new_time_left*10]</font>", 1)
else if (emergency_shuttle.shuttle.has_arrive_time())
var/new_time_left = input("Enter new shuttle arrival time (seconds):","Edit Shuttle Arrival Time", emergency_shuttle.estimate_arrival_time() ) as num
emergency_shuttle.shuttle.arrive_time = world.time + new_time_left*10
log_admin("[key_name(usr)] edited the Emergency Shuttle's arrival time to [new_time_left]")
message_admins("\blue [key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited the Emergency Shuttle's arrival time to [new_time_left*10]</font>", 1)
else
alert("The shuttle is neither counting down to launch nor is it in transit. Please try again when it is.")
@@ -241,7 +241,7 @@
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -259,14 +259,14 @@
if("Yes") delmob = 1
log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]")
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]</font>", 1)
switch(href_list["simplemake"])
if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob )
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob )
if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"])
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob )
if("slime") M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob )
if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob )
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob )
if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob )
@@ -339,7 +339,7 @@
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
message_admins("\blue [key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]</font>", 1)
Banlist.cd = "/base/[banfolder]"
Banlist["reason"] << reason
Banlist["temp"] << temp
@@ -686,7 +686,7 @@
usr << "<span class='warning'> You Cannot issue temporary job-bans!</span>"
return
if(config.ban_legacy_system)
usr << "\red Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban."
usr << "<font color='red'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</font>"
return
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
@@ -711,10 +711,10 @@
else
msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1)
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
M << "\red <B>The reason is: [reason]</B>"
M << "\red This jobban will be lifted in [mins] minutes."
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>This jobban will be lifted in [mins] minutes.</font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
@@ -732,10 +732,10 @@
if(!msg) msg = job
else msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
M << "\red <B>The reason is: [reason]</B>"
M << "\red Jobban can be lifted only upon request."
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>Jobban can be lifted only upon request.</font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("Cancel")
@@ -765,8 +765,8 @@
else
continue
if(msg)
message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1)
M << "\red<BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG>"
message_admins("<font color='blue'>[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></font>"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
return 0 //we didn't do anything!
@@ -778,11 +778,11 @@
return
var/reason = sanitize(input("Please enter reason"))
if(!reason)
M << "\red You have been kicked from the server"
M << "<font color='red'>You have been kicked from the server</font>"
else
M << "\red You have been kicked from the server: [reason]"
M << "<font color='red'>You have been kicked from the server: [reason]</font>"
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] booted [key_name_admin(M)].</font>", 1)
//M.client = null
qdel(M.client)
@@ -793,7 +793,7 @@
if(t)
if((alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes") && t) //No more misclicks! Unless you do it twice.
log_admin("[key_name(usr)] removed [t]")
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] removed [t]</font>", 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
var/t_split = splittext(t, " - ")
@@ -830,17 +830,17 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.")
notes_add(M.ckey,"[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.",usr)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a temporary ban, it will be removed in [mins] minutes."
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>"
feedback_inc("ban_tmp",1)
DB_ban_record(BANTYPE_TEMP, M, mins, reason)
feedback_inc("ban_tmp_mins",mins)
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
qdel(M.client)
//qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
@@ -855,16 +855,16 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP)
if("No")
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a permanent ban."
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
if(config.banappeals)
M << "\red To try to resolve this matter head to [config.banappeals]"
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
else
M << "\red No ban appeals URL has been set."
M << "<font color='red'>No ban appeals URL has been set.</font>"
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr)
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
@@ -920,8 +920,8 @@
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].")
message_admins("\blue [key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].", 1)
world << "\blue <b>The mode is now: [config.mode_names[master_mode]]</b>"
message_admins("<font color='blue'>[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].</font>", 1)
world << "<font color='blue'><b>The mode is now: [config.mode_names[master_mode]]</b></font>"
Game() // updates the main game menu
world.save_mode(master_mode)
.(href, list("c_mode"=1))
@@ -935,7 +935,7 @@
return alert(usr, "The game mode has to be secret!", null, null, null, null)
secret_force_mode = href_list["f_secret2"]
log_admin("[key_name(usr)] set the forced secret mode as [secret_force_mode].")
message_admins("\blue [key_name_admin(usr)] set the forced secret mode as [secret_force_mode].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] set the forced secret mode as [secret_force_mode].</font>", 1)
Game() // updates the main game menu
.(href, list("f_secret"=1))
@@ -948,7 +948,7 @@
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] attempting to monkeyize [key_name_admin(H)]</font>", 1)
H.monkeyize()
else if(href_list["corgione"])
@@ -960,7 +960,7 @@
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(H)]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] attempting to corgize [key_name_admin(H)]</font>", 1)
H.corgize()
else if(href_list["forcespeech"])
@@ -975,7 +975,7 @@
M.say(speech)
speech = sanitize(speech) // Nah, we don't trust them
log_admin("[key_name(usr)] forced [key_name(M)] to say: [speech]")
message_admins("\blue [key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]")
message_admins("<font color='blue'>[key_name_admin(usr)] forced [key_name_admin(M)] to say: [speech]</font>")
else if(href_list["sendtoprison"])
if(!check_rights(R_ADMIN)) return
@@ -1014,9 +1014,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
M << "\red You have been sent to the prison station!"
M << "<font color='red'>You have been sent to the prison station!</font>"
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
else if(href_list["tdome1"])
if(!check_rights(R_FUN)) return
@@ -1039,7 +1039,7 @@
sleep(5)
M.loc = pick(tdome1)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1)
@@ -1064,7 +1064,7 @@
sleep(5)
M.loc = pick(tdome2)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1)
@@ -1086,7 +1086,7 @@
sleep(5)
M.loc = pick(tdomeadmin)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1)
@@ -1115,7 +1115,7 @@
sleep(5)
M.loc = pick(tdomeobserve)
spawn(50)
M << "\blue You have been sent to the Thunderdome."
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
@@ -1129,7 +1129,7 @@
if(config.allow_admin_rev)
L.revive()
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!", 1)
message_admins("<font color='red'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!</font>", 1)
log_admin("[key_name(usr)] healed / Rrvived [key_name(L)]")
else
usr << "Admin Rejuvinates have been disabled"
@@ -1142,19 +1142,19 @@
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
message_admins("\red Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!", 1)
message_admins("<font color='red'>Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!</font>", 1)
log_admin("[key_name(usr)] AIized [key_name(H)]")
H.AIize()
else if(href_list["makeslime"])
else if(href_list["makealien"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
var/mob/living/carbon/human/H = locate(href_list["makealien"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
usr.client.cmd_admin_slimeize(H)
usr.client.cmd_admin_alienize(H)
else if(href_list["makerobot"])
if(!check_rights(R_SPAWN)) return
@@ -1317,7 +1317,7 @@
log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
feedback_inc("admin_cookies_spawned",1)
H << "\blue Your prayers have been answered!! You received the <b>best cookie</b>!"
H << "<font color='blue'>Your prayers have been answered!! You received the <b>best cookie</b>!</font>"
else if(href_list["BlueSpaceArtillery"])
if(!check_rights(R_ADMIN|R_FUN)) return
@@ -1421,7 +1421,7 @@
usr << browse(data, "window=[B.name]")
else
usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]"
usr << "<font color='red'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</font>"
else if (href_list["AdminFaxViewPage"])
var/page = text2num(href_list["AdminFaxViewPage"])
+12 -12
View File
@@ -6,18 +6,18 @@
/client/proc/SDQL_query(query_text as message)
set category = "Admin"
if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
message_admins("<font color='red'>ERROR: Non-admin [usr.key] attempted to execute a SDQL query!</font>")
log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
var/list/query_list = SDQL_tokenize(query_text)
if(query_list.len < 2)
if(query_list.len > 0)
usr << "\red SDQL: Too few discrete tokens in query \"[query_text]\". Please check your syntax and try again."
usr << "<font color='red'>SDQL: Too few discrete tokens in query \"[query_text]\". Please check your syntax and try again.</font>"
return
if(!(lowertext(query_list[1]) in list("select", "delete", "update")))
usr << "\red SDQL: Unknown query type: \"[query_list[1]]\" in query \"[query_text]\". Please check your syntax and try again."
usr << "<font color='red'>SDQL: Unknown query type: \"[query_list[1]]\" in query \"[query_text]\". Please check your syntax and try again.</font>"
return
var/list/types = list()
@@ -56,7 +56,7 @@
set_vars[query_list[i]] = query_list[i + 2]
else
usr << "\red SDQL: Invalid set parameter in query \"[query_text]\". Please check your syntax and try again."
usr << "<font color='red'>SDQL: Invalid set parameter in query \"[query_text]\". Please check your syntax and try again.</font>"
return
i += 3
@@ -65,7 +65,7 @@
break
if(set_vars.len < 1)
usr << "\red SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again."
usr << "<font color='red'>SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again.</font>"
return
var/list/where = list()
@@ -215,7 +215,7 @@
var/v = where[i++]
var/compare_op = where[i++]
if(!(compare_op in list("==", "=", "<>", "<", ">", "<=", ">=", "!=")))
usr << "\red SDQL: Unknown comparison operator [compare_op] in where clause following [v] in query \"[query_text]\". Please check your syntax and try again."
usr << "<font color='red'>SDQL: Unknown comparison operator [compare_op] in where clause following [v] in query \"[query_text]\". Please check your syntax and try again.</font>"
return
var/j
@@ -262,7 +262,7 @@
usr << "\blue SQDL Query: [query_text]"
usr << "<font color='blue'>SQDL Query: [query_text]</font>"
message_admins("[usr] executed SDQL query: \"[query_text]\".")
/*
for(var/t in types)
@@ -349,7 +349,7 @@
else
usr << "\red SDQL: Sorry, equations not yet supported :("
usr << "<font color='red'>SDQL: Sorry, equations not yet supported :(</font>"
return null
@@ -434,7 +434,7 @@
else if(char == "'")
if(word != "")
usr << "\red SDQL: You have an error in your SDQL syntax, unexpected ' in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL: You have an error in your SDQL syntax, unexpected ' in query:</font> \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
return null
word = "'"
@@ -454,7 +454,7 @@
word += char
if(i > len)
usr << "\red SDQL: You have an error in your SDQL syntax, unmatched ' in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL: You have an error in your SDQL syntax, unmatched ' in query: </font>\"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
return null
query_list += "[word]'"
@@ -462,7 +462,7 @@
else if(char == "\"")
if(word != "")
usr << "\red SDQL: You have an error in your SDQL syntax, unexpected \" in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL: You have an error in your SDQL syntax, unexpected \" in query: </font>\"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
return null
word = "\""
@@ -482,7 +482,7 @@
word += char
if(i > len)
usr << "\red SDQL: You have an error in your SDQL syntax, unmatched \" in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL: You have an error in your SDQL syntax, unmatched \" in query: </font>\"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
return null
query_list += "[word]\""
+6 -6
View File
@@ -3,7 +3,7 @@
/client/proc/SDQL2_query(query_text as message)
set category = "Admin"
if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
message_admins("<font color='red'>ERROR: Non-admin [usr.key] attempted to execute a SDQL query!</font>")
log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
if(!query_text || length(query_text) < 1)
@@ -258,7 +258,7 @@
if("or", "||")
result = (result || val)
else
usr << "\red SDQL2: Unknown op [op]"
usr << "<font color='red'>SDQL2: Unknown op [op]</font>"
result = null
else
result = val
@@ -363,7 +363,7 @@
else if(char == "'")
if(word != "")
usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL2: You have an error in your SDQL syntax, unexpected ' in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again.</font>"
return null
word = "'"
@@ -383,7 +383,7 @@
word += char
if(i > len)
usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL2: You have an error in your SDQL syntax, unmatched ' in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again.</font>"
return null
query_list += "[word]'"
@@ -391,7 +391,7 @@
else if(char == "\"")
if(word != "")
usr << "\red SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL2: You have an error in your SDQL syntax, unexpected \" in query: \"<font color=gray>[query_text]</font>\" following \"<font color=gray>[word]</font>\". Please check your syntax, and try again.</font>"
return null
word = "\""
@@ -411,7 +411,7 @@
word += char
if(i > len)
usr << "\red SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again."
usr << "<font color='red'>SDQL2: You have an error in your SDQL syntax, unmatched \" in query: \"<font color=gray>[query_text]</font>\". Please check your syntax, and try again.</font>"
return null
query_list += "[word]\""
+1 -1
View File
@@ -67,7 +67,7 @@
/datum/SDQL_parser/proc/parse_error(error_message)
error = 1
usr << "\red SQDL2 Parsing Error: [error_message]"
usr << "<font color='red'>SQDL2 Parsing Error: [error_message]</font>"
return query.len + 1
/datum/SDQL_parser/proc/parse()
+3 -3
View File
@@ -7,7 +7,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
set name = "Adminhelp"
if(say_disabled) //This is here to try to identify lag problems
usr << "\red Speech is currently admin-disabled."
usr << "<font color='red'>Speech is currently admin-disabled.</font>"
return
//handle muting and automuting
@@ -91,8 +91,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
//Options bar: mob, details ( admin = 2, dev = 3, mentor = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so),
// highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name)
var/mentor_msg = "\blue <b><font color=red>Request for Help: </font>[get_options_bar(mob, 4, 1, 1, 0)][ai_cl]:</b> [msg]"
msg = "\blue <b><font color=red>Request for Help:: </font>[get_options_bar(mob, 2, 1, 1)][ai_cl]:</b> [msg]"
var/mentor_msg = "<b><font color=red>Request for Help: </font></b><font color='blue'><b>[get_options_bar(mob, 4, 1, 1, 0)][ai_cl]:</b> [msg]</font>"
msg = "<b><font color=red>Request for Help: </font></b><font color='blue'><b>[get_options_bar(mob, 2, 1, 1)][ai_cl]</b> [msg]</font>"
var/admin_number_afk = 0
+28 -3
View File
@@ -2,10 +2,12 @@
set category = "Special Verbs"
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
set hidden = 1
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN))
return
msg = sanitize(msg)
if(!msg) return
if(!msg)
return
log_admin("ADMIN: [key_name(src)] : [msg]")
@@ -21,7 +23,8 @@
set name = "Msay"
set hidden = 1
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER)) return
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER))
return
msg = sanitize(msg)
log_admin("MOD: [key_name(src)] : [msg]")
@@ -36,3 +39,25 @@
C << "<span class='mod_channel'>" + create_text_tag("mod", "MOD:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>"
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_event_say(msg as text)
set category = "Special Verbs"
set name = "Esay"
set hidden = 1
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER))
return
msg = sanitize(msg)
log_admin("EVENT: [key_name(src)] : [msg]")
if (!msg)
return
var/sender_name = key_name(usr, 1)
if(check_rights(R_ADMIN, 0))
sender_name = "<span class='admin'>[sender_name]</span>"
for(var/client/C in admins)
C << "<span class='event_channel'>" + create_text_tag("event", "EVENT:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>"
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+29 -6
View File
@@ -3,17 +3,40 @@
set name = "AOOC"
set desc = "Antagonist OOC"
if(!check_rights(R_ADMIN|R_MOD)) return
var/is_admin = check_rights(R_ADMIN|R_MOD, show_msg = 0)
var/is_antag = usr.mind && usr.mind.special_role
if(!is_antag && !is_admin) // Non-antagonists and non-admins have no business using this.
to_chat(usr, "<span class='warning'>Sorry, but only certain antagonists or administrators can use this verb.</span>")
return
else if(is_antag && !is_admin) // Is an antag, and not an admin, meaning we need to check if their antag type allows AOOC.
var/datum/antagonist/A = get_antag_data(usr.mind.special_role)
if(!A || !A.can_use_aooc)
to_chat(usr, "<span class='warning'>Sorry, but your antagonist type is not allowed to speak in AOOC.</span>")
return
msg = sanitize(msg)
if(!msg) return
if(!msg)
return
// Name shown to admins.
var/display_name = src.key
if(holder && holder.fakekey)
display_name = holder.fakekey
if(holder)
if(holder.fakekey)
display_name = usr.client.holder.fakekey
// Name shown to other players. Admins whom are not also antags have their rank displayed.
var/player_display = (is_admin && !is_antag) ? "[display_name]([usr.client.holder.rank])" : display_name
for(var/mob/M in mob_list)
if((M.mind && M.mind.special_role && M.client) || check_rights((R_ADMIN|R_MOD), 0, M))
M << "<font color='#960018'><span class='ooc'>" + create_text_tag("aooc", "Antag-OOC:", M.client) + " <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>"
if(check_rights(R_ADMIN|R_MOD, 0, M)) // Staff can see AOOC unconditionally, and with more details.
to_chat(M, "<span class='ooc'><span class='aooc'>[create_text_tag("aooc", "Antag-OOC:", M.client)] <EM>[get_options_bar(src, 0, 1, 1)]([admin_jump_link(usr, M.client.holder)]):</EM> <span class='message'>[msg]</span></span></span>")
else if(M.client) // Players can only see AOOC if observing, or if they are an antag type allowed to use AOOC.
var/datum/antagonist/A = null
if(M.mind) // Observers don't have minds, but they should still see AOOC.
A = get_antag_data(M.mind.special_role)
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]")
+37 -28
View File
@@ -28,11 +28,11 @@
var/datum/gas_mixture/env = T.return_air()
var/t = "\blue Coordinates: [T.x],[T.y],[T.z]\n"
t += "\red Temperature: [env.temperature]\n"
t += "\red Pressure: [env.return_pressure()]kPa\n"
var/t = "<font color='blue'>Coordinates: [T.x],[T.y],[T.z]\n</font>"
t += "<font color='red'>Temperature: [env.temperature]\n</font>"
t += "<font color='red'>Pressure: [env.return_pressure()]kPa\n</font>"
for(var/g in env.gas)
t += "\blue [g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n"
t += "<font color='blue'>[g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n</font>"
usr.show_message(t, 1)
feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -100,20 +100,20 @@
paiController.pai_candidates.Remove(candidate)
feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_slimeize(var/mob/M in mob_list)
/client/proc/cmd_admin_alienize(var/mob/M in mob_list)
set category = "Fun"
set name = "Make slime"
set name = "Make Alien"
if(!ticker)
alert("Wait until the game starts")
return
if(ishuman(M))
log_admin("[key_name(src)] has slimeized [M.key].")
log_admin("[key_name(src)] has alienized [M.key].")
spawn(10)
M:slimeize()
feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into a slime.")
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a slime.", 1)
M:Alienize()
feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into an alien.")
message_admins("<span class='notice'>[key_name_admin(usr)] made [key_name(M)] into an alien.</span>", 1)
else
alert("Invalid mob")
@@ -179,28 +179,28 @@
return
else
if(alert("Spawn that person a tome?",,"Yes","No")=="Yes")
M << "\red You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie. A tome, a message from your new master, appears on the ground."
M << "<font color='red'>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie. A tome, a message from your new master, appears on the ground.</font>"
new /obj/item/weapon/book/tome(M.loc)
else
M << "\red You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie."
M << "<font color='red'>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</font>"
var/glimpse=pick("1","2","3","4","5","6","7","8")
switch(glimpse)
if("1")
M << "\red You remembered one thing from the glimpse... [cultwords["travel"]] is travel..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["travel"]] is travel...</font>"
if("2")
M << "\red You remembered one thing from the glimpse... [cultwords["blood"]] is blood..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["blood"]] is blood...</font>"
if("3")
M << "\red You remembered one thing from the glimpse... [cultwords["join"]] is join..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["join"]] is join...</font>"
if("4")
M << "\red You remembered one thing from the glimpse... [cultwords["hell"]] is Hell..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["hell"]] is Hell...</font>"
if("5")
M << "\red You remembered one thing from the glimpse... [cultwords["destroy"]] is destroy..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["destroy"]] is destroy...</font>"
if("6")
M << "\red You remembered one thing from the glimpse... [cultwords["technology"]] is technology..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["technology"]] is technology...</font>"
if("7")
M << "\red You remembered one thing from the glimpse... [cultwords["self"]] is self..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["self"]] is self...</font>"
if("8")
M << "\red You remembered one thing from the glimpse... [cultwords["see"]] is see..."
M << "<font color='red'>You remembered one thing from the glimpse... [cultwords["see"]] is see...</font>"
if(M.mind)
M.mind.special_role = "Cultist"
@@ -270,7 +270,7 @@
alert("Invalid mob")
feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(src)] has granted [M.key] full access.")
message_admins("\blue [key_name_admin(usr)] has granted [M.key] full access.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has granted [M.key] full access.</font>", 1)
/client/proc/cmd_assume_direct_control(var/mob/M in mob_list)
set category = "Admin"
@@ -284,7 +284,7 @@
else
var/mob/observer/dead/ghost = new/mob/observer/dead(M,1)
ghost.ckey = M.ckey
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] assumed direct control of [M].</font>", 1)
log_admin("[key_name(usr)] assumed direct control of [M].")
var/mob/adminmob = src.mob
M.ckey = src.ckey
@@ -480,7 +480,7 @@
M.equip_to_slot_or_del(new /obj/item/clothing/head/det(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/s357(M), slot_l_store)
if ("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
@@ -592,7 +592,7 @@
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_magazine/a357
sec_briefcase.contents += new /obj/item/ammo_magazine/s357
sec_briefcase.contents += new /obj/item/weapon/plastique
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
@@ -787,7 +787,7 @@
M.regenerate_icons()
log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].")
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..</font>", 1)
return
/client/proc/startSinglo()
@@ -911,7 +911,7 @@
SMES.output_level = 75000
if(!found_the_pump && response == "Setup Completely")
src << "\red Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter"
src << "<font color='red'>Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter</font>"
var/turf/simulated/T = SM.loc
T.zone.air.gas["nitrogen"] += 450
T.zone.air.temperature = 50
@@ -919,7 +919,7 @@
log_admin("[key_name(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant" : ""]")
message_admins("\blue [key_name_admin(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant": ""]", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant": ""]</font>", 1)
return
@@ -943,6 +943,15 @@
if("Clients")
usr << jointext(clients,",")
/client/proc/cmd_debug_using_map()
set category = "Debug"
set name = "Debug Map Datum"
set desc = "Debug the map metadata about the currently compiled in map."
if(!check_rights(R_DEBUG))
return
debug_variables(using_map)
// DNA2 - Admin Hax
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
if(!ticker)
@@ -0,0 +1,69 @@
/client/proc/map_template_load()
set category = "Debug"
set name = "Map template - Place At Loc"
var/datum/map_template/template
var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in map_templates
if(!map)
return
template = map_templates[map]
var/turf/T = get_turf(mob)
if(!T)
return
var/list/preview = list()
template.preload_size(template.mappath)
for(var/S in template.get_affected_turfs(T,centered = TRUE))
preview += image('icons/misc/debug_group.dmi',S ,"red")
usr.client.images += preview
if(alert(usr,"Confirm location.", "Template Confirm","No","Yes") == "Yes")
if(template.annihilate && alert(usr,"This template is set to annihilate everything in the red square. \
\nEVERYTHING IN THE RED SQUARE WILL BE DELETED, ARE YOU ABSOLUTELY SURE?", "Template Confirm","No","Yes") == "No")
usr.client.images -= preview
return
if(template.load(T, centered = TRUE))
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has placed a map template ([template.name]).</span>")
else
to_chat(usr, "Failed to place map")
usr.client.images -= preview
/client/proc/map_template_load_on_new_z()
set category = "Debug"
set name = "Map template - New Z"
var/datum/map_template/template
var/map = input(usr, "Choose a Map Template to place on a new Z-level.","Place Map Template") as null|anything in map_templates
if(!map)
return
template = map_templates[map]
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>")
else
to_chat(usr, "Failed to place map")
/client/proc/map_template_upload()
set category = "Debug"
set name = "Map Template - Upload"
var/map = input(usr, "Choose a Map Template to upload to template storage","Upload Map Template") as null|file
if(!map)
return
if(copytext("[map]",-4) != ".dmm")
to_chat(usr, "Bad map file: [map]")
return
var/datum/map_template/M = new(map, "[map]")
if(M.preload_size(map))
to_chat(usr, "Map template '[map]' ready to place ([M.width]x[M.height])")
map_templates[M.name] = M
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has uploaded a map template ([map])</span>")
else
to_chat(usr, "Map template '[map]' failed to load properly")
+7 -7
View File
@@ -159,7 +159,7 @@ var/list/debug_verbs = list (
,/client/proc/hide_debug_verbs
,/client/proc/testZAScolors
,/client/proc/testZAScolors_remove
,/client/proc/setup_supermatter_engine
,/datum/admins/proc/setup_supermatter
,/client/proc/atmos_toggle_debug
,/client/proc/spawn_tanktransferbomb
)
@@ -217,7 +217,7 @@ var/list/debug_verbs = list (
var/turf/simulated/location = get_turf(usr)
if(!istype(location, /turf/simulated)) // We're in space, let's not cause runtimes.
usr << "\red this debug tool cannot be used from space"
usr << "<font color='red'>this debug tool cannot be used from space</font>"
return
var/icon/red = new('icons/misc/debug_group.dmi', "red") //created here so we don't have to make thousands of these.
@@ -368,7 +368,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Regroup All Airgroups Attempt"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>" //Why not.. Delete the procs instead?
/*prevent_airgroup_regroup = 0
for(var/datum/air_group/AG in air_master.air_groups)
@@ -379,7 +379,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill pipe processing"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*pipe_processing_killed = !pipe_processing_killed
if(pipe_processing_killed)
@@ -391,7 +391,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill air processing"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*air_processing_killed = !air_processing_killed
if(air_processing_killed)
@@ -405,7 +405,7 @@ var/global/say_disabled = 0
set category = "Mapping"
set name = "Disable all communication verbs"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*say_disabled = !say_disabled
if(say_disabled)
@@ -420,7 +420,7 @@ var/global/movement_disabled_exception //This is the client that calls the proc,
set category = "Mapping"
set name = "Disable all movement"
usr << "\red Proc disabled."
usr << "<font color='red'>Proc disabled.</font>"
/*movement_disabled = !movement_disabled
if(movement_disabled)
+1 -1
View File
@@ -30,7 +30,7 @@
for(var/p in forbidden_varedit_object_types)
if( istype(O,p) )
usr << "\red It is forbidden to edit this object's variables."
usr << "<font color='red'>It is forbidden to edit this object's variables.</font>"
return
var/list/names = list()
+1 -1
View File
@@ -4,7 +4,7 @@ var/list/forbidden_varedit_object_types = list(
/datum/feedback_variable //Prevents people messing with feedback gathering,
)
var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending")
var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending", "queued_priority")
var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays")
var/list/VVckey_edit = list("key", "ckey")
+5 -5
View File
@@ -3,7 +3,7 @@
set name = "Pray"
if(say_disabled) //This is here to try to identify lag problems
usr << "\red Speech is currently admin-disabled."
usr << "<font color='red'>Speech is currently admin-disabled.</font>"
return
msg = sanitize(msg)
@@ -13,11 +13,11 @@
if(msg)
client.handle_spam_prevention(MUTE_PRAY)
if(usr.client.prefs.muted & MUTE_PRAY)
usr << "\red You cannot pray (muted)."
usr << "<font color='red'> You cannot pray (muted).</font>"
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
msg = "<font color='blue'>\icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
@@ -30,14 +30,14 @@
//log_admin("HELP: [key_name(src)]: [msg]")
/proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage)
msg = "\blue <b><font color=orange>[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentComReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
msg = "<font color='blue'><b><font color=orange>[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentComReply=\ref[Sender]'>RPLY</A>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
C << 'sound/machines/signal.ogg'
/proc/Syndicate_announce(var/msg, var/mob/Sender)
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
msg = "<font color='blue'><b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
+34 -34
View File
@@ -38,9 +38,9 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
spawn(50)
M << "\red You have been sent to the prison station!"
M << "<font color='red'>You have been sent to the prison station!</font>"
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_subtle_message(mob/M as mob in mob_list)
@@ -59,10 +59,10 @@
if(usr)
if (usr.client)
if(usr.client.holder)
M << "\bold You hear a voice in your head... \italic [msg]"
M << "<B>You hear a voice in your head...</B> <i>[msg]</i>"
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
message_admins("\blue \bold SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1)
message_admins("<font color='blue'><B>SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]</B></font>", 1)
feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_mentor_check_new_players() //Allows mentors / admins to determine who the newer players are.
@@ -115,7 +115,7 @@
return
world << "[msg]"
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
message_admins("\blue \bold GlobalNarrate: [key_name_admin(usr)] : [msg]<BR>", 1)
message_admins("<font color='blue'><B> GlobalNarrate: [key_name_admin(usr)] : [msg]<BR></B></font>", 1)
feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE
@@ -139,7 +139,7 @@
M << msg
log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]")
message_admins("\blue \bold DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]<BR>", 1)
message_admins("<font color='blue'><B> DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]<BR></B></font>", 1)
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
@@ -149,7 +149,7 @@
src << "Only administrators may use this command."
return
M.status_flags ^= GODMODE
usr << "\blue Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]"
usr << "<font color='blue'> Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]</font>"
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]")
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]", 1)
@@ -280,7 +280,7 @@ Ccomp's first proc.
G.has_enabled_antagHUD = 2
G.can_reenter_corpse = 1
G:show_message(text("\blue <B>You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.</B>"), 1)
G:show_message(text("<font color='blue'><B>You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.</B></font>"), 1)
log_admin("[key_name(usr)] allowed [key_name(G)] to bypass the respawn time limit")
message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(G)] to bypass the respawn time limit", 1)
@@ -300,18 +300,18 @@ Ccomp's first proc.
if(g.antagHUD)
g.antagHUD = 0 // Disable it on those that have it enabled
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
g << "\red <B>The Administrator has disabled AntagHUD </B>"
g << "<font color='red'><B>The Administrator has disabled AntagHUD </B></font>"
config.antag_hud_allowed = 0
src << "\red <B>AntagHUD usage has been disabled</B>"
src << "<font color='red'><B>AntagHUD usage has been disabled</B></font>"
action = "disabled"
else
for(var/mob/observer/dead/g in get_ghosts())
if(!g.client.holder) // Add the verb back for all non-admin ghosts
g.verbs += /mob/observer/dead/verb/toggle_antagHUD
g << "\blue <B>The Administrator has enabled AntagHUD </B>" // Notify all observers they can now use AntagHUD
g << "<font color='blue'><B>The Administrator has enabled AntagHUD </B></font>" // Notify all observers they can now use AntagHUD
config.antag_hud_allowed = 1
action = "enabled"
src << "\blue <B>AntagHUD usage has been enabled</B>"
src << "<font color='blue'><B>AntagHUD usage has been enabled</B></font>"
log_admin("[key_name(usr)] has [action] antagHUD usage for observers")
@@ -328,19 +328,19 @@ Ccomp's first proc.
var/action=""
if(config.antag_hud_restricted)
for(var/mob/observer/dead/g in get_ghosts())
g << "\blue <B>The administrator has lifted restrictions on joining the round if you use AntagHUD</B>"
g << "<font color='blue'><B>The administrator has lifted restrictions on joining the round if you use AntagHUD</B></font>"
action = "lifted restrictions"
config.antag_hud_restricted = 0
src << "\blue <B>AntagHUD restrictions have been lifted</B>"
src << "<font color='blue'><B>AntagHUD restrictions have been lifted</B></font>"
else
for(var/mob/observer/dead/g in get_ghosts())
g << "\red <B>The administrator has placed restrictions on joining the round if you use AntagHUD</B>"
g << "\red <B>Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions </B>"
g << "<font color='red'><B>The administrator has placed restrictions on joining the round if you use AntagHUD</B></font>"
g << "<font color='red'><B>Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions </B></font>"
g.antagHUD = 0
g.has_enabled_antagHUD = 0
action = "placed restrictions"
config.antag_hud_restricted = 1
src << "\red <B>AntagHUD restrictions have been enabled</B>"
src << "<font color='red'><B>AntagHUD restrictions have been enabled</B></font>"
log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD")
message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1)
@@ -516,7 +516,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
else
M.add_ion_law(input)
for(var/mob/living/silicon/ai/O in mob_list)
O << "\red " + input + "\red...LAWS UPDATED"
O << input + "<font color='red'>... LAWS UPDATED!</font>"
O.show_laws()
log_admin("Admin [key_name(usr)] has added a new AI law - [input]")
@@ -542,7 +542,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
M.revive()
log_admin("[key_name(usr)] healed / revived [key_name(M)]")
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!", 1)
message_admins("<font color='red'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!</font>", 1)
else
alert("Admin revive disabled")
feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -573,7 +573,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("Yes")
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
if("No")
world << "\red New [using_map.company_name] Update available at all communication consoles."
world << "<font color='red'>New [using_map.company_name] Update available at all communication consoles.</font>"
world << sound('sound/AI/commandreport.ogg')
log_admin("[key_name(src)] has created a command report: [input]")
@@ -693,7 +693,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
mob.gib()
log_admin("[key_name(usr)] used gibself.")
message_admins("\blue [key_name_admin(usr)] used gibself.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] used gibself.</font>", 1)
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/*
/client/proc/cmd_manual_ban()
@@ -727,11 +727,11 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
if(M)
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a temporary ban, it will be removed in [mins] minutes."
M << "\red To try to resolve this matter head to http://ss13.donglabs.com/forum/"
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes</font>."
M << "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>"
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=[mins]&server=[replacetext(config.server_name, "#", "")]")
del(M.client)
qdel(M)
@@ -742,11 +742,11 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!reason)
return
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
M << "\red This is a permanent ban."
M << "\red To try to resolve this matter head to http://ss13.donglabs.com/forum/"
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
M << "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>"
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=perma&server=[replacetext(config.server_name, "#", "")]")
del(M.client)
qdel(M)
@@ -808,7 +808,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
view = world.view
log_admin("[key_name(usr)] changed their view range to [view].")
//message_admins("\blue [key_name_admin(usr)] changed their view range to [view].", 1) //why? removed by order of XSI
//message_admins("<font color='blue'>[key_name_admin(usr)] changed their view range to [view].</font>", 1) //why? removed by order of XSI
feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -842,7 +842,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-called the emergency shuttle.")
message_admins("\blue [key_name_admin(usr)] admin-called the emergency shuttle.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] admin-called the emergency shuttle.</font>", 1)
return
/client/proc/admin_cancel_shuttle()
@@ -859,7 +859,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
emergency_shuttle.recall()
feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-recalled the emergency shuttle.")
message_admins("\blue [key_name_admin(usr)] admin-recalled the emergency shuttle.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] admin-recalled the emergency shuttle.</font>", 1)
return
@@ -881,7 +881,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Attack Log"
usr << text("\red <b>Attack Log for []</b>", mob)
usr << text("<font color='red'><b>Attack Log for []</b></font>", mob)
for(var/t in M.attack_log)
usr << t
feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -913,7 +913,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1)
if(notifyplayers == "Yes")
world << "\blue <b>Admin [usr.key] has forced the players to have completely random identities!</b>"
world << "<font color='blue'><b>Admin [usr.key] has forced the players to have completely random identities!</font></b>"
usr << "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>."
+1 -1
View File
@@ -19,6 +19,6 @@
if("Yes") config.Tickcomp = 1
else config.Tickcomp = 0
else
src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
src << "<font color='red'>Error: ticklag(): Invalid world.ticklag value. No changes made.</font>"
+2 -2
View File
@@ -14,9 +14,9 @@
if(ticker.triai)
ticker.triai = 0
usr << "Only one AI will be spawned at round start."
message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled off triple AIs at round start.</font>", 1)
else
ticker.triai = 1
usr << "There will be an AI Triumvirate at round start."
message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled on triple AIs at round start.</font>", 1)
return
+1 -8
View File
@@ -1,8 +1,4 @@
// Keep these two together, they *must* be defined on both
// If /client ever becomes /datum/client or similar, they can be merged
/client/proc/get_view_variables_header()
return "<b>[src]</b>"
/datum/proc/get_view_variables_header()
return "<b>[src]</b>"
@@ -31,9 +27,6 @@
</font>
"}
// Same for these as for get_view_variables_header() above
/client/proc/get_view_variables_options()
return ""
/datum/proc/get_view_variables_options()
return ""
@@ -75,7 +68,7 @@
<option value='?_src_=vars;makeai=\ref[src]'>Make AI</option>
<option value='?_src_=vars;makerobot=\ref[src]'>Make cyborg</option>
<option value='?_src_=vars;makemonkey=\ref[src]'>Make monkey</option>
<option value='?_src_=vars;makeslime=\ref[src]'>Make slime</option>
<option value='?_src_=vars;makealien=\ref[src]'>Make alien</option>
"}
/obj/get_view_variables_options()
@@ -281,20 +281,6 @@
return
holder.Topic(href, list("makealien"=href_list["makealien"]))
else if(href_list["makeslime"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
if(!H)
usr << "Mob doesn't exist anymore"
return
holder.Topic(href, list("makeslime"=href_list["makeslime"]))
else if(href_list["makeai"])
if(!check_rights(R_SPAWN)) return
+86 -86
View File
@@ -23,119 +23,119 @@
var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message
proc/activate() //What the device does when turned on
return
/obj/item/device/assembly/proc/activate() //What the device does when turned on
return
proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
return
/obj/item/device/assembly/proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
return
proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
return
/obj/item/device/assembly/proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
return
proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
return
/obj/item/device/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
return
proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
return
/obj/item/device/assembly/proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
return
proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
return
/obj/item/device/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
return
proc/holder_movement() //Called when the holder is moved
return
/obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved
return
interact(mob/user as mob) //Called when attack_self is called
return
/obj/item/device/assembly/interact(mob/user as mob) //Called when attack_self is called
return
process_cooldown()
cooldown--
if(cooldown <= 0) return 0
spawn(10)
process_cooldown()
return 1
/obj/item/device/assembly/process_cooldown()
cooldown--
if(cooldown <= 0) return 0
spawn(10)
process_cooldown()
return 1
pulsed(var/radio = 0)
if(holder && (wires & WIRE_RECEIVE))
activate()
if(radio && (wires & WIRE_RADIO_RECEIVE))
activate()
return 1
/obj/item/device/assembly/pulsed(var/radio = 0)
if(holder && (wires & WIRE_RECEIVE))
activate()
if(radio && (wires & WIRE_RADIO_RECEIVE))
activate()
return 1
pulse(var/radio = 0)
if(holder && (wires & WIRE_PULSE))
holder.process_activation(src, 1, 0)
if(holder && (wires & WIRE_PULSE_SPECIAL))
holder.process_activation(src, 0, 1)
/obj/item/device/assembly/pulse(var/radio = 0)
if(holder && (wires & WIRE_PULSE))
holder.process_activation(src, 1, 0)
if(holder && (wires & WIRE_PULSE_SPECIAL))
holder.process_activation(src, 0, 1)
// if(radio && (wires & WIRE_RADIO_PULSE))
//Not sure what goes here quite yet send signal?
//Not sure what goes here quite yet send signal?
return 1
/obj/item/device/assembly/activate()
if(!secured || (cooldown > 0)) return 0
cooldown = 2
spawn(10)
process_cooldown()
return 1
/obj/item/device/assembly/toggle_secure()
secured = !secured
update_icon()
return secured
/obj/item/device/assembly/attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
holder = new/obj/item/device/assembly_holder(get_turf(src))
if(holder.attach(A,src,user))
to_chat(user, "<span class='notice'>You attach \the [A] to \the [src]!</span>")
return 1
return 0
activate()
if(!secured || (cooldown > 0)) return 0
cooldown = 2
spawn(10)
process_cooldown()
return 1
toggle_secure()
secured = !secured
update_icon()
return secured
attach_assembly(var/obj/item/device/assembly/A, var/mob/user)
holder = new/obj/item/device/assembly_holder(get_turf(src))
if(holder.attach(A,src,user))
user << "\blue You attach \the [A] to \the [src]!"
return 1
return 0
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isassembly(W))
var/obj/item/device/assembly/A = W
if((!A.secured) && (!secured))
attach_assembly(A,user)
return
if(isscrewdriver(W))
if(toggle_secure())
user << "\blue \The [src] is ready!"
else
user << "\blue \The [src] can now be attached!"
/obj/item/device/assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isassembly(W))
var/obj/item/device/assembly/A = W
if((!A.secured) && (!secured))
attach_assembly(A,user)
return
..()
if(isscrewdriver(W))
if(toggle_secure())
to_chat(user, "<span class='notice'>\The [src] is ready!</span>")
else
to_chat(user, "<span class='notice'>\The [src] can now be attached!</span>")
return
..()
return
process()
processing_objects.Remove(src)
return
/obj/item/device/assembly/process()
processing_objects.Remove(src)
return
examine(mob/user)
..(user)
if((in_range(src, user) || loc == user))
if(secured)
user << "\The [src] is ready!"
else
user << "\The [src] can be attached!"
return
/obj/item/device/assembly/examine(mob/user)
..(user)
if((in_range(src, user) || loc == user))
if(secured)
to_chat(user, "\The [src] is ready!")
else
to_chat(user, "\The [src] can be attached!")
return
attack_self(mob/user as mob)
if(!user) return 0
user.set_machine(src)
interact(user)
return 1
/obj/item/device/assembly/attack_self(mob/user as mob)
if(!user) return 0
user.set_machine(src)
interact(user)
return 1
interact(mob/user as mob)
return //HTML MENU FOR WIRES GOES HERE
/obj/item/device/assembly/interact(mob/user as mob)
return //HTML MENU FOR WIRES GOES HERE
/obj/item/device/assembly/nano_host()
if(istype(loc, /obj/item/device/assembly_holder))
-155
View File
@@ -1,155 +0,0 @@
/obj/item/device/onetankbomb
name = "bomb"
icon = 'icons/obj/tank.dmi'
item_state = "assembly"
throwforce = 5
w_class = ITEMSIZE_NORMAL
throw_speed = 2
throw_range = 4
flags = CONDUCT | PROXMOVE
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
/obj/item/device/onetankbomb/examine(mob/user)
..(user)
user.examinate(bombtank)
/obj/item/device/onetankbomb/update_icon()
if(bombtank)
icon_state = bombtank.icon_state
if(bombassembly)
overlays += bombassembly.icon_state
overlays += bombassembly.overlays
overlays += "bomb_assembly"
/obj/item/device/onetankbomb/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/analyzer))
bombtank.attackby(W, user)
return
if(istype(W, /obj/item/weapon/wrench) && !status) //This is basically bomb assembly code inverted. apparently it works.
user << "<span class='notice'>You disassemble [src].</span>"
bombassembly.loc = user.loc
bombassembly.master = null
bombassembly = null
bombtank.loc = user.loc
bombtank.master = null
bombtank = null
qdel(src)
return
if((istype(W, /obj/item/weapon/weldingtool) && W:welding))
if(!status)
status = 1
bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]")
user << "<span class='notice'>A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.</span>"
else
status = 0
bombers += "[key_name(user)] unwelded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]"
user << "<span class='notice'>The hole has been closed.</span>"
add_fingerprint(user)
..()
/obj/item/device/onetankbomb/attack_self(mob/user as mob) //pressing the bomb accesses its assembly
bombassembly.attack_self(user, 1)
add_fingerprint(user)
return
/obj/item/device/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here.
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
sleep(10)
if(!src)
return
if(status)
bombtank.ignite() //if its not a dud, boom (or not boom if you made shitty mix) the ignite proc is below, in this file
else
bombtank.release()
/obj/item/device/onetankbomb/HasProximity(atom/movable/AM as mob|obj)
if(bombassembly)
bombassembly.HasProximity(AM)
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
/obj/item/weapon/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
var/obj/item/device/assembly_holder/S = W
var/mob/M = user
if(!S.secured) //Check if the assembly is secured
return
if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it
return
var/obj/item/device/onetankbomb/R = new /obj/item/device/onetankbomb(loc)
M.drop_item() //Remove the assembly from your hands
M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it
M.put_in_hands(R) //Equips the bomb if possible, or puts it on the floor.
R.bombassembly = S //Tell the bomb about its assembly part
S.master = R //Tell the assembly about its new owner
S.loc = R //Move the assembly out of the fucking way
R.bombtank = src //Same for tank
master = R
loc = R
R.update_icon()
return
/obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode
var/fuel_moles = air_contents.gas["phoron"] + air_contents.gas["oxygen"] / 6
var/strength = 1
var/turf/ground_zero = get_turf(loc)
loc = null
if(air_contents.temperature > (T0C + 400))
strength = (fuel_moles/15)
if(strength >=1)
explosion(ground_zero, round(strength,1), round(strength*2,1), round(strength*3,1), round(strength*4,1))
else if(strength >=0.5)
explosion(ground_zero, 0, 1, 2, 4)
else if(strength >=0.2)
explosion(ground_zero, -1, 0, 1, 2)
else
ground_zero.assume_air(air_contents)
ground_zero.hotspot_expose(1000, 125)
else if(air_contents.temperature > (T0C + 250))
strength = (fuel_moles/20)
if(strength >=1)
explosion(ground_zero, 0, round(strength,1), round(strength*2,1), round(strength*3,1))
else if (strength >=0.5)
explosion(ground_zero, -1, 0, 1, 2)
else
ground_zero.assume_air(air_contents)
ground_zero.hotspot_expose(1000, 125)
else if(air_contents.temperature > (T0C + 100))
strength = (fuel_moles/25)
if (strength >=1)
explosion(ground_zero, -1, 0, round(strength,1), round(strength*3,1))
else
ground_zero.assume_air(air_contents)
ground_zero.hotspot_expose(1000, 125)
else
ground_zero.assume_air(air_contents)
ground_zero.hotspot_expose(1000, 125)
if(master)
qdel(master)
qdel(src)
/obj/item/weapon/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles)
var/turf/simulated/T = get_turf(src)
if(!T)
return
T.assume_air(removed)
+178 -178
View File
@@ -14,201 +14,201 @@
var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = null
proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
return
/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
return
proc/attach_special(var/obj/O, var/mob/user)
return
/obj/item/device/assembly_holder/proc/attach_special(var/obj/O, var/mob/user)
return
proc/process_activation(var/obj/item/device/D)
return
/obj/item/device/assembly_holder/proc/process_activation(var/obj/item/device/D)
return
proc/detached()
return
/obj/item/device/assembly_holder/proc/detached()
return
IsAssemblyHolder()
return 1
/obj/item/device/assembly_holder/IsAssemblyHolder()
return 1
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
if((!D)||(!D2)) return 0
if((!isassembly(D))||(!isassembly(D2))) return 0
if((D:secured)||(D2:secured)) return 0
if(user)
user.remove_from_mob(D)
user.remove_from_mob(D2)
D:holder = src
D2:holder = src
D.loc = src
D2.loc = src
a_left = D
a_right = D2
name = "[D.name]-[D2.name] assembly"
update_icon()
usr.put_in_hands(src)
/obj/item/device/assembly_holder/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
if((!D)||(!D2)) return 0
if((!isassembly(D))||(!isassembly(D2))) return 0
if((D:secured)||(D2:secured)) return 0
if(user)
user.remove_from_mob(D)
user.remove_from_mob(D2)
D:holder = src
D2:holder = src
D.loc = src
D2.loc = src
a_left = D
a_right = D2
name = "[D.name]-[D2.name] assembly"
update_icon()
usr.put_in_hands(src)
return 1
return 1
attach_special(var/obj/O, var/mob/user)
if(!O) return
if(!O.IsSpecialAssembly()) return 0
/obj/item/device/assembly_holder/attach_special(var/obj/O, var/mob/user)
if(!O) return
if(!O.IsSpecialAssembly()) return 0
/* if(O:Attach_Holder())
special_assembly = O
update_icon()
src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
special_assembly = O
update_icon()
src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
*/
return
return
update_icon()
overlays.Cut()
if(a_left)
overlays += "[a_left.icon_state]_left"
for(var/O in a_left.attached_overlays)
overlays += "[O]_l"
if(a_right)
src.overlays += "[a_right.icon_state]_right"
for(var/O in a_right.attached_overlays)
overlays += "[O]_r"
if(master)
master.update_icon()
/obj/item/device/assembly_holder/update_icon()
overlays.Cut()
if(a_left)
overlays += "[a_left.icon_state]_left"
for(var/O in a_left.attached_overlays)
overlays += "[O]_l"
if(a_right)
src.overlays += "[a_right.icon_state]_right"
for(var/O in a_right.attached_overlays)
overlays += "[O]_r"
if(master)
master.update_icon()
/* if(special_assembly)
special_assembly.update_icon()
if(special_assembly:small_icon_state)
src.overlays += special_assembly:small_icon_state
for(var/O in special_assembly:small_icon_state_overlays)
src.overlays += O
special_assembly.update_icon()
if(special_assembly:small_icon_state)
src.overlays += special_assembly:small_icon_state
for(var/O in special_assembly:small_icon_state_overlays)
src.overlays += O
*/
examine(mob/user)
..(user)
if ((in_range(src, user) || src.loc == user))
if (src.secured)
user << "\The [src] is ready!"
else
user << "\The [src] can be attached!"
return
/obj/item/device/assembly_holder/examine(mob/user)
..(user)
if ((in_range(src, user) || src.loc == user))
if (src.secured)
to_chat(user, "\The [src] is ready!")
else
to_chat(user, "\The [src] can be attached!")
return
HasProximity(atom/movable/AM as mob|obj)
if(a_left)
a_left.HasProximity(AM)
if(a_right)
a_right.HasProximity(AM)
if(special_assembly)
special_assembly.HasProximity(AM)
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
if(a_left)
a_left.HasProximity(AM)
if(a_right)
a_right.HasProximity(AM)
if(special_assembly)
special_assembly.HasProximity(AM)
Crossed(atom/movable/AM as mob|obj)
if(a_left)
a_left.Crossed(AM)
if(a_right)
a_right.Crossed(AM)
if(special_assembly)
special_assembly.Crossed(AM)
/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj)
if(a_left)
a_left.Crossed(AM)
if(a_right)
a_right.Crossed(AM)
if(special_assembly)
special_assembly.Crossed(AM)
on_found(mob/finder as mob)
if(a_left)
a_left.on_found(finder)
if(a_right)
a_right.on_found(finder)
if(special_assembly)
if(istype(special_assembly, /obj/item))
var/obj/item/S = special_assembly
S.on_found(finder)
/obj/item/device/assembly_holder/on_found(mob/finder as mob)
if(a_left)
a_left.on_found(finder)
if(a_right)
a_right.on_found(finder)
if(special_assembly)
if(istype(special_assembly, /obj/item))
var/obj/item/S = special_assembly
S.on_found(finder)
Move()
..()
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
/obj/item/device/assembly_holder/Move()
..()
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
// if(special_assembly)
// special_assembly:holder_movement()
return
return
attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
if(a_left && a_right)
a_left.holder_movement()
a_right.holder_movement()
// if(special_assembly)
// special_assembly:Holder_Movement()
..()
return
..()
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isscrewdriver(W))
if(!a_left || !a_right)
user << "\red BUG:Assembly part missing, please report this!"
return
a_left.toggle_secure()
a_right.toggle_secure()
secured = !secured
if(secured)
user << "\blue \The [src] is ready!"
else
user << "\blue \The [src] can now be taken apart!"
update_icon()
/obj/item/device/assembly_holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(isscrewdriver(W))
if(!a_left || !a_right)
to_chat(user, "<span class='warning'> BUG:Assembly part missing, please report this!</span>")
return
else if(W.IsSpecialAssembly())
attach_special(W, user)
a_left.toggle_secure()
a_right.toggle_secure()
secured = !secured
if(secured)
to_chat(user, "<span class='notice'>\The [src] is ready!</span>")
else
..()
to_chat(user, "<span class='notice'>\The [src] can now be taken apart!</span>")
update_icon()
return
else if(W.IsSpecialAssembly())
attach_special(W, user)
else
..()
return
attack_self(mob/user as mob)
src.add_fingerprint(user)
if(src.secured)
if(!a_left || !a_right)
user << "\red Assembly part missing!"
return
if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
switch(alert("Which side would you like to use?",,"Left","Right"))
if("Left") a_left.attack_self(user)
if("Right") a_right.attack_self(user)
return
else
if(!istype(a_left,/obj/item/device/assembly/igniter))
a_left.attack_self(user)
if(!istype(a_right,/obj/item/device/assembly/igniter))
a_right.attack_self(user)
/obj/item/device/assembly_holder/attack_self(mob/user as mob)
src.add_fingerprint(user)
if(src.secured)
if(!a_left || !a_right)
to_chat(user, "<span class='warning'> BUG:Assembly part missing, please report this!</span>")
return
if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code
switch(alert("Which side would you like to use?",,"Left","Right"))
if("Left") a_left.attack_self(user)
if("Right") a_right.attack_self(user)
return
else
var/turf/T = get_turf(src)
if(!T) return 0
if(a_left)
a_left:holder = null
a_left.loc = T
if(a_right)
a_right:holder = null
a_right.loc = T
spawn(0)
qdel(src)
return
if(!istype(a_left,/obj/item/device/assembly/igniter))
a_left.attack_self(user)
if(!istype(a_right,/obj/item/device/assembly/igniter))
a_right.attack_self(user)
else
var/turf/T = get_turf(src)
if(!T) return 0
if(a_left)
a_left:holder = null
a_left.loc = T
if(a_right)
a_right:holder = null
a_right.loc = T
spawn(0)
qdel(src)
return
process_activation(var/obj/D, var/normal = 1, var/special = 1)
if(!D) return 0
if(!secured)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
if((normal) && (a_right) && (a_left))
if(a_right != D)
a_right.pulsed(0)
if(a_left != D)
a_left.pulsed(0)
if(master)
master.receive_signal()
/obj/item/device/assembly_holder/process_activation(var/obj/D, var/normal = 1, var/special = 1)
if(!D) return 0
if(!secured)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
if((normal) && (a_right) && (a_left))
if(a_right != D)
a_right.pulsed(0)
if(a_left != D)
a_left.pulsed(0)
if(master)
master.receive_signal()
// if(special && special_assembly)
// if(!special_assembly == D)
// special_assembly.dothings()
return 1
return 1
/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
@@ -242,36 +242,36 @@
loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure
detached()
loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
..()
/obj/item/device/assembly_holder/timer_igniter/detached()
loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
..()
verb/configure()
set name = "Set Timer"
set category = "Object"
set src in usr
/obj/item/device/assembly_holder/timer_igniter/verb/configure()
set name = "Set Timer"
set category = "Object"
set src in usr
if ( !(usr.stat || usr.restrained()) )
var/obj/item/device/assembly_holder/holder
if(istype(src,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/gren = src
holder=gren.detonator
var/obj/item/device/assembly/timer/tmr = holder.a_left
if(!istype(tmr,/obj/item/device/assembly/timer))
tmr = holder.a_right
if(!istype(tmr,/obj/item/device/assembly/timer))
usr << "<span class='notice'>This detonator has no timer.</span>"
return
if ( !(usr.stat || usr.restrained()) )
var/obj/item/device/assembly_holder/holder
if(istype(src,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/gren = src
holder=gren.detonator
var/obj/item/device/assembly/timer/tmr = holder.a_left
if(!istype(tmr,/obj/item/device/assembly/timer))
tmr = holder.a_right
if(!istype(tmr,/obj/item/device/assembly/timer))
to_chat(usr, "<span class='notice'>This detonator has no timer.</span>")
return
if(tmr.timing)
usr << "<span class='notice'>Clock is ticking already.</span>"
else
var/ntime = input("Enter desired time in seconds", "Time", "5") as num
if (ntime>0 && ntime<1000)
tmr.time = ntime
name = initial(name) + "([tmr.time] secs)"
usr << "<span class='notice'>Timer set to [tmr.time] seconds.</span>"
else
usr << "<span class='notice'>Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].</span>"
if(tmr.timing)
to_chat(usr, "<span class='notice'>Clock is ticking already.</span>")
else
usr << "<span class='notice'>You cannot do this while [usr.stat?"unconscious/dead":"restrained"].</span>"
var/ntime = input("Enter desired time in seconds", "Time", "5") as num
if (ntime>0 && ntime<1000)
tmr.time = ntime
name = initial(name) + "([tmr.time] secs)"
to_chat(usr, "<span class='notice'>Timer set to [tmr.time] seconds.</span>")
else
to_chat(usr, "<span class='notice'>Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].</span>")
else
to_chat(usr, "<span class='notice'>You cannot do this while [usr.stat?"unconscious/dead":"restrained"].</span>")
+28 -28
View File
@@ -2,36 +2,36 @@
name = "igniter"
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
secured = 1
wires = WIRE_RECEIVE
/obj/item/device/assembly/igniter/activate()
if(!..()) return 0//Cooldown check
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
grenade.prime()
else
var/turf/location = get_turf(loc)
if(location)
location.hotspot_expose(1000,1000)
if (istype(src.loc,/obj/item/device/assembly_holder))
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank && tank.modded)
tank.explode()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
return 1
/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
activate()
if(!..()) return 0//Cooldown check
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
grenade.prime()
else
var/turf/location = get_turf(loc)
if(location)
location.hotspot_expose(1000,1000)
if (istype(src.loc,/obj/item/device/assembly_holder))
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank && tank.modded)
tank.explode()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
return 1
attack_self(mob/user as mob)
activate()
add_fingerprint(user)
return
add_fingerprint(user)
return
+111 -115
View File
@@ -15,145 +15,141 @@
var/visible = 0
var/obj/effect/beam/i_beam/first = null
proc
trigger_beam()
activate()
/obj/item/device/assembly/infra/activate()
if(!..()) return 0//Cooldown check
on = !on
update_icon()
return 1
toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
on = 0
if(first) qdel(first)
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/infra/toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
on = 0
if(first) qdel(first)
processing_objects.Remove(src)
update_icon()
overlays.Cut()
attached_overlays = list()
if(on)
overlays += "infrared_on"
attached_overlays += "infrared_on"
if(holder)
holder.update_icon()
return
return secured
process()//Old code
if(!on)
if(first)
qdel(first)
return
/obj/item/device/assembly/infra/update_icon()
overlays.Cut()
attached_overlays = list()
if(on)
overlays += "infrared_on"
attached_overlays += "infrared_on"
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) )
I.master = src
I.density = 1
I.set_dir(dir)
step(I, I.dir)
if(I)
I.density = 0
first = I
I.vis_spread(visible)
spawn(0)
if(I)
//world << "infra: setting limit"
I.limit = 8
//world << "infra: processing beam \ref[I]"
I.process()
return
return
if(holder)
holder.update_icon()
return
attack_hand()
qdel(first)
..()
return
Move()
var/t = dir
..()
set_dir(t)
qdel(first)
return
holder_movement()
if(!holder) return 0
// set_dir(holder.dir)
qdel(first)
return 1
trigger_beam()
if((!secured)||(!on)||(cooldown > 0)) return 0
pulse(0)
if(!holder)
visible_message("\icon[src] *beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
interact(mob/user as mob)//TODO: change this this to the wire control panel
if(!secured) return
user.set_machine(src)
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=infra")
onclose(user, "infra")
return
Topic(href, href_list)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=infra")
onclose(usr, "infra")
/obj/item/device/assembly/infra/process()//Old code
if(!on)
if(first)
qdel(first)
return
if(href_list["state"])
on = !(on)
update_icon()
if(href_list["visible"])
visible = !(visible)
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) )
I.master = src
I.density = 1
I.set_dir(dir)
step(I, I.dir)
if(I)
I.density = 0
first = I
I.vis_spread(visible)
spawn(0)
if(first)
first.vis_spread(visible)
if(I)
//world << "infra: setting limit"
I.limit = 8
//world << "infra: processing beam \ref[I]"
I.process()
return
return
if(href_list["close"])
usr << browse(null, "window=infra")
return
if(usr)
attack_self(usr)
/obj/item/device/assembly/infra/attack_hand()
qdel(first)
..()
return
/obj/item/device/assembly/infra/Move()
var/t = dir
..()
set_dir(t)
qdel(first)
return
/obj/item/device/assembly/infra/holder_movement()
if(!holder) return 0
// set_dir(holder.dir)
qdel(first)
return 1
/obj/item/device/assembly/infra/proc/trigger_beam()
if((!secured)||(!on)||(cooldown > 0)) return 0
pulse(0)
if(!holder)
visible_message("\icon[src] *beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
if(!secured) return
user.set_machine(src)
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=infra")
onclose(user, "infra")
return
/obj/item/device/assembly/infra/Topic(href, href_list, state = deep_inventory_state)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=infra")
onclose(usr, "infra")
return
if(href_list["state"])
on = !(on)
update_icon()
verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
if(href_list["visible"])
visible = !(visible)
spawn(0)
if(first)
first.vis_spread(visible)
set_dir(turn(dir, 90))
if(href_list["close"])
usr << browse(null, "window=infra")
return
if(usr)
attack_self(usr)
return
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
set_dir(turn(dir, 90))
return
/***************************IBeam*********************************/
+91 -90
View File
@@ -7,107 +7,108 @@
var/armed = 0
examine(mob/user)
..(user)
if(armed)
user << "It looks like it's armed."
/obj/item/device/assembly/mousetrap/examine(mob/user)
..(user)
if(armed)
to_chat(user, "It looks like it's armed.")
/obj/item/device/assembly/mousetrap/update_icon()
if(armed)
icon_state = "mousetraparmed"
else
icon_state = "mousetrap"
if(holder)
holder.update_icon()
/obj/item/device/assembly/mousetrap/proc/triggered(mob/target as mob, var/type = "feet")
if(!armed)
return
var/obj/item/organ/external/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
switch(type)
if("feet")
if(!H.shoes)
affecting = H.get_organ(pick("l_leg", "r_leg"))
H.Weaken(3)
if("l_hand", "r_hand")
if(!H.gloves)
affecting = H.get_organ(type)
H.Stun(3)
if(affecting)
if(affecting.take_damage(1, 0))
H.UpdateDamageIcon()
H.updatehealth()
else if(ismouse(target))
var/mob/living/simple_animal/mouse/M = target
visible_message("<font color='red'><b>SPLAT!</b></font>")
M.splat()
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
layer = MOB_LAYER - 0.2
armed = 0
update_icon()
if(armed)
icon_state = "mousetraparmed"
else
icon_state = "mousetrap"
if(holder)
holder.update_icon()
pulse(0)
proc/triggered(mob/target as mob, var/type = "feet")
if(!armed)
/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
if(!armed)
user << "<span class='notice'>You arm [src].</span>"
else
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
triggered(user, which_hand)
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
return
var/obj/item/organ/external/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
switch(type)
if("feet")
if(!H.shoes)
affecting = H.get_organ(pick("l_leg", "r_leg"))
H.Weaken(3)
if("l_hand", "r_hand")
if(!H.gloves)
affecting = H.get_organ(type)
H.Stun(3)
if(affecting)
if(affecting.take_damage(1, 0))
H.UpdateDamageIcon()
H.updatehealth()
else if(ismouse(target))
var/mob/living/simple_animal/mouse/M = target
visible_message("\red <b>SPLAT!</b>")
M.splat()
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
layer = MOB_LAYER - 0.2
armed = 0
update_icon()
pulse(0)
to_chat(user, "<span class='notice'>You disarm [src].</span>")
armed = !armed
update_icon()
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
attack_self(mob/living/user as mob)
if(!armed)
user << "<span class='notice'>You arm [src].</span>"
else
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
triggered(user, which_hand)
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
return
user << "<span class='notice'>You disarm [src].</span>"
armed = !armed
update_icon()
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
if(armed)
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
triggered(user, which_hand)
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
return
..()
attack_hand(mob/living/user as mob)
if(armed)
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
triggered(user, which_hand)
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
return
..()
/obj/item/device/assembly/mousetrap/Crossed(AM as mob|obj)
if(armed)
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.m_intent == "run")
triggered(H)
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
"<span class='warning'>You accidentally step on [src]</span>")
if(ismouse(AM))
triggered(AM)
..()
Crossed(AM as mob|obj)
if(armed)
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.m_intent == "run")
triggered(H)
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
"<span class='warning'>You accidentally step on [src]</span>")
if(ismouse(AM))
triggered(AM)
..()
/obj/item/device/assembly/mousetrap/on_found(mob/living/finder as mob)
if(armed)
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
triggered(finder, finder.hand ? "l_hand" : "r_hand")
return 1 //end the search!
return 0
on_found(mob/living/finder as mob)
if(armed)
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
"<span class='warning'>You accidentally trigger [src]!</span>")
triggered(finder, finder.hand ? "l_hand" : "r_hand")
return 1 //end the search!
return 0
hitby(A as mob|obj)
if(!armed)
return ..()
visible_message("<span class='warning'>[src] is triggered by [A].</span>")
triggered(null)
/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
if(!armed)
return ..()
visible_message("<span class='warning'>[src] is triggered by [A].</span>")
triggered(null)
/obj/item/device/assembly/mousetrap/armed
@@ -124,4 +125,4 @@
return
layer = TURF_LAYER+0.2
usr << "<span class='notice'>You hide [src].</span>"
to_chat(usr, "<span class='notice'>You hide [src].</span>")
+119 -124
View File
@@ -15,152 +15,147 @@
var/range = 2
proc
toggle_scan()
sense()
/obj/item/device/assembly/prox_sensor/activate()
if(!..()) return 0//Cooldown check
timing = !timing
update_icon()
return 0
activate()
if(!..()) return 0//Cooldown check
timing = !timing
update_icon()
return 0
/obj/item/device/assembly/prox_sensor/toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
scanning = 0
timing = 0
processing_objects.Remove(src)
update_icon()
return secured
toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
scanning = 0
timing = 0
processing_objects.Remove(src)
update_icon()
return secured
HasProximity(atom/movable/AM as mob|obj)
if(!istype(AM))
log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
return
if (istype(AM, /obj/effect/beam)) return
if (AM.move_speed < 12) sense()
/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
if(!istype(AM))
log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
return
if (istype(AM, /obj/effect/beam)) return
if (AM.move_speed < 12) sense()
return
sense()
var/turf/mainloc = get_turf(src)
/obj/item/device/assembly/prox_sensor/proc/sense()
var/turf/mainloc = get_turf(src)
// if(scanning && cooldown <= 0)
// mainloc.visible_message("\icon[src] *boop* *boop*", "*boop* *boop*")
if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
pulse(0)
if(!holder)
mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
pulse(0)
if(!holder)
mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
process()
if(scanning)
var/turf/mainloc = get_turf(src)
for(var/mob/living/A in range(range,mainloc))
if (A.move_speed < 12)
sense()
/obj/item/device/assembly/prox_sensor/process()
if(scanning)
var/turf/mainloc = get_turf(src)
for(var/mob/living/A in range(range,mainloc))
if (A.move_speed < 12)
sense()
if(timing && (time >= 0))
time--
if(timing && time <= 0)
timing = 0
toggle_scan()
time = 10
return
if(timing && (time >= 0))
time--
if(timing && time <= 0)
timing = 0
toggle_scan()
time = 10
return
dropped()
spawn(0)
sense()
return
return
toggle_scan()
if(!secured) return 0
scanning = !scanning
update_icon()
return
update_icon()
overlays.Cut()
attached_overlays = list()
if(timing)
overlays += "prox_timing"
attached_overlays += "prox_timing"
if(scanning)
overlays += "prox_scanning"
attached_overlays += "prox_scanning"
if(holder)
holder.update_icon()
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
grenade.primed(scanning)
return
Move()
..()
/obj/item/device/assembly/prox_sensor/dropped()
spawn(0)
sense()
return
return
interact(mob/user as mob)//TODO: Change this to the wires thingy
if(!secured)
user.show_message("\red The [name] is unsecured!")
return 0
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
dat += text("<BR>Range: <A href='?src=\ref[];range=-1'>-</A> [] <A href='?src=\ref[];range=1'>+</A>", src, range, src)
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=prox")
onclose(user, "prox")
/obj/item/device/assembly/prox_sensor/proc/toggle_scan()
if(!secured) return 0
scanning = !scanning
update_icon()
return
/obj/item/device/assembly/prox_sensor/update_icon()
overlays.Cut()
attached_overlays = list()
if(timing)
overlays += "prox_timing"
attached_overlays += "prox_timing"
if(scanning)
overlays += "prox_scanning"
attached_overlays += "prox_scanning"
if(holder)
holder.update_icon()
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
grenade.primed(scanning)
return
/obj/item/device/assembly/prox_sensor/Move()
..()
sense()
return
/obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy
if(!secured)
user.show_message("<font color='red'>The [name] is unsecured!</font>")
return 0
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
dat += text("<BR>Range: <A href='?src=\ref[];range=-1'>-</A> [] <A href='?src=\ref[];range=1'>+</A>", src, range, src)
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=prox")
onclose(user, "prox")
return
/obj/item/device/assembly/prox_sensor/Topic(href, href_list, state = deep_inventory_state)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=prox")
onclose(usr, "prox")
return
if(href_list["scanning"])
toggle_scan()
Topic(href, href_list)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=prox")
onclose(usr, "prox")
return
if(href_list["time"])
timing = text2num(href_list["time"])
update_icon()
if(href_list["scanning"])
toggle_scan()
if(href_list["time"])
timing = text2num(href_list["time"])
update_icon()
if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 600)
if(href_list["range"])
var/r = text2num(href_list["range"])
range += r
range = min(max(range, 1), 5)
if(href_list["close"])
usr << browse(null, "window=prox")
return
if(usr)
attack_self(usr)
if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 600)
if(href_list["range"])
var/r = text2num(href_list["range"])
range += r
range = min(max(range, 1), 5)
if(href_list["close"])
usr << browse(null, "window=prox")
return
if(usr)
attack_self(usr)
return
+2 -1
View File
@@ -29,7 +29,8 @@
return
if(istype(W, /obj/item/weapon/screwdriver))
status = !status
user << "<span class='notice'>[src] is now [status ? "secured" : "unsecured"]!</span>"
to_chat(user, "<span class='notice'>[src] is now [status ? "secured" : "unsecured"]!</span>")
playsound(src, W.usesound, 50, 1)
add_fingerprint(user)
return
+137 -136
View File
@@ -17,174 +17,175 @@
var/datum/radio_frequency/radio_connection
var/deadman = 0
New()
..()
spawn(40)
set_frequency(frequency)
return
/obj/item/device/assembly/signaler/New()
..()
spawn(40)
set_frequency(frequency)
return
activate()
if(cooldown > 0) return 0
cooldown = 2
spawn(10)
process_cooldown()
/obj/item/device/assembly/signaler/activate()
if(cooldown > 0) return 0
cooldown = 2
spawn(10)
process_cooldown()
signal()
return 1
signal()
return 1
update_icon()
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/signaler/update_icon()
if(holder)
holder.update_icon()
return
interact(mob/user as mob, flag1)
var/t1 = "-------"
/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1)
var/t1 = "-------"
// if ((src.b_stat && !( flag1 )))
// t1 = text("-------<BR>\nGreen Wire: []<BR>\nRed Wire: []<BR>\nBlue Wire: []<BR>\n", (src.wires & 4 ? text("<A href='?src=\ref[];wires=4'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=4'>Mend Wire</A>", src)), (src.wires & 2 ? text("<A href='?src=\ref[];wires=2'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=2'>Mend Wire</A>", src)), (src.wires & 1 ? text("<A href='?src=\ref[];wires=1'>Cut Wire</A>", src) : text("<A href='?src=\ref[];wires=1'>Mend Wire</A>", src)))
// else
// t1 = "-------" Speaker: [src.listening ? "<A href='byond://?src=\ref[src];listen=0'>Engaged</A>" : "<A href='byond://?src=\ref[src];listen=1'>Disengaged</A>"]<BR>
var/dat = {"
<TT>
var/dat = {"
<TT>
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
<B>Frequency/Code</B> for signaler:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A>
[format_frequency(src.frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A>
[src.code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
[t1]
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A>
[src.code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
[t1]
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/device/assembly/signaler/Topic(href, href_list, state = deep_inventory_state)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=radio")
onclose(usr, "radio")
return
if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"]))
if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
Topic(href, href_list)
if(..()) return 1
if(href_list["code"])
src.code += text2num(href_list["code"])
src.code = round(src.code)
src.code = min(100, src.code)
src.code = max(1, src.code)
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=radio")
onclose(usr, "radio")
return
if(href_list["send"])
spawn( 0 )
signal()
if (href_list["freq"])
var/new_frequency = (frequency + text2num(href_list["freq"]))
if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(new_frequency)
if(usr)
attack_self(usr)
if(href_list["code"])
src.code += text2num(href_list["code"])
src.code = round(src.code)
src.code = min(100, src.code)
src.code = max(1, src.code)
return
if(href_list["send"])
spawn( 0 )
signal()
/obj/item/device/assembly/signaler/attackby(obj/item/weapon/W, mob/user, params)
if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
code = signaler2.code
frequency = signaler2.frequency
to_chat(user, "You transfer the frequency and code of [signaler2] to [src].")
else
..()
if(usr)
attack_self(usr)
/obj/item/device/assembly/signaler/proc/signal()
if(!radio_connection) return
return
attackby(obj/item/weapon/W, mob/user, params)
if(issignaler(W))
var/obj/item/device/assembly/signaler/signaler2 = W
if(secured && signaler2.secured)
code = signaler2.code
frequency = signaler2.frequency
user << "You transfer the frequency and code of [signaler2] to [src]"
else
..()
proc/signal()
if(!radio_connection) return
var/datum/signal/signal = new
signal.source = src
signal.encryption = code
signal.data["message"] = "ACTIVATE"
radio_connection.post_signal(src, signal)
return
var/datum/signal/signal = new
signal.source = src
signal.encryption = code
signal.data["message"] = "ACTIVATE"
radio_connection.post_signal(src, signal)
return
/*
for(var/obj/item/device/assembly/signaler/S in world)
if(!S) continue
if(S == src) continue
if((S.frequency == src.frequency) && (S.code == src.code))
spawn(0)
if(S) S.pulse(0)
return 0*/
for(var/obj/item/device/assembly/signaler/S in world)
if(!S) continue
if(S == src) continue
if((S.frequency == src.frequency) && (S.code == src.code))
spawn(0)
if(S) S.pulse(0)
return 0*/
pulse(var/radio = 0)
if(src.connected && src.wires)
connected.Pulse(src)
else if(holder)
holder.process_activation(src, 1, 0)
else
..(radio)
return 1
/obj/item/device/assembly/signaler/pulse(var/radio = 0)
if(src.connected && src.wires)
connected.Pulse(src)
else if(holder)
holder.process_activation(src, 1, 0)
else
..(radio)
return 1
receive_signal(datum/signal/signal)
if(!signal) return 0
if(signal.encryption != code) return 0
if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
pulse(1)
/obj/item/device/assembly/signaler/receive_signal(datum/signal/signal)
if(!signal) return 0
if(signal.encryption != code) return 0
if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
pulse(1)
if(!holder)
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
if(!holder)
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
/obj/item/device/assembly/signaler/proc/set_frequency(new_frequency)
if(!frequency)
return
if(!radio_controller)
sleep(20)
if(!radio_controller)
return
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
return
proc/set_frequency(new_frequency)
if(!frequency)
return
if(!radio_controller)
sleep(20)
if(!radio_controller)
return
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
return
/obj/item/device/assembly/signaler/process()
if(!deadman)
processing_objects.Remove(src)
var/mob/M = src.loc
if(!M || !ismob(M))
if(prob(5))
signal()
deadman = 0
processing_objects.Remove(src)
else if(prob(5))
M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
return
process()
if(!deadman)
processing_objects.Remove(src)
var/mob/M = src.loc
if(!M || !ismob(M))
if(prob(5))
signal()
deadman = 0
processing_objects.Remove(src)
else if(prob(5))
M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
return
verb/deadman_it()
set src in usr
set name = "Threaten to push the button!"
set desc = "BOOOOM!"
deadman = 1
processing_objects.Add(src)
log_and_message_admins("is threatening to trigger a signaler deadman's switch")
usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
/obj/item/device/assembly/signaler/verb/deadman_it()
set src in usr
set name = "Threaten to push the button!"
set desc = "BOOOOM!"
deadman = 1
processing_objects.Add(src)
log_and_message_admins("is threatening to trigger a signaler deadman's switch")
usr.visible_message("<font color='red'>[usr] moves their finger over [src]'s signal button...</font>")
/obj/item/device/assembly/signaler/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
frequency = 0
..()
. = ..()
+83 -86
View File
@@ -2,8 +2,8 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
wires = WIRE_PULSE
@@ -12,97 +12,94 @@
var/timing = 0
var/time = 10
proc
timer_end()
/obj/item/device/assembly/timer/activate()
if(!..()) return 0//Cooldown check
activate()
if(!..()) return 0//Cooldown check
timing = !timing
update_icon()
return 0
toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
timing = 0
processing_objects.Remove(src)
update_icon()
return secured
timer_end()
if(!secured) return 0
pulse(0)
if(!holder)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
process()
if(timing && (time > 0))
time--
if(timing && time <= 0)
timing = 0
timer_end()
time = 10
return
timing = !timing
update_icon()
overlays.Cut()
attached_overlays = list()
if(timing)
overlays += "timer_timing"
attached_overlays += "timer_timing"
if(holder)
holder.update_icon()
return 0
/obj/item/device/assembly/timer/toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
timing = 0
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/timer/proc/timer_end()
if(!secured) return 0
pulse(0)
if(!holder)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
return
/obj/item/device/assembly/timer/process()
if(timing && (time > 0))
time--
if(timing && time <= 0)
timing = 0
timer_end()
time = 10
return
/obj/item/device/assembly/timer/update_icon()
overlays.Cut()
attached_overlays = list()
if(timing)
overlays += "timer_timing"
attached_overlays += "timer_timing"
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/timer/interact(mob/user as mob)//TODO: Have this use the wires
if(!secured)
user.show_message("<font color='red'>The [name] is unsecured!</font>")
return 0
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=timer")
onclose(user, "timer")
return
/obj/item/device/assembly/timer/Topic(href, href_list, state = deep_inventory_state)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=timer")
onclose(usr, "timer")
return
if(href_list["time"])
timing = text2num(href_list["time"])
update_icon()
interact(mob/user as mob)//TODO: Have this use the wires
if(!secured)
user.show_message("\red The [name] is unsecured!")
return 0
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=timer")
onclose(user, "timer")
if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 600)
if(href_list["close"])
usr << browse(null, "window=timer")
return
if(usr)
attack_self(usr)
Topic(href, href_list)
if(..()) return 1
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=timer")
onclose(usr, "timer")
return
if(href_list["time"])
timing = text2num(href_list["time"])
update_icon()
if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 600)
if(href_list["close"])
usr << browse(null, "window=timer")
return
if(usr)
attack_self(usr)
return
return
+1 -1
View File
@@ -22,7 +22,7 @@
var/corpseid = 0 //Just set to 1 if you want them to have an ID
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, centcomm etc ID
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
var/species = "Human"
/obj/effect/landmark/corpse/initialize()
+4 -4
View File
@@ -133,7 +133,7 @@ obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
user << "\black The gate is already calibrated, there is no work for you to do here."
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
/////////////////////////////////////Away////////////////////////
@@ -219,7 +219,7 @@ obj/machinery/gateway/centerstation/process()
if(istype(M, /mob/living/carbon))
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
M << "\black The station gate has detected your exile implant and is blocking your entry."
M << "<font color='black'>The station gate has detected your exile implant and is blocking your entry.</font>"
return
M.loc = get_step(stationgate.loc, SOUTH)
M.set_dir(SOUTH)
@@ -228,9 +228,9 @@ obj/machinery/gateway/centerstation/process()
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/multitool))
if(calibrated)
user << "\black The gate is already calibrated, there is no work for you to do here."
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
else
user << "\blue <b>Recalibration successful!</b>: \black This gate's systems have been fine tuned. Travel to this gate will now be on target."
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
+6 -5
View File
@@ -3,7 +3,7 @@ proc/createRandomZlevel()
return
var/list/potentialRandomZlevels = list()
admin_notice("\red \b Searching for away missions...", R_DEBUG)
admin_notice("<font color='red'><B> Searching for away missions...</B></font>", R_DEBUG)
var/list/Lines = file2list("maps/RandomZLevels/fileList.txt")
if(!Lines.len) return
for (var/t in Lines)
@@ -35,12 +35,13 @@ proc/createRandomZlevel()
if(potentialRandomZlevels.len)
admin_notice("\red \b Loading away mission...", R_DEBUG)
admin_notice("<font color='red'><B>Loading away mission...</B></font>", R_DEBUG)
var/map = pick(potentialRandomZlevels)
var/file = file(map)
if(isfile(file))
maploader.load_map(file)
var/datum/map_template/template = new(file, "away mission")
template.load_new_z()
world.log << "away mission loaded: [map]"
for(var/obj/effect/landmark/L in landmarks_list)
@@ -48,8 +49,8 @@ proc/createRandomZlevel()
continue
awaydestinations.Add(L)
admin_notice("\red \b Away mission loaded.", R_DEBUG)
admin_notice("<font color='red'><B>Away mission loaded.</B></font>", R_DEBUG)
else
admin_notice("\red \b No away missions found.", R_DEBUG)
admin_notice("<font color='red'><B>No away missions found.</B></font>", R_DEBUG)
return
+9 -2
View File
@@ -3,7 +3,8 @@
name = "blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob"
light_range = 3
light_range = 2
light_color = "#b5ff5b"
desc = "Some blob creature thingy"
density = 1
opacity = 0
@@ -73,6 +74,9 @@
if(GR)
qdel(GR)
return
for(var/obj/structure/reagent_dispensers/fueltank/Fuel in T)
Fuel.ex_act(2)
return
for(var/obj/machinery/door/D in T) // There can be several - and some of them can be open, locate() is not suitable
if(D.density)
D.ex_act(2)
@@ -138,7 +142,7 @@
if("fire")
damage = (W.force / fire_resist)
if(istype(W, /obj/item/weapon/weldingtool))
playsound(loc, 'sound/items/Welder.ogg', 100, 1)
playsound(src, W.usesound, 100, 1)
if("brute")
damage = (W.force / brute_resist)
@@ -149,6 +153,8 @@
name = "blob core"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_core"
light_range = 3
light_color = "#ffc880"
maxHealth = 200
brute_resist = 2
fire_resist = 2
@@ -176,6 +182,7 @@
name = "strong blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_idle"
light_range = 3
desc = "Some blob creature thingy"
maxHealth = 60
brute_resist = 1
+5 -2
View File
@@ -9,5 +9,8 @@ var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster
var/list/paths = typesof(/datum/lore/organization) - /datum/lore/organization
for(var/path in paths)
var/datum/lore/organization/instance = new path()
organizations[path] = instance
// Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names
var/datum/lore/organization/instance = path
if(initial(instance.name))
instance = new path()
organizations[path] = instance
+41 -5
View File
@@ -117,8 +117,8 @@
)
/datum/lore/organization/tsc/vey_med
name = "Vey Medical"
short_name = "Vey Med"
name = "Vey-Medical" //The Wiki displays them as Vey-Medical.
short_name = "Vey-Med"
acronym = "VM"
desc = "Vey-Med is one of the newer TSCs on the block and is notable for being largely owned and opperated by Skrell. \
Despite the suspicion and prejudice leveled at them for their alien origin, Vey-Med has obtained market dominance in \
@@ -221,6 +221,7 @@
"Never Talk To Strangers",
"Sacrificial Victim",
"Unwitting Accomplice",
"Witting Accomplice",
"Bad For Business",
"Just Testing",
"Size Isn't Everything",
@@ -249,7 +250,42 @@
"Anything Legal Considered",
"New Toy",
"Me, I'm Always Counting",
"Just Five More Minutes"
"Just Five More Minutes",
"Are You Feeling It",
"Great White Snark",
"No Shirt No Shoes",
"Callsign",
"Three Ships in a Trenchcoat",
"Not Wearing Pants",
"Ridiculous Naming Convention",
"God Dammit Morpheus",
"It Seemed Like a Good Idea",
"Legs All the Way Up",
"Purchase Necessary",
"Some Assembly Required",
"Buy One Get None Free",
"BRB",
"SHIP NAME HERE",
"Questionable Ethics",
"Accept Most Substitutes",
"I Blame the Government",
"Garbled Gibberish",
"Thinking Emoji",
"Is This Thing On?",
"Make My Day",
"No Vox Here",
"Savings and Values",
"Secret Name",
"Can't Find My Keys",
"Look Over There!",
"Made You Look!",
"Take Nothing Seriously",
"It Comes In Lime, Too",
"Loot Me",
"Nothing To Declare",
"Sneaking Suspicion",
"Bass Ackwards",
"Good Things Come to Those Who Freight"
)
@@ -322,12 +358,12 @@
// Military
/datum/lore/organization/mil/sif_guard
name = "Sif Homeguard Forces" // Todo: Get better name from lorepeople.
name = "Sif Defense Force" // Todo: Get better name from lorepeople.
short_name = "SifGuard"
desc = ""
history = ""
work = "Sif Governmental Authority's military"
headquarters = "Sif" // Make this more specific later.
headquarters = "New Reykjavik, Sif"
motto = ""
autogenerate_destination_names = FALSE // Kinda weird if SifGuard goes to Nyx.
+4
View File
@@ -1,4 +1,8 @@
/client
//////////////////////
//BLACK MAGIC THINGS//
//////////////////////
parent_type = /datum
////////////////
//ADMIN THINGS//
////////////////
+16 -1
View File
@@ -110,7 +110,7 @@
src.preload_rsc = pick(config.resource_urls)
else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal.
src << "\red If the title screen is black, resources are still downloading. Please be patient until the title screen appears."
src << "<font color='red'>If the title screen is black, resources are still downloading. Please be patient until the title screen appears.</font>"
clients += src
@@ -181,6 +181,9 @@
clients -= src
return ..()
/client/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
// here because it's similar to below
@@ -284,6 +287,18 @@
if(inactivity > duration) return inactivity
return 0
// Byond seemingly calls stat, each tick.
// Calling things each tick can get expensive real quick.
// So we slow this down a little.
// See: http://www.byond.com/docs/ref/info.html#/client/proc/Stat
/client/Stat()
. = ..()
if (holder)
sleep(1)
else
sleep(5)
stoplag()
/client/proc/last_activity_seconds()
return inactivity / 10
@@ -10,7 +10,7 @@
/datum/gear/accessory/emt
display_name = "armband, EMT"
path = /obj/item/clothing/accessory/armband/medgreen
path = /obj/item/clothing/accessory/armband/medblue
/datum/gear/accessory/engineering
display_name = "armband, engineering"
@@ -316,3 +316,16 @@
shirts["red hawaii shirt"] = /obj/item/clothing/accessory/hawaii/red
shirts["random colored hawaii shirt"] = /obj/item/clothing/accessory/hawaii/random
gear_tweaks += new/datum/gear_tweak/path(shirts)
/datum/gear/accessory/sweater
display_name = "Sweater Selection"
path = /obj/item/clothing/accessory/sweater
/datum/gear/accessory/sweater/New()
..()
var/list/sweaters = list()
for(var/sweater in typesof(/obj/item/clothing/accessory/sweater))
var/obj/item/clothing/suit/sweater_type = sweater
sweaters[initial(sweater_type.name)] = sweater_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sweaters))
@@ -76,6 +76,15 @@
display_name = "Optical Meson Scanners, prescription (Engineering)"
path = /obj/item/clothing/glasses/meson/prescription
/datum/gear/eyes/material
display_name = "Optical Material Scanners (Mining)"
path = /obj/item/clothing/glasses/material
allowed_roles = list("Shaft Miner")
/datum/gear/eyes/material/prescription
display_name = "Prescription Optical Material Scanners (Mining)"
path = /obj/item/clothing/glasses/material/prescription
/datum/gear/eyes/meson/aviator
display_name = "Optical Meson Aviators, (Engineering)"
path = /obj/item/clothing/glasses/meson/aviator
@@ -10,6 +10,10 @@
display_name = "dice pack (gaming)"
path = /obj/item/weapon/storage/pill_bottle/dice_nerd
/datum/gear/dice/cup
display_name = "dice cup and dice"
path = /obj/item/weapon/storage/dicecup/loaded
/datum/gear/cards
display_name = "deck of cards"
path = /obj/item/weapon/deck/cards
@@ -70,4 +70,8 @@
/datum/gear/gloves/forensic
display_name = "gloves, forensic"
path = /obj/item/clothing/gloves/forensic
allowed_roles = list("Detective")
allowed_roles = list("Detective")
/datum/gear/gloves/fingerless
display_name = "fingerless gloves"
path = /obj/item/clothing/gloves/fingerless
@@ -348,4 +348,24 @@
for(var/sol_style in typesof(/obj/item/clothing/head/beret/sol))
var/obj/item/clothing/head/beret/sol/sol = sol_style
sols[initial(sol.name)] = sol
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sols))
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sols))
/datum/gear/head/surgical/black
display_name = "surgical cap, black"
path = /obj/item/clothing/head/surgery/black
/datum/gear/head/surgical/blue
display_name = "surgical cap, blue"
path = /obj/item/clothing/head/surgery/blue
/datum/gear/head/surgical/green
display_name = "surgical cap, green"
path = /obj/item/clothing/head/surgery/green
/datum/gear/head/surgical/navyblue
display_name = "surgical cap, navy blue"
path = /obj/item/clothing/head/surgery/navyblue
/datum/gear/head/surgical/purple
display_name = "surgical cap, purple"
path = /obj/item/clothing/head/surgery/purple
@@ -77,6 +77,38 @@
display_name = "flats, black"
path = /obj/item/clothing/shoes/flats
/datum/gear/shoes/hitops/
display_name = "high-top, white"
path = /obj/item/clothing/shoes/hitops/
/datum/gear/shoes/hitops/red
display_name = "high-top, red"
path = /obj/item/clothing/shoes/hitops/red
/datum/gear/shoes/hitops/black
display_name = "high-top, black"
path = /obj/item/clothing/shoes/hitops/black
/datum/gear/shoes/hitops/orange
display_name = "high-top, orange"
path = /obj/item/clothing/shoes/hitops/orange
/datum/gear/shoes/hitops/blue
display_name = "high-top, blue"
path = /obj/item/clothing/shoes/hitops/blue
/datum/gear/shoes/hitops/green
display_name = "high-top, green"
path = /obj/item/clothing/shoes/hitops/green
/datum/gear/shoes/hitops/purple
display_name = "high-top, purple"
path = /obj/item/clothing/shoes/hitops/purple
/datum/gear/shoes/hitops/yellow
display_name = "high-top, yellow"
path = /obj/item/clothing/shoes/hitops/yellow
/datum/gear/shoes/flats/blue
display_name = "flats, blue"
path = /obj/item/clothing/shoes/flats/blue
@@ -161,4 +193,53 @@
/datum/gear/shoes/heels/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/shoes/boots/winter
display_name = "winter boots"
path = /obj/item/clothing/shoes/boots/winter
/datum/gear/shoes/boots/winter/security
display_name = "security winter boots"
path = /obj/item/clothing/shoes/boots/winter/security
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
/datum/gear/shoes/boots/winter/science
display_name = "science winter boots"
path = /obj/item/clothing/shoes/boots/winter/science
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
/datum/gear/shoes/boots/winter/command
display_name = "colony director's winter boots"
path = /obj/item/clothing/shoes/boots/winter/command
allowed_roles = list("Colony Director")
/datum/gear/shoes/boots/winter/engineering
display_name = "engineering winter boots"
path = /obj/item/clothing/shoes/boots/winter/engineering
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
/datum/gear/shoes/boots/winter/atmos
display_name = "atmospherics winter boots"
path = /obj/item/clothing/shoes/boots/winter/atmos
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
/datum/gear/shoes/boots/winter/medical
display_name = "medical winter boots"
path = /obj/item/clothing/shoes/boots/winter/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
/datum/gear/shoes/boots/winter/mining
display_name = "mining winter boots"
path = /obj/item/clothing/shoes/boots/winter/mining
allowed_roles = list("Shaft Miner")
/datum/gear/shoes/boots/winter/supply
display_name = "supply winter boots"
path = /obj/item/clothing/shoes/boots/winter/supply
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/shoes/boots/winter/hydro
display_name = "hydroponics winter boots"
path = /obj/item/clothing/shoes/boots/winter/hydro
allowed_roles = list("Botanist", "Xenobiologist")
@@ -11,9 +11,17 @@
path = /obj/item/weapon/storage/box/matches
/datum/gear/zippo
display_name = "zippo"
display_name = "Zippo Selection"
path = /obj/item/weapon/flame/lighter/zippo
/datum/gear/zippo/New()
..()
var/list/zippos = list()
for(var/zippo in typesof(/obj/item/weapon/flame/lighter/zippo))
var/obj/item/weapon/flame/lighter/zippo/zippo_type = zippo
zippos[initial(zippo_type.name)] = zippo_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(zippos))
/datum/gear/ashtray
display_name = "ashtray, plastic"
path = /obj/item/weapon/material/ashtray/plastic
@@ -383,4 +383,46 @@
/datum/gear/suit/miscellaneous/med_dep_jacket
display_name = "department jacket, medical"
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
/datum/gear/suit/miscellaneous/peacoat
display_name = "peacoat"
path = /obj/item/clothing/suit/storage/toggle/peacoat
/datum/gear/suit/miscellaneous/peacoat/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/suit/snowsuit
display_name = "snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit
/datum/gear/suit/snowsuit/command
display_name = "snowsuit, command"
path = /obj/item/clothing/suit/storage/snowsuit/command
allowed_roles = list("Colony Director","Research Director","Head of Personnel","Head of Security","Chief Engineer","Command Secretary")
/datum/gear/suit/snowsuit/security
display_name = "snowsuit, security"
path = /obj/item/clothing/suit/storage/snowsuit/security
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
/datum/gear/suit/snowsuit/medical
display_name = "snowsuit, medical"
path = /obj/item/clothing/suit/storage/snowsuit/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
/datum/gear/suit/snowsuit/science
display_name = "snowsuit, science"
path = /obj/item/clothing/suit/storage/snowsuit/science
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
/datum/gear/suit/snowsuit/engineering
display_name = "snowsuit, engineering"
path = /obj/item/clothing/suit/storage/snowsuit/engineering
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
/datum/gear/suit/snowsuit/cargo
display_name = "snowsuit, supply"
path = /obj/item/clothing/suit/storage/snowsuit/cargo
allowed_roles = list("Quartermaster","shaft Miner","Cargo Technician","Head of Personnel")
@@ -5,6 +5,10 @@
slot = slot_w_uniform
sort_category = "Uniforms and Casual Dress"
/datum/gear/uniform/blazerskirt
display_name = "blazer, blue with skirt"
path = /obj/item/clothing/under/blazer/skirt
/datum/gear/uniform/cheongsam
display_name = "cheongsam selection"
@@ -16,22 +20,21 @@
cheongasms[initial(cheongasm_type.name)] = cheongasm_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cheongasms))
/datum/gear/uniform/croptop
display_name = "croptop selection"
/datum/gear/uniform/croptop/New()
..()
var/list/croptops = list()
for(var/croptop in typesof(/obj/item/clothing/under/croptop))
var/obj/item/clothing/under/croptop/croptop_type = croptop
croptops[initial(croptop_type.name)] = croptop_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(croptops))
/datum/gear/uniform/kilt
display_name = "kilt"
path = /obj/item/clothing/under/kilt
/datum/gear/uniform/croptop
display_name = "croptop, NT"
path = /obj/item/clothing/under/croptop
/datum/gear/uniform/croptop/grey
display_name = "croptop, grey"
path = /obj/item/clothing/under/croptop/grey
/datum/gear/uniform/croptop/red
display_name = "croptop, red"
path = /obj/item/clothing/under/croptop/red
/datum/gear/uniform/cuttop
display_name = "cut top, grey"
path = /obj/item/clothing/under/cuttop
@@ -178,98 +181,81 @@
path = /obj/item/clothing/under/rank/cargotech/jeans/female
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/uniform/suit //amish
display_name = "suit, amish"
path = /obj/item/clothing/under/sl_suit
/datum/gear/uniform/suit/lawyer
display_name = "suit, one-piece selection"
path = /obj/item/clothing/under/lawyer
/datum/gear/uniform/suit/black
display_name = "suit, black"
/datum/gear/uniform/suit/lawyer/New()
..()
var/list/lsuits = list()
for(var/lsuit in typesof(/obj/item/clothing/under/lawyer))
var/obj/item/clothing/suit/lsuit_type = lsuit
lsuits[initial(lsuit_type.name)] = lsuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lsuits))
/datum/gear/uniform/suit/suit_jacket
display_name = "suit, modular selection"
path = /obj/item/clothing/under/suit_jacket
/datum/gear/uniform/suit/shinyblack
display_name = "suit, shiny-black"
path = /obj/item/clothing/under/lawyer/black
/datum/gear/uniform/suit/suit_jacket/New()
..()
var/list/msuits = list()
for(var/msuit in typesof(/obj/item/clothing/under/suit_jacket))
var/obj/item/clothing/suit/msuit_type = msuit
msuits[initial(msuit_type.name)] = msuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(msuits))
/datum/gear/uniform/suit/blue
display_name = "suit, blue"
path = /obj/item/clothing/under/lawyer/blue
/datum/gear/uniform/suit/burgundy
display_name = "suit, burgundy"
path = /obj/item/clothing/under/suit_jacket/burgundy
/datum/gear/uniform/suit/checkered
display_name = "suit, checkered"
path = /obj/item/clothing/under/suit_jacket/checkered
/datum/gear/uniform/suit/charcoal
display_name = "suit, charcoal"
path = /obj/item/clothing/under/suit_jacket/charcoal
/datum/gear/uniform/suit/exec
display_name = "suit, executive"
path = /obj/item/clothing/under/suit_jacket/really_black
/datum/gear/uniform/suit/femaleexec
display_name = "suit, female-executive"
path = /obj/item/clothing/under/suit_jacket/female
/datum/gear/uniform/suit/amish //amish
display_name = "suit, amish"
path = /obj/item/clothing/under/sl_suit
/datum/gear/uniform/suit/gentle
display_name = "suit, gentlemen"
path = /obj/item/clothing/under/gentlesuit
/datum/gear/uniform/suit/navy
display_name = "suit, navy"
path = /obj/item/clothing/under/suit_jacket/navy
/datum/gear/uniform/suit/red
display_name = "suit, red"
path = /obj/item/clothing/under/suit_jacket/red
/datum/gear/uniform/suit/redlawyer
display_name = "suit, lawyer-red"
path = /obj/item/clothing/under/lawyer/red
/datum/gear/uniform/suit/oldman
display_name = "suit, old-man"
path = /obj/item/clothing/under/lawyer/oldman
/datum/gear/uniform/suit/purple
display_name = "suit, purple"
path = /obj/item/clothing/under/lawyer/purpsuit
/datum/gear/uniform/suit/tan
display_name = "suit, tan"
path = /obj/item/clothing/under/suit_jacket/tan
/datum/gear/uniform/suit/gentleskirt
display_name = "suit, lady"
path = /obj/item/clothing/under/gentlesuit/skirt
/datum/gear/uniform/suit/white
display_name = "suit, white"
path = /obj/item/clothing/under/scratch
/datum/gear/uniform/suit/whiteblue
display_name = "suit, white-blue"
path = /obj/item/clothing/under/lawyer/bluesuit
/datum/gear/uniform/suit/whiteskirt
display_name = "suit, white skirt"
path = /obj/item/clothing/under/scratch/skirt
/datum/gear/uniform/scrubs
display_name = "scrubs, black"
path = /obj/item/clothing/under/rank/medical/black
/datum/gear/uniform/suit/detectiveskirt
display_name = "suit, detective skirt (Detective)"
path = /obj/item/clothing/under/det/skirt
allowed_roles = list("Detective")
/datum/gear/uniform/suit/iaskirt
display_name = "suit, Internal Affairs skirt (Internal Affairs)"
path = /obj/item/clothing/under/rank/internalaffairs/skirt
allowed_roles = list("Internal Affairs Agent")
/datum/gear/uniform/suit/bartenderskirt
display_name = "suit, bartender skirt (Bartender)"
path = /obj/item/clothing/under/rank/bartender/skirt
allowed_roles = list("Bartender")
/datum/gear/uniform/scrub
display_name = "scrubs selection"
path = /obj/item/clothing/under/rank/medical/scrubs
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist")
/datum/gear/uniform/scrubs/blue
display_name = "scrubs, blue"
path = /obj/item/clothing/under/rank/medical/blue
/datum/gear/uniform/scrub/New()
..()
var/list/scrubs = list()
for(var/scrub in typesof(/obj/item/clothing/under/rank/medical/scrubs))
var/obj/item/clothing/under/rank/medical/scrubs/scrub_type = scrub
scrubs[initial(scrub_type.name)] = scrub_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scrubs))
/datum/gear/uniform/scrubs/purple
display_name = "scrubs, purple"
path = /obj/item/clothing/under/rank/medical/purple
/datum/gear/uniform/scrubs/green
display_name = "scrubs, green"
path = /obj/item/clothing/under/rank/medical/green
/datum/gear/uniform/scrubs/navyblue
display_name = "scrubs, navy blue"
path = /obj/item/clothing/under/rank/medical/navyblue
/datum/gear/uniform/oldwoman
display_name = "old woman attire"
path = /obj/item/clothing/under/oldwoman
/datum/gear/uniform/sundress
display_name = "sundress"
@@ -382,6 +368,10 @@
display_name = "maid uniform"
path = /obj/item/clothing/under/dress/janimaid
/datum/gear/uniform/dresses/sexymaid
display_name = "sexy maid uniform"
path = /obj/item/clothing/under/dress/sexymaid
/datum/gear/uniform/pt
display_name = "pt uniform"
path = /obj/item/clothing/under/pt
@@ -452,4 +442,16 @@
/datum/gear/uniform/yogapants/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/uniform/black_corset
display_name = "black corset"
path = /obj/item/clothing/under/dress/black_corset
/datum/gear/uniform/flower_dress
display_name = "flower dress"
path = /obj/item/clothing/under/dress/flower_dress
/datum/gear/uniform/red_swept_dress
display_name = "red swept dress"
path = /obj/item/clothing/under/dress/red_swept_dress
@@ -87,3 +87,16 @@
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
/datum/gear/utility/wheelchair/color
display_name = "wheelchair"
path = /obj/item/wheelchair
cost = 4
/datum/gear/utility/wheelchair/color/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
@@ -83,31 +83,47 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/uniform/teshari
display_name = "smock, grey (Teshari)"
path = /obj/item/clothing/under/seromi
/datum/gear/uniform/smock
display_name = "smock selection (Teshari)"
path = /obj/item/clothing/under/seromi/smock
whitelisted = "Teshari"
sort_category = "Xenowear"
/datum/gear/uniform/teshari/jumpsuit
display_name = "smock, yellow (Teshari)"
path = /obj/item/clothing/under/seromi/yellow
/datum/gear/uniform/smock/New()
..()
var/list/smocks = list()
for(var/smock in typesof(/obj/item/clothing/under/seromi/smock))
var/obj/item/clothing/under/seromi/smock/smock_type = smock
smocks[initial(smock_type.name)] = smock_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(smocks))
/datum/gear/uniform/teshari/jumpsuit/red
display_name = "smock, red (Teshari)"
path = /obj/item/clothing/under/seromi/red
/datum/gear/uniform/undercoat
display_name = "undercoat selection (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat
whitelisted = "Teshari"
sort_category = "Xenowear"
/datum/gear/uniform/teshari/jumpsuit/white
display_name = "smock, white (Teshari)"
path = /obj/item/clothing/under/seromi/white
/datum/gear/uniform/undercoat/New()
..()
var/list/undercoats = list()
for(var/undercoat in typesof(/obj/item/clothing/under/seromi/undercoat))
var/obj/item/clothing/under/seromi/undercoat/undercoat_type = undercoat
undercoats[initial(undercoat_type.name)] = undercoat_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(undercoats))
/datum/gear/uniform/teshari/jumpsuit/medical
display_name = "smock, Medical (Teshari)"
path = /obj/item/clothing/under/seromi/medical
/datum/gear/suit/cloak
display_name = "cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak
whitelisted = "Teshari"
sort_category = "Xenowear"
/datum/gear/uniform/teshari/jumpsuit/rainbow
display_name = "smock, rainbow (Teshari)"
path = /obj/item/clothing/under/seromi/rainbow
/datum/gear/suit/cloak/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak))
var/obj/item/clothing/suit/storage/seromi/cloak/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/mask/ipc_monitor
display_name = "display monitor (Full Body Prosthetic)"
+1 -1
View File
@@ -76,7 +76,7 @@ datum/preferences
var/job_engsec_low = 0
//Keeps track of preferrence for not getting any wanted jobs
var/alternate_option = 0
var/alternate_option = 1
var/used_skillpoints = 0
var/skill_specialization = null
+11 -7
View File
@@ -16,9 +16,11 @@ var/global/list/seen_religions = list()
var/global/list/citizenship_choices = list(
"Earth",
"Mars",
"Sif",
"Binma",
"Moghes",
"Meralar",
"Qerrbalak"
"Qerr'balak"
)
var/global/list/home_system_choices = list(
@@ -26,7 +28,7 @@ var/global/list/home_system_choices = list(
"Vir",
"Nyx",
"Tau Ceti",
"Qerr'Vallis",
"Qerr'valis",
"Epsilon Ursae Minoris",
"Rarkajar"
)
@@ -42,7 +44,9 @@ var/global/list/faction_choices = list(
"Grayson Manufactories Ltd.",
"Aether Atmospherics",
"Zeng-Hu Pharmaceuticals",
"Hesphaistos Industries"
"Hephaestus Industries",
"Morpheus Cyberkinetics",
"Xion Manufacturing Group"
)
var/global/list/antag_faction_choices = list() //Should be populated after brainstorming. Leaving as blank in case brainstorming does not occur.
@@ -57,8 +61,8 @@ var/global/list/religion_choices = list(
"Unitarianism",
"Hinduism",
"Buddhist",
"Islamic",
"Christian",
"Agnostic",
"Deist"
"Islam",
"Christianity",
"Agnosticism",
"Deism"
)
@@ -22,9 +22,12 @@ var/list/spawntypes = list()
return 1
/datum/spawnpoint/proc/get_spawn_position()
return get_turf(pick(turfs))
/datum/spawnpoint/arrivals
display_name = "Arrivals Shuttle"
msg = "has arrived on the station"
msg = "will arrive to the station shortly by shuttle"
/datum/spawnpoint/arrivals/New()
..()
+1 -1
View File
@@ -6,7 +6,7 @@
/client/proc/handle_spam_prevention(var/mute_type = MUTE_ALL, var/spam_delay = 0.5 SECONDS)
if(world.time - last_message_time < spam_delay)
spam_alert++
if(spam_alert > 3)
if(spam_alert > 5)
cmd_admin_mute(src.mob, mute_type, 1)
else
spam_alert = max(0, spam_alert--)
+4 -2
View File
@@ -6,7 +6,8 @@
"old" = 'icons/mob/screen/old.dmi',
"White" = 'icons/mob/screen/white.dmi',
"old-noborder" = 'icons/mob/screen/old-noborder.dmi',
"minimalist" = 'icons/mob/screen/minimalist.dmi'
"minimalist" = 'icons/mob/screen/minimalist.dmi',
"Hologram" = 'icons/mob/screen/holo.dmi'
)
/var/all_ui_styles_robot = list(
@@ -15,7 +16,8 @@
"old" = 'icons/mob/screen1_robot.dmi',
"White" = 'icons/mob/screen1_robot.dmi',
"old-noborder" = 'icons/mob/screen1_robot.dmi',
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi'
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi',
"Hologram" = 'icons/mob/screen1_robot_minimalist.dmi'
)
/proc/ui_style2icon(ui_style)
+1
View File
@@ -408,6 +408,7 @@
projectile_type = /obj/item/projectile/chameleon
charge_meter = 0
charge_cost = 48 //uses next to no power, since it's just holograms
battery_lock = 1
var/obj/item/projectile/copy_projectile
var/global/list/gun_choices
+5 -4
View File
@@ -69,7 +69,7 @@
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
species_restricted = list("Human", "Skrell") //skrell/humans can wear each other's suits
species_restricted = list("Human", "Skrell", "Promethean") //skrell/humans can wear each other's suits
else
species_restricted = list(target_species)
@@ -91,7 +91,7 @@
//Set species_restricted list
switch(target_species)
if("Skrell")
species_restricted = list("Human", "Skrell") //skrell helmets fit humans too
species_restricted = list("Human", "Skrell", "Promethean") //skrell helmets fit humans too
else
species_restricted = list(target_species)
@@ -184,6 +184,7 @@
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/overgloves = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
body_parts_covered = HANDS
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
@@ -213,8 +214,8 @@
update_icon()
return
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
playsound(src.loc, W.usesound, 50, 1)
user.visible_message("<font color='red'>[user] cuts the fingertips off of the [src].</font>","<font color='red'>You cut the fingertips off of the [src].</font>")
clipped = 1
name = "modified [name]"
+39 -24
View File
@@ -51,7 +51,7 @@ BLIND // can't see anything
user.update_action_buttons()
/obj/item/clothing/glasses/meson
name = "Optical Meson Scanner"
name = "optical meson scanner"
desc = "Used for seeing walls, floors, and stuff through anything."
icon_state = "meson"
item_state_slots = list(slot_r_hand_str = "meson", slot_l_hand_str = "meson")
@@ -70,7 +70,7 @@ BLIND // can't see anything
prescription = 1
/obj/item/clothing/glasses/meson/aviator
name = "Engineering Aviators"
name = "engineering aviators"
icon_state = "aviator_eng"
off_state = "aviator"
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
@@ -78,7 +78,7 @@ BLIND // can't see anything
activation_sound = 'sound/effects/pop.ogg'
/obj/item/clothing/glasses/meson/aviator/prescription
name = "Prescription Engineering Aviators"
name = "prescription engineering aviators"
desc = "Engineering Aviators with prescription lenses."
prescription = 1
@@ -89,13 +89,22 @@ BLIND // can't see anything
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
toggleable = 1
action_button_name = "Toggle Goggles"
item_flags = AIRTIGHT
/obj/item/clothing/glasses/science/New()
..()
overlay = global_hud.science
/obj/item/clothing/glasses/goggles
name = "goggles"
desc = "Just some plain old goggles."
icon_state = "plaingoggles"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
item_flags = AIRTIGHT
body_parts_covered = EYES
/obj/item/clothing/glasses/night
name = "Night Vision Goggles"
name = "night vision goggles"
desc = "You can totally see in the dark now!"
icon_state = "night"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
@@ -132,7 +141,7 @@ BLIND // can't see anything
eye = !eye
if(eye)
icon_state = "[icon_state]_r"
icon_state = "[icon_state]_1"
else
icon_state = initial(icon_state)
update_clothing_icon()
@@ -145,7 +154,7 @@ BLIND // can't see anything
body_parts_covered = 0
/obj/item/clothing/glasses/material
name = "Optical Material Scanner"
name = "optical material scanner"
desc = "Very confusing glasses."
icon_state = "material"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
@@ -154,8 +163,12 @@ BLIND // can't see anything
action_button_name = "Toggle Goggles"
vision_flags = SEE_OBJS
/obj/item/clothing/glasses/material/prescription
name = "prescription optical material scanner"
prescription = 1
/obj/item/clothing/glasses/regular
name = "Prescription Glasses"
name = "prescription glasses"
desc = "Made by Nerd. Co."
icon_state = "glasses"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
@@ -163,12 +176,12 @@ BLIND // can't see anything
body_parts_covered = 0
/obj/item/clothing/glasses/regular/scanners
name = "Scanning Goggles"
name = "scanning goggles"
desc = "A very oddly shaped pair of goggles with bits of wire poking out the sides. A soft humming sound emanates from it."
icon_state = "uzenwa_sissra_1"
/obj/item/clothing/glasses/regular/hipster
name = "Prescription Glasses"
name = "prescription glasses"
desc = "Made by Uncool. Co."
icon_state = "hipster_glasses"
@@ -180,15 +193,15 @@ BLIND // can't see anything
body_parts_covered = 0
/obj/item/clothing/glasses/gglasses
name = "Green Glasses"
name = "green glasses"
desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme."
icon_state = "gglasses"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
body_parts_covered = 0
/obj/item/clothing/glasses/sunglasses
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes."
name = "sunglasses"
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes."
icon_state = "sun"
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
darkness_view = -1
@@ -200,6 +213,7 @@ BLIND // can't see anything
item_state_slots = list(slot_r_hand_str = "welding-g", slot_l_hand_str = "welding-g")
action_button_name = "Flip Welding Goggles"
matter = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 1000)
item_flags = AIRTIGHT
var/up = 0
/obj/item/clothing/glasses/welding/attack_self()
@@ -266,7 +280,7 @@ BLIND // can't see anything
icon_state = "aviator"
/obj/item/clothing/glasses/sunglasses/sechud
name = "HUDSunglasses"
name = "\improper HUD sunglasses"
desc = "Sunglasses with a HUD."
icon_state = "sunSecHud"
var/obj/item/clothing/glasses/hud/security/hud = null
@@ -282,7 +296,7 @@ BLIND // can't see anything
icon_state = "swatgoggles"
/obj/item/clothing/glasses/sunglasses/sechud/aviator
name = "Security HUD aviators"
name = "security HUD aviators"
desc = "Modified aviator glasses that can be switch between HUD and flash protection modes."
icon_state = "aviator_sec"
off_state = "aviator"
@@ -324,12 +338,12 @@ BLIND // can't see anything
icon_state = off_state
/obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription
name = "Prescription Security HUD aviators"
name = "prescription security HUD aviators"
desc = "Modified aviator glasses that can be switch between HUD and flash protection modes. Comes with bonus prescription lenses."
prescription = 6
/obj/item/clothing/glasses/sunglasses/medhud
name = "HUDSunglasses"
name = "\improper HUD sunglasses"
desc = "Sunglasses with a HUD."
icon_state = "sunMedHud"
var/obj/item/clothing/glasses/hud/health/hud = null
@@ -340,7 +354,7 @@ BLIND // can't see anything
return
/obj/item/clothing/glasses/sunglasses/medhud/aviator
name = "Medical HUD aviators"
name = "medical HUD aviators"
desc = "Modified aviator glasses with a toggled health HUD."
icon_state = "aviator_med"
off_state = "aviator"
@@ -382,12 +396,12 @@ BLIND // can't see anything
icon_state = off_state
/obj/item/clothing/glasses/sunglasses/medhud/aviator/prescription
name = "Prescription Medical HUD aviators"
name = "prescription medical HUD aviators"
desc = "Modified aviator glasses with a toggled health HUD. Comes with bonus prescription lenses."
prescription = 6
/obj/item/clothing/glasses/thermal
name = "Optical Thermal Scanner"
name = "optical thermal scanner"
desc = "Thermals in the shape of glasses."
icon_state = "thermal"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
@@ -395,12 +409,13 @@ BLIND // can't see anything
toggleable = 1
action_button_name = "Toggle Goggles"
vision_flags = SEE_MOBS
see_invisible = INVISIBILITY_LEVEL_TWO
see_invisible = SEE_INVISIBLE_NOLIGHTING
emp_act(severity)
if(istype(src.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/M = src.loc
M << "\red The Optical Thermal Scanner overloads and blinds you!"
M << "<font color='red'>The Optical Thermal Scanner overloads and blinds you!</font>"
if(M.glasses == src)
M.Blind(3)
M.eye_blurry = 5
@@ -416,7 +431,7 @@ BLIND // can't see anything
overlay = global_hud.thermal
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
name = "Optical Meson Scanner"
name = "optical meson scanner"
desc = "Used for seeing walls, floors, and stuff through anything."
icon_state = "meson"
item_state_slots = list(slot_r_hand_str = "meson", slot_l_hand_str = "meson")
@@ -428,7 +443,7 @@ BLIND // can't see anything
action_button_name = null
/obj/item/clothing/glasses/thermal/plain/monocle
name = "Thermoncle"
name = "thermonocle"
desc = "A monocle thermal."
icon_state = "thermoncle"
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
@@ -439,7 +454,7 @@ BLIND // can't see anything
body_parts_covered = 0
/obj/item/clothing/glasses/thermal/plain/eyepatch
name = "Optical Thermal Eyepatch"
name = "optical thermal eyepatch"
desc = "An eyepatch with built-in thermal optics"
icon_state = "eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
@@ -448,7 +463,7 @@ BLIND // can't see anything
action_button_name = "Toggle Eyepatch"
/obj/item/clothing/glasses/thermal/plain/jensen
name = "Optical Thermal Implants"
name = "optical thermal implants"
desc = "A set of implantable lenses designed to augment your vision"
icon_state = "thermalimplants"
item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses")
+6
View File
@@ -82,3 +82,9 @@
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/fingerless
desc = "A pair of gloves that don't actually cover the fingers."
name = "fingerless gloves"
icon_state = "fingerlessgloves"
fingerprint_chance = 100
@@ -27,7 +27,7 @@
/obj/item/clothing/gloves/swat
desc = "These tactical gloves are somewhat fire and impact-resistant."
name = "\improper SWAT Gloves"
icon_state = "black"
icon_state = "swat"
item_state = "swat"
siemens_coefficient = 0.50
permeability_coefficient = 0.05
@@ -39,7 +39,7 @@
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
desc = "These tactical gloves are somewhat fire and impact resistant."
name = "combat gloves"
icon_state = "black"
icon_state = "swat"
item_state = "swat"
siemens_coefficient = 0
permeability_coefficient = 0.05
@@ -56,6 +56,7 @@
siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC)
permeability_coefficient = 0.01
germ_level = 0
fingerprint_chance = 25
// var/balloonPath = /obj/item/latexballon
//TODO: Make inflating gloves a thing
+5 -5
View File
@@ -67,8 +67,8 @@
item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy")
/obj/item/clothing/head/beret/sec/navy/hos
name = "officer beret"
desc = "A navy blue beret with a head of security's rank emblem. For officers that are more inclined towards style than safety."
name = "Head of Security beret"
desc = "A navy blue beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "beret_navy_hos"
item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy")
@@ -85,8 +85,8 @@
item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black")
/obj/item/clothing/head/beret/sec/corporate/hos
name = "officer beret"
desc = "A corporate black beret with a head of security's rank emblem. For officers that are more inclined towards style than safety."
name = "Head of Security beret"
desc = "A corporate black beret with a Head of Security's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "beret_corporate_hos"
item_state_slots = list(slot_r_hand_str = "beret_black", slot_l_hand_str = "beret_black")
@@ -188,4 +188,4 @@
/obj/item/clothing/head/surgery/navyblue
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue."
icon_state = "surgcap_navyblue"
item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy")
item_state_slots = list(slot_r_hand_str = "beret_navy", slot_l_hand_str = "beret_navy")
+1 -1
View File
@@ -154,7 +154,7 @@
siemens_coefficient = 0.9 //...what?
/obj/item/clothing/head/flatcap/grey
icon_state = "flat_capg"
icon_state = "flat_capw"
item_state_slots = list(slot_r_hand_str = "greysoft", slot_l_hand_str = "greysoft")
/obj/item/clothing/head/pirate
+9 -14
View File
@@ -12,7 +12,7 @@
/obj/item/clothing/head/soft/sol/expedition
name = "\improper SifGuard cap"
desc = "It's a black ballcap bearing a Sif Homeguard Corps crest."
desc = "It's a black ballcap bearing a Sif Defense Force crest."
icon_state = "expeditionsoft"
item_state_slots = list(
slot_l_hand_str = "blacksoft",
@@ -115,12 +115,12 @@
/obj/item/clothing/head/dress/expedition
name = "\improper SifGuard dress cap"
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps."
desc = "A peaked grey dress uniform cap belonging to the Sif Defense Force."
icon_state = "greydresscap"
/obj/item/clothing/head/dress/expedition/command
name = "\improper SifGuard command dress cap"
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps. This one is trimmed in gold."
desc = "A peaked grey dress uniform cap belonging to the Sif Defense Force. This one is trimmed in gold."
icon_state = "greydresscap_com"
/obj/item/clothing/head/dress/fleet
@@ -150,11 +150,6 @@
desc = "A beret in Solar Confederate Government colors. For peacekeepers that are more inclined towards style than safety."
icon_state = "beret_lightblue"
/obj/item/clothing/head/beret/sol/homeguard
name = "home guard beret"
desc = "A red beret denoting service in the Sol Home Guard. For personnel that are more inclined towards style than safety."
icon_state = "beret_red"
/obj/item/clothing/head/beret/sol/gateway
name = "gateway administration beret"
desc = "An orange beret denoting service in the Gateway Administration. For personnel that are more inclined towards style than safety."
@@ -182,32 +177,32 @@
/obj/item/clothing/head/beret/sol/expedition
name = "\improper SifGuard beret"
desc = "A black beret belonging to the Sif Homeguard Corps. For personnel that are more inclined towards style than safety."
desc = "A black beret belonging to the Sif Defense Force. For personnel that are more inclined towards style than safety."
icon_state = "beret_black"
/obj/item/clothing/head/beret/sol/expedition/security
name = "\improper SifGuard security beret"
desc = "An Sif Homeguard Corps beret with a security crest. For personnel that are more inclined towards style than safety."
desc = "A Sif Defense Force beret with a security crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_security"
/obj/item/clothing/head/beret/sol/expedition/medical
name = "\improper SifGuard medical beret"
desc = "An Sif Homeguard Corps beret with a medical crest. For personnel that are more inclined towards style than safety."
desc = "A Sif Defense Force beret with a medical crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_medical"
/obj/item/clothing/head/beret/sol/expedition/engineering
name = "\improper SifGuard engineering beret"
desc = "An Sif Homeguard Corps beret with an engineering crest. For personnel that are more inclined towards style than safety."
desc = "A Sif Defense Force beret with an engineering crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_engineering"
/obj/item/clothing/head/beret/sol/expedition/supply
name = "\improper SifGuard supply beret"
desc = "An Sif Homeguard Corps beret with a supply crest. For personnel that are more inclined towards style than safety."
desc = "A Sif Defense Force beret with a supply crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_supply"
/obj/item/clothing/head/beret/sol/expedition/command
name = "\improper SifGuard command beret"
desc = "An Sif Homeguard Corps beret with a command crest. For personnel that are more inclined towards style than safety."
desc = "A Sif Defense Force beret with a command crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_black_command"
/obj/item/clothing/head/beret/sol/fleet
+3 -3
View File
@@ -104,9 +104,9 @@
flags_inv = HIDEEARS|HIDEFACE
item_state_slots = list(slot_r_hand_str = "mime", slot_l_hand_str = "mime")
/obj/item/clothing/mask/gas/death_commando
name = "Death Commando Mask"
icon_state = "death_commando_mask"
/obj/item/clothing/mask/gas/commando
name = "commando mask"
icon_state = "fullgas"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
siemens_coefficient = 0.2
+46
View File
@@ -47,6 +47,52 @@
heat_protection = FEET|LEGS
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/shoes/boots/winter/security
name = "security winter boots"
desc = "A pair of winter boots. These ones are lined with grey fur, and coloured an angry red."
icon_state = "winterboots_sec"
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
/obj/item/clothing/shoes/boots/winter/science
name = "science winter boots"
desc = "A pair of winter boots. These ones are lined with white fur, and are trimmed with scientific advancement!"
icon_state = "winterboots_sci"
/obj/item/clothing/shoes/boots/winter/command
name = "colony director's winter boots"
desc = "A pair of winter boots. They're lined with dark fur, and trimmed in the colours of superiority."
icon_state = "winterboots_cap"
/obj/item/clothing/shoes/boots/winter/engineering
name = "engineering winter boots"
desc = "A pair of winter boots. These ones are lined with orange fur and are trimmed in the colours of disaster."
icon_state = "winterboots_eng"
/obj/item/clothing/shoes/boots/winter/atmos
name = "atmospherics winter boots"
desc = "A pair of winter boots. These ones are lined with beige fur, and are trimmed in breath taking colours."
icon_state = "winterboots_atmos"
/obj/item/clothing/shoes/boots/winter/medical
name = "medical winter boots"
desc = "A pair of winter boots. These ones are lined with white fur, and are trimmed like 30cc of dexalin"
icon_state = "winterboots_med"
/obj/item/clothing/shoes/boots/winter/mining
name = "mining winter boots"
desc = "A pair of winter boots. These ones are lined with greyish fur, and their trim is golden!"
icon_state = "winterboots_mining"
/obj/item/clothing/shoes/boots/winter/supply
name = "supply winter boots"
desc = "A pair of winter boots. These ones are lined with the galactic cargonia colors!"
icon_state = "winterboots_sup"
/obj/item/clothing/shoes/boots/winter/hydro
name = "hydroponics winter boots"
desc = "A pair of winter boots. These ones are lined with brown fur, and their trim is ambrosia green"
icon_state = "winterboots_hydro"
/obj/item/clothing/shoes/boots/tactical
name = "tactical boots"
desc = "Tan boots with extra padding and armor."
+18 -18
View File
@@ -123,39 +123,39 @@
if (istype(H, /obj/item/weapon/handcuffs))
attach_cuffs(H, user)
/obj/item/clothing/shoes/hightops
name = "white high tops"
/obj/item/clothing/shoes/hitops
name = "white high-tops"
desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design."
icon_state = "whitehi"
/obj/item/clothing/shoes/hightops/red
name = "red high tops"
/obj/item/clothing/shoes/hitops/red
name = "red high-tops"
icon_state = "redhi"
/obj/item/clothing/shoes/hightops/brown
name = "brown high tops"
/obj/item/clothing/shoes/hitops/brown
name = "brown high-tops"
icon_state = "brownhi"
/obj/item/clothing/shoes/hightops/black
name = "black high tops"
/obj/item/clothing/shoes/hitops/black
name = "black high-tops"
icon_state = "blackhi"
/obj/item/clothing/shoes/hightops/orange
name = "orange high tops"
/obj/item/clothing/shoes/hitops/orange
name = "orange high-tops"
icon_state = "orangehi"
/obj/item/clothing/shoes/hightops/blue
name = "blue high tops"
/obj/item/clothing/shoes/hitops/blue
name = "blue high-tops"
icon_state = "bluehi"
/obj/item/clothing/shoes/hightops/green
name = "green high tops"
/obj/item/clothing/shoes/hitops/green
name = "green high-tops"
icon_state = "greenhi"
/obj/item/clothing/shoes/hightops/purple
name = "purple high tops"
/obj/item/clothing/shoes/hitops/purple
name = "purple high-tops"
icon_state = "purplehi"
/obj/item/clothing/shoes/hightops/yellow
name = "yellow high tops"
/obj/item/clothing/shoes/hitops/yellow
name = "yellow high-tops"
icon_state = "yellowhi"
+1 -1
View File
@@ -34,7 +34,7 @@
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | PHORONGUARD
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
phoronproof = 1
slowdown = 2
slowdown = 0.5
armor = list(melee = 60, bullet = 50, laser = 40,energy = 15, bomb = 30, bio = 100, rad = 50)
siemens_coefficient = 0.2
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+5 -5
View File
@@ -185,10 +185,10 @@ var/global/list/breach_burn_descriptors = list(
repair_power = 2
if("plastic")
repair_power = 1
if(!repair_power)
return
if(istype(src.loc,/mob/living))
user << "<span class='warning'>How do you intend to patch a hardsuit while someone is wearing it?</span>"
return
@@ -206,7 +206,7 @@ var/global/list/breach_burn_descriptors = list(
else if(istype(W, /obj/item/weapon/weldingtool))
if(istype(src.loc,/mob/living))
user << "\red How do you intend to patch a hardsuit while someone is wearing it?"
user << "<font color='red'>How do you intend to patch a hardsuit while someone is wearing it?</font>"
return
if (!damage || ! brute_damage)
@@ -215,7 +215,7 @@ var/global/list/breach_burn_descriptors = list(
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(5))
user << "\red You need more welding fuel to repair this suit."
user << "<font color='red'>You need more welding fuel to repair this suit.</font>"
return
repair_breaches(BRUTE, 3, user)
@@ -227,4 +227,4 @@ var/global/list/breach_burn_descriptors = list(
..(user)
if(can_breach && breaches && breaches.len)
for(var/datum/breach/B in breaches)
user << "\red <B>It has \a [B.descriptor].</B>"
user << "<font color='red'><B>It has \a [B.descriptor].</B></font>"
@@ -36,8 +36,8 @@
activates_on_touch = 1
engage_string = "Eject AI"
activate_string = "Enable Dataspike"
deactivate_string = "Disable Dataspike"
activate_string = "Enable Core Transfer"
deactivate_string = "Disable Core Transfer"
interface_name = "integrated intelligence system"
interface_desc = "A socket that supports a range of artificial intelligence systems."
@@ -168,7 +168,7 @@
if(user)
user << "<span class='danger'>You cannot eject your currently stored AI. Purge it manually.</span>"
return 0
user << "<span class='danger'>You purge the remaining scraps of data from your previous AI, freeing it for use.</span>"
user << "<span class='danger'>You purge the previous AI from your Integrated Intelligence System, freeing it for use.</span>"
if(integrated_ai)
integrated_ai.ghostize()
qdel(integrated_ai)
@@ -183,7 +183,7 @@
/obj/item/rig_module/self_destruct/New()
..()
src.smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread/bad)
src.smoke = new /datum/effect/effect/system/smoke_spread/bad()
src.smoke.attach(src)
/obj/item/rig_module/self_destruct/Destroy()
@@ -477,7 +477,7 @@
for(var/obj/item/weapon/mop_deploy/blade in M.contents)
M.drop_from_inventory(blade)
del(blade)
qdel(blade)
//Space Cleaner Launcher
@@ -520,7 +520,7 @@
user << "<font color='blue'><b>You slot \the [input_device] into the suit module.</b></font>"
user.drop_from_inventory(input_device)
del(input_device)
qdel(input_device)
accepted_item.charges++
return 1
@@ -13,7 +13,7 @@
offline_slowdown = 10
vision_restriction = 1
offline_vision_restriction = 2
siemens_coefficient = 0.75
chest_type = /obj/item/clothing/suit/space/rig/breacher
helm_type = /obj/item/clothing/head/helmet/space/rig/breacher
boot_type = /obj/item/clothing/shoes/magboots/rig/breacher
@@ -25,6 +25,7 @@
icon_state = "breacher_rig"
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 80) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow.
vision_restriction = 0
siemens_coefficient = 0.2
/obj/item/clothing/head/helmet/space/rig/breacher
species_restricted = list("Unathi")
@@ -11,6 +11,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ert
req_access = list(access_cent_specops)
siemens_coefficient= 0.5
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
@@ -30,7 +31,7 @@
suit_type = "ERT engineer"
icon_state = "ert_engineer_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
siemens_coefficient = 0
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
initial_modules = list(
/obj/item/rig_module/ai_container,
@@ -71,6 +72,8 @@
suit_type = "heavy asset protection"
icon_state = "asset_protection_rig"
armor = list(melee = 60, bullet = 50, laser = 50,energy = 40, bomb = 40, bio = 100, rad = 100)
siemens_coefficient= 0.3
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
initial_modules = list(
/obj/item/rig_module/ai_container,
@@ -11,7 +11,8 @@
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
siemens_coefficient = 0.3
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
helm_type = /obj/item/clothing/head/helmet/space/rig/merc
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
@@ -65,6 +65,7 @@
offline_slowdown = 10
offline_vision_restriction = 2
emp_protection = -20
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial
@@ -92,6 +93,7 @@
slowdown = 0
offline_slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/eva
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
@@ -100,6 +102,7 @@
req_access = list()
req_one_access = list()
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/gauntlets/rig/eva
name = "insulated gauntlets"
@@ -127,6 +130,7 @@
slowdown = 0
offline_slowdown = 0
offline_vision_restriction = 0
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
@@ -135,6 +139,7 @@
req_access = list()
req_one_access = list()
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/gauntlets/rig/ce
name = "insulated gauntlets"
@@ -161,6 +166,7 @@
armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 60, bio = 100, rad = 100)
slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
@@ -188,6 +194,7 @@
armor = list(melee = 30, bullet = 15, laser = 20, energy = 60, bomb = 30, bio = 100, rad = 100)
slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
@@ -217,6 +224,7 @@
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
siemens_coefficient= 0.7
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard
@@ -31,7 +31,7 @@
camera = new /obj/machinery/camera(src)
camera.replace_networks(camera_networks)
camera.c_tag = user.name
user << "\blue User scanned as [camera.c_tag]. Camera activated."
user << "<font color='blue'>User scanned as [camera.c_tag]. Camera activated.</font>"
user.update_action_buttons()
return 1
@@ -62,10 +62,6 @@
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
/obj/item/clothing/suit/space/New()
..()
desc += " \"[using_map.station_short]\" is written in large block letters on the back."
/obj/item/clothing/suit/space/equipped(mob/M)
check_limb_support(M)
..()
@@ -6,7 +6,6 @@
item_state_slots = list(slot_r_hand_str = "syndie_helm", slot_l_hand_str = "syndie_helm")
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.6
species_restricted = list("Human")
camera_networks = list(NETWORK_MERCENARY)
light_overlay = "helmet_light_green" //todo: species-specific light overlays
@@ -19,5 +18,4 @@
w_class = ITEMSIZE_NORMAL
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
siemens_coefficient = 0.6
species_restricted = list("Human", "Skrell")
siemens_coefficient = 0.6
@@ -11,7 +11,7 @@
// flags_inv = HIDEEARS|BLOCKHAIR
//Species-specific stuff.
species_restricted = list("Human")
species_restricted = list("Human", "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
@@ -38,7 +38,7 @@
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")
species_restricted = list("Human", "Skrell", "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
@@ -225,18 +225,22 @@
if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead
user << "You pop \the [tank] out of \the [src]'s storage compartment."
tank.forceMove(get_turf(src))
playsound(src, W.usesound, 50, 1)
src.tank = null
else if(choice == cooler)
user << "You pop \the [cooler] out of \the [src]'s storage compartment."
cooler.forceMove(get_turf(src))
playsound(src, W.usesound, 50, 1)
src.cooler = null
else if(choice == helmet)
user << "You detatch \the [helmet] from \the [src]'s helmet mount."
helmet.forceMove(get_turf(src))
playsound(src, W.usesound, 50, 1)
src.helmet = null
else if(choice == boots)
user << "You detatch \the [boots] from \the [src]'s boot mounts."
boots.forceMove(get_turf(src))
playsound(src, W.usesound, 50, 1)
src.boots = null
else
user << "\The [src] does not have anything installed."
+3 -3
View File
@@ -197,10 +197,10 @@
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob)
active = !( active )
if (active)
user << "\blue The reactive armor is now active."
user << "<font color='blue'>The reactive armor is now active.</font>"
icon_state = "reactive"
else
user << "\blue The reactive armor is now inactive."
user << "<font color='blue'>The reactive armor is now inactive.</font>"
icon_state = "reactiveoff"
add_fingerprint(user)
return
@@ -414,7 +414,7 @@
//All of the armor below is mostly unused
/obj/item/clothing/suit/armor/centcomm
name = "Cent. Com. armor"
name = "CentCom armor"
desc = "A suit that protects against some damage."
icon_state = "centcom"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
@@ -257,6 +257,14 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
/obj/item/clothing/suit/straight_jacket/attack_hand(mob/living/user as mob)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(src == H.wear_suit)
to_chat(H, "<span class='notice'>You need help taking this off!</span>")
return
..()
/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."
@@ -332,6 +340,12 @@ obj/item/clothing/suit/kimono
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
flags_inv = HIDEHOLSTER
obj/item/clothing/suit/storage/toggle/peacoat
name = "peacoat"
desc = "A well-tailored, stylish peacoat."
icon_state = "peacoat"
item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat")
flags_inv = HIDEHOLSTER
/*
* stripper
*/
@@ -863,9 +877,11 @@ obj/item/clothing/suit/kimono
if(rolled == 0)
rolled = 1
body_parts_covered &= ~(ARMS)
usr << "<span class='notice'>You roll up the sleeves of your [src].</span>"
else
rolled = 0
body_parts_covered = initial(body_parts_covered)
usr << "<span class='notice'>You roll down the sleeves of your [src].</span>"
update_icon()
@@ -937,3 +953,38 @@ obj/item/clothing/suit/kimono
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/snowsuit
name = "snowsuit"
desc = "A suit made to keep you nice and toasty on cold winter days. Or at least alive."
icon_state = "snowsuit"
item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
/obj/item/clothing/suit/storage/snowsuit/command
name = "command snowsuit"
icon_state = "snowsuit_command"
/obj/item/clothing/suit/storage/snowsuit/security
name = "security snowsuit"
icon_state = "snowsuit_security"
/obj/item/clothing/suit/storage/snowsuit/medical
name = "medical snowsuit"
icon_state = "snowsuit_medical"
/obj/item/clothing/suit/storage/snowsuit/engineering
name = "engineering snowsuit"
icon_state = "snowsuit_engineering"
/obj/item/clothing/suit/storage/snowsuit/cargo
name = "cargo snowsuit"
icon_state = "snowsuit_cargo"
/obj/item/clothing/suit/storage/snowsuit/science
name = "science snowsuit"
icon_state = "snowsuit_science"
+14 -14
View File
@@ -14,47 +14,47 @@
/obj/item/clothing/suit/storage/service/expeditionary
name = "\improper SifGuard jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons."
icon_state = "blackservice_crew"
/obj/item/clothing/suit/storage/service/expeditionary/medical
name = "\improper SifGuard medical jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and blue trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and blue trim."
icon_state = "blackservice_med"
/obj/item/clothing/suit/storage/service/expeditionary/medical/command
name = "\improper SifGuard medical command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and blue trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and blue trim."
icon_state = "blackservice_medcom"
/obj/item/clothing/suit/storage/service/expeditionary/engineering
name = "\improper SifGuard engineering jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and orange trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and orange trim."
icon_state = "blackservice_eng"
/obj/item/clothing/suit/storage/service/expeditionary/engineering/command
name = "\improper SifGuard engineering command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and orange trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and orange trim."
icon_state = "blackservice_engcom"
/obj/item/clothing/suit/storage/service/expeditionary/supply
name = "\improper SifGuard supply jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and brown trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and brown trim."
icon_state = "blackservice_sup"
/obj/item/clothing/suit/storage/service/expeditionary/security
name = "\improper SifGuard security jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and red trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and red trim."
icon_state = "blackservice_sec"
/obj/item/clothing/suit/storage/service/expeditionary/security/command
name = "\improper SifGuard security command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and red trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and red trim."
icon_state = "blackservice_seccom"
/obj/item/clothing/suit/storage/service/expeditionary/command
name = "\improper SifGuard command jacket"
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and gold trim."
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and gold trim."
icon_state = "blackservice_com"
/obj/item/clothing/suit/storage/service/marine
@@ -115,13 +115,13 @@
allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/device/radio,/obj/item/weapon/pen)
/obj/item/clothing/suit/dress/expedition
name = "expeditionary dress jacket"
desc = "A silver and grey dress jacket belonging to the SCG Expeditionary Corps. Fashionable, for the 25th century at least."
name = "SifGuard dress jacket"
desc = "A silver and grey dress jacket belonging to the Sif Defense Force. Fashionable, for the 25th century at least."
icon_state = "greydress"
/obj/item/clothing/suit/dress/expedition/command
name = "expeditionary command dress jacket"
desc = "A gold and grey dress jacket belonging to the SCG Expeditionary Corps. The height of fashion."
name = "SifGuard command dress jacket"
desc = "A gold and grey dress jacket belonging to the Sif Defense Force. The height of fashion."
icon_state = "greydress_com"
/obj/item/clothing/suit/storage/toggle/dress
@@ -136,7 +136,7 @@
desc = "A crisp white SCG Fleet dress jacket with blue and gold accents. Don't get near pasta sauce or vox."
/obj/item/clothing/suit/storage/toggle/dress/fleet/command
name = "expeditionary command dress jacket"
name = "fleet command dress jacket"
desc = "A crisp white SCG Fleet dress jacket dripping with gold accents. So bright it's blinding."
icon_state = "whitedress_com"
item_state = "labcoat"
+2 -3
View File
@@ -8,9 +8,8 @@
pockets.max_storage_space = ITEMSIZE_COST_SMALL * 2
/obj/item/clothing/suit/storage/Destroy()
qdel(pockets)
pockets = null
..()
qdel_null(pockets)
return ..()
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
if (pockets.handle_attack_hand(user))
+3 -1
View File
@@ -78,7 +78,8 @@
name = "Radiation Hood"
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
flags_inv = BLOCKHAIR
// flags_inv = BLOCKHAIR
item_flags = THICKMATERIAL
body_parts_covered = HEAD|FACE|EYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
@@ -94,3 +95,4 @@
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
item_flags = THICKMATERIAL
+134
View File
@@ -0,0 +1,134 @@
/obj/item/clothing/suit/storage/seromi/cloak
name = "black and orange cloak "
desc = "It drapes over a Teshari's shoulders and closes at the neck with pockets convienently placed inside."
icon = 'icons/mob/species/seromi/teshari_cloak.dmi'
icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi'
icon_state = "tesh_cloak_bo"
item_state = "tesh_cloak_bo"
species_restricted = list("Teshari")
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/seromi/cloak/black_orange
name = "black and orange cloak"
icon_state = "tesh_cloak_bo"
item_state = "tesh_cloak_bo"
/obj/item/clothing/suit/storage/seromi/cloak/black_grey
name = "black and grey cloak"
icon_state = "tesh_cloak_bg"
item_state = "tesh_cloak_bg"
/obj/item/clothing/suit/storage/seromi/cloak/black_midgrey
name = "black and medium grey cloak"
icon_state = "tesh_cloak_bmg"
item_state = "tesh_cloak_bmg"
/obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey
name = "black and light grey cloak"
icon_state = "tesh_cloak_blg"
item_state = "tesh_cloak_blg"
/obj/item/clothing/suit/storage/seromi/cloak/black_white
name = "black and white cloak"
icon_state = "tesh_cloak_bw"
item_state = "tesh_cloak_bw"
/obj/item/clothing/suit/storage/seromi/cloak/black_red
name = "black and red cloak"
icon_state = "tesh_cloak_br"
item_state = "tesh_cloak_br"
/obj/item/clothing/suit/storage/seromi/cloak/black
name = "black cloak"
icon_state = "tesh_cloak_bn"
item_state = "tesh_cloak_bn"
/obj/item/clothing/suit/storage/seromi/cloak/black_yellow
name = "black and yellow cloak"
icon_state = "tesh_cloak_by"
item_state = "tesh_cloak_by"
/obj/item/clothing/suit/storage/seromi/cloak/black_green
name = "black and Green cloak"
icon_state = "tesh_cloak_bgr"
item_state = "tesh_cloak_bgr"
/obj/item/clothing/suit/storage/seromi/cloak/black_blue
name = "black and blue cloak"
icon_state = "tesh_cloak_bbl"
item_state = "tesh_cloak_bbl"
/obj/item/clothing/suit/storage/seromi/cloak/black_purple
name = "black and purple cloak"
icon_state = "tesh_cloak_bp"
item_state = "tesh_cloak_bp"
/obj/item/clothing/suit/storage/seromi/cloak/black_pink
name = "black and pink cloak"
icon_state = "tesh_cloak_bpi"
item_state = "tesh_cloak_bpi"
/obj/item/clothing/suit/storage/seromi/cloak/black_brown
name = "black and brown cloak"
icon_state = "tesh_cloak_bbr"
item_state = "tesh_cloak_bbr"
/obj/item/clothing/suit/storage/seromi/cloak/orange_grey
name = "orange and grey cloak"
icon_state = "tesh_cloak_og"
item_state = "tesh_cloak_og"
/obj/item/clothing/suit/storage/seromi/cloak/rainbow
name = "rainbow cloak"
icon_state = "tesh_cloak_rainbow"
item_state = "tesh_cloak_rainbow"
/obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey
name = "light grey and grey cloak"
icon_state = "tesh_cloak_lgg"
item_state = "tesh_cloak_lgg"
/obj/item/clothing/suit/storage/seromi/cloak/white_grey
name = "white and grey cloak"
icon_state = "tesh_cloak_wg"
item_state = "tesh_cloak_wg"
/obj/item/clothing/suit/storage/seromi/cloak/red_grey
name = "red and grey cloak"
icon_state = "tesh_cloak_rg"
item_state = "tesh_cloak_rg"
/obj/item/clothing/suit/storage/seromi/cloak/orange
name = "orange cloak"
icon_state = "tesh_cloak_on"
item_state = "tesh_cloak_on"
/obj/item/clothing/suit/storage/seromi/cloak/yellow_grey
name = "yellow and grey cloak"
icon_state = "tesh_cloak_yg"
item_state = "tesh_cloak_yg"
/obj/item/clothing/suit/storage/seromi/cloak/green_grey
name = "green and grey cloak"
icon_state = "tesh_cloak_gg"
item_state = "tesh_cloak_gg"
/obj/item/clothing/suit/storage/seromi/cloak/blue_grey
name = "blue and grey cloak"
icon_state = "tesh_cloak_blg"
item_state = "tesh_cloak_blg"
/obj/item/clothing/suit/storage/seromi/cloak/purple_grey
name = "purple and grey cloak"
icon_state = "tesh_cloak_pg"
item_state = "tesh_cloak_pg"
/obj/item/clothing/suit/storage/seromi/cloak/pink_grey
name = "black and orange cloak"
icon_state = "tesh_cloak_pig"
item_state = "tesh_cloak_pig"
/obj/item/clothing/suit/storage/seromi/cloak/brown_grey
name = "purple and grey cloak"
icon_state = "tesh_cloak_brg"
item_state = "tesh_cloak_brg"
@@ -31,14 +31,14 @@
/obj/item/clothing/accessory/armband/med/cross
name = "medic armband"
desc = "A white armband with a red cross on it. Typically used by people in the Medical department."
desc = "A white armband with a blue cross on it. Typically used by people in the Medical department."
icon_state = "medicband"
/obj/item/clothing/accessory/armband/med/color
name = "armband"
desc = "A fancy armband."
/obj/item/clothing/accessory/armband/medgreen
/obj/item/clothing/accessory/armband/medblue
name = "EMT armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green."
icon_state = "medgreen"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and blue."
icon_state = "medblue"
@@ -119,6 +119,11 @@
name = "flower-pattern shirt"
desc = "You probably need some welder googles to look at this."
icon_state = "hawaii"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING | SLOT_TIE
body_parts_covered = UPPER_TORSO|LOWER_TORSO
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
/obj/item/clothing/accessory/hawaii/red
icon_state = "hawaii2"
@@ -172,4 +177,56 @@
/obj/item/clothing/accessory/wcoat/swvest/red
name = "red sweatervest"
icon_state = "sweatervest_red"
icon_state = "sweatervest_red"
//Sweaters.
/obj/item/clothing/accessory/sweater
name = "sweater"
desc = "A warm knit sweater."
icon_override = 'icons/mob/ties.dmi'
icon_state = "sweater"
slot_flags = SLOT_OCLOTHING | SLOT_TIE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
/obj/item/clothing/accessory/sweater/pink
name = "pink sweater"
desc = "A warm knit sweater. This one's pink in color."
icon_state = "sweater_pink"
/obj/item/clothing/accessory/sweater/mint
name = "mint sweater"
desc = "A warm knit sweater. This one has a minty tint to it."
icon_state = "sweater_mint"
/obj/item/clothing/accessory/sweater/blue
name = "blue sweater"
desc = "A warm knit sweater. This one's colored in a lighter blue."
icon_state = "sweater_blue"
/obj/item/clothing/accessory/sweater/heart
name = "heart sweater"
desc = "A warm knit sweater. This one's colored in a lighter blue, and has a big pink heart right in the center!"
icon_state = "sweater_blueheart"
/obj/item/clothing/accessory/sweater/nt
name = "dark blue sweater"
desc = "A warm knit sweater. This one's a darker blue."
icon_state = "sweater_nt"
/obj/item/clothing/accessory/sweater/keyhole
name = "keyhole sweater"
desc = "A lavender sweater with an open chest."
icon_state = "keyholesweater"
/obj/item/clothing/accessory/sweater/blackneck
name = "black turtleneck"
desc = "A tight turtleneck, entirely black in coloration."
icon_state = "turtleneck_black"
/obj/item/clothing/accessory/sweater/winterneck
name = "Christmas turtleneck"
desc = "A really cheesy holiday sweater, it actually kinda itches."
icon_state = "turtleneck_winterred"
@@ -107,7 +107,7 @@
if(!H.holstered)
var/obj/item/W = usr.get_active_hand()
if(!istype(W, /obj/item))
usr << "<span class='warning'>You need your gun equiped to holster it.</span>"
usr << "<span class='warning'>You need your gun equipped to holster it.</span>"
return
H.holster(W, usr)
else
+47 -7
View File
@@ -6,6 +6,12 @@
icon_state = "ba_suit"
rolled_sleeves = 0
/obj/item/clothing/under/rank/bartender/skirt
desc = "Short and cute."
name = "bartender's skirt"
icon_state = "ba_suit_skirt"
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Colony Director\"."
name = "colony director's jumpsuit"
@@ -97,6 +103,11 @@
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/black)
/obj/item/clothing/under/rank/internalaffairs/skirt
desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut."
name = "Internal Affairs skirt"
icon_state = "internalaffairs_skirt"
/obj/item/clothing/under/rank/janitor
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
@@ -106,43 +117,72 @@
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
name = "lawyer suit"
/obj/item/clothing/under/lawyer/black
name = "black Lawyer suit"
name = "black lawyer suit"
icon_state = "lawyer_black"
/obj/item/clothing/under/lawyer/black/skirt
name = "black lawyer skirt"
icon_state = "lawyer_black_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
/obj/item/clothing/under/lawyer/female
name = "black Lawyer suit"
name = "black lawyer suit"
icon_state = "black_suit_fem"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
/obj/item/clothing/under/lawyer/red
name = "red Lawyer suit"
name = "red lawyer suit"
icon_state = "lawyer_red"
/obj/item/clothing/under/lawyer/red/skirt
name = "red lawyer skirt"
icon_state = "lawyer_red_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
/obj/item/clothing/under/lawyer/blue
name = "blue Lawyer suit"
name = "blue lawyer suit"
icon_state = "lawyer_blue"
/obj/item/clothing/under/lawyer/blue/skirt
name = "blue lawyer skirt"
icon_state = "lawyer_blue_skirt"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
/obj/item/clothing/under/lawyer/bluesuit
name = "Blue Suit"
name = "blue suit"
desc = "A classy suit."
icon_state = "bluesuit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
starting_accessories = list(/obj/item/clothing/accessory/red)
/obj/item/clothing/under/lawyer/bluesuit/skirt
name = "blue skirt suit"
icon_state = "bluesuit_skirt"
/obj/item/clothing/under/lawyer/purpsuit
name = "Purple Suit"
name = "purple suit"
icon_state = "lawyer_purp"
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
/obj/item/clothing/under/lawyer/purpsuit/skirt
name = "purple skirt suit"
icon_state = "lawyer_purp_skirt"
/obj/item/clothing/under/lawyer/oldman
name = "Old Man's Suit"
desc = "A classic suit for the older gentleman with built in back support."
icon_state = "oldman"
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
/obj/item/clothing/under/oldwoman
name = "Old Woman's Attire"
desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt."
icon_state = "oldwoman"
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
/obj/item/clothing/under/librarian
name = "sensible suit"
desc = "It's very... sensible."
+10 -15
View File
@@ -114,40 +114,35 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/blue //Why are these not /obj/item/clothing/under/rank/medical/scrubs/ ?
name = "medical scrubs"
/obj/item/clothing/under/rank/medical/scrubs
name = "blue scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
/obj/item/clothing/under/rank/medical/scrubs/green
name = "green scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
/obj/item/clothing/under/rank/medical/scrubs/purple
name = "purple scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/black
name = "medical scrubs"
/obj/item/clothing/under/rank/medical/scrubs/black
name = "black scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black."
icon_state = "scrubsblack"
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
rolled_sleeves = -1
/obj/item/clothing/under/rank/medical/navyblue
name = "medical scrubs"
/obj/item/clothing/under/rank/medical/scrubs/navyblue
name = "navy blue scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue."
icon_state = "scrubsnavyblue"
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
rolled_sleeves = -1
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
@@ -113,6 +113,12 @@
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/wcoat)
/obj/item/clothing/under/det/skirt
name = "detective's skirt"
icon_state = "detective_skirt"
desc = "A serious-looking white blouse paired with a formal black pencil skirt."
item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit")
/*
* Head of Security
*/
+147 -30
View File
@@ -21,6 +21,11 @@
desc = "A white suit, suitable for an excellent host"
icon_state = "scratch"
/obj/item/clothing/under/scratch/skirt
name = "white skirt suit"
icon_state = "scratch_skirt"
item_state_slots = list(slot_r_hand_str = "scratch", slot_l_hand_str = "scratch")
/obj/item/clothing/under/sl_suit
desc = "It's a very amish looking suit."
name = "amish suit"
@@ -98,6 +103,11 @@
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/darkgreen)
/obj/item/clothing/under/gov/skirt
name = "Green formal skirt uniform"
desc = "A neat proper uniform of someone on offical business. The top button is sewn shut."
icon_state = "greensuit_skirt"
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
@@ -147,24 +157,37 @@
/obj/item/clothing/under/gentlesuit
name = "gentlemans suit"
desc = "A silk black shirt with a white tie and a matching gray vest and slacks. Feels proper."
desc = "A silk black shirt with matching gray slacks. Feels proper."
icon_state = "gentlesuit"
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
rolled_sleeves = 0
starting_accessories = list(/obj/item/clothing/accessory/white, /obj/item/clothing/accessory/wcoat/gentleman)
/obj/item/clothing/under/gentlesuit/skirt
name = "lady's suit"
desc = "A silk black blouse with a matching gray skirt. Feels proper."
icon_state = "gentlesuit_skirt"
/obj/item/clothing/under/gimmick/rank/captain/suit
name = "colony director's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
icon_state = "green_suit"
item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
/obj/item/clothing/under/gimmick/rank/captain/suit/skirt
name = "colony director's skirt suit"
icon_state = "green_suit_skirt"
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit
name = "head of personnel's suit"
desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
icon_state = "teal_suit"
item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt
name = "head of personnel's skirt suit"
icon_state = "teal_suit_skirt"
/obj/item/clothing/under/suit_jacket
name = "black suit"
desc = "A black suit and red tie. Very formal."
@@ -177,8 +200,13 @@
icon_state = "really_black_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
/obj/item/clothing/under/suit_jacket/really_black/skirt
name = "executive skirt suit"
desc = "A formal black suit and red necktie, intended for the station's finest."
icon_state = "really_black_suit_skirt"
/obj/item/clothing/under/suit_jacket/female
name = "executive suit"
name = "female executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
@@ -196,6 +224,11 @@
icon_state = "red_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
/obj/item/clothing/under/suit_jacket/red/skirt
name = "red skirt suit"
desc = "A red suit and blue necktie. Somewhat formal."
icon_state = "red_suit_skirt"
/obj/item/clothing/under/schoolgirl
name = "schoolgirl uniform"
desc = "It's just like one of my Japanese animes!"
@@ -292,6 +325,11 @@
desc = "A simple maid uniform for housekeeping."
icon_state = "janimaid"
/obj/item/clothing/under/dress/sexymaid
name = "sexy maid uniform"
desc = "You must be a bit risque teasing all of them in a maid uniform!"
icon_state = "sexymaid"
/obj/item/clothing/under/dress/dress_fire
name = "flame dress"
desc = "A small black dress with blue flames print on it."
@@ -341,6 +379,21 @@
icon_state = "huresource"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/black_corset
name = "black corset"
desc = "A black corset and skirt for those fancy nights out."
icon_state = "black_corset"
/obj/item/clothing/under/dress/flower_dress
name = "flower dress"
desc = "A beautiful dress with a skirt of flowers."
icon_state = "flower_dress"
/obj/item/clothing/under/dress/red_swept_dress
name = "red swept dress"
desc = "A red dress that sweeps to the side."
icon_state = "red_swept_dress"
/*
* wedding stuff
*/
@@ -421,6 +474,10 @@
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
starting_accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/charcoal_jacket)
/obj/item/clothing/under/suit_jacket/charcoal/skirt
name = "charcoal skirt"
icon_state = "charcoal_suit_skirt"
/obj/item/clothing/under/suit_jacket/navy
name = "navy suit"
desc = "A navy suit and red tie, intended for the station's finest."
@@ -428,6 +485,10 @@
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
starting_accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/navy_jacket)
/obj/item/clothing/under/suit_jacket/navy/skirt
name = "navy skirt"
icon_state = "navy_suit_skirt"
/obj/item/clothing/under/suit_jacket/burgundy
name = "burgundy suit"
desc = "A burgundy suit and black tie. Somewhat formal."
@@ -435,6 +496,10 @@
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/burgundy_jacket)
/obj/item/clothing/under/suit_jacket/burgundy/skirt
name = "burgundy skirt"
icon_state = "burgundy_suit_skirt"
/obj/item/clothing/under/suit_jacket/checkered
name = "checkered suit"
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
@@ -442,6 +507,10 @@
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/checkered_jacket)
/obj/item/clothing/under/suit_jacket/checkered/skirt
name = "checkered skirt"
icon_state = "checkered_suit_skirt"
/obj/item/clothing/under/suit_jacket/tan
name = "tan suit"
desc = "A tan suit. Smart, but casual."
@@ -449,6 +518,10 @@
item_state_slots = list(slot_r_hand_str = "tan_suit", slot_l_hand_str = "tan_suit")
starting_accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/tan_jacket)
/obj/item/clothing/under/suit_jacket/tan/skirt
name = "tan skirt"
icon_state = "tan_suit_skirt"
/obj/item/clothing/under/serviceoveralls
name = "workman outfit"
desc = "The very image of a working man. Not that you're probably doing work."
@@ -459,7 +532,7 @@
/obj/item/clothing/under/cheongsam
name = "white cheongsam"
desc = "It is a white cheongsam dress."
icon_state = "mai_yang"
icon_state = "cheongsam-white"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/cheongsam/red
@@ -477,12 +550,37 @@
desc = "It is a black cheongsam dress."
icon_state = "cheongsam-black"
/obj/item/clothing/under/cheongsam/darkred
name = "dark red cheongsam"
desc = "It is a dark red cheongsam dress."
icon_state = "cheongsam-darkred"
/obj/item/clothing/under/cheongsam/green
name = "green cheongsam"
desc = "It is a green cheongsam dress."
icon_state = "cheongsam-green"
/obj/item/clothing/under/cheongsam/purple
name = "purple cheongsam"
desc = "It is a purple cheongsam dress."
icon_state = "cheongsam-purple"
/obj/item/clothing/under/cheongsam/darkblue
name = "dark blue cheongsam"
desc = "It is a dark blue cheongsam dress."
icon_state = "cheongsam-darkblue"
/obj/item/clothing/under/blazer
name = "blue blazer"
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
icon_state = "blue_blazer"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
/obj/item/clothing/under/blazer/skirt
name = "ladies blue blazer"
desc = "A bold but yet conservative outfit, a red pencil skirt and a navy blazer."
icon_state = "blue_blazer_skirt"
/obj/item/clothing/under/croptop
name = "crop top"
desc = "A shirt that has had the top cropped. This one is NT sponsored."
@@ -558,31 +656,56 @@
name = "black swimsuit"
desc = "An oldfashioned black swimsuit."
icon_state = "swim_black"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/blue
name = "blue swimsuit"
desc = "An oldfashioned blue swimsuit."
icon_state = "swim_blue"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/purple
name = "purple swimsuit"
desc = "An oldfashioned purple swimsuit."
icon_state = "swim_purp"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/green
name = "green swimsuit"
desc = "An oldfashioned green swimsuit."
icon_state = "swim_green"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/red
name = "red swimsuit"
desc = "An oldfashioned red swimsuit."
icon_state = "swim_red"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/striped
name = "striped swimsuit"
desc = "A more revealing striped swimsuit."
icon_state = "swim_striped"
/obj/item/clothing/under/swimsuit/white
name = "white swimsuit"
desc = "A classic one piece."
icon_state = "swim_white"
/obj/item/clothing/under/swimsuit/earth
name = "earthen swimsuit"
desc = "A design more popular on Earth these days."
icon_state = "swim_earth"
/obj/item/clothing/under/swimsuit/stripper/stripper_pink
name = "pink swimsuit"
desc = "A rather skimpy pink swimsuit."
icon_state = "stripper_p"
/obj/item/clothing/under/swimsuit/stripper/stripper_green
name = "green swimsuit"
desc = "A rather skimpy green swimsuit."
icon_state = "stripper_g"
/obj/item/clothing/under/swimsuit/stripper/mankini
name = "mankini"
desc = "No honest man would wear this abomination"
icon_state = "mankini"
/*
* pyjamas
@@ -601,27 +724,6 @@
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
/obj/item/clothing/under/stripper
body_parts_covered = 0
/obj/item/clothing/under/stripper/stripper_pink
name = "pink swimsuit"
desc = "A rather skimpy pink swimsuit."
icon_state = "stripper_p"
siemens_coefficient = 1
/obj/item/clothing/under/stripper/stripper_green
name = "green swimsuit"
desc = "A rather skimpy green swimsuit."
icon_state = "stripper_g"
siemens_coefficient = 1
/obj/item/clothing/under/stripper/mankini
name = "mankini"
desc = "No honest man would wear this abomination"
icon_state = "mankini"
siemens_coefficient = 1
/*
*Misc Uniforms
*/
@@ -691,4 +793,19 @@
desc = "A warm looking sweater and a pair of dark blue slacks."
name = "sweater"
icon_state = "turtleneck"
worn_state = "turtleneck"
worn_state = "turtleneck"
//Uniforms end above here.
/obj/item/clothing/under/medigown
name = "medical gown"
desc = "A flimsy examination gown, the back ties never close."
icon_state = "medicalgown"
worn_state = "medicalgown"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/bathrobe
name = "bathrobe"
desc = "A fluffy robe to keep you from showing off to the world."
icon_state = "bathrobe"
worn_state = "bathrobe"
+12 -12
View File
@@ -12,7 +12,7 @@
/obj/item/clothing/under/pt/expeditionary
name = "\improper SifGuard pt uniform"
desc = "A baggy shirt bearing the seal of the Sif Homeguard Corps and some dorky looking blue shorts."
desc = "A baggy shirt bearing the seal of the Sif Defense Force and some dorky looking blue shorts."
icon_state = "expeditionpt"
worn_state = "expeditionpt"
@@ -41,56 +41,56 @@
/obj/item/clothing/under/utility/expeditionary
name = "\improper SifGuard uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim."
icon_state = "blackutility_crew"
worn_state = "blackutility_crew"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
/obj/item/clothing/under/utility/expeditionary/medical
name = "\improper SifGuard medical uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and blue blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and blue blazes."
icon_state = "blackutility_med"
worn_state = "blackutility_med"
/obj/item/clothing/under/utility/expeditionary/medical/command
name = "\improper SifGuard medical command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and blue blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and blue blazes."
icon_state = "blackutility_medcom"
worn_state = "blackutility_medcom"
/obj/item/clothing/under/utility/expeditionary/engineering
name = "\improper SifGuard engineering uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and organge blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and organge blazes."
icon_state = "blackutility_eng"
worn_state = "blackutility_eng"
/obj/item/clothing/under/utility/expeditionary/engineering/command
name = "\improper SifGuard engineering command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and organge blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and organge blazes."
icon_state = "blackutility_engcom"
worn_state = "blackutility_engcom"
/obj/item/clothing/under/utility/expeditionary/supply
name = "\improper SifGuard supply uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and brown blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and brown blazes."
icon_state = "blackutility_sup"
worn_state = "blackutility_sup"
/obj/item/clothing/under/utility/expeditionary/security
name = "\improper SifGuard security uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and red blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and red blazes."
icon_state = "blackutility_sec"
worn_state = "blackutility_sec"
/obj/item/clothing/under/utility/expeditionary/security/command
name = "\improper SifGuard security command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and red blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and red blazes."
icon_state = "blackutility_seccom"
worn_state = "blackutility_seccom"
/obj/item/clothing/under/utility/expeditionary/command
name = "\improper SifGuard command uniform"
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and gold blazes."
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and gold blazes."
icon_state = "blackutility_com"
worn_state = "blackutility_com"
@@ -222,13 +222,13 @@
/obj/item/clothing/under/mildress/expeditionary
name = "\improper SifGuard dress uniform"
desc = "The dress uniform of the Sif Homeguard Corps in silver trim."
desc = "The dress uniform of the Sif Defense Force in silver trim."
icon_state = "greydress"
worn_state = "greydress"
/obj/item/clothing/under/mildress/expeditionary/command
name = "\improper SifGuard command dress uniform"
desc = "The dress uniform of the Sif Homeguard Corps in gold trim."
desc = "The dress uniform of the Sif Defense Force in gold trim."
icon_state = "greydress_com"
worn_state = "greydress_com"
+149 -9
View File
@@ -1,27 +1,167 @@
/obj/item/clothing/under/seromi
name = "small grey smock"
desc = "It looks fitted to nonhuman proportions."
icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
icon_state = "seromi_grey"
species_restricted = list("Teshari")
/obj/item/clothing/under/seromi/smock
name = "small grey smock"
desc = "It looks fitted to nonhuman proportions."
icon_state = "seromi_grey"
body_parts_covered = 0 // It's a thin piece of cloth with a neck hole.
/obj/item/clothing/under/seromi/white
/obj/item/clothing/under/seromi/smock/white
name = "small white smock"
icon_state = "seromi_white"
/obj/item/clothing/under/seromi/red
/obj/item/clothing/under/seromi/smock/red
name = "small Security smock"
icon_state = "seromi_red"
/obj/item/clothing/under/seromi/yellow
/obj/item/clothing/under/seromi/smock/yellow
name = "small Engineering smock"
icon_state = "seromi_yellow"
/obj/item/clothing/under/seromi/medical
/obj/item/clothing/under/seromi/smock/medical
name = "small Medical uniform"
icon_state = "seromi_medical"
/obj/item/clothing/under/seromi/rainbow
/obj/item/clothing/under/seromi/smock/science
name = "small Research uniform"
icon_state = "teshari_science"
/obj/item/clothing/under/seromi/smock/rainbow
name = "small rainbow smock"
icon_state = "seromi_rainbow"
icon_state = "seromi_rainbow"
/obj/item/clothing/under/seromi/undercoat
desc = "A Teshari traditional garb, with a modern twist! Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!"
icon = 'icons/mob/species/seromi/teshari_uniform.dmi'
icon_override = 'icons/mob/species/seromi/teshari_uniform.dmi'
icon_state = "tesh_uniform_bo"
item_state = "tesh_uniform_bo"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/seromi/undercoat/black_orange
name = "black and orange undercoat"
icon_state = "tesh_uniform_bo"
item_state = "tesh_uniform_bo"
/obj/item/clothing/under/seromi/undercoat/black_grey
name = "black and grey undercoat"
icon_state = "tesh_uniform_bg"
item_state = "tesh_uniform_bg"
/obj/item/clothing/under/seromi/undercoat/black_midgrey
name = "black and medium grey undercoat"
icon_state = "tesh_uniform_bmg"
item_state = "tesh_uniform_bmg"
/obj/item/clothing/under/seromi/undercoat/black_lightgrey
name = "black and light grey undercoat"
icon_state = "tesh_uniform_blg"
item_state = "tesh_uniform_blg"
/obj/item/clothing/under/seromi/undercoat/black_white
name = "black and white undercoat"
icon_state = "tesh_uniform_bw"
item_state = "tesh_uniform_bw"
/obj/item/clothing/under/seromi/undercoat/black_red
name = "black and red undercoat"
icon_state = "tesh_uniform_br"
item_state = "tesh_uniform_br"
/obj/item/clothing/under/seromi/undercoat/black
name = "black undercoat"
icon_state = "tesh_uniform_bn"
item_state = "tesh_uniform_bn"
/obj/item/clothing/under/seromi/undercoat/black_yellow
name = "black and yellow undercoat"
icon_state = "tesh_uniform_by"
item_state = "tesh_uniform_by"
/obj/item/clothing/under/seromi/undercoat/black_green
name = "black and Green undercoat"
icon_state = "tesh_uniform_bgr"
item_state = "tesh_uniform_bgr"
/obj/item/clothing/under/seromi/undercoat/black_blue
name = "black and blue undercoat"
icon_state = "tesh_uniform_bbl"
item_state = "tesh_uniform_bbl"
/obj/item/clothing/under/seromi/undercoat/black_purple
name = "black and purple undercoat"
icon_state = "tesh_uniform_bp"
item_state = "tesh_uniform_bp"
/obj/item/clothing/under/seromi/undercoat/black_pink
name = "black and pink undercoat"
icon_state = "tesh_uniform_bpi"
item_state = "tesh_uniform_bpi"
/obj/item/clothing/under/seromi/undercoat/black_brown
name = "black and brown undercoat"
icon_state = "tesh_uniform_bbr"
item_state = "tesh_uniform_bbr"
/obj/item/clothing/under/seromi/undercoat/orange_grey
name = "orange and grey undercoat"
icon_state = "tesh_uniform_og"
item_state = "tesh_uniform_og"
/obj/item/clothing/under/seromi/undercoat/rainbow
name = "rainbow undercoat"
icon_state = "tesh_uniform_rainbow"
item_state = "tesh_uniform_rainbow"
/obj/item/clothing/under/seromi/undercoat/lightgrey_grey
name = "light grey and grey undercoat"
icon_state = "tesh_uniform_lgg"
item_state = "tesh_uniform_lgg"
/obj/item/clothing/under/seromi/undercoat/white_grey
name = "white and grey undercoat"
icon_state = "tesh_uniform_wg"
item_state = "tesh_uniform_wg"
/obj/item/clothing/under/seromi/undercoat/red_grey
name = "red and grey undercoat"
icon_state = "tesh_uniform_rg"
item_state = "tesh_uniform_rg"
/obj/item/clothing/under/seromi/undercoat/orange
name = "orange undercoat"
icon_state = "tesh_uniform_on"
item_state = "tesh_uniform_on"
/obj/item/clothing/under/seromi/undercoat/yellow_grey
name = "yellow and grey undercoat"
icon_state = "tesh_uniform_yg"
item_state = "tesh_uniform_yg"
/obj/item/clothing/under/seromi/undercoat/green_grey
name = "green and grey undercoat"
icon_state = "tesh_uniform_gg"
item_state = "tesh_uniform_gg"
/obj/item/clothing/under/seromi/undercoat/blue_grey
name = "blue and grey undercoat"
icon_state = "tesh_uniform_blg"
item_state = "tesh_uniform_blg"
/obj/item/clothing/under/seromi/undercoat/purple_grey
name = "purple and grey undercoat"
icon_state = "tesh_uniform_pg"
item_state = "tesh_uniform_pg"
/obj/item/clothing/under/seromi/undercoat/pink_grey
name = "black and orange undercoat"
icon_state = "tesh_uniform_pig"
item_state = "tesh_uniform_pig"
/obj/item/clothing/under/seromi/undercoat/brown_grey
name = "purple and grey undercoat"
icon_state = "tesh_uniform_brg"
item_state = "tesh_uniform_brg"
@@ -127,7 +127,7 @@
if(bloodsamp.dna != null)
data = "Spectometric analysis on provided sample has determined the presence of [bloodsamp.dna.len] strings of DNA.<br><br>"
for(var/blood in bloodsamp.dna)
data += "\blue Blood type: [bloodsamp.dna[blood]]<br>\nDNA: [blood]<br><br>"
data += "<font color='blue'>Blood type: [bloodsamp.dna[blood]]<br>\nDNA: [blood]<br><br></font>"
else
data += "No DNA found.<br>"
P.info = "<b>[src] analysis report #[report_num]</b><br>"

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