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

Conflicts:
	code/game/objects/structures/stool_bed_chair_nest/bed.dm
	code/modules/mob/mob_grab.dm
This commit is contained in:
Hubblenaut
2015-05-12 14:39:21 +02:00
929 changed files with 26939 additions and 26921 deletions

View File

@@ -277,6 +277,13 @@ var/global/floorIsLava = 0
var/dat = "<html><head><title>Info on [key]</title></head>"
dat += "<body>"
var/p_age = "unknown"
for(var/client/C in clients)
if(C.ckey == key)
p_age = C.player_age
break
dat +="<span style='color:#000000; font-weight: bold'>Player age: [p_age]</span><br>"
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
@@ -747,20 +754,43 @@ var/global/floorIsLava = 0
set category = "Server"
set desc="Globally Toggles OOC"
set name="Toggle OOC"
if(!check_rights(R_ADMIN))
return
config.ooc_allowed = !(config.ooc_allowed)
if (config.ooc_allowed)
world << "<B>The OOC channel has been globally enabled!</B>"
else
world << "<B>The OOC channel has been globally disabled!</B>"
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
log_and_message_admins("toggled OOC.")
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglelooc()
set category = "Server"
set desc="Globally Toggles LOOC"
set name="Toggle LOOC"
if(!check_rights(R_ADMIN))
return
config.looc_allowed = !(config.looc_allowed)
if (config.looc_allowed)
world << "<B>The LOOC channel has been globally enabled!</B>"
else
world << "<B>The LOOC channel has been globally disabled!</B>"
log_and_message_admins("toggled LOOC.")
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/toggledsay()
set category = "Server"
set desc="Globally Toggles DSAY"
set name="Toggle DSAY"
if(!check_rights(R_ADMIN))
return
config.dsay_allowed = !(config.dsay_allowed)
if (config.dsay_allowed)
world << "<B>Deadchat has been globally enabled!</B>"
@@ -774,6 +804,10 @@ var/global/floorIsLava = 0
set category = "Server"
set desc="Toggle Dead OOC."
set name="Toggle Dead OOC"
if(!check_rights(R_ADMIN))
return
config.dooc_allowed = !( config.dooc_allowed )
log_admin("[key_name(usr)] toggled Dead OOC.")
message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1)

View File

@@ -58,6 +58,7 @@ var/list/admin_verbs_admin = list(
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
/client/proc/secrets,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
@@ -109,7 +110,8 @@ var/list/admin_verbs_fun = list(
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/client/proc/editappear
/client/proc/editappear,
/client/proc/roll_dices
)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_fruit,
@@ -254,6 +256,7 @@ var/list/admin_verbs_hideable = list(
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/enable_debug_verbs,
/client/proc/roll_dices,
/proc/possess,
/proc/release
)
@@ -523,7 +526,7 @@ var/list/admin_verbs_mentor = list(
if(C)
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
C << "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes."
del(C)
qdel(C)
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME)

View File

@@ -16,7 +16,7 @@ var/list/admin_datums = list()
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
if(!ckey)
error("Admin datum created without a ckey argument. Datum has been deleted")
del(src)
qdel(src)
return
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
rank = initial_rank
@@ -91,5 +91,5 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
/client/proc/deadmin()
if(holder)
holder.disassociate()
//del(holder)
//qdel(holder)
return 1

View File

@@ -1,167 +1,167 @@
//This stuff was originally intended to be integrated into the ban-system I was working on
//but it's safe to say that'll never be finished. So I've merged it into the current player panel.
//enjoy ~Carn
/*
#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
datum/admins/proc/notes_show(var/ckey)
usr << browse("<head><title>Player Notes</title></head><body>[notes_gethtml(ckey)]</body>","window=player_notes;size=700x400")
datum/admins/proc/notes_gethtml(var/ckey)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return "<font color='red'>Error: Cannot access [NOTESFILE]</font>"
if(ckey)
. = "<b>Notes for <a href='?src=\ref[src];notes=show'>[ckey]</a>:</b> <a href='?src=\ref[src];notes=add;ckey=[ckey]'>\[+\]</a> <a href='?src=\ref[src];notes=remove;ckey=[ckey]'>\[-\]</a><br>"
notesfile.cd = "/[ckey]"
var/index = 1
while( !notesfile.eof )
var/note
notesfile >> note
. += "[note] <a href='?src=\ref[src];notes=remove;ckey=[ckey];from=[index]'>\[-\]</a><br>"
index++
else
. = "<b>All Notes:</b> <a href='?src=\ref[src];notes=add'>\[+\]</a> <a href='?src=\ref[src];notes=remove'>\[-\]</a><br>"
notesfile.cd = "/"
for(var/dir in notesfile.dir)
. += "<a href='?src=\ref[src];notes=show;ckey=[dir]'>[dir]</a><br>"
return
//handles adding notes to the end of a ckey's buffer
//originally had seperate entries such as var/by to record who left the note and when
//but the current bansystem is a heap of dung.
/proc/notes_add(var/ckey, var/note)
if(!ckey)
ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null)
if(!ckey) return
if(!note)
note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null)
if(!note) return
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return
notesfile.cd = "/[ckey]"
notesfile.eof = 1 //move to the end of the buffer
notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]"
return
//handles removing entries from the buffer, or removing the entire directory if no start_index is given
/proc/notes_remove(var/ckey, var/start_index, var/end_index)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return
if(!ckey)
notesfile.cd = "/"
ckey = ckey(input(usr,"Who would you like to remove notes for?","Enter a ckey",null) as null|anything in notesfile.dir)
if(!ckey) return
if(start_index)
notesfile.cd = "/[ckey]"
var/list/noteslist = list()
if(!end_index) end_index = start_index
var/index = 0
while( !notesfile.eof )
index++
var/temp
notesfile >> temp
if( (start_index <= index) && (index <= end_index) )
continue
noteslist += temp
notesfile.eof = -2 //Move to the start of the buffer and then erase.
for( var/note in noteslist )
notesfile << note
else
notesfile.cd = "/"
if(alert(usr,"Are you sure you want to remove all their notes?","Confirmation","No","Yes - Remove all notes") == "Yes - Remove all notes")
notesfile.dir.Remove(ckey)
return
#undef NOTESFILE
*/
//Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky.
/proc/notes_add(var/key, var/note, var/mob/usr)
if (!key || !note)
return
//Loading list of notes for this key
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos) infos = list()
//Overly complex timestamp creation
var/modifyer = "th"
switch(time2text(world.timeofday, "DD"))
if("01","21","31")
modifyer = "st"
if("02","22",)
modifyer = "nd"
if("03","23")
modifyer = "rd"
var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
if(copytext(day_string,1,2) == "0")
day_string = copytext(day_string,2)
var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
var/datum/player_info/P = new
if (usr)
P.author = usr.key
P.rank = usr.client.holder.rank
else
P.author = "Adminbot"
P.rank = "Friendly Robot"
P.content = note
P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
infos += P
info << infos
message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
log_admin("[key_name(usr)] has edited [key]'s notes.")
del info
//Updating list of keys with notes on them
var/savefile/note_list = new("data/player_notes.sav")
var/list/note_keys
note_list >> note_keys
if(!note_keys) note_keys = list()
if(!note_keys.Find(key)) note_keys += key
note_list << note_keys
del note_list
/proc/notes_del(var/key, var/index)
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos || infos.len < index) return
var/datum/player_info/item = infos[index]
infos.Remove(item)
info << infos
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
del info
/proc/show_player_info_irc(var/key as text)
var/dat = " Info on [key]%0D%0A"
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos)
dat = "No information found on the given key."
else
for(var/datum/player_info/I in infos)
dat += "[I.content]%0D%0Aby [I.author] ([I.rank]) on [I.timestamp]%0D%0A%0D%0A"
return dat
//This stuff was originally intended to be integrated into the ban-system I was working on
//but it's safe to say that'll never be finished. So I've merged it into the current player panel.
//enjoy ~Carn
/*
#define NOTESFILE "data/player_notes.sav" //where the player notes are saved
datum/admins/proc/notes_show(var/ckey)
usr << browse("<head><title>Player Notes</title></head><body>[notes_gethtml(ckey)]</body>","window=player_notes;size=700x400")
datum/admins/proc/notes_gethtml(var/ckey)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return "<font color='red'>Error: Cannot access [NOTESFILE]</font>"
if(ckey)
. = "<b>Notes for <a href='?src=\ref[src];notes=show'>[ckey]</a>:</b> <a href='?src=\ref[src];notes=add;ckey=[ckey]'>\[+\]</a> <a href='?src=\ref[src];notes=remove;ckey=[ckey]'>\[-\]</a><br>"
notesfile.cd = "/[ckey]"
var/index = 1
while( !notesfile.eof )
var/note
notesfile >> note
. += "[note] <a href='?src=\ref[src];notes=remove;ckey=[ckey];from=[index]'>\[-\]</a><br>"
index++
else
. = "<b>All Notes:</b> <a href='?src=\ref[src];notes=add'>\[+\]</a> <a href='?src=\ref[src];notes=remove'>\[-\]</a><br>"
notesfile.cd = "/"
for(var/dir in notesfile.dir)
. += "<a href='?src=\ref[src];notes=show;ckey=[dir]'>[dir]</a><br>"
return
//handles adding notes to the end of a ckey's buffer
//originally had seperate entries such as var/by to record who left the note and when
//but the current bansystem is a heap of dung.
/proc/notes_add(var/ckey, var/note)
if(!ckey)
ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null)
if(!ckey) return
if(!note)
note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null)
if(!note) return
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return
notesfile.cd = "/[ckey]"
notesfile.eof = 1 //move to the end of the buffer
notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]"
return
//handles removing entries from the buffer, or removing the entire directory if no start_index is given
/proc/notes_remove(var/ckey, var/start_index, var/end_index)
var/savefile/notesfile = new(NOTESFILE)
if(!notesfile) return
if(!ckey)
notesfile.cd = "/"
ckey = ckey(input(usr,"Who would you like to remove notes for?","Enter a ckey",null) as null|anything in notesfile.dir)
if(!ckey) return
if(start_index)
notesfile.cd = "/[ckey]"
var/list/noteslist = list()
if(!end_index) end_index = start_index
var/index = 0
while( !notesfile.eof )
index++
var/temp
notesfile >> temp
if( (start_index <= index) && (index <= end_index) )
continue
noteslist += temp
notesfile.eof = -2 //Move to the start of the buffer and then erase.
for( var/note in noteslist )
notesfile << note
else
notesfile.cd = "/"
if(alert(usr,"Are you sure you want to remove all their notes?","Confirmation","No","Yes - Remove all notes") == "Yes - Remove all notes")
notesfile.dir.Remove(ckey)
return
#undef NOTESFILE
*/
//Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky.
/proc/notes_add(var/key, var/note, var/mob/usr)
if (!key || !note)
return
//Loading list of notes for this key
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos) infos = list()
//Overly complex timestamp creation
var/modifyer = "th"
switch(time2text(world.timeofday, "DD"))
if("01","21","31")
modifyer = "st"
if("02","22",)
modifyer = "nd"
if("03","23")
modifyer = "rd"
var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
if(copytext(day_string,1,2) == "0")
day_string = copytext(day_string,2)
var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
var/datum/player_info/P = new
if (usr)
P.author = usr.key
P.rank = usr.client.holder.rank
else
P.author = "Adminbot"
P.rank = "Friendly Robot"
P.content = note
P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
infos += P
info << infos
message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
log_admin("[key_name(usr)] has edited [key]'s notes.")
qdel(info)
//Updating list of keys with notes on them
var/savefile/note_list = new("data/player_notes.sav")
var/list/note_keys
note_list >> note_keys
if(!note_keys) note_keys = list()
if(!note_keys.Find(key)) note_keys += key
note_list << note_keys
qdel(note_list)
/proc/notes_del(var/key, var/index)
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos || infos.len < index) return
var/datum/player_info/item = infos[index]
infos.Remove(item)
info << infos
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
qdel(info)
/proc/show_player_info_irc(var/key as text)
var/dat = " Info on [key]%0D%0A"
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos)
dat = "No information found on the given key."
else
for(var/datum/player_info/I in infos)
dat += "[I.content]%0D%0Aby [I.author] ([I.rank]) on [I.timestamp]%0D%0A%0D%0A"
return dat

View File

@@ -745,7 +745,7 @@
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
//M.client = null
del(M.client)
qdel(M.client)
/*
//Player Notes
else if(href_list["notes"])
@@ -811,8 +811,8 @@
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.")
del(M.client)
//del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
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.
if("No")
if(!check_rights(R_BAN)) return
var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null)
@@ -836,8 +836,8 @@
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
del(M.client)
//del(M)
qdel(M.client)
//qdel(M)
if("Cancel")
return
@@ -1301,7 +1301,7 @@
S.victim = M
S.loc = M.loc
spawn(20)
del(S)
qdel(S)
var/turf/simulated/floor/T = get_turf(M)
if(istype(T))
@@ -1369,8 +1369,8 @@
var/data = ""
var/obj/item/weapon/paper_bundle/B = fax
for (var/page = 1, page <= B.amount, page++)
var/obj/pageobj = B.contents[page]
for (var/page = 1, page <= B.pages.len, page++)
var/obj/pageobj = B.pages[page]
data += "<A href='?src=\ref[src];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
usr << browse(data, "window=[B.name]")
@@ -1383,11 +1383,11 @@
if (!bundle) return
if (istype(bundle.contents[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.contents[page]
if (istype(bundle.pages[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = bundle.pages[page]
P.show_content(src.owner, 1)
else if (istype(bundle.contents[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = bundle.contents[page]
else if (istype(bundle.pages[page], /obj/item/weapon/photo))
var/obj/item/weapon/photo/H = bundle.pages[page]
H.show(src.owner)
return
@@ -1424,7 +1424,7 @@
src.owner << "\red Message reply failed."
spawn(100)
del(P)
qdel(P)
return
else if(href_list["SolGovFaxReply"])
@@ -1669,28 +1669,28 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SC")
for(var/obj/item/clothing/under/O in world)
del(O)
qdel(O)
ok = 1
if("sec_all_clothes")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SAC")
for(var/obj/item/clothing/O in world)
del(O)
qdel(O)
ok = 1
if("sec_classic1")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SC1")
for(var/obj/item/clothing/suit/fire/O in world)
del(O)
qdel(O)
for(var/obj/structure/grille/O in world)
del(O)
qdel(O)
/* for(var/obj/machinery/vehicle/pod/O in world)
for(var/mob/M in src)
M.loc = src.loc
if (M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
del(O)
qdel(O)
ok = 1*/
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
@@ -2044,7 +2044,7 @@
var/turf/T = pick(blobstart)
var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
spawn(rand(100, 600))
del(bh)
qdel(bh)
if("timeanomalies") //dear god this code was awful :P Still needs further optimisation
feedback_inc("admin_secrets_fun_used",1)
@@ -2216,7 +2216,6 @@
for(var/obj/item/clothing/under/W in world)
W.icon_state = "schoolgirl"
W.item_state = "w_suit"
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
if("paintball")
@@ -2273,7 +2272,7 @@
feedback_add_details("admin_secrets_fun_used","NS")
var/choice = input("You sure you want to end the round and summon narsie at your location? Misuse of this could result in removal of flags or halarity.") in list("PRAISE SATAN", "Cancel")
if(choice == "PRAISE SATAN")
new /obj/machinery/singularity/narsie/large(get_turf(usr))
new /obj/singularity/narsie/large(get_turf(usr))
message_admins("[key_name_admin(usr)] has summoned narsie and brought about a new realm of suffering.")
if("supermattercascade")
feedback_inc("admin_secrets_fun_used",1)

View File

@@ -26,7 +26,7 @@
// if(!istates.Find(O.item_state))
// text += "[O.type] MISSING NORMAL ICON CALLED\n\"[O.item_state]\" IN \"[O.icon]\"\n"
//text+="\n"
del(O)
qdel(O)
if(text)
var/F = file("broken_icons.txt")
fdel(F)

View File

@@ -1,497 +1,497 @@
//Structured Datum Query Language. Basically SQL meets BYOND objects.
//Note: For use in BS12, need text_starts_with proc, and to modify the action on select to use BS12's object edit command(s).
/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!")
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."
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."
return
var/list/types = list()
var/i
for(i = 2; i <= query_list.len; i += 2)
types += query_list[i]
if(i + 1 >= query_list.len || query_list[i + 1] != ",")
break
i++
var/list/from = list()
if(i <= query_list.len)
if(lowertext(query_list[i]) in list("from", "in"))
for(i++; i <= query_list.len; i += 2)
from += query_list[i]
if(i + 1 >= query_list.len || query_list[i + 1] != ",")
break
i++
if(from.len < 1)
from += "world"
var/list/set_vars = list()
if(lowertext(query_list[1]) == "update")
if(i <= query_list.len && lowertext(query_list[i]) == "set")
for(i++; i <= query_list.len; i++)
if(i + 2 <= query_list.len && query_list[i + 1] == "=")
set_vars += query_list[i]
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."
return
i += 3
if(i >= query_list.len || query_list[i] != ",")
break
if(set_vars.len < 1)
usr << "\red SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again."
return
var/list/where = list()
if(i <= query_list.len && lowertext(query_list[i]) == "where")
where = query_list.Copy(i + 1)
var/list/from_objs = list()
if("world" in from)
from_objs += world
else
for(var/f in from)
if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
from_objs += locate(copytext(f, 2, length(f)))
else if(copytext(f, 1, 2) != "/")
from_objs += locate(f)
else
var/f2 = text2path(f)
if(text_starts_with(f, "/mob"))
for(var/mob/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/space"))
for(var/turf/space/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/simulated"))
for(var/turf/simulated/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/unsimulated"))
for(var/turf/unsimulated/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf"))
for(var/turf/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/area"))
for(var/area/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj/item"))
for(var/obj/item/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj/machinery"))
for(var/obj/machinery/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj"))
for(var/obj/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/atom"))
for(var/atom/m in world)
if(istype(m, f2))
from_objs += m
/*
else
for(var/datum/m in world)
if(istype(m, f2))
from_objs += m
*/
var/list/objs = list()
for(var/from_obj in from_objs)
if("*" in types)
objs += from_obj:contents
else
for(var/f in types)
if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
objs += locate(copytext(f, 2, length(f))) in from_obj
else if(copytext(f, 1, 2) != "/")
objs += locate(f) in from_obj
else
var/f2 = text2path(f)
if(text_starts_with(f, "/mob"))
for(var/mob/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/space"))
for(var/turf/space/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/simulated"))
for(var/turf/simulated/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/unsimulated"))
for(var/turf/unsimulated/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf"))
for(var/turf/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/area"))
for(var/area/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj/item"))
for(var/obj/item/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj/machinery"))
for(var/obj/machinery/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj"))
for(var/obj/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/atom"))
for(var/atom/m in from_obj)
if(istype(m, f2))
objs += m
else
for(var/datum/m in from_obj)
if(istype(m, f2))
objs += m
for(var/datum/t in objs)
var/currently_false = 0
for(i = 1, i - 1 < where.len, i++)
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."
return
var/j
for(j = i, j <= where.len, j++)
if(lowertext(where[j]) in list("and", "or", ";"))
break
if(!currently_false)
var/value = SDQL_text2value(t, v)
var/result = SDQL_evaluate(t, where.Copy(i, j))
switch(compare_op)
if("=", "==")
currently_false = !(value == result)
if("!=", "<>")
currently_false = !(value != result)
if("<")
currently_false = !(value < result)
if(">")
currently_false = !(value > result)
if("<=")
currently_false = !(value <= result)
if(">=")
currently_false = !(value >= result)
if(j > where.len || lowertext(where[j]) == ";")
break
else if(lowertext(where[j]) == "or")
if(currently_false)
currently_false = 0
else
break
i = j
if(currently_false)
objs -= t
usr << "\blue SQDL Query: [query_text]"
message_admins("[usr] executed SDQL query: \"[query_text]\".")
/*
for(var/t in types)
usr << "Type: [t]"
for(var/t in from)
usr << "From: [t]"
for(var/t in set_vars)
usr << "Set: [t] = [set_vars[t]]"
if(where.len)
var/where_str = ""
for(var/t in where)
where_str += "[t] "
usr << "Where: [where_str]"
usr << "From objects:"
for(var/datum/t in from_objs)
usr << t
usr << "Objects:"
for(var/datum/t in objs)
usr << t
*/
switch(lowertext(query_list[1]))
if("delete")
for(var/datum/t in objs)
del t
if("update")
for(var/datum/t in objs)
objs[t] = list()
for(var/v in set_vars)
if(v in t.vars)
objs[t][v] = SDQL_text2value(t, set_vars[v])
for(var/datum/t in objs)
for(var/v in objs[t])
t.vars[v] = objs[t][v]
if("select")
var/text = ""
for(var/datum/t in objs)
if(istype(t, /atom))
var/atom/a = t
if(a.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] at ([a.x], [a.y], [a.z])<br>"
else if(a.loc && a.loc.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
//text += "[t]<br>"
usr << browse(text, "window=sdql_result")
/client/Topic(href,href_list[],hsrc)
if(href_list["SDQL_select"])
debug_variables(locate(href_list["SDQL_select"]))
..()
/proc/SDQL_evaluate(datum/object, list/equation)
if(equation.len == 0)
return null
else if(equation.len == 1)
return SDQL_text2value(object, equation[1])
else if(equation[1] == "!")
return !SDQL_evaluate(object, equation.Copy(2))
else if(equation[1] == "-")
return -SDQL_evaluate(object, equation.Copy(2))
else
usr << "\red SDQL: Sorry, equations not yet supported :("
return null
/proc/SDQL_text2value(datum/object, text)
if(text2num(text) != null)
return text2num(text)
else if(text == "null")
return null
else if(copytext(text, 1, 2) == "'" || copytext(text, 1, 2) == "\"" )
return copytext(text, 2, length(text))
else if(copytext(text, 1, 2) == "/")
return text2path(text)
else
if(findtext(text, "."))
var/split = findtext(text, ".")
var/v = copytext(text, 1, split)
if((v in object.vars) && istype(object.vars[v], /datum))
return SDQL_text2value(object.vars[v], copytext(text, split + 1))
else
return null
else
if(text in object.vars)
return object.vars[text]
else
return null
/proc/text_starts_with(text, start)
if(copytext(text, 1, length(start) + 1) == start)
return 1
else
return 0
/proc/SDQL_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
">" = list("", "="),
"!" = list("", "="))
var/word = ""
var/list/query_list = list()
var/len = length(query_text)
for(var/i = 1, i <= len, i++)
var/char = copytext(query_text, i, i + 1)
if(char in whitespace)
if(word != "")
query_list += word
word = ""
else if(char in single)
if(word != "")
query_list += word
word = ""
query_list += char
else if(char in multi)
if(word != "")
query_list += word
word = ""
var/char2 = copytext(query_text, i + 1, i + 2)
if(char2 in multi[char])
query_list += "[char][char2]"
i++
else
query_list += char
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."
return null
word = "'"
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "'")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "'"
i++
else
break
else
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."
return null
query_list += "[word]'"
word = ""
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."
return null
word = "\""
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "\"")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "\""
i++
else
break
else
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."
return null
query_list += "[word]\""
word = ""
else
word += char
if(word != "")
query_list += word
return query_list
//Structured Datum Query Language. Basically SQL meets BYOND objects.
//Note: For use in BS12, need text_starts_with proc, and to modify the action on select to use BS12's object edit command(s).
/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!")
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."
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."
return
var/list/types = list()
var/i
for(i = 2; i <= query_list.len; i += 2)
types += query_list[i]
if(i + 1 >= query_list.len || query_list[i + 1] != ",")
break
i++
var/list/from = list()
if(i <= query_list.len)
if(lowertext(query_list[i]) in list("from", "in"))
for(i++; i <= query_list.len; i += 2)
from += query_list[i]
if(i + 1 >= query_list.len || query_list[i + 1] != ",")
break
i++
if(from.len < 1)
from += "world"
var/list/set_vars = list()
if(lowertext(query_list[1]) == "update")
if(i <= query_list.len && lowertext(query_list[i]) == "set")
for(i++; i <= query_list.len; i++)
if(i + 2 <= query_list.len && query_list[i + 1] == "=")
set_vars += query_list[i]
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."
return
i += 3
if(i >= query_list.len || query_list[i] != ",")
break
if(set_vars.len < 1)
usr << "\red SDQL: Invalid or missing set in query \"[query_text]\". Please check your syntax and try again."
return
var/list/where = list()
if(i <= query_list.len && lowertext(query_list[i]) == "where")
where = query_list.Copy(i + 1)
var/list/from_objs = list()
if("world" in from)
from_objs += world
else
for(var/f in from)
if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
from_objs += locate(copytext(f, 2, length(f)))
else if(copytext(f, 1, 2) != "/")
from_objs += locate(f)
else
var/f2 = text2path(f)
if(text_starts_with(f, "/mob"))
for(var/mob/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/space"))
for(var/turf/space/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/simulated"))
for(var/turf/simulated/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf/unsimulated"))
for(var/turf/unsimulated/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/turf"))
for(var/turf/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/area"))
for(var/area/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj/item"))
for(var/obj/item/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj/machinery"))
for(var/obj/machinery/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/obj"))
for(var/obj/m in world)
if(istype(m, f2))
from_objs += m
else if(text_starts_with(f, "/atom"))
for(var/atom/m in world)
if(istype(m, f2))
from_objs += m
/*
else
for(var/datum/m in world)
if(istype(m, f2))
from_objs += m
*/
var/list/objs = list()
for(var/from_obj in from_objs)
if("*" in types)
objs += from_obj:contents
else
for(var/f in types)
if(copytext(f, 1, 2) == "'" || copytext(f, 1, 2) == "\"")
objs += locate(copytext(f, 2, length(f))) in from_obj
else if(copytext(f, 1, 2) != "/")
objs += locate(f) in from_obj
else
var/f2 = text2path(f)
if(text_starts_with(f, "/mob"))
for(var/mob/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/space"))
for(var/turf/space/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/simulated"))
for(var/turf/simulated/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf/unsimulated"))
for(var/turf/unsimulated/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/turf"))
for(var/turf/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/area"))
for(var/area/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj/item"))
for(var/obj/item/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj/machinery"))
for(var/obj/machinery/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/obj"))
for(var/obj/m in from_obj)
if(istype(m, f2))
objs += m
else if(text_starts_with(f, "/atom"))
for(var/atom/m in from_obj)
if(istype(m, f2))
objs += m
else
for(var/datum/m in from_obj)
if(istype(m, f2))
objs += m
for(var/datum/t in objs)
var/currently_false = 0
for(i = 1, i - 1 < where.len, i++)
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."
return
var/j
for(j = i, j <= where.len, j++)
if(lowertext(where[j]) in list("and", "or", ";"))
break
if(!currently_false)
var/value = SDQL_text2value(t, v)
var/result = SDQL_evaluate(t, where.Copy(i, j))
switch(compare_op)
if("=", "==")
currently_false = !(value == result)
if("!=", "<>")
currently_false = !(value != result)
if("<")
currently_false = !(value < result)
if(">")
currently_false = !(value > result)
if("<=")
currently_false = !(value <= result)
if(">=")
currently_false = !(value >= result)
if(j > where.len || lowertext(where[j]) == ";")
break
else if(lowertext(where[j]) == "or")
if(currently_false)
currently_false = 0
else
break
i = j
if(currently_false)
objs -= t
usr << "\blue SQDL Query: [query_text]"
message_admins("[usr] executed SDQL query: \"[query_text]\".")
/*
for(var/t in types)
usr << "Type: [t]"
for(var/t in from)
usr << "From: [t]"
for(var/t in set_vars)
usr << "Set: [t] = [set_vars[t]]"
if(where.len)
var/where_str = ""
for(var/t in where)
where_str += "[t] "
usr << "Where: [where_str]"
usr << "From objects:"
for(var/datum/t in from_objs)
usr << t
usr << "Objects:"
for(var/datum/t in objs)
usr << t
*/
switch(lowertext(query_list[1]))
if("delete")
for(var/datum/t in objs)
qdel(t)
if("update")
for(var/datum/t in objs)
objs[t] = list()
for(var/v in set_vars)
if(v in t.vars)
objs[t][v] = SDQL_text2value(t, set_vars[v])
for(var/datum/t in objs)
for(var/v in objs[t])
t.vars[v] = objs[t][v]
if("select")
var/text = ""
for(var/datum/t in objs)
if(istype(t, /atom))
var/atom/a = t
if(a.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] at ([a.x], [a.y], [a.z])<br>"
else if(a.loc && a.loc.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
//text += "[t]<br>"
usr << browse(text, "window=sdql_result")
/client/Topic(href,href_list[],hsrc)
if(href_list["SDQL_select"])
debug_variables(locate(href_list["SDQL_select"]))
..()
/proc/SDQL_evaluate(datum/object, list/equation)
if(equation.len == 0)
return null
else if(equation.len == 1)
return SDQL_text2value(object, equation[1])
else if(equation[1] == "!")
return !SDQL_evaluate(object, equation.Copy(2))
else if(equation[1] == "-")
return -SDQL_evaluate(object, equation.Copy(2))
else
usr << "\red SDQL: Sorry, equations not yet supported :("
return null
/proc/SDQL_text2value(datum/object, text)
if(text2num(text) != null)
return text2num(text)
else if(text == "null")
return null
else if(copytext(text, 1, 2) == "'" || copytext(text, 1, 2) == "\"" )
return copytext(text, 2, length(text))
else if(copytext(text, 1, 2) == "/")
return text2path(text)
else
if(findtext(text, "."))
var/split = findtext(text, ".")
var/v = copytext(text, 1, split)
if((v in object.vars) && istype(object.vars[v], /datum))
return SDQL_text2value(object.vars[v], copytext(text, split + 1))
else
return null
else
if(text in object.vars)
return object.vars[text]
else
return null
/proc/text_starts_with(text, start)
if(copytext(text, 1, length(start) + 1) == start)
return 1
else
return 0
/proc/SDQL_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
">" = list("", "="),
"!" = list("", "="))
var/word = ""
var/list/query_list = list()
var/len = length(query_text)
for(var/i = 1, i <= len, i++)
var/char = copytext(query_text, i, i + 1)
if(char in whitespace)
if(word != "")
query_list += word
word = ""
else if(char in single)
if(word != "")
query_list += word
word = ""
query_list += char
else if(char in multi)
if(word != "")
query_list += word
word = ""
var/char2 = copytext(query_text, i + 1, i + 2)
if(char2 in multi[char])
query_list += "[char][char2]"
i++
else
query_list += char
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."
return null
word = "'"
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "'")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "'"
i++
else
break
else
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."
return null
query_list += "[word]'"
word = ""
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."
return null
word = "\""
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "\"")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "\""
i++
else
break
else
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."
return null
query_list += "[word]\""
word = ""
else
word += char
if(word != "")
query_list += word
return query_list

View File

@@ -1,426 +1,426 @@
/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!")
log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
if(!query_text || length(query_text) < 1)
return
//world << query_text
var/list/query_list = SDQL2_tokenize(query_text)
if(!query_list || query_list.len < 1)
return
var/list/query_tree = SDQL_parse(query_list)
if(query_tree.len < 1)
return
var/list/from_objs = list()
var/list/select_types = list()
switch(query_tree[1])
if("explain")
SDQL_testout(query_tree["explain"])
return
if("call")
if("on" in query_tree)
select_types = query_tree["on"]
else
return
if("select", "delete", "update")
select_types = query_tree[query_tree[1]]
from_objs = SDQL_from_objs(query_tree["from"])
var/list/objs = list()
for(var/type in select_types)
var/char = copytext(type, 1, 2)
if(char == "/" || char == "*")
for(var/from in from_objs)
objs += SDQL_get_all(type, from)
else if(char == "'" || char == "\"")
objs += locate(copytext(type, 2, length(type)))
if("where" in query_tree)
var/objs_temp = objs
objs = list()
for(var/datum/d in objs_temp)
if(SDQL_expression(d, query_tree["where"]))
objs += d
//usr << "Query: [query_text]"
message_admins("[usr] executed SDQL query: \"[query_text]\".")
switch(query_tree[1])
if("delete")
for(var/datum/d in objs)
del d
if("select")
var/text = ""
for(var/datum/t in objs)
if(istype(t, /atom))
var/atom/a = t
if(a.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] at ([a.x], [a.y], [a.z])<br>"
else if(a.loc && a.loc.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
usr << browse(text, "window=SDQL-result")
if("update")
if("set" in query_tree)
var/list/set_list = query_tree["set"]
for(var/datum/d in objs)
var/list/vals = list()
for(var/v in set_list)
if(v in d.vars)
vals += v
vals[v] = SDQL_expression(d, set_list[v])
if(istype(d, /turf))
for(var/v in vals)
if(v == "x" || v == "y" || v == "z")
continue
d.vars[v] = vals[v]
else
for(var/v in vals)
d.vars[v] = vals[v]
/proc/SDQL_parse(list/query_list)
var/datum/SDQL_parser/parser = new(query_list)
var/list/query_tree = parser.parse()
del(parser)
return query_tree
/proc/SDQL_testout(list/query_tree, indent = 0)
var/spaces = ""
for(var/s = 0, s < indent, s++)
spaces += " "
for(var/item in query_tree)
if(istype(item, /list))
world << "[spaces]("
SDQL_testout(item, indent + 1)
world << "[spaces])"
else
world << "[spaces][item]"
if(!isnum(item) && query_tree[item])
if(istype(query_tree[item], /list))
world << "[spaces] ("
SDQL_testout(query_tree[item], indent + 2)
world << "[spaces] )"
else
world << "[spaces] [query_tree[item]]"
/proc/SDQL_from_objs(list/tree)
if("world" in tree)
return list(world)
var/list/out = list()
for(var/type in tree)
var/char = copytext(type, 1, 2)
if(char == "/")
out += SDQL_get_all(type, world)
else if(char == "'" || char == "\"")
out += locate(copytext(type, 2, length(type)))
return out
/proc/SDQL_get_all(type, location)
var/list/out = list()
if(type == "*")
for(var/datum/d in location)
out += d
return out
type = text2path(type)
if(ispath(type, /mob))
for(var/mob/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /turf))
for(var/turf/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /obj))
for(var/obj/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /area))
for(var/area/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /atom))
for(var/atom/d in location)
if(istype(d, type))
out += d
else
for(var/datum/d in location)
if(istype(d, type))
out += d
return out
/proc/SDQL_expression(datum/object, list/expression, start = 1)
var/result = 0
var/val
for(var/i = start, i <= expression.len, i++)
var/op = ""
if(i > start)
op = expression[i]
i++
var/list/ret = SDQL_value(object, expression, i)
val = ret["val"]
i = ret["i"]
if(op != "")
switch(op)
if("+")
result += val
if("-")
result -= val
if("*")
result *= val
if("/")
result /= val
if("&")
result &= val
if("|")
result |= val
if("^")
result ^= val
if("=", "==")
result = (result == val)
if("!=", "<>")
result = (result != val)
if("<")
result = (result < val)
if("<=")
result = (result <= val)
if(">")
result = (result > val)
if(">=")
result = (result >= val)
if("and", "&&")
result = (result && val)
if("or", "||")
result = (result || val)
else
usr << "\red SDQL2: Unknown op [op]"
result = null
else
result = val
return result
/proc/SDQL_value(datum/object, list/expression, start = 1)
var/i = start
var/val = null
if(i > expression.len)
return list("val" = null, "i" = i)
if(istype(expression[i], /list))
val = SDQL_expression(object, expression[i])
else if(expression[i] == "!")
var/list/ret = SDQL_value(object, expression, i + 1)
val = !ret["val"]
i = ret["i"]
else if(expression[i] == "~")
var/list/ret = SDQL_value(object, expression, i + 1)
val = ~ret["val"]
i = ret["i"]
else if(expression[i] == "-")
var/list/ret = SDQL_value(object, expression, i + 1)
val = -ret["val"]
i = ret["i"]
else if(expression[i] == "null")
val = null
else if(isnum(expression[i]))
val = expression[i]
else if(copytext(expression[i], 1, 2) in list("'", "\""))
val = copytext(expression[i], 2, length(expression[i]))
else
val = SDQL_var(object, expression, i)
i = expression.len
return list("val" = val, "i" = i)
/proc/SDQL_var(datum/object, list/expression, start = 1)
if(expression[start] in object.vars)
if(start < expression.len && expression[start + 1] == ".")
return SDQL_var(object.vars[expression[start]], expression[start + 2])
else
return object.vars[expression[start]]
else
return null
/proc/SDQL2_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-", ".")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
">" = list("", "="),
"!" = list("", "="))
var/word = ""
var/list/query_list = list()
var/len = length(query_text)
for(var/i = 1, i <= len, i++)
var/char = copytext(query_text, i, i + 1)
if(char in whitespace)
if(word != "")
query_list += word
word = ""
else if(char in single)
if(word != "")
query_list += word
word = ""
query_list += char
else if(char in multi)
if(word != "")
query_list += word
word = ""
var/char2 = copytext(query_text, i + 1, i + 2)
if(char2 in multi[char])
query_list += "[char][char2]"
i++
else
query_list += char
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."
return null
word = "'"
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "'")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "'"
i++
else
break
else
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."
return null
query_list += "[word]'"
word = ""
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."
return null
word = "\""
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "\"")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "\""
i++
else
break
else
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."
return null
query_list += "[word]\""
word = ""
else
word += char
if(word != "")
query_list += word
return query_list
/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!")
log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
if(!query_text || length(query_text) < 1)
return
//world << query_text
var/list/query_list = SDQL2_tokenize(query_text)
if(!query_list || query_list.len < 1)
return
var/list/query_tree = SDQL_parse(query_list)
if(query_tree.len < 1)
return
var/list/from_objs = list()
var/list/select_types = list()
switch(query_tree[1])
if("explain")
SDQL_testout(query_tree["explain"])
return
if("call")
if("on" in query_tree)
select_types = query_tree["on"]
else
return
if("select", "delete", "update")
select_types = query_tree[query_tree[1]]
from_objs = SDQL_from_objs(query_tree["from"])
var/list/objs = list()
for(var/type in select_types)
var/char = copytext(type, 1, 2)
if(char == "/" || char == "*")
for(var/from in from_objs)
objs += SDQL_get_all(type, from)
else if(char == "'" || char == "\"")
objs += locate(copytext(type, 2, length(type)))
if("where" in query_tree)
var/objs_temp = objs
objs = list()
for(var/datum/d in objs_temp)
if(SDQL_expression(d, query_tree["where"]))
objs += d
//usr << "Query: [query_text]"
message_admins("[usr] executed SDQL query: \"[query_text]\".")
switch(query_tree[1])
if("delete")
for(var/datum/d in objs)
qdel(d)
if("select")
var/text = ""
for(var/datum/t in objs)
if(istype(t, /atom))
var/atom/a = t
if(a.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] at ([a.x], [a.y], [a.z])<br>"
else if(a.loc && a.loc.x)
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t] in [a.loc] at ([a.loc.x], [a.loc.y], [a.loc.z])<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
else
text += "<a href='?src=\ref[t];SDQL_select=\ref[t]'>\ref[t]</a>: [t]<br>"
usr << browse(text, "window=SDQL-result")
if("update")
if("set" in query_tree)
var/list/set_list = query_tree["set"]
for(var/datum/d in objs)
var/list/vals = list()
for(var/v in set_list)
if(v in d.vars)
vals += v
vals[v] = SDQL_expression(d, set_list[v])
if(istype(d, /turf))
for(var/v in vals)
if(v == "x" || v == "y" || v == "z")
continue
d.vars[v] = vals[v]
else
for(var/v in vals)
d.vars[v] = vals[v]
/proc/SDQL_parse(list/query_list)
var/datum/SDQL_parser/parser = new(query_list)
var/list/query_tree = parser.parse()
qdel(parser)
return query_tree
/proc/SDQL_testout(list/query_tree, indent = 0)
var/spaces = ""
for(var/s = 0, s < indent, s++)
spaces += " "
for(var/item in query_tree)
if(istype(item, /list))
world << "[spaces]("
SDQL_testout(item, indent + 1)
world << "[spaces])"
else
world << "[spaces][item]"
if(!isnum(item) && query_tree[item])
if(istype(query_tree[item], /list))
world << "[spaces] ("
SDQL_testout(query_tree[item], indent + 2)
world << "[spaces] )"
else
world << "[spaces] [query_tree[item]]"
/proc/SDQL_from_objs(list/tree)
if("world" in tree)
return list(world)
var/list/out = list()
for(var/type in tree)
var/char = copytext(type, 1, 2)
if(char == "/")
out += SDQL_get_all(type, world)
else if(char == "'" || char == "\"")
out += locate(copytext(type, 2, length(type)))
return out
/proc/SDQL_get_all(type, location)
var/list/out = list()
if(type == "*")
for(var/datum/d in location)
out += d
return out
type = text2path(type)
if(ispath(type, /mob))
for(var/mob/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /turf))
for(var/turf/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /obj))
for(var/obj/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /area))
for(var/area/d in location)
if(istype(d, type))
out += d
else if(ispath(type, /atom))
for(var/atom/d in location)
if(istype(d, type))
out += d
else
for(var/datum/d in location)
if(istype(d, type))
out += d
return out
/proc/SDQL_expression(datum/object, list/expression, start = 1)
var/result = 0
var/val
for(var/i = start, i <= expression.len, i++)
var/op = ""
if(i > start)
op = expression[i]
i++
var/list/ret = SDQL_value(object, expression, i)
val = ret["val"]
i = ret["i"]
if(op != "")
switch(op)
if("+")
result += val
if("-")
result -= val
if("*")
result *= val
if("/")
result /= val
if("&")
result &= val
if("|")
result |= val
if("^")
result ^= val
if("=", "==")
result = (result == val)
if("!=", "<>")
result = (result != val)
if("<")
result = (result < val)
if("<=")
result = (result <= val)
if(">")
result = (result > val)
if(">=")
result = (result >= val)
if("and", "&&")
result = (result && val)
if("or", "||")
result = (result || val)
else
usr << "\red SDQL2: Unknown op [op]"
result = null
else
result = val
return result
/proc/SDQL_value(datum/object, list/expression, start = 1)
var/i = start
var/val = null
if(i > expression.len)
return list("val" = null, "i" = i)
if(istype(expression[i], /list))
val = SDQL_expression(object, expression[i])
else if(expression[i] == "!")
var/list/ret = SDQL_value(object, expression, i + 1)
val = !ret["val"]
i = ret["i"]
else if(expression[i] == "~")
var/list/ret = SDQL_value(object, expression, i + 1)
val = ~ret["val"]
i = ret["i"]
else if(expression[i] == "-")
var/list/ret = SDQL_value(object, expression, i + 1)
val = -ret["val"]
i = ret["i"]
else if(expression[i] == "null")
val = null
else if(isnum(expression[i]))
val = expression[i]
else if(copytext(expression[i], 1, 2) in list("'", "\""))
val = copytext(expression[i], 2, length(expression[i]))
else
val = SDQL_var(object, expression, i)
i = expression.len
return list("val" = val, "i" = i)
/proc/SDQL_var(datum/object, list/expression, start = 1)
if(expression[start] in object.vars)
if(start < expression.len && expression[start + 1] == ".")
return SDQL_var(object.vars[expression[start]], expression[start + 2])
else
return object.vars[expression[start]]
else
return null
/proc/SDQL2_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-", ".")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
">" = list("", "="),
"!" = list("", "="))
var/word = ""
var/list/query_list = list()
var/len = length(query_text)
for(var/i = 1, i <= len, i++)
var/char = copytext(query_text, i, i + 1)
if(char in whitespace)
if(word != "")
query_list += word
word = ""
else if(char in single)
if(word != "")
query_list += word
word = ""
query_list += char
else if(char in multi)
if(word != "")
query_list += word
word = ""
var/char2 = copytext(query_text, i + 1, i + 2)
if(char2 in multi[char])
query_list += "[char][char2]"
i++
else
query_list += char
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."
return null
word = "'"
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "'")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "'"
i++
else
break
else
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."
return null
query_list += "[word]'"
word = ""
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."
return null
word = "\""
for(i++, i <= len, i++)
char = copytext(query_text, i, i + 1)
if(char == "\"")
if(copytext(query_text, i + 1, i + 2) == "'")
word += "\""
i++
else
break
else
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."
return null
query_list += "[word]\""
word = ""
else
word += char
if(word != "")
query_list += word
return query_list

View File

@@ -13,7 +13,7 @@
display_name = holder.fakekey
for(var/mob/M in mob_list)
if((M.mind && M.mind.special_role && M.client) || (M.client && M.client.holder))
if((M.mind && M.mind.special_role && M.client) || check_rights(R_ADMIN, 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>"
log_ooc("(ANTAG) [key] : [msg]")

View File

@@ -8,7 +8,7 @@
M.client.show_popup_menus = 1
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == M.client)
del(H)
qdel(H)
else
log_admin("[key_name(usr)] has entered build mode.")
M.client.buildmode = 1
@@ -220,7 +220,7 @@
T.ChangeTurf(/turf/simulated/wall)
return
else if(istype(object,/obj))
del(object)
qdel(object)
return
else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left"))
new/obj/machinery/door/airlock(get_turf(object))
@@ -250,7 +250,7 @@
var/obj/A = new holder.buildmode.objholder (get_turf(object))
A.set_dir(holder.builddir.dir)
else if(pa.Find("right"))
if(isobj(object)) del(object)
if(isobj(object)) qdel(object)
if(pa.Find("middle"))
holder.buildmode.objholder = text2path("[object.type]")
if(holder.buildmode.objsay) usr << "[object.type]"

View File

@@ -1,12 +1,17 @@
/client/proc/cinematic(var/cinematic as anything in list("explosion",null))
set name = "cinematic"
set name = "Cinematic"
set category = "Fun"
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
set hidden = 1
if(!check_rights(R_FUN))
return
if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") return
if(!ticker) return
switch(cinematic)
if("explosion")
if(alert("The game will be over. Are you really sure?", "Confirmation" ,"Continue", "Cancel") == "Cancel")
return
var/parameter = input(src,"station_missed = ?","Enter Parameter",0) as num
var/override
switch(parameter)
@@ -15,4 +20,8 @@
if(0)
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","mercenary","AI malfunction","no override")
ticker.station_explosion_cinematic(parameter,override)
log_admin("[key_name(src)] launched cinematic \"[cinematic]\"")
message_admins("[key_name_admin(src)] launched cinematic \"[cinematic]\"", 1)
return

View File

@@ -350,7 +350,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(hsbitem)
for(var/atom/O in world)
if(istype(O, hsbitem))
del(O)
qdel(O)
log_admin("[key_name(src)] has deleted all instances of [hsbitem].")
message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0)
feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -420,7 +420,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/mob/adminmob = src.mob
M.ckey = src.ckey
if( isobserver(adminmob) )
del(adminmob)
qdel(adminmob)
feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -525,6 +525,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
//log_admin("[key_name(src)] has alienized [M.key].")
var/list/dresspacks = list(
"strip",
"job",
"standard space gear",
"tournament standard red",
"tournament standard green",
@@ -555,10 +556,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for (var/obj/item/I in M)
if (istype(I, /obj/item/weapon/implant))
continue
del(I)
M.drop_from_inventory(I)
if(I.loc != M)
qdel(I)
switch(dresscode)
if ("strip")
//do nothing
if ("job")
var/selected_job = input("Select job", "Robust quick dress shop") as null|anything in joblist
if (isnull(selected_job))
return
var/datum/job/job = job_master.GetJob(selected_job)
if(!job)
return
job.equip(M)
job.apply_fingerprints(M)
job_master.spawnId(M, selected_job)
if ("standard space gear")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
@@ -614,7 +630,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
var/obj/item/weapon/storage/backpack/backpack = new(M)
for(var/obj/item/I in backpack)
del(I)
qdel(I)
M.equip_to_slot_or_del(backpack, slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand)
@@ -705,7 +721,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
for(var/obj/item/briefcase_item in sec_briefcase)
del(briefcase_item)
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
@@ -927,9 +943,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
spawn(30)
for(var/obj/machinery/the_singularitygen/G in world)
if(G.anchored)
var/obj/machinery/singularity/S = new /obj/machinery/singularity(get_turf(G), 50)
var/obj/singularity/S = new /obj/singularity(get_turf(G), 50)
spawn(0)
del(G)
qdel(G)
S.energy = 1750
S.current_size = 7
S.icon = 'icons/effects/224x224.dmi'

View File

@@ -0,0 +1,24 @@
/client/proc/roll_dices()
set category = "Fun"
set name = "Roll Dice"
if(!check_rights(R_FUN))
return
var/sum = input("How many times should we throw?") as num
var/side = input("Select the number of sides.") as num
if(!side)
side = 6
if(!sum)
sum = 2
var/dice = num2text(sum) + "d" + num2text(side)
if(alert("Do you want to inform the world about your game?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">The dice have been rolled by Gods!</h2>"
var/result = roll(dice)
if(alert("Do you want to inform the world about the result?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">Gods rolled [dice], result is [result]</h2>"
message_admins("[key_name_admin(src)] rolled dice [dice], result is [result]", 1)

View File

@@ -55,7 +55,7 @@ var/intercom_range_display_status = 0
for(var/obj/effect/debugging/camera_range/C in world)
del(C)
qdel(C)
if(camera_range_display_status)
for(var/obj/machinery/camera/C in cameranet.cameras)
@@ -114,14 +114,14 @@ var/intercom_range_display_status = 0
intercom_range_display_status = 1
for(var/obj/effect/debugging/marker/M in world)
del(M)
qdel(M)
if(intercom_range_display_status)
for(var/obj/item/device/radio/intercom/I in world)
for(var/turf/T in orange(7,I))
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
if (!(F in view(7,I.loc)))
del(F)
qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
var/list/debug_verbs = list (
@@ -276,7 +276,7 @@ var/list/debug_verbs = list (
var/datum/controller/air_system/old_air = air_master
for(var/zone/zone in old_air.zones)
zone.c_invalidate()
del old_air
qdel(old_air)
air_master = new
air_master.Setup()
spawn air_master.Start()

View File

@@ -208,8 +208,8 @@
O.vars[variable]) as num|null
if(new_value == null) return
if(variable=="luminosity")
O.SetLuminosity(new_value)
if(variable=="light_range")
O.set_light(new_value)
else
O.vars[variable] = new_value
@@ -217,24 +217,24 @@
if(istype(O, /mob))
for(var/mob/M in mob_list)
if ( istype(M , O.type) )
if(variable=="luminosity")
M.SetLuminosity(new_value)
if(variable=="light_range")
M.set_light(new_value)
else
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if ( istype(A , O.type) )
if(variable=="luminosity")
A.SetLuminosity(new_value)
if(variable=="light_range")
A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if ( istype(A , O.type) )
if(variable=="luminosity")
A.SetLuminosity(new_value)
if(variable=="light_range")
A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
@@ -242,24 +242,24 @@
if(istype(O, /mob))
for(var/mob/M in mob_list)
if (M.type == O.type)
if(variable=="luminosity")
M.SetLuminosity(new_value)
if(variable=="light_range")
M.set_light(new_value)
else
M.vars[variable] = O.vars[variable]
else if(istype(O, /obj))
for(var/obj/A in world)
if (A.type == O.type)
if(variable=="luminosity")
A.SetLuminosity(new_value)
if(variable=="light_range")
A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
else if(istype(O, /turf))
for(var/turf/A in world)
if (A.type == O.type)
if(variable=="luminosity")
A.SetLuminosity(new_value)
if(variable=="light_range")
A.set_light(new_value)
else
A.vars[variable] = O.vars[variable]
@@ -372,4 +372,4 @@
A.vars[variable] = O.vars[variable]
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]")
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]]", 1)

View File

@@ -455,10 +455,10 @@ var/list/forbidden_varedit_object_types = list(
O.vars[variable] = var_new
if("num")
if(variable=="luminosity")
if(variable=="light_range")
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
if(var_new == null) return
O.SetLuminosity(var_new)
O.set_light(var_new)
else if(variable=="stat")
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
if(var_new == null) return

View File

@@ -2,7 +2,7 @@
set name = "Possess Obj"
set category = "Object"
if(istype(O,/obj/machinery/singularity))
if(istype(O,/obj/singularity))
if(config.forbid_singulo_possession)
usr << "It is forbidden to possess singularities."
return

View File

@@ -686,7 +686,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
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)
del(M)
qdel(M)
else
if("No")
@@ -701,7 +701,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
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)
del(M)
qdel(M)
*/
/client/proc/update_world()

View File

@@ -18,6 +18,7 @@
var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared.
var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source.
var/list/cameras //List of cameras that can be switched to, if the player has that capability.
var/cache_id //ID for camera cache, changed by invalidateCameraCache().
var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera).
var/area/last_name //The last acquired name, used should origin be lost
var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated.
@@ -74,8 +75,12 @@
return last_name
/datum/alarm/proc/cameras()
// reset camera cache
if(camera_cache_id != cache_id)
cameras = null
cache_id = camera_cache_id
// If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras
if(cameras && (last_camera_area != alarm_area()))
else if(cameras && (last_camera_area != alarm_area()))
cameras = null
// The list of cameras is also reset by /proc/invalidateCameraCache()
@@ -96,18 +101,17 @@
* Assisting procs *
******************/
/atom/proc/get_alarm_area()
var/area/A = get_area(src)
return A.master
return get_area(src)
/area/get_alarm_area()
return src.master
return src
/atom/proc/get_alarm_name()
var/area/A = get_area(src)
return A.master.name
return A.name
/area/get_alarm_name()
return master.name
return name
/mob/get_alarm_name()
return name

View File

@@ -84,8 +84,7 @@
return src
/turf/get_alarm_origin()
var/area/area = get_area(src)
return area.master // Very important to get area.master, as dynamic lightning can and will split areas.
return get_area(src)
/datum/alarm_handler/proc/register(var/object, var/procName)
listeners[object] = procName

View File

@@ -5,7 +5,7 @@
icon_state = ""
flags = CONDUCT
w_class = 2.0
matter = list("metal" = 100)
matter = list(DEFAULT_WALL_MATERIAL = 100)
throwforce = 2
throw_speed = 3
throw_range = 10

View File

@@ -39,7 +39,7 @@
bombtank.master = null
bombtank = null
del(src)
qdel(src)
return
if((istype(W, /obj/item/weapon/weldingtool) && W:welding))
if(!status)
@@ -144,8 +144,8 @@
ground_zero.hotspot_expose(1000, 125)
if(master)
del(master)
del(src)
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)

View File

@@ -190,7 +190,7 @@
a_right:holder = null
a_right.loc = T
spawn(0)
del(src)
qdel(src)
return

View File

@@ -2,7 +2,7 @@
name = "igniter"
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
matter = list("metal" = 500, "glass" = 50, "waste" = 10)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
origin_tech = "magnets=1"
secured = 1

View File

@@ -4,7 +4,7 @@
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
icon_state = "infrared"
matter = list("metal" = 1000, "glass" = 500, "waste" = 100)
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
origin_tech = "magnets=2"
wires = WIRE_PULSE
@@ -32,7 +32,7 @@
processing_objects.Add(src)
else
on = 0
if(first) del(first)
if(first) qdel(first)
processing_objects.Remove(src)
update_icon()
return secured
@@ -53,7 +53,7 @@
process()//Old code
if(!on)
if(first)
del(first)
qdel(first)
return
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
@@ -77,7 +77,7 @@
attack_hand()
del(first)
qdel(first)
..()
return
@@ -86,14 +86,14 @@
var/t = dir
..()
set_dir(t)
del(first)
qdel(first)
return
holder_movement()
if(!holder) return 0
// set_dir(holder.dir)
del(first)
qdel(first)
return 1
@@ -175,7 +175,7 @@
if(master)
//world << "beam hit \ref[src]: calling master \ref[master].hit"
master.trigger_beam()
del(src)
qdel(src)
return
/obj/effect/beam/i_beam/proc/vis_spread(v)
@@ -193,7 +193,7 @@
if((loc.density || !(master)))
// world << "beam hit loc [loc] or no master [master], deleting"
del(src)
qdel(src)
return
//world << "proccess: [src.left] left"
@@ -233,17 +233,17 @@
return
else
//world << "is a next: \ref[next], deleting beam \ref[I]"
del(I)
qdel(I)
else
//world << "step failed, deleting \ref[next]"
del(next)
qdel(next)
spawn(10)
process()
return
return
/obj/effect/beam/i_beam/Bump()
del(src)
qdel(src)
return
/obj/effect/beam/i_beam/Bumped()
@@ -258,7 +258,10 @@
return
return
/obj/effect/beam/i_beam/Del()
del(next)
/obj/effect/beam/i_beam/Destroy()
if(master.first == src)
master.first = null
if(next)
qdel(next)
next = null
..()
return

View File

@@ -2,7 +2,7 @@
name = "mousetrap"
desc = "A handy little spring-loaded trap for catching pesty rodents."
icon_state = "mousetrap"
matter = list("metal" = 100, "waste" = 10)
matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10)
origin_tech = "combat=1"
var/armed = 0

View File

@@ -2,7 +2,7 @@
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
matter = list("metal" = 800, "glass" = 200, "waste" = 50)
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
origin_tech = "magnets=1"
wires = WIRE_PULSE

View File

@@ -8,9 +8,9 @@
w_class = 5.0
flags = CONDUCT
/obj/item/assembly/shock_kit/Del()
del(part1)
del(part2)
/obj/item/assembly/shock_kit/Destroy()
qdel(part1)
qdel(part2)
..()
return
@@ -25,7 +25,7 @@
part2.master = null
part1 = null
part2 = null
del(src)
qdel(src)
return
if(istype(W, /obj/item/weapon/screwdriver))
status = !status

View File

@@ -3,7 +3,7 @@
desc = "Used to remotely activate devices."
icon_state = "signaller"
item_state = "signaler"
matter = list("metal" = 1000, "glass" = 200, "waste" = 100)
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 200, "waste" = 100)
origin_tech = "magnets=1"
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
@@ -141,6 +141,8 @@
proc/set_frequency(new_frequency)
if(!frequency)
return
if(!radio_controller)
sleep(20)
if(!radio_controller)
@@ -171,3 +173,9 @@
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/Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
frequency = 0
..()

View File

@@ -2,7 +2,7 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
matter = list("metal" = 500, "glass" = 50, "waste" = 10)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
origin_tech = "magnets=1"
wires = WIRE_PULSE

View File

@@ -2,7 +2,7 @@
name = "voice analyzer"
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
icon_state = "voice"
matter = list("metal" = 500, "glass" = 50, "waste" = 10)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
origin_tech = "magnets=1"
var/listening = 0
var/recorded //the activation message

View File

@@ -77,7 +77,7 @@
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
del(src)
qdel(src)

View File

@@ -21,4 +21,4 @@
continue
new loot_path(get_turf(src))
del(src)
qdel(src)

View File

@@ -6,7 +6,7 @@
if(M.client)
M << "<span class='info'>[message]</span>"
if(once)
del(src)
qdel(src)
/obj/effect/step_trigger/teleport_fancy
var/locationx
@@ -41,4 +41,4 @@
uses--
if(uses == 0)
del(src)
qdel(src)

View File

@@ -33,7 +33,7 @@
if( findtext(href,"<script",1,0) )
world.log << "Attempted use of scripts within a topic call, by [src]"
message_admins("Attempted use of scripts within a topic call, by [src]")
//del(usr)
//qdel(usr)
return
//Admin PM
@@ -112,7 +112,7 @@
if(!config.guests_allowed && IsGuestKey(key))
alert(src,"This server doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
del(src)
qdel(src)
return
// Change the way they should download resources.
@@ -305,3 +305,14 @@
'icons/spideros_icons/sos_13.png',
'icons/spideros_icons/sos_14.png'
)
mob/proc/MayRespawn()
return 0
client/proc/MayRespawn()
if(mob)
return mob.MayRespawn()
// Something went wrong, client is usually kicked or transfered to a new mob at this point
return 0

View File

@@ -84,6 +84,7 @@ datum/preferences
var/religion = "None" //Religious association.
//Mob preview
var/mob/living/carbon/human/dummy //the mannequin
var/icon/preview_icon = null
var/icon/preview_icon_front = null
var/icon/preview_icon_side = null
@@ -1447,7 +1448,7 @@ datum/preferences
rlimb_data[limb] = choice
organ_data[limb] = "cyborg"
if(second_limb)
organ_data[second_limb] = choice
rlimb_data[second_limb] = choice
organ_data[second_limb] = "cyborg"
if(third_limb && organ_data[third_limb] == "amputated")
organ_data[third_limb] = null
@@ -1642,30 +1643,18 @@ datum/preferences
character.gen_record = gen_record
character.exploit_record = exploit_record
character.gender = gender
character.change_gender(gender)
character.age = age
character.b_type = b_type
character.r_eyes = r_eyes
character.g_eyes = g_eyes
character.b_eyes = b_eyes
character.change_eye_color(r_eyes,g_eyes,b_eyes)
character.change_hair_color(r_hair,g_hair,b_hair)
character.change_facial_hair_color(r_facial,g_facial,b_facial)
character.change_skin_color(r_skin,g_skin,b_skin)
character.change_skin_tone(s_tone)
character.r_hair = r_hair
character.g_hair = g_hair
character.b_hair = b_hair
character.r_facial = r_facial
character.g_facial = g_facial
character.b_facial = b_facial
character.r_skin = r_skin
character.g_skin = g_skin
character.b_skin = b_skin
character.s_tone = s_tone
character.h_style = h_style
character.f_style = f_style
character.change_hair(h_style)
character.change_facial_hair(f_style)
character.home_system = home_system
character.citizenship = citizenship

View File

@@ -31,7 +31,7 @@ var/global/list/gear_datums = list()
/datum/gear
var/display_name //Name/index. Must be unique.
var/path //Path to item.
var/cost //Number of points used.
var/cost //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
var/slot //Slot to equip to.
var/list/allowed_roles //Roles that can spawn with this item.
var/whitelisted //Term to check the whitelist for..
@@ -48,19 +48,19 @@ var/global/list/gear_datums = list()
/datum/gear/gbandana
display_name = "bandana, green"
path = /obj/item/clothing/head/greenbandana
cost = 2
cost = 1
slot = slot_head
/datum/gear/obandana
display_name = "bandana, orange"
path = /obj/item/clothing/head/orangebandana
cost = 2
cost = 1
slot = slot_head
/datum/gear/bandana
display_name = "bandana, pirate-red"
path = /obj/item/clothing/head/bandana
cost = 2
cost = 1
slot = slot_head
/datum/gear/bsec_beret
@@ -73,20 +73,20 @@ var/global/list/gear_datums = list()
/datum/gear/eng_beret
display_name = "beret, engie-orange"
path = /obj/item/clothing/head/beret/eng
cost = 2
cost = 1
slot = slot_head
// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
/datum/gear/purp_beret
display_name = "beret, purple"
path = /obj/item/clothing/head/beret/jan
cost = 2
cost = 1
slot = slot_head
/datum/gear/red_beret
display_name = "beret, red"
path = /obj/item/clothing/head/beret
cost = 2
cost = 1
slot = slot_head
/datum/gear/sec_beret
@@ -99,74 +99,80 @@ var/global/list/gear_datums = list()
/datum/gear/bcap
display_name = "cap, blue"
path = /obj/item/clothing/head/soft/blue
cost = 2
cost = 1
slot = slot_head
/datum/gear/mailman
display_name = "cap, blue station"
path = /obj/item/clothing/head/mailman
cost = 2
cost = 1
slot = slot_head
/datum/gear/flatcap
display_name = "cap, brown-flat"
path = /obj/item/clothing/head/flatcap
cost = 2
cost = 1
slot = slot_head
/datum/gear/corpcap
display_name = "cap, corporate (Security)"
path = /obj/item/clothing/head/soft/sec/corp
cost = 2
cost = 1
slot = slot_head
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/gcap
display_name = "cap, green"
path = /obj/item/clothing/head/soft/green
cost = 2
cost = 1
slot = slot_head
/datum/gear/grcap
display_name = "cap, grey"
path = /obj/item/clothing/head/soft/grey
cost = 2
cost = 1
slot = slot_head
/datum/gear/ocap
display_name = "cap, orange"
path = /obj/item/clothing/head/soft/orange
cost = 2
cost = 1
slot = slot_head
/datum/gear/purcap
display_name = "cap, purple"
path = /obj/item/clothing/head/soft/purple
cost = 2
cost = 1
slot = slot_head
/datum/gear/raincap
display_name = "cap, rainbow"
path = /obj/item/clothing/head/soft/rainbow
cost = 3
cost = 1
slot = slot_head
/datum/gear/rcap
display_name = "cap, red"
path = /obj/item/clothing/head/soft/red
cost = 2
cost = 1
slot = slot_head
/datum/gear/ycap
display_name = "cap, yellow"
path = /obj/item/clothing/head/soft/yellow
cost = 2
cost = 1
slot = slot_head
/datum/gear/wcap
display_name = "cap, white"
path = /obj/item/clothing/head/soft/mime
cost = 1
slot = slot_head
/datum/gear/hairflower
display_name = "hair flower pin"
path = /obj/item/clothing/head/hairflower
cost = 2
cost = 1
slot = slot_head
/datum/gear/dbhardhat
@@ -181,6 +187,12 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_head
/datum/gear/rhardhat
display_name = "hardhat, red"
path = /obj/item/clothing/head/hardhat/red
cost = 2
slot = slot_head
/datum/gear/yhardhat
display_name = "hardhat, yellow"
path = /obj/item/clothing/head/hardhat
@@ -190,32 +202,38 @@ var/global/list/gear_datums = list()
/datum/gear/boater
display_name = "hat, boatsman"
path = /obj/item/clothing/head/boaterhat
cost = 2
cost = 1
slot = slot_head
/datum/gear/bowler
display_name = "hat, bowler"
path = /obj/item/clothing/head/bowler
cost = 2
cost = 1
slot = slot_head
/datum/gear/fez
display_name = "hat, fez"
path = /obj/item/clothing/head/fez
cost = 2
cost = 1
slot = slot_head
/datum/gear/tophat
display_name = "hat, tophat"
path = /obj/item/clothing/head/that
cost = 1
slot = slot_head
// Wig by Earthcrusher, blame him.
/datum/gear/philosopher_wig
display_name = "natural philosopher's wig"
path = /obj/item/clothing/head/philosopher_wig
cost = 3
cost = 1
slot = slot_head
/datum/gear/ushanka
display_name = "ushanka"
path = /obj/item/clothing/head/ushanka
cost = 2
cost = 1
slot = slot_head
// This was sprited and coded specifically for Zhan-Khazan characters. Before you
@@ -223,7 +241,7 @@ var/global/list/gear_datums = list()
/datum/gear/zhan_scarf
display_name = "Zhan headscarf"
path = /obj/item/clothing/head/tajaran/scarf
cost = 2
cost = 1
slot = slot_head
whitelisted = "Tajara"
@@ -239,12 +257,37 @@ var/global/list/gear_datums = list()
display_name = "Glasses, green"
path = /obj/item/clothing/glasses/gglasses
cost = 1
slot = slot_glasses
/datum/gear/prescriptionhipster
display_name = "Glasses, hipster"
path = /obj/item/clothing/glasses/regular/hipster
cost = 1
slot = slot_glasses
/datum/gear/prescription
display_name = "Glasses, prescription"
path = /obj/item/clothing/glasses/regular
cost = 1
slot = slot_glasses
/datum/gear/monocle
display_name = "Monocle"
path = /obj/item/clothing/glasses/monocle
cost = 1
slot = slot_glasses
/datum/gear/scanning_goggles
display_name = "scanning goggles"
path = /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
cost = 1
// allowed_roles = list("Roboticist", "Scientist", "Research Director")
slot = slot_glasses
/datum/gear/sciencegoggles
display_name = "Science Goggles"
path = /obj/item/clothing/glasses/science
cost = 1
slot = slot_glasses
/datum/gear/security
display_name = "Security HUD"
@@ -260,10 +303,10 @@ var/global/list/gear_datums = list()
slot = slot_glasses
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/prescription
/datum/gear/prescriptionsun
display_name = "sunglasses, presciption"
path = /obj/item/clothing/glasses/sunglasses/prescription
cost = 3
cost = 2
slot = slot_glasses
// Mask
@@ -276,71 +319,184 @@ var/global/list/gear_datums = list()
// Uniform slot
/datum/gear/exec_suit
display_name = "executive suit"
path = /obj/item/clothing/under/suit_jacket/really_black
slot = slot_w_uniform
cost = 2
/datum/gear/blazer_blue
display_name = "blazer, blue"
path = /obj/item/clothing/under/blazer
slot = slot_w_uniform
cost = 2
/datum/gear/kilt
display_name = "kilt"
path = /obj/item/clothing/under/kilt
slot = slot_w_uniform
cost = 3
/datum/gear/blackjumpskirt
display_name = "jumpskirt, black"
path = /obj/item/clothing/under/blackjumpskirt
slot = slot_w_uniform
cost = 2
/datum/gear/skirt_blue
display_name = "plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
slot = slot_w_uniform
cost = 2
/datum/gear/skirt_purple
display_name = "plaid skirt, purple"
path = /obj/item/clothing/under/dress/plaid_purple
slot = slot_w_uniform
cost = 2
/datum/gear/skirt_red
display_name = "plaid skirt, red"
path = /obj/item/clothing/under/dress/plaid_red
slot = slot_w_uniform
cost = 2
/datum/gear/skirt_black
display_name = "skirt, black"
path = /obj/item/clothing/under/blackskirt
slot = slot_w_uniform
cost = 2
/datum/gear/sundress
display_name = "sundress"
path = /obj/item/clothing/under/sundress
slot = slot_w_uniform
cost = 3
/datum/gear/sundress_white
display_name = "sundress, white"
path = /obj/item/clothing/under/sundress_white
slot = slot_w_uniform
cost = 3
cost = 1
/datum/gear/cheongsam
display_name = "cheongsam, white"
path = /obj/item/clothing/under/cheongsam
slot = slot_w_uniform
cost = 3
cost = 1
/datum/gear/kilt
display_name = "kilt"
path = /obj/item/clothing/under/kilt
slot = slot_w_uniform
cost = 1
/datum/gear/blackjumpskirt
display_name = "jumpskirt, black"
path = /obj/item/clothing/under/blackjumpskirt
slot = slot_w_uniform
cost = 1
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, female-black"
path = /obj/item/clothing/under/color/blackf
slot = slot_w_uniform
cost = 1
/datum/gear/blackfjumpsuit
display_name = "jumpsuit, rainbow"
path = /obj/item/clothing/under/rainbow
slot = slot_w_uniform
cost = 1
/datum/gear/skirt_blue
display_name = "plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
slot = slot_w_uniform
cost = 1
/datum/gear/skirt_purple
display_name = "plaid skirt, purple"
path = /obj/item/clothing/under/dress/plaid_purple
slot = slot_w_uniform
cost = 1
/datum/gear/skirt_red
display_name = "plaid skirt, red"
path = /obj/item/clothing/under/dress/plaid_red
slot = slot_w_uniform
cost = 1
/datum/gear/skirt_black
display_name = "skirt, black"
path = /obj/item/clothing/under/blackskirt
slot = slot_w_uniform
cost = 1
/datum/gear/amishsuit
display_name = "suit, amish"
path = /obj/item/clothing/under/sl_suit
slot = slot_w_uniform
cost = 1
/datum/gear/blacksuit
display_name = "suit, black"
path = /obj/item/clothing/under/suit_jacket
slot = slot_w_uniform
cost = 1
/datum/gear/shinyblacksuit
display_name = "suit, shiny-black"
path = /obj/item/clothing/under/lawyer/black
slot = slot_w_uniform
cost = 1
/datum/gear/bluesuit
display_name = "suit, blue"
path = /obj/item/clothing/under/lawyer/blue
slot = slot_w_uniform
cost = 1
/datum/gear/burgundysuit
display_name = "suit, burgundy"
path = /obj/item/clothing/under/suit_jacket/burgundy
slot = slot_w_uniform
cost = 1
/datum/gear/checkeredsuit
display_name = "suit, checkered"
path = /obj/item/clothing/under/suit_jacket/checkered
slot = slot_w_uniform
cost = 1
/datum/gear/charcoalsuit
display_name = "suit, charcoal"
path = /obj/item/clothing/under/suit_jacket/charcoal
slot = slot_w_uniform
cost = 1
/datum/gear/execsuit
display_name = "suit, executive"
path = /obj/item/clothing/under/suit_jacket/really_black
slot = slot_w_uniform
cost = 1
/datum/gear/femaleexecsuit
display_name = "suit, female-executive"
path = /obj/item/clothing/under/suit_jacket/female
slot = slot_w_uniform
cost = 1
/datum/gear/gentlesuit
display_name = "suit, gentlemen"
path = /obj/item/clothing/under/gentlesuit
slot = slot_w_uniform
cost = 1
/datum/gear/navysuit
display_name = "suit, navy"
path = /obj/item/clothing/under/suit_jacket/navy
slot = slot_w_uniform
cost = 1
/datum/gear/redsuit
display_name = "suit, red"
path = /obj/item/clothing/under/suit_jacket/red
slot = slot_w_uniform
cost = 1
/datum/gear/redlawyer
display_name = "suit, lawyer-red"
path = /obj/item/clothing/under/lawyer/red
slot = slot_w_uniform
cost = 1
/datum/gear/oldmansuit
display_name = "suit, old-man"
path = /obj/item/clothing/under/lawyer/oldman
slot = slot_w_uniform
cost = 1
/datum/gear/purplesuit
display_name = "suit, purple"
path = /obj/item/clothing/under/lawyer/purpsuit
slot = slot_w_uniform
cost = 1
/datum/gear/tansuit
display_name = "suit, tan"
path = /obj/item/clothing/under/suit_jacket/tan
slot = slot_w_uniform
cost = 1
/datum/gear/whitesuit
display_name = "suit, white"
path = /obj/item/clothing/under/scratch
slot = slot_w_uniform
cost = 1
/datum/gear/whitebluesuit
display_name = "suit, white-blue"
path = /obj/item/clothing/under/lawyer/bluesuit
slot = slot_w_uniform
cost = 1
/datum/gear/sundress
display_name = "sundress"
path = /obj/item/clothing/under/sundress
slot = slot_w_uniform
cost = 1
/datum/gear/sundress_white
display_name = "sundress, white"
path = /obj/item/clothing/under/sundress_white
slot = slot_w_uniform
cost = 1
/datum/gear/uniform_captain
display_name = "uniform, captain's dress"
@@ -352,7 +508,7 @@ var/global/list/gear_datums = list()
/datum/gear/corpsecsuit
display_name = "uniform, corporate (Security)"
path = /obj/item/clothing/under/rank/security/corp
cost = 2
cost = 1
slot = slot_w_uniform
allowed_roles = list("Security Officer","Head of Security","Warden")
@@ -373,7 +529,7 @@ var/global/list/gear_datums = list()
/datum/gear/navysecsuit
display_name = "uniform, navyblue (Security)"
path = /obj/item/clothing/under/rank/security/navyblue
cost = 2
cost = 1
slot = slot_w_uniform
allowed_roles = list("Security Officer","Head of Security","Warden")
@@ -389,7 +545,7 @@ var/global/list/gear_datums = list()
display_name = "armband, EMT"
path = /obj/item/clothing/accessory/armband/medgreen
slot = slot_tie
cost = 2
cost = 1
/datum/gear/armband_engineering
display_name = "armband, engineering"
@@ -425,21 +581,21 @@ var/global/list/gear_datums = list()
display_name = "holster, armpit"
path = /obj/item/clothing/accessory/holster/armpit
slot = slot_tie
cost = 2
cost = 1
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
/datum/gear/hip
display_name = "holster, hip"
path = /obj/item/clothing/accessory/holster/hip
slot = slot_tie
cost = 2
cost = 1
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security", "Detective")
/datum/gear/waist
display_name = "holster, waist"
path = /obj/item/clothing/accessory/holster/waist
slot = slot_tie
cost = 2
cost = 1
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security", "Detective")
/datum/gear/tie_blue
@@ -464,14 +620,14 @@ var/global/list/gear_datums = list()
display_name = "webbing, engineering"
path = /obj/item/clothing/accessory/storage/brown_vest
slot = slot_tie
cost = 2
cost = 1
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
/datum/gear/black_vest
display_name = "webbing, security"
path = /obj/item/clothing/accessory/storage/black_vest
slot = slot_tie
cost = 2
cost = 1
allowed_roles = list("Security Officer","Head of Security","Warden")
/datum/gear/webbing
@@ -491,37 +647,37 @@ var/global/list/gear_datums = list()
/datum/gear/bomber
display_name = "bomber jacket"
path = /obj/item/clothing/suit/storage/toggle/bomber
cost = 4
cost = 2
slot = slot_wear_suit
/datum/gear/leather_jacket
display_name = "leather jacket, black"
path = /obj/item/clothing/suit/storage/leather_jacket
cost = 3
cost = 2
slot = slot_wear_suit
/datum/gear/leather_jacket_nt
display_name = "leather jacket, NanoTrasen, black"
path = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen
cost = 3
cost = 2
slot = slot_wear_suit
/datum/gear/brown_jacket
display_name = "leather jacket, brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket
cost = 3
cost = 2
slot = slot_wear_suit
/datum/gear/brown_jacket_nt
display_name = "leather jacket, NanoTrasen, brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
cost = 3
cost = 2
slot = slot_wear_suit
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
cost = 3
/datum/gear/hazard_vest
display_name = "hazard vest"
path = /obj/item/clothing/suit/storage/hazardvest
cost = 2
slot = slot_wear_suit
/datum/gear/hoodie
@@ -533,79 +689,122 @@ var/global/list/gear_datums = list()
/datum/gear/hoodie/black
display_name = "hoodie, black"
path = /obj/item/clothing/suit/storage/toggle/hoodie/black
cost = 2
/datum/gear/unathi_mantle
display_name = "hide mantle (Unathi)"
path = /obj/item/clothing/suit/unathi/mantle
cost = 2
cost = 1
slot = slot_wear_suit
whitelisted = "Unathi"
/datum/gear/labcoat
display_name = "labcoat"
path = /obj/item/clothing/suit/storage/toggle/labcoat
cost = 3
cost = 2
slot = slot_wear_suit
/datum/gear/bluelabcoat
display_name = "labcoat, blue"
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue
cost = 2
slot = slot_wear_suit
/datum/gear/greenlabcoat
display_name = "labcoat, green"
path = /obj/item/clothing/suit/storage/toggle/labcoat/green
cost = 2
slot = slot_wear_suit
/datum/gear/orangelabcoat
display_name = "labcoat, orange"
path = /obj/item/clothing/suit/storage/toggle/labcoat/orange
cost = 2
slot = slot_wear_suit
/datum/gear/purplelabcoat
display_name = "labcoat, purple"
path = /obj/item/clothing/suit/storage/toggle/labcoat/purple
cost = 2
slot = slot_wear_suit
/datum/gear/redlabcoat
display_name = "labcoat, red"
path = /obj/item/clothing/suit/storage/toggle/labcoat/red
cost = 2
slot = slot_wear_suit
/datum/gear/overalls
display_name = "overalls"
path = /obj/item/clothing/suit/apron/overalls
cost = 2
cost = 1
slot = slot_wear_suit
/datum/gear/bponcho
display_name = "poncho, blue"
path = /obj/item/clothing/suit/poncho/blue
cost = 3
cost = 1
slot = slot_wear_suit
/datum/gear/gponcho
display_name = "poncho, green"
path = /obj/item/clothing/suit/poncho/green
cost = 3
cost = 1
slot = slot_wear_suit
/datum/gear/pponcho
display_name = "poncho, purple"
path = /obj/item/clothing/suit/poncho/purple
cost = 3
cost = 1
slot = slot_wear_suit
/datum/gear/rponcho
display_name = "poncho, red"
path = /obj/item/clothing/suit/poncho/red
cost = 3
cost = 1
slot = slot_wear_suit
/datum/gear/poncho
display_name = "poncho, tan"
path = /obj/item/clothing/suit/poncho
cost = 3
cost = 1
slot = slot_wear_suit
/datum/gear/unathi_robe
display_name = "roughspun robe (Unathi)"
path = /obj/item/clothing/suit/unathi/robe
cost = 3
cost = 1
slot = slot_wear_suit
// whitelisted = "Unathi" // You don't have a monopoly on a robe!
/datum/gear/blue_lawyer_jacket
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
cost = 2
slot = slot_wear_suit
/datum/gear/purple_lawyer_jacket
display_name = "suit jacket, purple"
path = /obj/item/clothing/suit/storage/lawyer/purpjacket
cost = 2
slot = slot_wear_suit
/datum/gear/suspenders
display_name = "suspenders"
path = /obj/item/clothing/suit/suspenders
cost = 2
cost = 1
slot = slot_wear_suit
/datum/gear/wcoat
display_name = "waistcoat"
path = /obj/item/clothing/suit/wcoat
cost = 2
cost = 1
slot = slot_wear_suit
/datum/gear/zhan_furs
display_name = "Zhan-Khazan furs (Tajaran)"
path = /obj/item/clothing/suit/tajaran/furs
cost = 3
cost = 1
slot = slot_wear_suit
whitelisted = "Tajara" // You do have a monopoly on a fur suit tho
@@ -620,7 +819,7 @@ var/global/list/gear_datums = list()
/datum/gear/blue_gloves
display_name = "gloves, blue"
path = /obj/item/clothing/gloves/blue
cost = 1
cost = 2
slot = slot_gloves
/datum/gear/brown_gloves
@@ -629,22 +828,53 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_gloves
/datum/gear/light_brown_gloves
display_name = "gloves, light-brown"
path = /obj/item/clothing/gloves/light_brown
cost = 2
slot = slot_gloves
/datum/gear/green_gloves
display_name = "gloves, green"
path = /obj/item/clothing/gloves/green
cost = 1
cost = 2
slot = slot_gloves
/datum/gear/grey_gloves
display_name = "gloves, grey"
path = /obj/item/clothing/gloves/grey
cost = 2
slot = slot_gloves
/datum/gear/latex_gloves
display_name = "gloves, latex"
path = /obj/item/clothing/gloves/latex
cost = 2
slot = slot_gloves
/datum/gear/orange_gloves
display_name = "gloves, orange"
path = /obj/item/clothing/gloves/orange
cost = 1
cost = 2
slot = slot_gloves
/datum/gear/purple_gloves
display_name = "gloves, purple"
path = /obj/item/clothing/gloves/purple
cost = 2
slot = slot_gloves
/datum/gear/rainbow_gloves
display_name = "gloves, rainbow"
path = /obj/item/clothing/gloves/rainbow
cost = 2
slot = slot_gloves
/datum/gear/red_gloves
display_name = "gloves, red"
path = /obj/item/clothing/gloves/red
cost = 1
cost = 2
slot = slot_gloves
/datum/gear/white_gloves
@@ -658,13 +888,13 @@ var/global/list/gear_datums = list()
/datum/gear/jackboots
display_name = "jackboots"
path = /obj/item/clothing/shoes/jackboots
cost = 2
cost = 1
slot = slot_shoes
/datum/gear/toeless_jackboots
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran //permisson of owner of custom item was granted
cost = 2
path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran
cost = 1
slot = slot_shoes
/datum/gear/sandal
@@ -727,6 +957,12 @@ var/global/list/gear_datums = list()
cost = 1
slot = slot_shoes
/datum/gear/rainbow_shoes
display_name = "shoes, rainbow"
path = /obj/item/clothing/shoes/rainbow
cost = 1
slot = slot_shoes
/datum/gear/red_shoes
display_name = "shoes, red"
path = /obj/item/clothing/shoes/red
@@ -807,7 +1043,7 @@ var/global/list/gear_datums = list()
display_name = "cane"
path = /obj/item/weapon/cane
sort_category = "misc"
cost = 2
cost = 1
/datum/gear/dice
display_name = "d20"
@@ -821,6 +1057,17 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
/datum/gear/flask
display_name = "flask"
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
sort_category = "misc"
cost = 1
/datum/gear/vacflask
display_name = "vacuum-flask"
path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
sort_category = "misc"
cost = 1
/datum/gear/blipstick
display_name = "lipstick, black"
path = /obj/item/weapon/lipstick/black
@@ -845,17 +1092,35 @@ var/global/list/gear_datums = list()
sort_category = "misc"
cost = 1
/datum/gear/smokingpipe
display_name = "pipe, smoking"
path = /obj/item/clothing/mask/smokable/pipe
sort_category = "misc"
cost = 1
/datum/gear/cornpipe
display_name = "pipe, corn"
path = /obj/item/clothing/mask/smokable/pipe/cobpipe
sort_category = "misc"
cost = 1
/datum/gear/matchbook
display_name = "matchbook"
path = /obj/item/weapon/storage/box/matches
sort_category = "misc"
cost = 2
cost = 1
/datum/gear/comb
display_name = "purple comb"
path = /obj/item/weapon/haircomb
sort_category = "misc"
cost = 2
cost = 1
/datum/gear/zippo
display_name = "zippo"
path = /obj/item/weapon/flame/lighter/zippo
sort_category = "misc"
cost = 1
/*/datum/gear/combitool
display_name = "combi-tool"
@@ -864,30 +1129,36 @@ var/global/list/gear_datums = list()
// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use
// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset.
/datum/gear/earmuffs
display_name = "earmuffs"
path = /obj/item/clothing/ears/earmuffs
cost = 1
sort_category = "ears"
/datum/gear/skrell_chain
display_name = "skrell headtail-wear, female, chain"
path = /obj/item/clothing/ears/skrell/chain
cost = 2
cost = 1
sort_category = "ears"
whitelisted = "Skrell"
/datum/gear/skrell_plate
display_name = "skrell headtail-wear, male, bands"
path = /obj/item/clothing/ears/skrell/band
cost = 2
cost = 1
sort_category = "ears"
whitelisted = "Skrell"
/datum/gear/skrell_cloth_male
display_name = "skrell headtail-wear, male, cloth"
path = /obj/item/clothing/ears/skrell/cloth_male
cost = 2
cost = 1
sort_category = "ears"
whitelisted = "Skrell"
/datum/gear/skrell_cloth_female
display_name = "skrell headtail-wear, female, cloth"
path = /obj/item/clothing/ears/skrell/cloth_female
cost = 2
cost = 1
sort_category = "ears"
whitelisted = "Skrell"

View File

@@ -117,7 +117,7 @@
O = (H.l_ear == src ? H.r_ear : H.l_ear)
user.u_equip(O)
if(!istype(src,/obj/item/clothing/ears/offear))
del(O)
qdel(O)
O = src
else
O = src
@@ -129,7 +129,7 @@
O.add_fingerprint(user)
if(istype(src,/obj/item/clothing/ears/offear))
del(src)
qdel(src)
/obj/item/clothing/ears/update_clothing_icon()
if (ismob(src.loc))
@@ -191,7 +191,7 @@ BLIND // can't see anything
gender = PLURAL //Carn: for grammarically correct text-parsing
w_class = 2.0
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.50
siemens_coefficient = 0.75
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/clipped = 0
@@ -264,37 +264,19 @@ BLIND // can't see anything
return
on = !on
user << "You [on ? "enable" : "disable"] the helmet light."
update_light(user)
update_flashlight(user)
else
return ..(user)
/obj/item/clothing/head/proc/update_light(var/mob/user = null)
/obj/item/clothing/head/proc/update_flashlight(var/mob/user = null)
if(on && !light_applied)
if(loc == user)
user.SetLuminosity(user.luminosity + brightness_on)
SetLuminosity(brightness_on)
set_light(brightness_on)
light_applied = 1
else if(!on && light_applied)
if(loc == user)
user.SetLuminosity(user.luminosity - brightness_on)
SetLuminosity(0)
set_light(0)
light_applied = 0
update_icon(user)
/obj/item/clothing/head/equipped(mob/user)
..()
spawn(1)
if(on && loc == user && !light_applied)
user.SetLuminosity(user.luminosity + brightness_on)
light_applied = 1
/obj/item/clothing/head/dropped(mob/user)
..()
spawn(1)
if(on && loc != user && light_applied)
user.SetLuminosity(user.luminosity - brightness_on)
light_applied = 0
/obj/item/clothing/head/update_icon(var/mob/user)
overlays.Cut()
@@ -308,18 +290,6 @@ BLIND // can't see anything
var/mob/living/carbon/human/H = user
H.update_inv_head()
/obj/item/clothing/head/equipped(mob/user)
..()
update_light(user)
/obj/item/clothing/head/pickup(mob/user)
..()
update_light(user)
/obj/item/clothing/head/dropped(mob/user)
..()
update_light(user)
/obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
@@ -357,6 +327,7 @@ BLIND // can't see anything
permeability_coefficient = 0.50
slowdown = SHOES_SLOWDOWN
force = 2
var/overshoes = 0
species_restricted = list("exclude","Unathi","Tajara")
sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi')
@@ -391,13 +362,17 @@ BLIND // can't see anything
//Under clothing
/obj/item/clothing/under
icon = 'icons/obj/clothing/uniforms.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_uniforms.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_uniforms.dmi',
)
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = 3
var/has_sensor = 1//For the crew computer 2 = unable to change mode
var/has_sensor = 1 //For the crew computer 2 = unable to change mode
var/sensor_mode = 0
/*
1 = Report living/dead
@@ -406,7 +381,25 @@ BLIND // can't see anything
*/
var/list/accessories = list()
var/displays_id = 1
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
//convenience var for defining the icon state for the overlay used when the clothing is worn.
//Also used by rolling/unrolling.
var/worn_state = null
/obj/item/clothing/under/New()
if(worn_state)
if(!item_state_slots)
item_state_slots = list()
item_state_slots[slot_w_uniform_str] = worn_state
else
worn_state = icon_state
//autodetect rollability
if(rolled_down < 0)
if((worn_state + "_d_s") in icon_states('icons/mob/uniform.dmi'))
rolled_down = 0
/obj/item/clothing/under/update_clothing_icon()
if (ismob(src.loc))
@@ -464,17 +457,18 @@ BLIND // can't see anything
if (!(src.loc == usr))
return
if (!( usr.restrained() ) && !( usr.stat ))
switch(over_object.name)
if("r_hand")
usr.u_equip(src)
usr.put_in_r_hand(src)
if("l_hand")
usr.u_equip(src)
usr.put_in_l_hand(src)
src.add_fingerprint(usr)
if (( usr.restrained() ) || ( usr.stat ))
return
return
if (!usr.unEquip(src))
return
switch(over_object.name)
if("r_hand")
usr.put_in_r_hand(src)
if("l_hand")
usr.put_in_l_hand(src)
src.add_fingerprint(usr)
/obj/item/clothing/under/examine(mob/user)
..(user)
@@ -548,17 +542,18 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
if(initial(item_color) + "_d_s" in icon_states('icons/mob/uniform.dmi'))
if (item_color == initial(item_color))
body_parts_covered &= LOWER_TORSO|LEGS|FEET
item_color = "[initial(item_color)]_d"
else
body_parts_covered = initial(body_parts_covered)
item_color = initial(item_color)
update_clothing_icon()
if(rolled_down < 0)
usr << "<span class='notice'>You cannot roll down [src]!</span>"
return
rolled_down = !rolled_down
if(rolled_down)
body_parts_covered &= LOWER_TORSO|LEGS|FEET
item_state_slots[slot_w_uniform_str] = "[worn_state]_d"
else
usr << "<span class='notice'>You cannot roll down the uniform!</span>"
body_parts_covered = initial(body_parts_covered)
item_state_slots[slot_w_uniform_str] = "[worn_state]"
update_clothing_icon()
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
if(!(A in accessories))

View File

@@ -27,7 +27,3 @@
desc = "These look pretty fancy."
icon_state = "latex"
item_state = "lgloves"
item_color="mime"
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.

View File

@@ -5,7 +5,6 @@
item_state = "ygloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color="yellow"
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
@@ -15,101 +14,73 @@
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
item_color="yellow"
New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
//average of 0.5, somewhat better than regular gloves' 0.75
siemens_coefficient = pick(0,0.1,0.3,0.5,0.5,0.75,1.35)
/obj/item/clothing/gloves/black
desc = "These gloves are fire-resistant."
desc = "These work gloves are thick and fire-resistant."
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
item_color="brown"
siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
/obj/item/clothing/gloves/orange
name = "orange gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "orange"
item_state = "orangegloves"
item_color="orange"
/obj/item/clothing/gloves/red
name = "red gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "red"
item_state = "redgloves"
item_color = "red"
/obj/item/clothing/gloves/rainbow
name = "rainbow gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "rainbow"
item_state = "rainbowgloves"
item_color = "rainbow"
clown
item_color = "clown"
/obj/item/clothing/gloves/blue
name = "blue gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "blue"
item_state = "bluegloves"
item_color="blue"
/obj/item/clothing/gloves/purple
name = "purple gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "purple"
item_state = "purplegloves"
item_color="purple"
/obj/item/clothing/gloves/green
name = "green gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "green"
item_state = "greengloves"
item_color="green"
/obj/item/clothing/gloves/grey
name = "grey gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "gray"
item_state = "graygloves"
item_color="grey"
rd
item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/light_brown
name = "light brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "lightbrown"
item_state = "lightbrowngloves"
item_color="light brown"
/obj/item/clothing/gloves/brown
name = "brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "brown"
item_state = "browngloves"
item_color="brown"
cargo
item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.

View File

@@ -3,11 +3,6 @@
name = "captain's gloves"
icon_state = "captain"
item_state = "egloves"
item_color = "captain"
cold_protection = HANDS
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/cyborg
desc = "beep boop borp"
@@ -21,7 +16,7 @@
name = "\improper SWAT Gloves"
icon_state = "black"
item_state = "swat_gl"
siemens_coefficient = 0.6
siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
@@ -46,17 +41,13 @@
desc = "Sterile latex gloves."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC)
permeability_coefficient = 0.01
item_color="white"
cmo
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
germ_level = 0
/obj/item/clothing/gloves/botanic_leather
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
name = "botanist's leather gloves"
icon_state = "leather"
item_state = "ggloves"
permeability_coefficient = 0.9
siemens_coefficient = 0.9
permeability_coefficient = 0.05
siemens_coefficient = 0.50 //thick work gloves

View File

@@ -5,7 +5,6 @@
item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on
light_overlay = "hardhat_light"
item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
siemens_coefficient = 0.9
@@ -13,12 +12,10 @@
/obj/item/clothing/head/hardhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
item_color = "orange"
/obj/item/clothing/head/hardhat/red
icon_state = "hardhat0_red"
item_state = "hardhat0_red"
item_color = "red"
name = "firefighter helmet"
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
@@ -27,7 +24,6 @@
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
item_color = "white"
flags = STOPPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -35,4 +31,3 @@
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
item_color = "dblue"

View File

@@ -17,7 +17,7 @@
icon_state = "welding"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
matter = list("metal" = 3000, "glass" = 1000)
matter = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000)
var/up = 0
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
@@ -122,7 +122,6 @@
desc = "A jack o' lantern! Believed to ward off evil spirits."
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
item_color = "pumpkin"
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES

View File

@@ -1,16 +1,15 @@
/obj/item/clothing/head/soft
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow color."
desc = "It's a peaked cap in a tasteless yellow color."
icon_state = "cargosoft"
flags = HEADCOVERSEYES
item_state = "helmet"
item_color = "cargo"
var/flipped = 0
siemens_coefficient = 0.9
body_parts_covered = 0
dropped()
src.icon_state = "[item_color]soft"
src.icon_state = initial(icon_state)
src.flipped=0
..()
@@ -21,10 +20,10 @@
if(usr.canmove && !usr.stat && !usr.restrained())
src.flipped = !src.flipped
if(src.flipped)
icon_state = "[item_color]soft_flipped"
icon_state = "[icon_state]_flipped"
usr << "You flip the hat backwards."
else
icon_state = "[item_color]soft"
src.icon_state = initial(icon_state)
usr << "You flip the hat back in normal position."
update_clothing_icon() //so our mob-overlays update
@@ -32,64 +31,53 @@
name = "red cap"
desc = "It's a baseball hat in a tasteless red color."
icon_state = "redsoft"
item_color = "red"
/obj/item/clothing/head/soft/blue
name = "blue cap"
desc = "It's a baseball hat in a tasteless blue color."
desc = "It's a peaked cap in a tasteless blue color."
icon_state = "bluesoft"
item_color = "blue"
/obj/item/clothing/head/soft/green
name = "green cap"
desc = "It's a baseball hat in a tasteless green color."
desc = "It's a peaked cap in a tasteless green color."
icon_state = "greensoft"
item_color = "green"
/obj/item/clothing/head/soft/yellow
name = "yellow cap"
desc = "It's a baseball hat in a tasteless yellow color."
desc = "It's a peaked cap in a tasteless yellow color."
icon_state = "yellowsoft"
item_color = "yellow"
/obj/item/clothing/head/soft/grey
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey color."
desc = "It's a peaked cap in a tasteful grey color."
icon_state = "greysoft"
item_color = "grey"
/obj/item/clothing/head/soft/orange
name = "orange cap"
desc = "It's a baseball hat in a tasteless orange color."
desc = "It's a peaked cap in a tasteless orange color."
icon_state = "orangesoft"
item_color = "orange"
/obj/item/clothing/head/soft/mime
name = "white cap"
desc = "It's a baseball hat in a tasteless white color."
desc = "It's a peaked cap in a tasteless white color."
icon_state = "mimesoft"
item_color = "mime"
/obj/item/clothing/head/soft/purple
name = "purple cap"
desc = "It's a baseball hat in a tasteless purple color."
desc = "It's a peaked cap in a tasteless purple color."
icon_state = "purplesoft"
item_color = "purple"
/obj/item/clothing/head/soft/rainbow
name = "rainbow cap"
desc = "It's a baseball hat in a bright rainbow of colors."
desc = "It's a peaked cap in a bright rainbow of colors."
icon_state = "rainbowsoft"
item_color = "rainbow"
/obj/item/clothing/head/soft/sec
name = "security cap"
desc = "It's baseball hat in tasteful red color."
desc = "It's a field cap in tasteful red color."
icon_state = "secsoft"
item_color = "sec"
/obj/item/clothing/head/soft/sec/corp
name = "corporate security cap"
desc = "It's baseball hat in corporate colors."
desc = "It's field cap in corporate colors."
icon_state = "corpsoft"
item_color = "corp"

View File

@@ -5,11 +5,11 @@
item_state = "balaclava"
flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = FACE
body_parts_covered = FACE|HEAD
w_class = 2
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
)
/obj/item/clothing/mask/balaclava/tactical
@@ -21,8 +21,8 @@
flags_inv = HIDEFACE
w_class = 2
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
)
/obj/item/clothing/mask/luchador

View File

@@ -15,26 +15,34 @@
var/hanging = 0
verb/toggle()
/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user)
if(user.canmove && !user.stat)
if(!src.hanging)
src.hanging = !src.hanging
gas_transfer_coefficient = 1 //gas is now escaping to the turf and vice versa
flags &= ~(MASKCOVERSMOUTH | AIRTIGHT)
body_parts_covered = 0
icon_state = "breathdown"
user << "Your mask is now hanging on your neck."
else
src.hanging = !src.hanging
gas_transfer_coefficient = initial(gas_transfer_coefficient)
flags |= MASKCOVERSMOUTH | AIRTIGHT
body_parts_covered = initial(body_parts_covered)
icon_state = "breath"
user << "You pull the mask up to cover your face."
update_clothing_icon()
/obj/item/clothing/mask/breath/attack_self(mob/user)
adjust_mask(user)
/obj/item/clothing/mask/breath/verb/toggle()
set category = "Object"
set name = "Adjust mask"
set src in usr
if(usr.canmove && !usr.stat && !usr.restrained())
if(!src.hanging)
src.hanging = !src.hanging
gas_transfer_coefficient = 1 //gas is now escaping to the turf and vice versa
flags &= ~(MASKCOVERSMOUTH | AIRTIGHT)
icon_state = "breathdown"
usr << "Your mask is now hanging on your neck."
else
src.hanging = !src.hanging
gas_transfer_coefficient = 0.10
flags |= MASKCOVERSMOUTH | AIRTIGHT
icon_state = "breath"
usr << "You pull the mask up to cover your face."
update_clothing_icon()
adjust_mask(usr)
/obj/item/clothing/mask/breath/medical
desc = "A close-fitting sterile mask that can be connected to an air supply."

View File

@@ -1,7 +1,6 @@
/obj/item/clothing/shoes/black
name = "black shoes"
icon_state = "black"
item_color = "black"
desc = "A pair of black shoes."
cold_protection = FEET
@@ -9,81 +8,54 @@
heat_protection = FEET
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
/obj/item/clothing/shoes/brown
name = "brown shoes"
desc = "A pair of brown shoes."
icon_state = "brown"
item_color = "brown"
captain
item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
rd
item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/blue
name = "blue shoes"
icon_state = "blue"
item_color = "blue"
/obj/item/clothing/shoes/green
name = "green shoes"
icon_state = "green"
item_color = "green"
/obj/item/clothing/shoes/yellow
name = "yellow shoes"
icon_state = "yellow"
item_color = "yellow"
/obj/item/clothing/shoes/purple
name = "purple shoes"
icon_state = "purple"
item_color = "purple"
/obj/item/clothing/shoes/brown
name = "brown shoes"
icon_state = "brown"
item_color = "brown"
/obj/item/clothing/shoes/red
name = "red shoes"
desc = "Stylish red shoes."
icon_state = "red"
item_color = "red"
/obj/item/clothing/shoes/white
name = "white shoes"
icon_state = "white"
permeability_coefficient = 0.01
item_color = "white"
/obj/item/clothing/shoes/leather
name = "leather shoes"
desc = "A sturdy pair of leather shoes."
icon_state = "leather"
item_color = "leather"
/obj/item/clothing/shoes/rainbow
name = "rainbow shoes"
desc = "Very gay shoes."
icon_state = "rain_bow"
item_color = "rainbow"
/obj/item/clothing/shoes/orange
name = "orange shoes"
icon_state = "orange"
item_color = "orange"
var/obj/item/weapon/handcuffs/chained = null
/obj/item/clothing/shoes/orange/proc/attach_cuffs(var/obj/item/weapon/handcuffs/cuffs, mob/user as mob)

View File

@@ -1,31 +1,72 @@
/obj/item/clothing/shoes/magboots
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear."
name = "magboots"
icon_state = "magboots0"
species_restricted = null
force = 3
overshoes = 1
var/magpulse = 0
var/icon_base = "magboots"
icon_action_button = "action_blank"
action_button_name = "Toggle the magboots"
var/obj/item/clothing/shoes/shoes = null //Undershoes
var/mob/living/carbon/human/wearer = null //For shoe procs
/obj/item/clothing/shoes/magboots/proc/set_slowdown()
slowdown = shoes? max(SHOES_SLOWDOWN, shoes.slowdown): SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
if (magpulse)
slowdown += 3
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(magpulse)
flags &= ~NOSLIP
slowdown = SHOES_SLOWDOWN
magpulse = 0
set_slowdown()
force = 3
if(icon_base) icon_state = "[icon_base]0"
user << "You disable the mag-pulse traction system."
else
flags |= NOSLIP
slowdown = 2
magpulse = 1
set_slowdown()
force = 5
if(icon_base) icon_state = "[icon_base]1"
user << "You enable the mag-pulse traction system."
user.update_inv_shoes() //so our mob-overlays update
/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user)
var/mob/living/carbon/human/H = user
if(H.shoes)
shoes = H.shoes
if(shoes.overshoes)
user << "You are unable to wear \the [src] as \the [H.shoes] are in the way."
shoes = null
return 0
H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots.
shoes.loc = src
if(!..())
if(shoes) //Put the old shoes back on if the check fails.
if(H.equip_to_slot_if_possible(shoes, slot_shoes))
src.shoes = null
return 0
if (shoes)
user << "You slip \the [src] on over \the [shoes]."
set_slowdown()
wearer = H
return 1
/obj/item/clothing/shoes/magboots/dropped()
..()
var/mob/living/carbon/human/H = wearer
if(shoes)
if(!H.equip_to_slot_if_possible(shoes, slot_shoes))
shoes.loc = get_turf(src)
src.shoes = null
wearer = null
/obj/item/clothing/shoes/magboots/examine(mob/user)
..(user)
var/state = "disabled"

View File

@@ -13,7 +13,6 @@
/obj/item/clothing/shoes/mime
name = "mime shoes"
icon_state = "mime"
item_color = "mime"
/obj/item/clothing/shoes/swat
name = "\improper SWAT shoes"
@@ -68,7 +67,6 @@
icon_state = "clown"
item_state = "clown_shoes"
slowdown = SHOES_SLOWDOWN+1
item_color = "clown"
force = 0
var/footstep = 1 //used for squeeks whilst walking
species_restricted = null
@@ -88,7 +86,6 @@
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
icon_state = "jackboots"
item_state = "jackboots"
item_color = "hosred"
force = 3
siemens_coefficient = 0.7
@@ -97,7 +94,6 @@
desc = "A pair of boots worn by the followers of Nar-Sie."
icon_state = "cult"
item_state = "cult"
item_color = "cult"
force = 2
siemens_coefficient = 0.7

View File

@@ -9,12 +9,10 @@
/obj/item/clothing/head/helmet/space/skrell/white
icon_state = "skrell_helmet_white"
item_state = "skrell_helmet_white"
item_color = "skrell_helmet_white"
/obj/item/clothing/head/helmet/space/skrell/black
icon_state = "skrell_helmet_black"
item_state = "skrell_helmet_black"
item_color = "skrell_helmet_black"
/obj/item/clothing/suit/space/skrell
name = "Skrellian voidsuit"
@@ -28,12 +26,10 @@
/obj/item/clothing/suit/space/skrell/white
icon_state = "skrell_suit_white"
item_state = "skrell_suit_white"
item_color = "skrell_suit_white"
/obj/item/clothing/suit/space/skrell/black
icon_state = "skrell_suit_black"
item_state = "skrell_suit_black"
item_color = "skrell_suit_black"
// Vox space gear (vaccuum suit, low pressure armour)
// Can't be equipped by any other species due to bone structure and vox cybernetics.
@@ -112,7 +108,6 @@
name = "alien clothing"
desc = "This doesn't look very comfortable."
icon_state = "vox-casual-1"
item_color = "vox-casual-1"
item_state = "vox-casual-1"
body_parts_covered = LEGS
@@ -120,7 +115,6 @@
name = "alien robes"
desc = "Weird and flowing!"
icon_state = "vox-casual-2"
item_color = "vox-casual-2"
item_state = "vox-casual-2"
/obj/item/clothing/gloves/yellow/vox
@@ -130,7 +124,6 @@
item_state = "gloves-vox"
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color = "gloves-vox"
species_restricted = list("Vox")
sprite_sheets = list("Vox" = 'icons/mob/species/vox/gloves.dmi')
/obj/item/clothing/shoes/magboots/vox

View File

@@ -155,7 +155,7 @@ var/global/list/breach_burn_descriptors = list(
for(var/datum/breach/B in breaches)
if(!B.class)
src.breaches -= B
del(B)
qdel(B)
else
damage += B.class
if(B.damtype == BRUTE)

View File

@@ -47,7 +47,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
@@ -196,7 +196,7 @@
for(var/obj/item/weapon/melee/energy/blade/blade in M.contents)
M.drop_from_inventory(blade)
del(blade)
qdel(blade)
/obj/item/rig_module/fabricator

View File

@@ -157,8 +157,8 @@
user << "<span class='danger'>You purge the remaining scraps of data from your previous AI, freeing it for use.</span>"
if(integrated_ai)
integrated_ai.ghostize()
del(integrated_ai)
if(ai_card) del(ai_card)
qdel(integrated_ai)
if(ai_card) qdel(ai_card)
else if(user)
user.put_in_hands(ai_card)
else

View File

@@ -13,7 +13,7 @@
desc = "It looks pretty sciency."
icon = 'icons/obj/rig_modules.dmi'
icon_state = "module"
matter = list("metal" = 20000, "plastic" = 30000, "glass" = 5000)
matter = list(DEFAULT_WALL_MATERIAL = 20000, "plastic" = 30000, "glass" = 5000)
var/damage = 0
var/obj/item/weapon/rig/holder

View File

@@ -179,12 +179,12 @@
explosion(get_turf(src), 1, 2, 4, 5)
if(holder && holder.wearer)
holder.wearer.drop_from_inventory(src)
del(holder)
del(src)
qdel(holder)
qdel(src)
/obj/item/rig_module/self_destruct/small/engage()
explosion(get_turf(src), 0, 0, 3, 4)
if(holder && holder.wearer)
holder.wearer.drop_from_inventory(src)
del(holder)
del(src)
qdel(holder)
qdel(src)

View File

@@ -149,12 +149,12 @@
update_icon(1)
/obj/item/weapon/rig/Del()
/obj/item/weapon/rig/Destroy()
for(var/obj/item/piece in list(gloves,boots,helmet,chest))
var/mob/living/M = piece.loc
if(istype(M))
M.drop_from_inventory(piece)
del(piece)
qdel(piece)
processing_objects -= src
..()
@@ -659,25 +659,25 @@
var/obj/item/garbage = H.head
H.drop_from_inventory(garbage)
H.head = null
del(garbage)
qdel(garbage)
if(H.gloves)
var/obj/item/garbage = H.gloves
H.drop_from_inventory(garbage)
H.gloves = null
del(garbage)
qdel(garbage)
if(H.shoes)
var/obj/item/garbage = H.shoes
H.drop_from_inventory(garbage)
H.shoes = null
del(garbage)
qdel(garbage)
if(H.wear_suit)
var/obj/item/garbage = H.wear_suit
H.drop_from_inventory(garbage)
H.wear_suit = null
del(garbage)
qdel(garbage)
for(var/piece in list("helmet","gauntlets","chest","boots"))
toggle_piece(piece, H, ONLY_DEPLOY)

View File

@@ -21,130 +21,130 @@
//Green syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/green
name = "Green Space Helmet"
name = "green space helmet"
icon_state = "syndicate-helm-green"
item_state = "syndicate-helm-green"
/obj/item/clothing/suit/space/syndicate/green
name = "Green Space Suit"
name = "green space suit"
icon_state = "syndicate-green"
item_state = "syndicate-green"
//Dark green syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/green/dark
name = "Dark Green Space Helmet"
name = "dark green space helmet"
icon_state = "syndicate-helm-green-dark"
item_state = "syndicate-helm-green-dark"
/obj/item/clothing/suit/space/syndicate/green/dark
name = "Dark Green Space Suit"
name = "dark green space suit"
icon_state = "syndicate-green-dark"
item_state = "syndicate-green-dark"
//Orange syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/orange
name = "Orange Space Helmet"
name = "orange space helmet"
icon_state = "syndicate-helm-orange"
item_state = "syndicate-helm-orange"
/obj/item/clothing/suit/space/syndicate/orange
name = "Orange Space Suit"
name = "orange space suit"
icon_state = "syndicate-orange"
item_state = "syndicate-orange"
//Blue syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/blue
name = "Blue Space Helmet"
name = "blue space helmet"
icon_state = "syndicate-helm-blue"
item_state = "syndicate-helm-blue"
/obj/item/clothing/suit/space/syndicate/blue
name = "Blue Space Suit"
name = "blue space suit"
icon_state = "syndicate-blue"
item_state = "syndicate-blue"
//Black syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black
name = "Black Space Helmet"
name = "black space helmet"
icon_state = "syndicate-helm-black"
item_state = "syndicate-helm-black"
/obj/item/clothing/suit/space/syndicate/black
name = "Black Space Suit"
name = "black space suit"
icon_state = "syndicate-black"
item_state = "syndicate-black"
//Black-green syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/green
name = "Black Space Helmet"
name = "black and green space helmet"
icon_state = "syndicate-helm-black-green"
item_state = "syndicate-helm-black-green"
/obj/item/clothing/suit/space/syndicate/black/green
name = "Black and Green Space Suit"
name = "black and green space suit"
icon_state = "syndicate-black-green"
item_state = "syndicate-black-green"
//Black-blue syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/blue
name = "Black Space Helmet"
name = "black and blue space helmet"
icon_state = "syndicate-helm-black-blue"
item_state = "syndicate-helm-black-blue"
/obj/item/clothing/suit/space/syndicate/black/blue
name = "Black and Blue Space Suit"
name = "black and blue space suit"
icon_state = "syndicate-black-blue"
item_state = "syndicate-black-blue"
//Black medical syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/med
name = "Black Space Helmet"
name = "black medical space helmet"
icon_state = "syndicate-helm-black-med"
item_state = "syndicate-helm-black"
/obj/item/clothing/suit/space/syndicate/black/med
name = "Green Space Suit"
name = "black medical space suit"
icon_state = "syndicate-black-med"
item_state = "syndicate-black"
//Black-orange syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/orange
name = "Black Space Helmet"
name = "black and orange space helmet"
icon_state = "syndicate-helm-black-orange"
item_state = "syndicate-helm-black"
/obj/item/clothing/suit/space/syndicate/black/orange
name = "Black and Orange Space Suit"
name = "black and orange space suit"
icon_state = "syndicate-black-orange"
item_state = "syndicate-black"
//Black-red syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/red
name = "Black Space Helmet"
name = "black and red space helmet"
icon_state = "syndicate-helm-black-red"
item_state = "syndicate-helm-black-red"
/obj/item/clothing/suit/space/syndicate/black/red
name = "Black and Red Space Suit"
name = "black and red space suit"
icon_state = "syndicate-black-red"
item_state = "syndicate-black-red"
//Black with yellow/red engineering syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/engie
name = "Black Space Helmet"
name = "black engineering space helmet"
icon_state = "syndicate-helm-black-engie"
item_state = "syndicate-helm-black"
/obj/item/clothing/suit/space/syndicate/black/engie
name = "Black Engineering Space Suit"
name = "black engineering space suit"
icon_state = "syndicate-black-engie"
item_state = "syndicate-black"

View File

@@ -4,7 +4,6 @@
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
icon_state = "rig0-syndie"
item_state = "syndie_helm"
item_color = "syndie"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.6
species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen")

View File

@@ -22,7 +22,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating."
icon_state = "rig0-mining"
item_state = "mining_helm"
item_color = "mining"
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
light_overlay = "helmet_light_dual"
@@ -39,7 +38,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
icon_state = "rig0-medical"
item_state = "medical_helm"
item_color = "medical"
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50)
/obj/item/clothing/suit/space/void/medical
@@ -56,7 +54,6 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "rig0-sec"
item_state = "sec_helm"
item_color = "sec"
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
siemens_coefficient = 0.7
light_overlay = "helmet_light_dual"
@@ -76,7 +73,6 @@
name = "atmospherics voidsuit helmet"
icon_state = "rig0-atmos"
item_state = "atmos_helm"
item_color = "atmos"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
light_overlay = "helmet_light_dual"

View File

@@ -59,15 +59,10 @@
/obj/item/clothing/suit/space/void/examine(user)
..(user)
if(boots || helmet || tank)
var/D = "Installed equipment: "
var/first = 1
for(var/obj/item/I in list(helmet,boots,tank))
if (I)
D += "[first?"":", "]\the [I]\icon[I]"
first = 0
D += "."
user << D
var/list/part_list = new
for(var/obj/item/I in list(helmet,boots,tank))
part_list += "\a [I]"
user << "\The [src] has [english_list(part_list)] installed."
if(tank && in_range(src,user))
user << "<span class='notice'>The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].</span>"
@@ -96,10 +91,7 @@
helmet.canremove = 0
if(boots)
if(H.shoes)
M << "You are unable to deploy your suit's magboots as \the [H.shoes] are in the way."
else if (H.equip_to_slot_if_possible(boots, slot_shoes))
M << "Your suit's boots deploy with a hiss."
if (H.equip_to_slot_if_possible(boots, slot_shoes))
boots.canremove = 0
if(tank)
@@ -115,18 +107,18 @@
var/mob/living/carbon/human/H
if(helmet)
helmet.canremove = 1
H = helmet.loc
if(istype(H))
if(helmet && H.head == helmet)
helmet.canremove = 1
H.drop_from_inventory(helmet)
helmet.loc = src
if(boots)
boots.canremove = 1
H = boots.loc
if(istype(H))
if(boots && H.shoes == boots)
boots.canremove = 1
H.drop_from_inventory(boots)
boots.loc = src

View File

@@ -4,7 +4,6 @@
desc = "A bizarre gem-encrusted helmet that radiates magical energies."
icon_state = "rig0-wiz"
item_state = "wiz_helm"
item_color = "wiz"
unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles!
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.7

View File

@@ -237,21 +237,18 @@
name = "pink swimsuit"
desc = "A rather skimpy pink swimsuit."
icon_state = "stripper_p_under"
item_color = "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_under"
item_color = "stripper_g"
siemens_coefficient = 1
/obj/item/clothing/suit/stripper/stripper_pink
name = "pink skimpy dress"
desc = "A rather skimpy pink dress."
icon_state = "stripper_p_over"
item_state = "stripper_p"
siemens_coefficient = 1
/obj/item/clothing/suit/stripper/stripper_green
@@ -265,7 +262,6 @@
name = "the mankini"
desc = "No honest man would wear this abomination"
icon_state = "mankini"
item_color = "mankini"
siemens_coefficient = 1
/obj/item/clothing/suit/xenos
@@ -285,35 +281,30 @@
name = "black swimsuit"
desc = "An oldfashioned black swimsuit."
icon_state = "swim_black"
item_color = "swim_black"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/blue
name = "blue swimsuit"
desc = "An oldfashioned blue swimsuit."
icon_state = "swim_blue"
item_color = "swim_blue"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/purple
name = "purple swimsuit"
desc = "An oldfashioned purple swimsuit."
icon_state = "swim_purp"
item_color = "swim_purp"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/green
name = "green swimsuit"
desc = "An oldfashioned green swimsuit."
icon_state = "swim_green"
item_color = "swim_green"
siemens_coefficient = 1
/obj/item/clothing/under/swimsuit/red
name = "red swimsuit"
desc = "An oldfashioned red swimsuit."
icon_state = "swim_red"
item_color = "swim_red"
siemens_coefficient = 1
/obj/item/clothing/suit/poncho

View File

@@ -8,6 +8,11 @@
pockets.max_w_class = 2 //fit only pocket sized items
pockets.max_storage_space = 4
/obj/item/clothing/suit/storage/Destroy()
qdel(pockets)
pockets = null
..()
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
if (pockets.handle_attack_hand(user))
..(user)
@@ -59,7 +64,6 @@
pockets.max_w_class = 2
pockets.max_storage_space = 8
/obj/item/clothing/suit/storage/vest
var/icon_badge
var/icon_nobadge

View File

@@ -4,16 +4,16 @@
icon = 'icons/obj/clothing/ties.dmi'
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
slot_flags = SLOT_TIE
w_class = 2.0
var/slot = "decor"
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
var/image/inv_overlay = null //overlay used when attached to clothing.
var/overlay_state = null
/obj/item/clothing/accessory/New()
..()
inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[item_color? "[item_color]" : "[icon_state]"]")
inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[overlay_state? "[overlay_state]" : "[icon_state]"]")
//when user attached an accessory to S
/obj/item/clothing/accessory/proc/on_attached(obj/item/clothing/under/S, mob/user as mob)
@@ -47,24 +47,20 @@
/obj/item/clothing/accessory/blue
name = "blue tie"
icon_state = "bluetie"
item_color = "bluetie"
/obj/item/clothing/accessory/red
name = "red tie"
icon_state = "redtie"
item_color = "redtie"
/obj/item/clothing/accessory/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
item_color = "horribletie"
/obj/item/clothing/accessory/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
item_color = "stethoscope"
/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
if(ishuman(M) && isliving(user))
@@ -105,7 +101,6 @@
name = "bronze medal"
desc = "A bronze medal."
icon_state = "bronze"
item_color = "bronze"
/obj/item/clothing/accessory/medal/conduct
name = "distinguished conduct medal"
@@ -124,7 +119,6 @@
name = "silver medal"
desc = "A silver medal."
icon_state = "silver"
item_color = "silver"
/obj/item/clothing/accessory/medal/silver/valor
name = "medal of valor"
@@ -138,7 +132,6 @@
name = "gold medal"
desc = "A prestigious golden medal."
icon_state = "gold"
item_color = "gold"
/obj/item/clothing/accessory/medal/gold/captain
name = "medal of captaincy"
@@ -158,7 +151,6 @@
name = "holobadge"
desc = "This glowing blue badge marks the holder as THE LAW."
icon_state = "holobadge"
item_color = "holobadge"
slot_flags = SLOT_BELT | SLOT_TIE
var/emagged = 0 //Emagging removes Sec check.
@@ -166,7 +158,6 @@
/obj/item/clothing/accessory/holobadge/cord
icon_state = "holobadge-cord"
item_color = "holobadge-cord"
slot_flags = SLOT_MASK | SLOT_TIE
/obj/item/clothing/accessory/holobadge/attack_self(mob/user as mob)

View File

@@ -2,41 +2,34 @@
name = "red armband"
desc = "A fancy red armband!"
icon_state = "red"
item_color = "red"
slot = "armband"
/obj/item/clothing/accessory/armband/cargo
name = "cargo armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown."
icon_state = "cargo"
item_color = "cargo"
/obj/item/clothing/accessory/armband/engine
name = "engineering armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!"
icon_state = "engie"
item_color = "engie"
/obj/item/clothing/accessory/armband/science
name = "science armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is purple."
icon_state = "rnd"
item_color = "rnd"
/obj/item/clothing/accessory/armband/hydro
name = "hydroponics armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue."
icon_state = "hydro"
item_color = "hydro"
/obj/item/clothing/accessory/armband/med
name = "medical armband"
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white."
icon_state = "med"
item_color = "med"
/obj/item/clothing/accessory/armband/medgreen
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"
item_color = "medgreen"

View File

@@ -2,7 +2,6 @@
name = "shoulder holster"
desc = "A handgun holster."
icon_state = "holster"
item_color = "holster"
slot = "utility"
var/obj/item/holstered = null
@@ -108,16 +107,14 @@
name = "armpit holster"
desc = "A worn-out handgun holster. Perfect for concealed carry"
icon_state = "holster"
item_color = "holster"
/obj/item/clothing/accessory/holster/waist
name = "waist holster"
desc = "A handgun holster. Made of expensive leather."
icon_state = "holster"
item_color = "holster_low"
overlay_state = "holster_low"
/obj/item/clothing/accessory/holster/hip
name = "hip holster"
desc = "A handgun holster slung low on the hip, draw pardner!"
icon_state = "holster_hip"
item_color = "holster_hip"

View File

@@ -2,7 +2,6 @@
name = "load bearing equipment"
desc = "Used to hold things when you don't have enough hands."
icon_state = "webbing"
item_color = "webbing"
slot = "utility"
var/slots = 3
var/obj/item/weapon/storage/internal/hold
@@ -51,27 +50,23 @@
name = "webbing"
desc = "Sturdy mess of synthcotton belts and buckles, ready to share your burden."
icon_state = "webbing"
item_color = "webbing"
/obj/item/clothing/accessory/storage/black_vest
name = "black webbing vest"
desc = "Robust black synthcotton vest with lots of pockets to hold whatever you need, but cannot hold in hands."
icon_state = "vest_black"
item_color = "vest_black"
slots = 5
/obj/item/clothing/accessory/storage/brown_vest
name = "brown webbing vest"
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
icon_state = "vest_brown"
item_color = "vest_brown"
slots = 5
/obj/item/clothing/accessory/storage/knifeharness
name = "decorated harness"
desc = "A heavily decorated harness of sinew and leather with two knife-loops."
icon_state = "unathiharness2"
item_color = "unathiharness2"
slots = 2
/obj/item/clothing/accessory/storage/knifeharness/New()

View File

@@ -7,7 +7,7 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -24,7 +24,7 @@
name = "psychedelic"
desc = "Groovy!"
icon_state = "psyche"
item_color = "psyche"
item_state_slots[slot_w_uniform_str] = "psyche"
update_icon()
update_clothing_icon()
@@ -37,7 +37,7 @@
if(!picked || !clothing_choices[picked])
return
var/newtype = clothing_choices[picked]
var/obj/item/clothing/A = new newtype
var/obj/item/clothing/under/A = new newtype
desc = null
permeability_coefficient = 0.90
@@ -46,7 +46,8 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
item_state_slots = A.item_state_slots
worn_state = A.worn_state
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -58,7 +59,6 @@
name = "grey cap"
icon_state = "greysoft"
item_state = "greysoft"
item_color = "grey"
desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside."
origin_tech = "syndicate=3"
body_parts_covered = 0
@@ -76,7 +76,6 @@
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
item_color = "grey"
update_icon()
update_clothing_icon()
@@ -98,7 +97,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -128,7 +126,6 @@
name = "armor"
desc = "An armored vest that protects against some damage."
icon_state = "armor"
item_color = "armor"
update_icon()
update_clothing_icon()
@@ -150,7 +147,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
body_parts_covered = A.body_parts_covered
update_clothing_icon() //so our overlays update.
@@ -162,7 +158,6 @@
name = "black shoes"
icon_state = "black"
item_state = "black"
item_color = "black"
desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -180,7 +175,6 @@
desc = "A pair of black shoes."
icon_state = "black"
item_state = "black"
item_color = "black"
update_icon()
update_clothing_icon()
@@ -202,7 +196,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
update_clothing_icon() //so our overlays update.
//**********************
@@ -252,7 +245,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
//so our overlays update.
if (ismob(src.loc))
@@ -267,7 +259,6 @@
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
item_color = "brown"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
@@ -284,7 +275,6 @@
name = "black gloves"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
icon_state = "black"
item_color = "brown"
update_icon()
update_clothing_icon()
@@ -306,7 +296,6 @@
name = A.name
icon_state = A.icon_state
item_state = A.item_state
item_color = A.item_color
flags_inv = A.flags_inv
update_clothing_icon() //so our overlays update.

View File

@@ -2,39 +2,39 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
desc = "It's very smart and in a ladies-size!"
icon_state = "black"
item_state = "bl_suit"
item_color = "blackf"
worn_state = "blackf"
/obj/item/clothing/under/color/blue
name = "blue jumpsuit"
icon_state = "blue"
item_state = "b_suit"
item_color = "blue"
worn_state = "blue"
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
worn_state = "green"
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
item_state = "gy_suit"
item_color = "grey"
worn_state = "grey"
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
icon_state = "orange"
item_state = "o_suit"
item_color = "orange"
worn_state = "orange"
has_sensor = 2
sensor_mode = 3
@@ -42,101 +42,106 @@
name = "pink jumpsuit"
icon_state = "pink"
item_state = "p_suit"
item_color = "pink"
worn_state = "pink"
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
worn_state = "red"
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
worn_state = "white"
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
worn_state = "yellow"
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
desc = "Groovy!"
icon_state = "psyche"
item_color = "psyche"
item_state = "psyche"
worn_state = "psyche"
/obj/item/clothing/under/lightblue
name = "lightblue jumpsuit"
desc = "lightblue"
icon_state = "lightblue"
item_color = "lightblue"
item_state = "b_suit"
worn_state = "lightblue"
/obj/item/clothing/under/aqua
name = "aqua jumpsuit"
desc = "aqua"
icon_state = "aqua"
item_color = "aqua"
item_state = "b_suit"
worn_state = "aqua"
/obj/item/clothing/under/purple
name = "purple jumpsuit"
desc = "purple"
icon_state = "purple"
item_state = "p_suit"
item_color = "purple"
worn_state = "purple"
/obj/item/clothing/under/lightpurple
name = "lightpurple jumpsuit"
desc = "lightpurple"
icon_state = "lightpurple"
item_color = "lightpurple"
item_state = "p_suit"
worn_state = "lightpurple"
/obj/item/clothing/under/lightgreen
name = "lightgreen jumpsuit"
desc = "lightgreen"
icon_state = "lightgreen"
item_color = "lightgreen"
/obj/item/clothing/under/lightblue
name = "lightblue jumpsuit"
desc = "lightblue"
icon_state = "lightblue"
item_color = "lightblue"
item_state = "g_suit"
worn_state = "lightgreen"
/obj/item/clothing/under/lightbrown
name = "lightbrown jumpsuit"
desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
item_state = "lb_suit"
worn_state = "lightbrown"
/obj/item/clothing/under/brown
name = "brown jumpsuit"
desc = "brown"
icon_state = "brown"
item_color = "brown"
item_state = "lb_suit"
worn_state = "brown"
/obj/item/clothing/under/yellowgreen
name = "yellowgreen jumpsuit"
desc = "yellowgreen"
icon_state = "yellowgreen"
item_color = "yellowgreen"
item_state = "y_suit"
worn_state = "yellowgreen"
/obj/item/clothing/under/darkblue
name = "darkblue jumpsuit"
desc = "darkblue"
icon_state = "darkblue"
item_color = "darkblue"
item_state = "b_suit"
worn_state = "darkblue"
/obj/item/clothing/under/lightred
name = "lightred jumpsuit"
desc = "lightred"
icon_state = "lightred"
item_color = "lightred"
item_state = "r_suit"
worn_state = "lightred"
/obj/item/clothing/under/darkred
name = "darkred jumpsuit"
desc = "darkred"
icon_state = "darkred"
item_color = "darkred"
item_state = "r_suit"
worn_state = "darkred"

View File

@@ -5,15 +5,15 @@
name = "bartender's uniform"
icon_state = "ba_suit"
item_state = "ba_suit"
item_color = "ba_suit"
worn_state = "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 \"Captain\"."
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "caparmor"
item_color = "captain"
item_state = "b_suit"
worn_state = "captain"
/obj/item/clothing/under/rank/cargo
@@ -21,7 +21,7 @@
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
icon_state = "qm"
item_state = "lb_suit"
item_color = "qm"
worn_state = "qm"
/obj/item/clothing/under/rank/cargotech
@@ -29,7 +29,7 @@
desc = "Shooooorts! They're comfy and easy to wear!"
icon_state = "cargotech"
item_state = "lb_suit"
item_color = "cargo"
worn_state = "cargo"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -38,14 +38,15 @@
name = "chaplain's jumpsuit"
icon_state = "chaplain"
item_state = "bl_suit"
item_color = "chapblack"
worn_state = "chapblack"
/obj/item/clothing/under/rank/chef
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
name = "chef's uniform"
icon_state = "chef"
item_color = "chef"
item_state = "w_suit"
worn_state = "chef"
/obj/item/clothing/under/rank/clown
@@ -53,7 +54,7 @@
desc = "<i>'HONK!'</i>"
icon_state = "clown"
item_state = "clown"
item_color = "clown"
worn_state = "clown"
/obj/item/clothing/under/rank/head_of_personnel
@@ -61,14 +62,14 @@
name = "head of personnel's jumpsuit"
icon_state = "hop"
item_state = "b_suit"
item_color = "hop"
worn_state = "hop"
/obj/item/clothing/under/rank/head_of_personnel_whimsy
desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does."
name = "head of personnel's suit"
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
item_color = "hopwhimsy"
item_state = "b_suit"
worn_state = "hopwhimsy"
/obj/item/clothing/under/rank/hydroponics
@@ -76,7 +77,7 @@
name = "botanist's jumpsuit"
icon_state = "hydroponics"
item_state = "g_suit"
item_color = "hydroponics"
worn_state = "hydroponics"
permeability_coefficient = 0.50
@@ -84,15 +85,16 @@
desc = "The plain, professional attire of an Internal Affairs Agent. The collar is <i>immaculately</i> starched."
name = "Internal Affairs uniform"
icon_state = "internalaffairs"
item_state = "internalaffairs"
item_color = "internalaffairs"
item_state = "ba_suit"
worn_state = "internalaffairs"
/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"
icon_state = "janitor"
item_color = "janitor"
worn_state = "janitor"
item_state = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -105,69 +107,69 @@
name = "black Lawyer suit"
icon_state = "lawyer_black"
item_state = "lawyer_black"
item_color = "lawyer_black"
worn_state = "lawyer_black"
/obj/item/clothing/under/lawyer/female
name = "black Lawyer suit"
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
item_color = "black_suit_fem"
item_state = "lawyer_black"
worn_state = "black_suit_fem"
/obj/item/clothing/under/lawyer/red
name = "red Lawyer suit"
icon_state = "lawyer_red"
item_state = "lawyer_red"
item_color = "lawyer_red"
worn_state = "lawyer_red"
/obj/item/clothing/under/lawyer/blue
name = "blue Lawyer suit"
icon_state = "lawyer_blue"
item_state = "lawyer_blue"
item_color = "lawyer_blue"
worn_state = "lawyer_blue"
/obj/item/clothing/under/lawyer/bluesuit
name = "Blue Suit"
desc = "A classy suit and tie"
icon_state = "bluesuit"
item_state = "bluesuit"
item_color = "bluesuit"
item_state = "ba_suit"
worn_state = "bluesuit"
/obj/item/clothing/under/lawyer/purpsuit
name = "Purple Suit"
icon_state = "lawyer_purp"
item_state = "lawyer_purp"
item_color = "lawyer_purp"
item_state = "ba_suit"
worn_state = "lawyer_purp"
/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 = "oldman"
item_color = "oldman"
item_state = "johnny"
worn_state = "oldman"
/obj/item/clothing/under/librarian
name = "sensible suit"
desc = "It's very... sensible."
icon_state = "red_suit"
item_state = "red_suit"
item_color = "red_suit"
item_state = "lawyer_red"
worn_state = "red_suit"
/obj/item/clothing/under/mime
name = "mime's outfit"
desc = "It's not very colourful."
icon_state = "mime"
item_state = "mime"
item_color = "mime"
item_state = "ba_suit"
worn_state = "mime"
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
name = "shaft miner's jumpsuit"
icon_state = "miner"
item_state = "miner"
item_color = "miner"
item_state = "lb_suit"
worn_state = "miner"

View File

@@ -4,7 +4,7 @@
name = "chief engineer's jumpsuit"
icon_state = "chiefengineer"
item_state = "g_suit"
item_color = "chief"
worn_state = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
/obj/item/clothing/under/rank/atmospheric_technician
@@ -12,19 +12,19 @@
name = "atmospheric technician's jumpsuit"
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
worn_state = "atmos"
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
name = "engineer's jumpsuit"
icon_state = "engine"
item_state = "engi_suit"
item_color = "engine"
worn_state = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
name = "roboticist's jumpsuit"
icon_state = "robotics"
item_state = "robotics"
item_color = "robotics"
item_state = "bl_suit"
worn_state = "robotics"

View File

@@ -5,23 +5,24 @@
desc = "It's a jumpsuit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
name = "research director's jumpsuit"
icon_state = "director"
item_state = "g_suit"
item_color = "director"
item_state = "lb_suit"
worn_state = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/research_director/rdalt
desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication."
name = "head researcher uniform"
icon_state = "rdalt"
item_state = "rdalt"
item_color = "rdalt"
item_state = "lb_suit"
worn_state = "rdalt"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
/obj/item/clothing/under/rank/research_director/dress_rd
name = "research director dress uniform"
desc = "Feminine fashion for the style concious RD. Its fabric provides minor protection from biological contaminants."
icon_state = "dress_rd"
item_color = "dress_rd"
item_state = "lb_suit"
worn_state = "dress_rd"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -30,7 +31,7 @@
name = "scientist's jumpsuit"
icon_state = "science"
item_state = "w_suit"
item_color = "sciencewhite"
worn_state = "sciencewhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
@@ -40,7 +41,7 @@
name = "chemist's jumpsuit"
icon_state = "chemistry"
item_state = "w_suit"
item_color = "chemistrywhite"
worn_state = "chemistrywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -52,7 +53,7 @@
name = "chief medical officer's jumpsuit"
icon_state = "cmo"
item_state = "w_suit"
item_color = "cmo"
worn_state = "cmo"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -61,7 +62,7 @@
name = "geneticist's jumpsuit"
icon_state = "genetics"
item_state = "w_suit"
item_color = "geneticswhite"
worn_state = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -70,7 +71,7 @@
name = "virologist's jumpsuit"
icon_state = "virology"
item_state = "w_suit"
item_color = "virologywhite"
worn_state = "virologywhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -79,7 +80,7 @@
name = "nurse's suit"
icon_state = "nursesuit"
item_state = "nursesuit"
item_color = "nursesuit"
worn_state = "nursesuit"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -88,18 +89,18 @@
desc = "A dress commonly worn by the nursing staff in the medical department."
name = "nurse's dress"
icon_state = "nurse"
item_state = "nurse"
item_color = "nurse"
item_state = "nursesuit"
worn_state = "nurse"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/orderly
desc = "A white suit to be worn by orderly people who love orderly things."
desc = "A white suit to be worn by medical attendants."
name = "orderly's uniform"
icon_state = "orderly"
item_state = "orderly"
item_color = "orderly"
item_state = "nursesuit"
worn_state = "orderly"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -108,7 +109,7 @@
name = "medical doctor's jumpsuit"
icon_state = "medical"
item_state = "w_suit"
item_color = "medical"
worn_state = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -116,39 +117,43 @@
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_color = "scrubsblue"
item_state = "b_suit"
worn_state = "scrubsblue"
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_color = "scrubsgreen"
item_state = "g_suit"
worn_state = "scrubsgreen"
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_color = "scrubspurple"
item_state = "p_suit"
worn_state = "scrubspurple"
/obj/item/clothing/under/rank/medical/black
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in black."
icon_state = "scrubsblack"
item_color = "scrubsblack"
item_state = "bl_suit"
worn_state = "scrubsblack"
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
name = "psychiatrist's jumpsuit"
icon_state = "psych"
item_state = "w_suit"
item_color = "psych"
worn_state = "psych"
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
name = "psychologist's turtleneck"
icon_state = "psychturtle"
item_state = "b_suit"
item_color = "psychturtle"
worn_state = "psychturtle"
/*
@@ -159,7 +164,7 @@
name = "geneticist's jumpsuit"
icon_state = "genetics_new"
item_state = "w_suit"
item_color = "genetics_new"
worn_state = "genetics_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -168,7 +173,7 @@
name = "chemist's jumpsuit"
icon_state = "chemist_new"
item_state = "w_suit"
item_color = "chemist_new"
worn_state = "chemist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
@@ -177,7 +182,7 @@
name = "scientist's jumpsuit"
icon_state = "scientist_new"
item_state = "w_suit"
item_color = "scientist_new"
worn_state = "scientist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
@@ -186,6 +191,6 @@
name = "virologist's jumpsuit"
icon_state = "virologist_new"
item_state = "w_suit"
item_color = "virologist_new"
worn_state = "virologist_new"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)

View File

@@ -13,7 +13,7 @@
name = "warden's jumpsuit"
icon_state = "warden"
item_state = "r_suit"
item_color = "warden"
worn_state = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -22,7 +22,7 @@
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
icon_state = "security"
item_state = "r_suit"
item_color = "secred"
worn_state = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -30,8 +30,8 @@
name = "dispatcher's uniform"
desc = "A dress shirt and khakis with a security patch sewn on."
icon_state = "dispatch"
item_state = "dispatch"
item_color = "dispatch"
//item_state = "dispatch"
worn_state = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
siemens_coefficient = 0.9
@@ -41,26 +41,26 @@
desc = "It's made of a slightly sturdier material, to allow for robust protection."
icon_state = "redshirt2"
item_state = "r_suit"
item_color = "redshirt2"
worn_state = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
icon_state = "sec_corporate"
item_state = "sec_corporate"
item_color = "sec_corporate"
//item_state = "sec_corporate"
worn_state = "sec_corporate"
/obj/item/clothing/under/rank/warden/corp
icon_state = "warden_corporate"
item_state = "warden_corporate"
item_color = "warden_corporate"
//item_state = "warden_corporate"
worn_state = "warden_corporate"
/obj/item/clothing/under/tactical
name = "tactical jumpsuit"
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
icon_state = "swatunder"
item_state = "swatunder"
item_color = "swatunder"
//item_state = "swatunder"
worn_state = "swatunder"
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -72,23 +72,24 @@
desc = "Someone who wears this means business."
icon_state = "detective"
item_state = "det"
item_color = "detective"
worn_state = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
/obj/item/clothing/under/det/black
icon_state = "detective2"
item_color = "detective2"
worn_state = "detective2"
item_state = "sl_suit"
/obj/item/clothing/under/det/slob
icon_state = "polsuit"
item_color = "polsuit"
worn_state = "polsuit"
/obj/item/clothing/under/det/slob/verb/rollup()
set name = "Roll suit sleeves"
set category = "Object"
set src in usr
item_color = item_color == "polsuit" ? "polsuit_rolled" : "polsuit"
worn_state = worn_state == "polsuit" ? "polsuit_rolled" : "polsuit"
if (ishuman(loc))
var/mob/living/carbon/human/H = loc
H.update_inv_w_uniform(1)
@@ -114,14 +115,14 @@
name = "head of security's jumpsuit"
icon_state = "hos"
item_state = "r_suit"
item_color = "hosred"
worn_state = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
icon_state = "hos_corporate"
item_state = "hos_corporate"
item_color = "hos_corporate"
//item_state = "hos_corporate"
worn_state = "hos_corporate"
/obj/item/clothing/head/helmet/HoS
name = "Head of Security Hat"
@@ -157,7 +158,7 @@
name = "head of security's jumpsuit"
icon_state = "jensen"
item_state = "jensen"
item_color = "jensen"
worn_state = "jensen"
siemens_coefficient = 0.6
/obj/item/clothing/suit/armor/hos/jensen
@@ -177,19 +178,19 @@
name = "security officer's uniform"
desc = "The latest in fashionable security outfits."
icon_state = "officerblueclothes"
item_state = "officerblueclothes"
item_color = "officerblueclothes"
item_state = "ba_suit"
worn_state = "officerblueclothes"
/obj/item/clothing/under/rank/head_of_security/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's uniform"
icon_state = "hosblueclothes"
item_state = "hosblueclothes"
item_color = "hosblueclothes"
item_state = "ba_suit"
worn_state = "hosblueclothes"
/obj/item/clothing/under/rank/warden/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
name = "warden's uniform"
icon_state = "wardenblueclothes"
item_state = "wardenblueclothes"
item_color = "wardenblueclothes"
item_state = "ba_suit"
worn_state = "wardenblueclothes"

View File

@@ -2,56 +2,57 @@
name = "red pj's"
desc = "Sleepwear."
icon_state = "red_pyjamas"
item_color = "red_pyjamas"
worn_state = "red_pyjamas"
item_state = "w_suit"
/obj/item/clothing/under/pj/blue
name = "blue pj's"
desc = "Sleepwear."
icon_state = "blue_pyjamas"
item_color = "blue_pyjamas"
worn_state = "blue_pyjamas"
item_state = "w_suit"
/obj/item/clothing/under/captain_fly
name = "rogue's uniform"
desc = "For the man who doesn't care because he's still free."
icon_state = "captain_fly"
item_state = "captain_fly"
item_color = "captain_fly"
item_state = "r_suit"
worn_state = "captain_fly"
/obj/item/clothing/under/scratch
name = "white suit"
desc = "A white suit, suitable for an excellent host"
icon_state = "scratch"
item_state = "scratch"
item_color = "scratch"
worn_state = "scratch"
/obj/item/clothing/under/sl_suit
desc = "It's a very amish looking suit."
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
worn_state = "sl_suit"
item_state = "sl_suit"
/obj/item/clothing/under/waiter
name = "waiter's outfit"
desc = "It's a very smart uniform with a special pocket for tip."
icon_state = "waiter"
item_state = "waiter"
item_color = "waiter"
worn_state = "waiter"
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
desc = "<i>'Special delivery!'</i>"
icon_state = "mailman"
item_state = "b_suit"
item_color = "mailman"
worn_state = "mailman"
/obj/item/clothing/under/sexyclown
name = "sexy-clown suit"
desc = "It makes you look HONKable!"
icon_state = "sexyclown"
item_state = "sexyclown"
item_color = "sexyclown"
item_state = "clown"
worn_state = "sexyclown"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/vice
@@ -59,31 +60,31 @@
desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision."
icon_state = "vice"
item_state = "gy_suit"
item_color = "vice"
worn_state = "vice"
//This set of uniforms looks fairly fancy and is generally used for high-ranking NT personnel from what I've seen, so lets give them appropriate ranks.
/obj/item/clothing/under/rank/centcom
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Ensign.\""
name = "\improper NanoTrasen Navy Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
item_state = "lawyer_black"
worn_state = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_officer
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant Commander.\""
name = "\improper NanoTrasen Officers Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "officer"
item_state = "g_suit"
item_color = "officer"
item_state = "lawyer_black"
worn_state = "officer"
displays_id = 0
/obj/item/clothing/under/rank/centcom_captain
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
name = "\improper NanoTrasen Captains Uniform"
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral-Executive.\""
name = "\improper NanoTrasen Officer's Dress Uniform"
icon_state = "centcom"
item_state = "dg_suit"
item_color = "centcom"
item_state = "lawyer_black"
worn_state = "centcom"
displays_id = 0
/obj/item/clothing/under/ert
@@ -91,14 +92,14 @@
desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical."
icon_state = "ert_uniform"
item_state = "bl_suit"
item_color = "ert_uniform"
worn_state = "ert_uniform"
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
worn_state = "black"
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
@@ -110,7 +111,7 @@
name = "administrative cybernetic jumpsuit"
icon_state = "syndicate"
item_state = "bl_suit"
item_color = "syndicate"
worn_state = "syndicate"
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
@@ -124,97 +125,100 @@
name = "owl uniform"
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
item_color = "owl"
worn_state = "owl"
item_state = "owl"
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
desc = "Johnny~~"
icon_state = "johnny"
item_color = "johnny"
worn_state = "johnny"
item_state = "johnny"
/obj/item/clothing/under/rainbow
name = "rainbow"
desc = "rainbow"
icon_state = "rainbow"
item_state = "rainbow"
item_color = "rainbow"
worn_state = "rainbow"
/obj/item/clothing/under/cloud
name = "cloud"
desc = "cloud"
icon_state = "cloud"
item_color = "cloud"
worn_state = "cloud"
/obj/item/clothing/under/psysuit
name = "dark undersuit"
desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm."
icon_state = "psysuit"
item_state = "psysuit"
item_color = "psysuit"
item_state = "bl_suit"
worn_state = "psysuit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
/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."
icon_state = "gentlesuit"
item_state = "gentlesuit"
item_color = "gentlesuit"
item_state = "gy_suit"
worn_state = "gentlesuit"
/obj/item/clothing/under/gimmick/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
icon_state = "green_suit"
item_state = "dg_suit"
item_color = "green_suit"
worn_state = "green_suit"
/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 = "g_suit"
item_color = "teal_suit"
worn_state = "teal_suit"
/obj/item/clothing/under/suit_jacket
name = "black suit"
desc = "A black suit and red tie. Very formal."
icon_state = "black_suit"
item_state = "bl_suit"
item_color = "black_suit"
worn_state = "black_suit"
/obj/item/clothing/under/suit_jacket/really_black
name = "executive suit"
desc = "A formal black suit and red tie, intended for the station's finest."
icon_state = "really_black_suit"
item_state = "bl_suit"
item_color = "black_suit"
item_state = "jensensuit"
worn_state = "black_suit"
/obj/item/clothing/under/suit_jacket/female
name = "executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
item_color = "black_suit_fem"
item_state = "lawyer_black"
worn_state = "black_suit_fem"
/obj/item/clothing/under/suit_jacket/red
name = "red suit"
desc = "A red suit and blue tie. Somewhat formal."
icon_state = "red_suit"
item_state = "r_suit"
item_color = "red_suit"
worn_state = "red_suit"
/obj/item/clothing/under/blackskirt
name = "black skirt"
desc = "A black skirt, very fancy!"
icon_state = "blackskirt"
item_color = "blackskirt"
item_state = "bl_suit"
worn_state = "blackskirt"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/schoolgirl
name = "schoolgirl uniform"
desc = "It's just like one of my Japanese animes!"
icon_state = "schoolgirl"
item_state = "schoolgirl"
item_color = "schoolgirl"
item_state = "b_suit"
worn_state = "schoolgirl"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/overalls
@@ -222,133 +226,144 @@
desc = "A set of durable overalls for getting the job done."
icon_state = "overalls"
item_state = "lb_suit"
item_color = "overalls"
worn_state = "overalls"
/obj/item/clothing/under/pirate
name = "pirate outfit"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
item_color = "pirate"
item_state = "sl_suit"
worn_state = "pirate"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/soviet
name = "soviet uniform"
desc = "For the Motherland!"
icon_state = "soviet"
item_state = "soviet"
item_color = "soviet"
item_state = "gy_suit"
worn_state = "soviet"
/obj/item/clothing/under/redcoat
name = "redcoat uniform"
desc = "Looks old."
icon_state = "redcoat"
item_state = "redcoat"
item_color = "redcoat"
item_state = "r_suit"
worn_state = "redcoat"
/obj/item/clothing/under/kilt
name = "kilt"
desc = "Includes shoes and plaid"
icon_state = "kilt"
item_state = "kilt"
item_color = "kilt"
worn_state = "kilt"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET
/obj/item/clothing/under/sexymime
name = "sexy mime outfit"
desc = "The only time when you DON'T enjoy looking at someone's rack."
icon_state = "sexymime"
item_state = "sexymime"
item_color = "sexymime"
item_state = "w_suit"
worn_state = "sexymime"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/gladiator
name = "gladiator uniform"
desc = "Are you not entertained? Is that not why you are here?"
icon_state = "gladiator"
item_state = "gladiator"
item_color = "gladiator"
item_state = "o_suit"
worn_state = "gladiator"
body_parts_covered = LOWER_TORSO
//dress
/obj/item/clothing/under/dress/
/obj/item/clothing/under/dress
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/dress/dress_fire
name = "flame dress"
desc = "A small black dress with blue flames print on it."
icon_state = "dress_fire"
item_color = "dress_fire"
item_state = "bl_suit"
worn_state = "dress_fire"
/obj/item/clothing/under/dress/dress_green
name = "green dress"
desc = "A simple, tight fitting green dress."
icon_state = "dress_green"
item_color = "dress_green"
item_state = "g_suit"
worn_state = "dress_green"
/obj/item/clothing/under/dress/dress_orange
name = "orange dress"
desc = "A fancy orange gown for those who like to show leg."
icon_state = "dress_orange"
item_color = "dress_orange"
item_state = "y_suit"
worn_state = "dress_orange"
/obj/item/clothing/under/dress/dress_pink
name = "pink dress"
desc = "A simple, tight fitting pink dress."
icon_state = "dress_pink"
item_color = "dress_pink"
item_state = "p_suit"
worn_state = "dress_pink"
/obj/item/clothing/under/dress/dress_yellow
name = "yellow dress"
desc = "A flirty, little yellow dress."
icon_state = "dress_yellow"
item_color = "dress_yellow"
item_state = "y_suit"
worn_state = "dress_yellow"
/obj/item/clothing/under/dress/dress_saloon
name = "saloon girl dress"
desc = "A old western inspired gown for the girl who likes to drink."
icon_state = "dress_saloon"
item_color = "dress_saloon"
item_state = "p_suit"
worn_state = "dress_saloon"
/obj/item/clothing/under/dress/dress_cap
name = "captain's dress uniform"
desc = "Feminine fashion for the style concious captain."
icon_state = "dress_cap"
item_color = "dress_cap"
item_state = "b_suit"
worn_state = "dress_cap"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/dress_hop
name = "head of personnel dress uniform"
desc = "Feminine fashion for the style concious HoP."
icon_state = "dress_hop"
item_color = "dress_hop"
item_state = "b_suit"
worn_state = "dress_hop"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/dress_hr
name = "human resources director uniform"
desc = "Superior class for the nosy H.R. Director."
icon_state = "huresource"
item_color = "huresource"
item_state = "y_suit"
worn_state = "huresource"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/dress/plaid_blue
name = "blue plaid skirt"
desc = "A preppy blue skirt with a white blouse."
icon_state = "plaid_blue"
item_color = "plaid_blue"
worn_state = "plaid_blue"
/obj/item/clothing/under/dress/plaid_red
name = "red plaid skirt"
desc = "A preppy red skirt with a white blouse."
icon_state = "plaid_red"
item_color = "plaid_red"
item_state = "kilt"
worn_state = "plaid_red"
/obj/item/clothing/under/dress/plaid_purple
name = "blue purple skirt"
desc = "A preppy purple skirt with a white blouse."
icon_state = "plaid_purple"
item_color = "plaid_purple"
item_state = "kilt"
worn_state = "plaid_purple"
//wedding stuff
/obj/item/clothing/under/wedding/
@@ -358,35 +373,40 @@
name = "orange wedding dress"
desc = "A big and puffy orange dress."
icon_state = "bride_orange"
item_color = "bride_orange"
item_state = "y_suit"
worn_state = "bride_orange"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_purple
name = "purple wedding dress"
desc = "A big and puffy purple dress."
icon_state = "bride_purple"
item_color = "bride_purple"
item_state = "p_suit"
worn_state = "bride_purple"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_blue
name = "blue wedding dress"
desc = "A big and puffy blue dress."
icon_state = "bride_blue"
item_color = "bride_blue"
item_state = "b_suit"
worn_state = "bride_blue"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_red
name = "red wedding dress"
desc = "A big and puffy red dress."
icon_state = "bride_red"
item_color = "bride_red"
item_state = "r_suit"
worn_state = "bride_red"
flags_inv = HIDESHOES
/obj/item/clothing/under/wedding/bride_white
name = "silky wedding dress"
desc = "A white wedding gown made from the finest silk."
icon_state = "bride_white"
item_color = "bride_white"
item_state = "nursesuit"
worn_state = "bride_white"
flags_inv = HIDESHOES
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -394,8 +414,8 @@
name = "sundress"
desc = "Makes you want to frolic in a field of daisies."
icon_state = "sundress"
item_state = "sundress"
item_color = "sundress"
item_state = "bl_suit"
worn_state = "sundress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/sundress_white
@@ -403,92 +423,92 @@
desc = "A white sundress decorated with purple lilies."
icon_state = "sundress_white"
item_state = "sundress_white"
item_color = "sundress_white"
worn_state = "sundress_white"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/blackjumpskirt
name = "black jumpskirt"
desc = "A black jumpskirt, Sol size 0."
icon_state = "blackjumpskirt"
item_state = "blackjumpskirt"
item_color = "blackjumpskirt"
item_state = "bl_suit"
worn_state = "blackjumpskirt"
/obj/item/clothing/under/captainformal
name = "captain's formal uniform"
desc = "A captain's formal-wear, for special occasions."
icon_state = "captain_formal"
item_state = "by_suit"
item_color = "captain_formal"
item_state = "b_suit"
worn_state = "captain_formal"
/obj/item/clothing/under/hosformalmale
name = "head of security's formal uniform"
desc = "A male head of security's formal-wear, for special occasions."
icon_state = "hos_formal_male"
item_state = "r_suit"
item_color = "hos_formal_male"
worn_state = "hos_formal_male"
/obj/item/clothing/under/hosformalfem
name = "head of security's formal uniform"
desc = "A female head of security's formal-wear, for special occasions."
icon_state = "hos_formal_fem"
item_state = "r_suit"
item_color = "hos_formal_fem"
worn_state = "hos_formal_fem"
/obj/item/clothing/under/assistantformal
name = "assistant's formal uniform"
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
icon_state = "assistant_formal"
item_state = "gy_suit"
item_color = "assistant_formal"
worn_state = "assistant_formal"
/obj/item/clothing/under/suit_jacket/charcoal
name = "charcoal suit"
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state = "charcoal_suit"
item_color = "charcoal_suit"
item_state = "bl_suit"
worn_state = "charcoal_suit"
/obj/item/clothing/under/suit_jacket/navy
name = "navy suit"
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state = "navy_suit"
item_color = "navy_suit"
item_state = "bl_suit"
worn_state = "navy_suit"
/obj/item/clothing/under/suit_jacket/burgundy
name = "burgundy suit"
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state = "burgundy_suit"
item_color = "burgundy_suit"
item_state = "r_suit"
worn_state = "burgundy_suit"
/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?"
icon_state = "checkered_suit"
item_state = "checkered_suit"
item_color = "checkered_suit"
item_state = "gy_suit"
worn_state = "checkered_suit"
/obj/item/clothing/under/suit_jacket/tan
name = "tan suit"
desc = "A tan suit with a yellow tie. Smart, but casual."
icon_state = "tan_suit"
item_state = "tan_suit"
item_color = "tan_suit"
item_state = "lb_suit"
worn_state = "tan_suit"
/obj/item/clothing/under/serviceoveralls
name = "workman outfit"
desc = "The very image of a working man. Not that you're probably doing work."
icon_state = "mechanic"
item_state = "mechanic"
item_color = "mechanic"
item_state = "lb_suit"
worn_state = "mechanic"
/obj/item/clothing/under/cheongsam
name = "white cheongsam"
desc = "It is a white cheongsam dress."
icon_state = "mai_yang"
item_state = "mai_yang"
item_color = "mai_yang"
worn_state = "mai_yang"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/blazer
@@ -496,4 +516,4 @@
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
icon_state = "blue_blazer"
item_state = "blue_blazer"
item_color = "blue_blazer"
worn_state = "blue_blazer"

View File

@@ -7,24 +7,24 @@
/obj/item/clothing/under/shorts/red
name = "red athletic shorts"
icon_state = "redshorts"
item_color = "redshorts"
worn_state = "redshorts"
/obj/item/clothing/under/shorts/green
name = "green athletic shorts"
icon_state = "greenshorts"
item_color = "greenshorts"
worn_state = "greenshorts"
/obj/item/clothing/under/shorts/blue
name = "blue athletic shorts"
icon_state = "blueshorts"
item_color = "blueshorts"
worn_state = "blueshorts"
/obj/item/clothing/under/shorts/black
name = "black athletic shorts"
icon_state = "blackshorts"
item_color = "blackshorts"
worn_state = "blackshorts"
/obj/item/clothing/under/shorts/grey
name = "grey athletic shorts"
icon_state = "greyshorts"
item_color = "greyshorts"
worn_state = "greyshorts"

View File

@@ -3,7 +3,7 @@
desc = "It's some non-descript, slightly suspicious looking, civilian clothing."
icon_state = "syndicate"
item_state = "bl_suit"
item_color = "syndicate"
worn_state = "syndicate"
has_sensor = 0
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -16,7 +16,7 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
item_color = "tactifool"
worn_state = "tactifool"
siemens_coefficient = 1

View File

@@ -119,7 +119,6 @@
desc = "A medical apparatus intended to ease in listening to the sounds of the human body. This one looks cleaner and sparklier than the rest. There is a small silver plaque attached to the tubing, with the words 'Lucy Kemmerer' engraved on it."
icon_state = "lucystethos"
item_state = "lucystethos"
item_color ="lucystethos"
icon = 'icons/obj/custom_items.dmi'
/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
@@ -167,7 +166,6 @@
desc = "A faded badge, backed with leather, that reads 'NT Security Force' across the front. It bears the emblem of the Forensic division."
icon_state = "ana_badge"
item_state = "ana_badge"
item_color = "ana_badge"
/obj/item/fluff/ana_issek_2/attack_self(mob/user as mob)
if(isliving(user))
@@ -530,7 +528,7 @@
var/new_suit_desc // Sets suit desc.
var/helmet_icon // Sets helmet icon_state and item_state.
var/suit_icon // Sets suit icon_state and item_state.
var/helmet_color // Sets item_color.
var/helmet_color // Sets worn_state.
var/uses = 2 // Uses before the kit deletes itself.
var/new_light_overlay
@@ -544,7 +542,6 @@
desc = kit.new_helmet_desc
icon_state = kit.helmet_icon
item_state = kit.helmet_icon
item_color = kit.helmet_color
if(kit.new_light_overlay)
light_overlay = kit.new_light_overlay
@@ -555,7 +552,7 @@
kit.uses--
if(kit.uses<1)
user.drop_item()
del(O)
qdel(O)
/obj/item/clothing/suit/space/void/attackby(var/obj/item/O as obj, mob/user as mob)
..()
@@ -574,7 +571,7 @@
kit.uses--
if(kit.uses<1)
user.drop_item()
del(O)
qdel(O)
///////// Salvage crew hardsuit - Cybele Petit - solaruin ///////////////
/obj/item/device/kit/suit/fluff/salvage
@@ -652,9 +649,8 @@
desc = "Reinforced sterile gloves custom tailored to comfortably accommodate Tajaran claws."
icon_state = "latex"
item_state = "lgloves"
siemens_coefficient = 0.30
siemens_coefficient = 1.00
permeability_coefficient = 0.01
item_color="white"
species_restricted = list("exclude","Unathi")
/obj/item/clothing/gloves/fluff/walter_brooks_1 //botanistpower: Walter Brooks
@@ -663,7 +659,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "walter_brooks_1"
item_state = "bluegloves"
item_color="blue"
/obj/item/clothing/gloves/fluff/chal_appara_1 //furlucis: Chal Appara
name = "Left Black Glove"
@@ -886,7 +881,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "leatherjack"
item_state = "leatherjack"
item_color = "leatherjack"
/obj/item/clothing/suit/armor/vest/fluff/deus_blueshield //deusdactyl
name = "blue shield security armor"
@@ -947,33 +941,40 @@
desc = "A uniform jacket, its buttons polished to a shine, coupled with a dark pair of trousers. 'Hachert' is embroidered upon the jacket<65>s shoulder bar."
icon = 'icons/obj/custom_items.dmi'
icon_state = "milohachert"
item_state = "milohachert"
item_color = "milohachert"
item_state = "gy_suit"
worn_state = "milohachert"
/obj/item/clothing/under/fluff/john_saaland //GA Jumpsuit-John Saaland-Foxeye
name = "GA jumpsuit"
desc = "A tan jumpsuit, robustly constructed, with various velcro strips for name and ranking patches distributed over the torso and shoulders. Only one of these strips is in use, holding a patch with 'J. SAALAND' written on it in block lettering over the right breast pocket."
icon = 'icons/obj/custom_items.dmi'
icon_state = "saaland"
item_state = "saaland_suit"
worn_state = "saaland"
/obj/item/clothing/under/fluff/kaine_kalim_2
name = "Formal Medical Uniform"
desc = "An unusually sterile and pressed uniform. It seems to have a string of vials crossing the chest."
icon = 'icons/obj/custom_items.dmi'
icon_state = "kaineuniform"
item_state = "kaineuniform"
item_color = "kaineuniform"
item_state = "w_suit"
worn_state = "kaineuniform"
/obj/item/clothing/under/fluff/jumpsuitdown //searif: Yuki Matsuda
name = "rolled down jumpsuit"
desc = "A rolled down jumpsuit. Great for mechanics."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jumpsuitdown"
item_state = "jumpsuitdown"
item_color = "jumpsuitdown"
item_state = "gy_suit"
worn_state = "jumpsuitdown"
/obj/item/clothing/under/fluff/lilith_vinous_1 //slyhidden: Lilith Vinous
name = "casual security uniform"
desc = "A less formal version of the traditional dark red Security uniform. It has the top button undone, rolled up sleeves and different belt."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lilith_uniform"
item_state = "lilith_uniform"
item_color = "lilith_uniform"
item_state = "r_suit"
worn_state = "lilith_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/fluff/ana_issek_1 //suethecake: Ana Issek
@@ -981,8 +982,8 @@
desc = "A silken blouse paired with dark-colored slacks. It has the words 'Chief Investigator' embroidered into the shoulder bar."
icon = 'icons/obj/custom_items.dmi'
icon_state = "ana_uniform"
item_state = "ana_uniform"
item_color = "ana_uniform"
item_state = "r_suit"
worn_state = "ana_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/under/fluff/olddressuniform //desiderium: Momiji Inubashiri
@@ -990,15 +991,16 @@
desc = "A retired Station Head of Staff uniform, phased out twenty years ago for the newer jumpsuit design, but still acceptable dress. Lovingly maintained."
icon = 'icons/obj/custom_items.dmi'
icon_state = "olddressuniform"
item_state = "olddressuniform"
item_color = "olddressuniform"
item_state = "b_suit"
worn_state = "olddressuniform"
/obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1 //whitewolf41: Jeremy Wolf
name = "worn officer's uniform"
desc = "An old red security jumpsuit. Seems to have some slight modifications."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jeremy_wolf_1"
item_color = "jeremy_wolf_1"
item_state = "r_suit"
worn_state = "jeremy_wolf_1"
//////////////////// PRC Uniform - Ronan Harper - Raptor1628 ///////////////////
@@ -1008,7 +1010,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "harper_uniform"
item_state = "jensensuit"
item_color = "harper_uniform"
worn_state = "harper_uniform"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
//////////////////// Corporate Cap - Robert Mason - Masterrbc ////////////////////
@@ -1022,8 +1024,8 @@
desc = "A nicely tailored purple dress made for the taller woman."
icon = 'icons/obj/custom_items.dmi'
icon_state = "tian_dress"
item_state = "tian_dress"
item_color = "tian_dress"
item_state = "r_suit"
worn_state = "tian_dress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari
@@ -1031,32 +1033,32 @@
desc = "A prim and proper uniform that looks very similar to a bartender's, the only differences being a red tie, waistcoat and a rag hanging out of the back pocket."
icon = 'icons/obj/custom_items.dmi'
icon_state = "ara_bar_uniform"
item_state = "ara_bar_uniform"
item_color = "ara_bar_uniform"
item_state = "ba_suit"
worn_state = "ara_bar_uniform"
/obj/item/clothing/under/fluff/callum_suit //roaper: Callum Leamus
name = "knockoff suit"
desc = "A knockoff of a suit commonly worn by the upper class."
icon = 'icons/obj/custom_items.dmi'
icon_state = "callum_suit"
item_state = "callum_suit"
item_color = "callum_suit"
item_state = "ba_suit"
worn_state = "callum_suit"
/obj/item/clothing/under/fluff/solara_light_1 //bluefishie: Solara Born-In-Light
name = "Elaborate Purple Dress"
desc = "An expertly tailored dress, made out of fine fabrics. The interwoven necklace appears to be made out of gold, with three complicated symbols engraved in the front."
icon = 'icons/obj/custom_items.dmi'
icon_state = "solara_dress"
item_state = "solara_dress"
item_color = "solara_dress"
item_state = "p_suit"
worn_state = "solara_dress"
/obj/item/clothing/under/rank/nursesuit/fluff/sasha
name = "RN Uniform"
desc = "A nurse's uniform that is dark blue and gold. It looks like it's been tailored for a short person."
icon = 'icons/obj/custom_items.dmi'
icon_state = "sasha"
item_state = "sasha"
item_color = "sasha"
item_state = "b_suit"
worn_state = "sasha"
/////// NT-SID Suit //Zuhayr: Jane Doe
@@ -1066,8 +1068,8 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "jane_sid_suit"
item_state = "jane_sid_suit"
item_color = "jane_sid_suit"
item_state = "o_suit"
worn_state = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
@@ -1081,14 +1083,13 @@
return 0
if(src.icon_state == "jane_sid_suit_down")
src.item_color = "jane_sid_suit"
src.icon_state = "jane_sid_suit"
usr << "You zip up the [src]."
else
src.item_color = "jane_sid_suit_down"
src.icon_state = "jane_sid_suit_down"
usr << "You unzip and roll down the [src]."
src.icon_state = "[item_color]"
src.item_state = "[item_color]"
src.item_state_slots[slot_w_uniform_str] = "[src.icon_state]"
update_clothing_icon()
////// Wyatt's Ex-Commander Jumpsuit - RawrTaicho
@@ -1098,8 +1099,8 @@
desc = "A standard Central Command Engineering Commander jumpsuit tailored to fight the wearer tightly. It has a Medal of Service pinned onto the left side of it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "wyatt_uniform"
item_state = "wyatt_uniform"
item_color = "wyatt_uniform"
//item_state = "wyatt_uniform"
worn_state = "wyatt_uniform"
////// Black Dress - Lillian Amsel - PapaDrow
/obj/item/clothing/under/fluff/lillian_amsel_1
@@ -1107,8 +1108,8 @@
desc = "A knee-length, dark gray and black dress made of a soft, velvety material."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lillian_dress"
item_state = "lillian_dress"
item_color = "lillian_dress"
//item_state = "lillian_dress"
worn_state = "lillian_dress"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
////// Tailored Security Uniform - Parker Eliza - MrSnapwalk
@@ -1118,8 +1119,8 @@
desc = "A red uniform shirt (tailored for easy access to the shoulder joint) and black cargo pants, paired with a set of somewhat bulky white casings for robotic limbs. The arms have a small label on the inner elbow, which reads \"Bishop Corporation Cybernetic Solutions\"."
icon = 'icons/obj/custom_items.dmi'
icon_state = "parker_eliza"
item_state = "parker_eliza"
item_color = "parker_eliza"
//item_state = "parker_eliza"
worn_state = "parker_eliza"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
////// Bishop "GOLEM" V2200 Industrial Limb Augments - Parker Eliza - MrSnapwalk
@@ -1130,8 +1131,8 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "parker_eliza_arms"
item_state = "parker_eliza_arms"
item_color = "parker_eliza_arms"
body_parts_covered = 0 //technicially it's underneath everything, being part of the body
canremove = 0
////////////// Accessories /////
@@ -1143,7 +1144,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "radi_pendant"
item_state = "radi_pendant"
item_color = "radi_pendant"
w_class = 2.0
//////////// Masks ////////////
@@ -1183,7 +1183,7 @@
name = "painted mask"
desc = "A ghoulish mask with a stylized painting of a flame over the left eye, and a painted tear stream coming from the right eye."
icon = 'icons/obj/custom_items.dmi'
item_state = "cicero"
//item_state = "cicero"
icon_state = "cicero"
body_parts_covered = FACE|EYES
@@ -1195,7 +1195,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "altair_locket"
item_state = "altair_locket"
item_color = "altair_locket"
slot_flags = 0
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1208,7 +1207,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "konaahirano"
item_state = "konaahirano"
item_color = "konaahirano"
slot_flags = 0
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1309,7 +1307,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "medical_short"
item_state = "medical_short"
item_color = "medical_short"
worn_state = "medical_short"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
/obj/item/clothing/suit/storage/labcoat/fluff/red
@@ -1326,7 +1324,6 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "retpolcoat"
item_state = "retpolcoat"
item_color = "retpolcoat"
/obj/item/clothing/head/det_hat/fluff/retpolcap
name = "retired colony patrolman's cap"
@@ -1339,7 +1336,7 @@
desc = "A meticulously clean police uniform belonging to Precinct 31, Outer Light Colony. The word \"RETIRED\" is engraved tastefully and professionally in the badge below the number, 501."
icon = 'icons/obj/custom_items.dmi'
icon_state = "retpoluniform"
item_color = "retpoluniform"
worn_state = "retpoluniform"
//////////// Weapons ////////////
@@ -1385,7 +1382,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "sakura_hokkaido_kimono"
item_state = "sakura_hokkaido_kimono"
item_color = "sakura_hokkaido_kimono"
worn_state = "sakura_hokkaido_kimono"
///////////////////////////// Astronovus - Harold's Cane ////////////////////////////
@@ -1453,3 +1450,23 @@
friend = M
break
..()
///////////////////////////// Sabess - Maria's Heart-Shaped Locket ///////////////////////////////////
/obj/item/weapon/fluff/mariafontaine
name = "Heart-Shaped Locket"
desc = " A silver, heart-shaped locket. It flips open to reveal two pictures, one of a young red-headed woman and one of a brunette of similar age. Small writing is etched onto the back, reading 'M+L'. Some may regard it as cheesy."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mariaclosed"
item_state = "mariaclosed"
obj/item/weapon/fluff/mariafontaine/attack_self(mob/user as mob)
if(src.icon_state == "mariaclosed")
src.icon_state = "mariaopen"
src.item_state = "mariaopen"
user << "You flip the locket open."
else
src.icon_state = "mariaclosed"
src.item_state = "mariaclosed"
user << "You flip the locket closed."

View File

@@ -35,7 +35,7 @@
if(M.ckey == "nerezza" && M.real_name == "Asher Spock" && M.mind.role_alt_title && M.mind.role_alt_title != "Emergency Physician")
//only spawn ID if asher is joining as an emergency physician
ok = 1
del(Item)
qdel(Item)
goto skip
var/obj/item/weapon/card/id/I = Item
for(var/obj/item/weapon/card/id/C in M)
@@ -59,18 +59,18 @@
I.name = "[M.real_name]'s Technician ID ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])"
//replace old ID
del(C)
qdel(C)
ok = M.equip_to_slot_if_possible(I, slot_wear_id, 0) //if 1, last argument deletes on fail
break
else if(istype(Item,/obj/item/weapon/storage/belt))
if(M.ckey == "jakksergal" && M.real_name == "Nashi Ra'hal" && M.mind.role_alt_title && M.mind.role_alt_title != "Nurse" && M.mind.role_alt_title != "Chemist")
ok = 1
del(Item)
qdel(Item)
goto skip
var/obj/item/weapon/storage/belt/medical/fluff/nashi_belt/I = Item
if(istype(M.belt,/obj/item/weapon/storage/belt))
for(var/obj/item/weapon/storage/belt/B in M)
del(B)
qdel(B)
M.belt=null
ok = M.equip_to_slot_if_possible(I, slot_belt, 0)
break

View File

@@ -277,7 +277,7 @@
if(istype(I, /obj/item/weapon/f_card))
if(process_card(I))
M.drop_item()
del(I)
qdel(I)
else
usr << "<spawn class='warning'>Invalid fingerprint card, rejected.</span>"
if("print")

View File

@@ -109,7 +109,7 @@ log transactions
user << "<span class='info'>You insert [I] into [src].</span>"
src.attack_hand(user)
del I
qdel(I)
else
..()

View File

@@ -141,10 +141,11 @@
if("finalise_create_account")
var/account_name = href_list["holder_name"]
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
create_account(account_name, starting_funds, src)
starting_funds = Clamp(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
starting_funds = min(starting_funds, fund_cap) // Not authrorized to give more than the fund cap.
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
create_account(account_name, starting_funds, src)
if(starting_funds > 0)
//subtract the money
station_account.money -= starting_funds

View File

@@ -26,7 +26,7 @@
user.drop_from_inventory(cash)
bundle = new (src.loc)
bundle.worth += cash.worth
del(cash)
qdel(cash)
else //is bundle
bundle = W
bundle.worth += src.worth
@@ -37,7 +37,7 @@
h_user.drop_from_inventory(bundle)
h_user.put_in_hands(bundle)
user << "<span class='notice'>You add [src.worth] Thalers worth of money to the bundles.<br>It holds [bundle.worth] Thalers now.</span>"
del(src)
qdel(src)
/obj/item/weapon/spacecash/bundle
name = "pile of thalers"
@@ -87,7 +87,7 @@
bundle.update_icon()
usr.put_in_hands(bundle)
if(!worth)
del(src)
qdel(src)
/obj/item/weapon/spacecash/c1
name = "1 Thaler"

View File

@@ -0,0 +1,54 @@
/datum/event/apc_damage
var/apcSelectionRange = 25
/datum/event/apc_damage/start()
var/obj/machinery/power/apc/A = acquire_random_apc()
var/severity_range = 0
switch(severity)
if(EVENT_LEVEL_MUNDANE)
severity_range = 0
if(EVENT_LEVEL_MODERATE)
severity_range = 7
if(EVENT_LEVEL_MAJOR)
severity_range = 15
for(var/obj/machinery/power/apc/apc in range(severity_range,A))
if(is_valid_apc(apc))
apc.emagged = 1
apc.update_icon()
/datum/event/apc_damage/proc/acquire_random_apc()
var/list/possibleEpicentres = list()
var/list/apcs = list()
for(var/obj/effect/landmark/newEpicentre in landmarks_list)
if(newEpicentre.name == "lightsout")
possibleEpicentres += newEpicentre
if(!possibleEpicentres.len)
return
var/epicentre = pick(possibleEpicentres)
for(var/obj/machinery/power/apc/apc in range(epicentre,apcSelectionRange))
if(is_valid_apc(apc))
apcs += apc
// Greatly increase the chance for APCs in maintenance areas to be selected
var/area/A = get_area(apc)
if(istype(A,/area/maintenance))
apcs += apc
apcs += apc
if(!apcs.len)
return
return pick(apcs)
/datum/event/apc_damage/proc/is_valid_apc(var/obj/machinery/power/apc/apc)
// Type must be exactly a basic APC.
// This generally prevents affecting APCs in critical areas (AI core, engine room, etc.) as they often use higher capacity subtypes.
if(apc.type != /obj/machinery/power/apc)
return 0
var/turf/T = get_turf(apc)
return !apc.emagged && T && (T.z in config.player_levels)

View File

@@ -0,0 +1,38 @@
/datum/event/camera_damage/start()
var/obj/machinery/camera/C = acquire_random_camera()
if(!C)
return
var/severity_range = 0
switch(severity)
if(EVENT_LEVEL_MUNDANE)
severity_range = 0
if(EVENT_LEVEL_MODERATE)
severity_range = 7
if(EVENT_LEVEL_MAJOR)
severity_range = 15
for(var/obj/machinery/camera/cam in range(severity_range,C))
if(is_valid_camera(cam))
if(prob(2*severity))
cam.destroy()
else
cam.wires.UpdateCut(CAMERA_WIRE_POWER, 0)
if(prob(5*severity))
cam.wires.UpdateCut(CAMERA_WIRE_ALARM, 0)
/datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5)
if(!cameranet.cameras.len)
return
if(!remaining_attempts)
return
var/obj/machinery/camera/C = pick(cameranet.cameras)
if(is_valid_camera(C))
return C
return acquire_random_camera(remaining_attempts--)
/datum/event/camera_damage/proc/is_valid_camera(var/obj/machinery/camera/C)
// Only return a functional camera, not installed in a silicon, and that exists somewhere players have access
var/turf/T = get_turf(C)
return T && C.can_use() && !istype(C.loc, /mob/living/silicon) && (T.z in config.player_levels)

View File

@@ -45,4 +45,4 @@
if(!C.stat)
var/turf/T = get_turf(C)
if(istype(T, /turf/space))
del(C)
qdel(C)

View File

@@ -12,9 +12,9 @@
A << "<br>"
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=50))
command_announcement.Announce(alert, new_sound = sound('sound/misc/interference.ogg', volume=25))
/datum/event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in telecomms_list)
T.emp_act(1)
T.emp_act(1)

View File

@@ -25,4 +25,4 @@
for(var/obj/effect/landmark/epicentre in epicentreList)
for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange))
apc.overload_lighting()
apc.overload_lighting()

View File

@@ -127,11 +127,13 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
available_events = list(
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 100),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "PDA Spam", /datum/event/pda_spam, 0, list(ASSIGNMENT_ANY = 4), 0, 25, 50),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 30, list(ASSIGNMENT_ENGINEER = 5), 0, 0, 50),

View File

@@ -63,11 +63,10 @@
//world << " checking [areapath]"
var/area/A = locate(areapath)
//world << " A: [A], contents.len: [A.contents.len]"
for(var/area/B in A.related)
//world << " B: [B], contents.len: [B.contents.len]"
for(var/turf/simulated/floor/F in B.contents)
if(!F.contents.len)
turfs += F
for(var/turf/simulated/floor/F in A.contents)
if(!F.contents.len)
turfs += F
var/list/spawn_types = list()
var/max_number
@@ -116,4 +115,4 @@
#undef VERM_MICE
#undef VERM_LIZARDS
#undef VERM_SPIDERS
#undef VERM_SPIDERS

View File

@@ -40,7 +40,7 @@
D.z = config.admin_levels[1]
D.has_loot = 0
del(D)
qdel(D)
num_recovered++
if(num_recovered > drones_list.len * 0.75)

View File

@@ -1,5 +1,11 @@
/var/global/spacevines_spawned = 0
/datum/event/spacevine
announceWhen = 10
/datum/event/spacevine/start()
spacevine_infestation()
spacevines_spawned = 1
/datum/event/spacevine/announce()
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')

View File

@@ -1,14 +1,13 @@
/var/global/sent_spiders_to_station = 0
/datum/event/spider_infestation
announceWhen = 400
announceWhen = 90
var/spawncount = 1
/datum/event/spider_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(8, 12) //spiderlings only have a 50% chance to grow big and strong
announceWhen = rand(announceWhen, announceWhen + 60)
spawncount = rand(4 * severity, 6 * severity) //spiderlings only have a 50% chance to grow big and strong
sent_spiders_to_station = 0
/datum/event/spider_infestation/announce()
@@ -26,4 +25,4 @@
var/obj/vent = pick(vents)
new /obj/effect/spider/spiderling(vent.loc)
vents -= vent
spawncount--
spawncount--

View File

@@ -4,12 +4,12 @@ datum/event/viral_infection
datum/event/viral_infection/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
//generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
var/num_diseases = rand(1,3)
for (var/i=0, i < num_diseases, i++)
var/datum/disease2/disease/D = new /datum/disease2/disease
var/strength = 1 //whether the disease is of the greater or lesser variety
if (severity >= EVENT_LEVEL_MAJOR && prob(75))
strength = 2
@@ -24,7 +24,7 @@ datum/event/viral_infection/announce()
level = pick("one", "two", "three", "four")
else
level = "five"
if (severity == EVENT_LEVEL_MAJOR || prob(60))
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
@@ -33,8 +33,10 @@ datum/event/viral_infection/start()
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
candidates += G
if(G.stat != DEAD && G.is_client_active(5))
var/turf/T = get_turf(G)
if(T.z in config.station_levels)
candidates += G
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle

View File

@@ -0,0 +1,21 @@
/obj/item/weapon/pen
description_info = {"This is an item for writing down your thoughts, on paper or elsewhere. The following special commands are available:
Pen and crayon commands
\[br\] : Creates a linebreak.
\[center\] - \[/center\] : Centers the text.
\[h1\] - \[/h1\] : Makes the text a first level heading.
\[h2\] - \[/h2\] : Makes the text a second level headin.
\[h3\] - \[/h3\] : Makes the text a third level heading.
\[b\] - \[/b\] : Makes the text bold.
\[i\] - \[/i\] : Makes the text italic.
\[u\] - \[/u\] : Makes the text underlined.
\[large\] - \[/large\] : Increases the size of the text.
\[sign\] : Inserts a signature of your name in a foolproof way.
\[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
\[date\] : Inserts today's station date.
\[time\] : Inserts the current station time.
Pen exclusive commands
\[small\] - \[/small\] : Decreases the size of the text.
\[list\] - \[/list\] : A list.
\[*\] : A dot used for lists.
\[hr\] : Adds a horizontal rule."}

View File

@@ -264,26 +264,26 @@ proc/check_panel(mob/M)
spawn(300)
if(my_target)
my_target.hallucinations -= src
del(src)
qdel(src)
step_away(src,my_target,2)
spawn attack_loop()
proc/updateimage()
// del src.currentimage
// qdel(src.currentimage)
if(src.dir == NORTH)
del src.currentimage
qdel(src.currentimage)
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
del src.currentimage
qdel(src.currentimage)
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
del src.currentimage
qdel(src.currentimage)
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
del src.currentimage
qdel(src.currentimage)
src.currentimage = new /image(left,src)
my_target << currentimage
@@ -329,7 +329,7 @@ proc/check_panel(mob/M)
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
target << I
spawn(300)
del(O)
qdel(O)
return
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\

View File

@@ -47,7 +47,7 @@
var/obj/item/weapon/hand/H = O
for(var/datum/playingcard/P in H.cards)
cards += P
del(O)
qdel(O)
user << "You place your cards on the bottom of the deck."
return
..()
@@ -131,7 +131,7 @@
for(var/datum/playingcard/P in H.cards)
cards += P
src.concealed = H.concealed
del(O)
qdel(O)
user.put_in_hands(src)
update_icon()
return
@@ -183,7 +183,7 @@
if(!discarding || !to_discard[discarding] || !usr || !src) return
var/datum/playingcard/card = to_discard[discarding]
del(to_discard)
qdel(to_discard)
var/obj/item/weapon/hand/H = new(src.loc)
H.cards += card
@@ -195,7 +195,7 @@
H.loc = get_step(usr,usr.dir)
if(!cards.len)
del(src)
qdel(src)
/obj/item/weapon/hand/attack_self(var/mob/user as mob)
concealed = !concealed
@@ -212,7 +212,7 @@
/obj/item/weapon/hand/update_icon(var/direction = 0)
if(!cards.len)
del(src)
qdel(src)
return
else if(cards.len > 1)
name = "hand of cards"

View File

@@ -1,21 +1,3 @@
var/global/list/holodeck_programs = list(
"emptycourt" = /area/holodeck/source_emptycourt, \
"boxingcourt" = /area/holodeck/source_boxingcourt, \
"basketball" = /area/holodeck/source_basketball, \
"thunderdomecourt" = /area/holodeck/source_thunderdomecourt, \
"beach" = /area/holodeck/source_beach, \
"desert" = /area/holodeck/source_desert, \
"space" = /area/holodeck/source_space, \
"picnicarea" = /area/holodeck/source_picnicarea, \
"snowfield" = /area/holodeck/source_snowfield, \
"theatre" = /area/holodeck/source_theatre, \
"meetinghall" = /area/holodeck/source_meetinghall, \
"courtroom" = /area/holodeck/source_courtroom, \
"burntest" = /area/holodeck/source_burntest, \
"wildlifecarp" = /area/holodeck/source_wildlife, \
"turnoff" = /area/holodeck/source_plating \
)
/obj/machinery/computer/HolodeckControl
name = "holodeck control console"
desc = "A computer used to control a nearby holodeck."
@@ -113,9 +95,7 @@ var/global/list/holodeck_programs = list(
if(href_list["program"])
var/prog = href_list["program"]
if(prog in holodeck_programs)
target = locate(holodeck_programs[prog])
if(target)
loadProgram(target)
loadProgram(holodeck_programs[prog])
else if(href_list["AIoverride"])
if(!issilicon(usr))
@@ -172,13 +152,9 @@ var/global/list/holodeck_programs = list(
/obj/machinery/computer/HolodeckControl/New()
..()
linkedholodeck = locate(/area/holodeck/alphadeck)
//if(linkedholodeck)
// target = locate(/area/holodeck/source_emptycourt)
// if(target)
// loadProgram(target)
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Del()
/obj/machinery/computer/HolodeckControl/Destroy()
emergencyShutdown()
..()
@@ -225,9 +201,7 @@ var/global/list/holodeck_programs = list(
if(!checkInteg(linkedholodeck))
damaged = 1
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
loadProgram(holodeck_programs["turnoff"], 0)
active = 0
use_power = 1
for(var/mob/M in range(10,src))
@@ -257,7 +231,7 @@ var/global/list/holodeck_programs = list(
if(!silent)
var/obj/oldobj = obj
visible_message("The [oldobj.name] fades away!")
del(obj)
qdel(obj)
/obj/machinery/computer/HolodeckControl/proc/checkInteg(var/area/A)
for(var/turf/T in A)
@@ -268,46 +242,33 @@ var/global/list/holodeck_programs = list(
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
var/area/targetsource = locate(/area/holodeck/source_emptycourt)
holographic_objs = targetsource.copy_contents_to(linkedholodeck)
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
spawn(20)
var/turf/T = get_turf(L)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, T)
s.start()
if(T)
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
active = 1
use_power = 2
loadProgram(holodeck_programs["emptycourt"], 0)
else
for(var/item in holographic_objs)
derez(item)
loadProgram(holodeck_programs["turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/datum/holodeck_program/HP, var/check_delay = 1)
if(!HP)
return
var/area/A = locate(HP.target)
if(!A)
return
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
last_change = world.time
return
if(check_delay)
if(world.time < (last_change + 25))
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
return
for(var/mob/M in range(3,src))
M.show_message("\b ERROR. Recalibrating projection apparatus.")
last_change = world.time
return
last_change = world.time
active = 1
@@ -321,12 +282,21 @@ var/global/list/holodeck_programs = list(
C.derez()
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
del(B)
qdel(B)
holographic_objs = A.copy_contents_to(linkedholodeck , 1)
for(var/obj/holo_obj in holographic_objs)
holo_obj.alpha *= 0.8 //give holodeck objs a slight transparency
if(HP.ambience)
linkedholodeck.forced_ambience = HP.ambience
else
linkedholodeck.forced_ambience = initial(linkedholodeck.ambience)
for(var/mob/living/M in mobs_in_area(linkedholodeck))
if(M.mind)
linkedholodeck.play_ambience(M)
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
@@ -367,21 +337,11 @@ var/global/list/holodeck_programs = list(
A.gravitychange(1,A)
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items
for(var/item in holographic_objs)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
//Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
loadProgram(holodeck_programs["turnoff"], 0)
if(!linkedholodeck.has_gravity)
linkedholodeck.gravitychange(1,linkedholodeck)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1

View File

@@ -85,7 +85,7 @@
icon_state = "boxing"
item_state = "boxing"
/obj/structure/window/reinforced/holowindow/Del()
/obj/structure/window/reinforced/holowindow/Destroy()
..()
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
@@ -95,7 +95,7 @@
if(istype(G.affecting,/mob/living))
var/mob/living/M = G.affecting
var/state = G.state
del(W) //gotta delete it here because if window breaks, it won't get deleted
qdel(W) //gotta delete it here because if window breaks, it won't get deleted
switch (state)
if(1)
M.visible_message("<span class='warning'>[user] slams [M] against \the [src]!</span>")
@@ -138,13 +138,13 @@
playsound(src, "shatter", 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
del(src)
qdel(src)
return
/obj/structure/window/reinforced/holowindow/disappearing/Del()
/obj/structure/window/reinforced/holowindow/disappearing/Destroy()
..()
/obj/machinery/door/window/holowindoor/Del()
/obj/machinery/door/window/holowindoor/Destroy()
..()
/obj/machinery/door/window/holowindoor/attackby(obj/item/weapon/I as obj, mob/user as mob)
@@ -180,9 +180,9 @@
playsound(src, "shatter", 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
del(src)
qdel(src)
/obj/structure/bed/chair/holochair/Del()
/obj/structure/bed/chair/holochair/Destroy()
..()
/obj/structure/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -192,6 +192,7 @@
/obj/item/weapon/holo
damtype = HALLOSS
no_attack_log = 1
/obj/item/weapon/holo/esword
desc = "May the force be within you. Sorta."
@@ -203,6 +204,7 @@
w_class = 2.0
flags = NOSHIELD | NOBLOODY
var/active = 0
var/item_color
/obj/item/weapon/holo/esword/green
New()
@@ -274,7 +276,7 @@
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
del(W)
qdel(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src.loc)
@@ -333,7 +335,7 @@
currentarea = get_area(src.loc)
if(!currentarea)
del(src)
qdel(src)
if(eventstarted)
usr << "The event has already begun!"
@@ -364,7 +366,7 @@
eventstarted = 1
for(var/obj/structure/window/reinforced/holowindow/disappearing/W in currentarea)
del(W)
qdel(W)
for(var/mob/M in currentarea)
M << "FIGHT!"
@@ -399,7 +401,7 @@
/mob/living/simple_animal/hostile/carp/holodeck/New()
..()
SetLuminosity(2) //hologram lighting
set_light(2) //hologram lighting
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
if (safe)
@@ -424,4 +426,4 @@
/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
del(src)
qdel(src)

View File

@@ -0,0 +1,50 @@
var/global/list/holodeck_programs = list(
"emptycourt" = new/datum/holodeck_program(/area/holodeck/source_emptycourt, list('sound/music/THUNDERDOME.ogg')),
"boxingcourt" = new/datum/holodeck_program(/area/holodeck/source_boxingcourt, list('sound/music/THUNDERDOME.ogg')),
"basketball" = new/datum/holodeck_program(/area/holodeck/source_basketball, list('sound/music/THUNDERDOME.ogg')),
"thunderdomecourt" = new/datum/holodeck_program(/area/holodeck/source_thunderdomecourt, list('sound/music/THUNDERDOME.ogg')),
"beach" = new/datum/holodeck_program(/area/holodeck/source_beach),
"desert" = new/datum/holodeck_program(/area/holodeck/source_desert,
list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"snowfield" = new/datum/holodeck_program(/area/holodeck/source_snowfield,
list(
'sound/effects/wind/wind_2_1.ogg',
'sound/effects/wind/wind_2_2.ogg',
'sound/effects/wind/wind_3_1.ogg',
'sound/effects/wind/wind_4_1.ogg',
'sound/effects/wind/wind_4_2.ogg',
'sound/effects/wind/wind_5_1.ogg'
)
),
"space" = new/datum/holodeck_program(/area/holodeck/source_space,
list(
'sound/ambience/ambispace.ogg',
'sound/music/main.ogg',
'sound/music/space.ogg',
'sound/music/traitor.ogg',
)
),
"picnicarea" = new/datum/holodeck_program(/area/holodeck/source_picnicarea, list('sound/music/title2.ogg')),
"theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre),
"meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall),
"courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')),
"burntest" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()),
"wildlifecarp" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()),
"turnoff" = new/datum/holodeck_program(/area/holodeck/source_plating, list())
)
/datum/holodeck_program
var/target
var/list/ambience = null
/datum/holodeck_program/New(var/target, var/list/ambience = null)
src.target = target
src.ambience = ambience

View File

@@ -29,7 +29,7 @@
sleep(250) // ugly hack, should mean roundstart plants are fine.
if(!plant_controller)
world << "<span class='danger'>Plant controller does not exist and [src] requires it. Aborting.</span>"
del(src)
qdel(src)
return
seed = plant_controller.seeds[plantname]
@@ -65,7 +65,7 @@
sleep(250) // ugly hack, should mean roundstart plants are fine.
if(!plant_controller)
world << "<span class='danger'>Plant controller does not exist and [src] requires it. Aborting.</span>"
del(src)
qdel(src)
return
if(plant_controller.product_descs["[seed.uid]"])
@@ -163,7 +163,7 @@
M.Weaken(5)
seed.thrown_at(src,M)
sleep(-1)
if(src) del(src)
if(src) qdel(src)
return
/obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom)
@@ -183,13 +183,13 @@
user.put_in_hands(pocell)
pocell.maxcharge = src.potency * 10
pocell.charge = pocell.maxcharge
del(src)
qdel(src)
return
else if(W.sharp)
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
new /obj/item/clothing/head/pumpkinhead (user.loc)
del(src)
qdel(src)
return
else if(seed.chems)
if(istype(W,/obj/item/weapon/hatchet) && !isnull(seed.chems["woodpulp"]))
@@ -204,22 +204,22 @@
continue
G.attackby(NG, user)
user << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks."
del(src)
qdel(src)
return
else if(!isnull(seed.chems["potato"]))
user << "You slice \the [src] into sticks."
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
del(src)
qdel(src)
return
else if(!isnull(seed.chems["carrotjuice"]))
user << "You slice \the [src] into sticks."
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
del(src)
qdel(src)
return
else if(!isnull(seed.chems["soymilk"]))
user << "You roughly chop up \the [src]."
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
del(src)
qdel(src)
return
..()
@@ -276,7 +276,7 @@
if(user)
user << "<span class='danger'>\The [src] has fallen to bits.</span>"
user.drop_from_inventory(src)
del(src)
qdel(src)
add_fingerprint(user)
return 1
@@ -296,7 +296,7 @@
user.visible_message("<span class='danger'>\The [user] squashes \the [src]!</span>")
seed.thrown_at(src,user)
sleep(-1)
if(src) del(src)
if(src) qdel(src)
return
if(seed.kitchen_tag == "grass")
@@ -311,13 +311,13 @@
continue
NG.attackby(G, user)
user << "You add the newly-formed grass to the stack. It now contains [G.amount] tiles."
del(src)
qdel(src)
return
if(seed.get_trait(TRAIT_SPREAD) > 0)
user << "<span class='notice'>You plant the [src.name].</span>"
new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed)
del(src)
qdel(src)
return
/*
@@ -327,13 +327,13 @@
var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc)
poultice.heal_brute = potency
user << "<span class='notice'>You mash the leaves into a poultice.</span>"
del(src)
qdel(src)
return
if("mtear")
var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc)
poultice.heal_burn = potency
user << "<span class='notice'>You mash the petals into a poultice.</span>"
del(src)
qdel(src)
return
*/
@@ -341,9 +341,6 @@
..()
if(!seed)
return
if(seed.get_trait(TRAIT_BIOLUM))
user.SetLuminosity(user.luminosity + seed.get_trait(TRAIT_BIOLUM))
SetLuminosity(0)
if(seed.get_trait(TRAIT_STINGS))
var/mob/living/carbon/human/H = user
if(istype(H) && H.gloves)
@@ -354,12 +351,6 @@
seed.do_thorns(H,src)
seed.do_sting(H,src,pick("r_hand","l_hand"))
/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user)
..()
if(seed && seed.get_trait(TRAIT_BIOLUM))
user.SetLuminosity(user.luminosity - seed.get_trait(TRAIT_BIOLUM))
SetLuminosity(seed.get_trait(TRAIT_BIOLUM))
// Predefined types for placing on the map.
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap

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