mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-28 14:37:27 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 12/16/2015_newwizard
This commit is contained in:
+29
-18
@@ -16,7 +16,7 @@ var/global/floorIsLava = 0
|
||||
var/rendered = "<span class=\"log_message\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_ATTACKLOGS)
|
||||
if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs))
|
||||
var/msg = rendered
|
||||
C << msg
|
||||
|
||||
@@ -594,26 +594,33 @@ proc/admin_notice(var/message, var/rights)
|
||||
usr << browse(dat, "window=admin2;size=210x280")
|
||||
return
|
||||
|
||||
/datum/admins/proc/Secrets()
|
||||
/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null)
|
||||
if(!check_rights(0)) return
|
||||
|
||||
// Print the header with category selection buttons.
|
||||
var/dat = "<B>The first rule of adminbuse is: you don't talk about the adminbuse.</B><HR>"
|
||||
for(var/datum/admin_secret_category/category in admin_secrets.categories)
|
||||
if(!category.can_view(usr))
|
||||
continue
|
||||
dat += "<B>[category.name]</B><br>"
|
||||
if(category.desc)
|
||||
dat += "<I>[category.desc]</I><BR>"
|
||||
for(var/datum/admin_secret_item/item in category.items)
|
||||
dat += "<A href='?src=\ref[src];admin_secrets_panel=\ref[category]'>[category.name]</A> "
|
||||
dat += "<HR>"
|
||||
|
||||
// If a category is selected, print its description and then options
|
||||
if(istype(active_category) && active_category.can_view(usr))
|
||||
dat += "<B>[active_category.name]</B><BR>"
|
||||
if(active_category.desc)
|
||||
dat += "<I>[active_category.desc]</I><BR>"
|
||||
for(var/datum/admin_secret_item/item in active_category.items)
|
||||
if(!item.can_view(usr))
|
||||
continue
|
||||
dat += "<A href='?src=\ref[src];admin_secrets=\ref[item]'>[item.name()]</A><BR>"
|
||||
dat += "<BR>"
|
||||
usr << browse(dat, "window=secrets")
|
||||
|
||||
var/datum/browser/popup = new(usr, "secrets", "Secrets", 500, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
|
||||
//i.e. buttons/verbs
|
||||
|
||||
@@ -895,22 +902,26 @@ proc/admin_notice(var/message, var/rights)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
|
||||
|
||||
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
|
||||
/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode
|
||||
if(!ticker || !ticker.mode)
|
||||
return 0
|
||||
if (!istype(M))
|
||||
return 0
|
||||
var/datum/mind/M
|
||||
if (ismob(character))
|
||||
var/mob/C = character
|
||||
M = C.mind
|
||||
else if(istype(character, /datum/mind))
|
||||
M = character
|
||||
|
||||
if(M.mind)
|
||||
if(M)
|
||||
if(ticker.mode.antag_templates && ticker.mode.antag_templates.len)
|
||||
for(var/datum/antagonist/antag in ticker.mode.antag_templates)
|
||||
if(antag.is_antagonist(M.mind))
|
||||
if(antag.is_antagonist(M))
|
||||
return 2
|
||||
else if(M.mind.special_role)
|
||||
if(M.special_role)
|
||||
return 1
|
||||
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(isrobot(character))
|
||||
var/mob/living/silicon/robot/R = character
|
||||
if(R.emagged)
|
||||
return 1
|
||||
|
||||
@@ -1251,7 +1262,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
|
||||
//Returns 1 to let the dragdrop code know we are trapping this event
|
||||
//Returns 0 if we don't plan to trap the event
|
||||
/datum/admins/proc/cmd_ghost_drag(var/mob/dead/observer/frommob, var/mob/living/tomob)
|
||||
/datum/admins/proc/cmd_ghost_drag(var/mob/observer/dead/frommob, var/mob/living/tomob)
|
||||
if(!istype(frommob))
|
||||
return //Extra sanity check to make sure only observers are shoved into things
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
if(!length(line)) continue
|
||||
if(copytext(line,1,2) == "#") continue
|
||||
|
||||
var/list/List = text2list(line,"+")
|
||||
var/list/List = splittext(line,"+")
|
||||
if(!List.len) continue
|
||||
|
||||
var/rank = ckeyEx(List[1])
|
||||
@@ -77,7 +77,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
if(copytext(line,1,2) == "#") continue
|
||||
|
||||
//Split the line at every "-"
|
||||
var/list/List = text2list(line, "-")
|
||||
var/list/List = splittext(line, "-")
|
||||
if(!List.len) continue
|
||||
|
||||
//ckey is before the first "-"
|
||||
|
||||
@@ -22,6 +22,9 @@ var/datum/admin_secrets/admin_secrets = new()
|
||||
dd_insertObjectList(category.items, item)
|
||||
items += item
|
||||
|
||||
//
|
||||
// Secret Item Category - Each subtype is a category for organizing secret commands.
|
||||
//
|
||||
/datum/admin_secret_category
|
||||
var/name = ""
|
||||
var/desc = ""
|
||||
@@ -37,6 +40,10 @@ var/datum/admin_secrets/admin_secrets = new()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//
|
||||
// Secret Item Datum - Each subtype is a command on the secrets panel.
|
||||
// Override execute() with the implementation of the command.
|
||||
//
|
||||
/datum/admin_secret_item
|
||||
var/name = ""
|
||||
var/category = null
|
||||
|
||||
@@ -1,102 +1,101 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags,
|
||||
/client/proc/player_panel,
|
||||
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
|
||||
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
|
||||
/client/proc/hide_verbs, /*hides all our adminverbs*/
|
||||
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
|
||||
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
|
||||
// /client/proc/check_antagonists, /*shows all antags*/
|
||||
/client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player,
|
||||
/client/proc/hide_verbs, //hides all our adminverbs,
|
||||
/client/proc/hide_most_verbs, //hides all our hideable adminverbs,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify,
|
||||
// /client/proc/check_antagonists, //shows all antags,
|
||||
// /client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
// /client/proc/deadchat /*toggles deadchat on/off*/
|
||||
/client/proc/cmd_mentor_check_new_players,
|
||||
// /client/proc/deadchat //toggles deadchat on/off,
|
||||
// /client/proc/toggle_ahelp_sound,
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
|
||||
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
|
||||
// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
|
||||
/datum/admins/proc/show_game_mode, /*Configuration window for the current game mode.*/
|
||||
/datum/admins/proc/force_mode_latespawn, /*Force the mode to try a latespawn proc*/
|
||||
/datum/admins/proc/force_antag_latespawn, /*Force a specific template to try a latespawn proc*/
|
||||
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
|
||||
/datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
|
||||
/datum/admins/proc/announce, /*priority announce something to all clients.*/
|
||||
/client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/toggle_view_range, /*changes how far we can see*/
|
||||
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
|
||||
/datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
|
||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
|
||||
/datum/admins/proc/access_news_network, /*allows access of newscasters*/
|
||||
/client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
|
||||
/client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
|
||||
/client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
|
||||
/client/proc/Getmob, /*teleports a mob to our location*/
|
||||
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
|
||||
// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage
|
||||
/client/proc/invisimin, //allows our mob to go invisible/visible,
|
||||
// /datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind -Removed due to rare practical use. Moved to debug verbs ~Errorage,
|
||||
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
|
||||
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
|
||||
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
|
||||
/datum/admins/proc/toggleenter, //toggles whether people can join the current game,
|
||||
/datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
|
||||
/datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
|
||||
/datum/admins/proc/access_news_network, //allows access of newscasters,
|
||||
/client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody,
|
||||
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
|
||||
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
|
||||
/client/proc/Getmob, //teleports a mob to our location,
|
||||
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
|
||||
// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
|
||||
/client/proc/jumptomob, /*allows us to jump to a specific mob*/
|
||||
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
|
||||
/client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/
|
||||
/client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/
|
||||
/client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
|
||||
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
|
||||
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
|
||||
/client/proc/jumptomob, //allows us to jump to a specific mob,
|
||||
/client/proc/jumptoturf, //allows us to jump to a specific turf,
|
||||
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
|
||||
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm,
|
||||
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
|
||||
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/check_words, /*displays cult-words*/
|
||||
/client/proc/check_ai_laws, /*shows AI and borg laws*/
|
||||
/client/proc/rename_silicon, /*properly renames silicons*/
|
||||
/client/proc/manage_silicon_laws, /* Allows viewing and editing silicon laws. */
|
||||
/client/proc/check_words, //displays cult-words,
|
||||
/client/proc/check_ai_laws, //shows AI and borg laws,
|
||||
/client/proc/rename_silicon, //properly renames silicons,
|
||||
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
|
||||
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
|
||||
/client/proc/toggleprayers, /*toggles prayers on/off*/
|
||||
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
|
||||
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
|
||||
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
|
||||
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
|
||||
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
|
||||
/client/proc/secrets,
|
||||
/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/togglehubvisibility, /*toggles visibility on the BYOND Hub.*/
|
||||
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
|
||||
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
|
||||
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
|
||||
/datum/admins/proc/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/togglehubvisibility, //toggles visibility on the BYOND Hub.,
|
||||
/datum/admins/proc/toggledsay, //toggles dsay on/off for everyone,
|
||||
/client/proc/game_panel, //game panel, allows to change game-mode etc,
|
||||
/client/proc/cmd_admin_say, //admin-only ooc chat,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, /*frees slot for chosen job*/
|
||||
/client/proc/free_slot, //frees slot for chosen job,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/toggleghostwriters,
|
||||
/client/proc/toggledrones,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/check_customitem_activity,
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb
|
||||
/client/proc/response_team, // Response Teams admin verb,
|
||||
/client/proc/toggle_antagHUD_use,
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/allow_character_respawn, /* Allows a ghost to respawn */
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/aooc,
|
||||
/client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */
|
||||
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */
|
||||
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
|
||||
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
|
||||
/client/proc/change_security_level,
|
||||
/client/proc/view_chemical_reaction_logs,
|
||||
/client/proc/makePAI,
|
||||
/datum/admins/proc/paralyze_mob
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
@@ -131,7 +130,7 @@ var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/spawn_custom_item,
|
||||
/datum/admins/proc/check_custom_items,
|
||||
/datum/admins/proc/spawn_plant,
|
||||
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
|
||||
/datum/admins/proc/spawn_atom, //allows us to spawn instances,
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/virus2_editor,
|
||||
/client/proc/spawn_chemdisp_cartridge
|
||||
@@ -149,7 +148,7 @@ var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/datum/admins/proc/toggleAI,
|
||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
@@ -161,7 +160,7 @@ var/list/admin_verbs_server = list(
|
||||
/client/proc/nanomapgen_DumpImage
|
||||
)
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
|
||||
/client/proc/getruntimelog, //allows us to access runtime logs to somebody,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/kill_air,
|
||||
@@ -184,17 +183,18 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/overlay_random_map,
|
||||
/client/proc/delete_random_map,
|
||||
/client/proc/show_plant_genes,
|
||||
/client/proc/show_xenobio_genes,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_target,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/dsay,
|
||||
/client/proc/admin_ghost /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/admin_ghost //allows us to ghost/reenter body at will,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_paranoid_debug = list(
|
||||
@@ -218,8 +218,6 @@ var/list/admin_verbs_rejuv = list(
|
||||
var/list/admin_verbs_hideable = list(
|
||||
/client/proc/deadmin_self,
|
||||
// /client/proc/deadchat,
|
||||
/client/proc/toggleprayers,
|
||||
/client/proc/toggle_hear_radio,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/datum/admins/proc/toggleenter,
|
||||
/datum/admins/proc/toggleguests,
|
||||
@@ -288,14 +286,12 @@ var/list/admin_verbs_hideable = list(
|
||||
/datum/admins/proc/set_tcrystals
|
||||
)
|
||||
var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game.,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/toggleattacklogs,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
@@ -304,10 +300,11 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/aooc,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
|
||||
/client/proc/toggle_attack_logs,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/allow_character_respawn /* Allows a ghost to respawn */
|
||||
/client/proc/allow_character_respawn // Allows a ghost to respawn ,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_mentor = list(
|
||||
@@ -400,9 +397,9 @@ var/list/admin_verbs_mentor = list(
|
||||
set category = "Admin"
|
||||
set name = "Aghost"
|
||||
if(!holder) return
|
||||
if(istype(mob,/mob/dead/observer))
|
||||
if(istype(mob,/mob/observer/dead))
|
||||
//re-enter
|
||||
var/mob/dead/observer/ghost = mob
|
||||
var/mob/observer/dead/ghost = mob
|
||||
if(!is_mentor(usr.client))
|
||||
ghost.can_reenter_corpse = 1
|
||||
if(ghost.can_reenter_corpse)
|
||||
@@ -418,7 +415,7 @@ var/list/admin_verbs_mentor = list(
|
||||
else
|
||||
//ghostize
|
||||
var/mob/body = mob
|
||||
var/mob/dead/observer/ghost = body.ghostize(1)
|
||||
var/mob/observer/dead/ghost = body.ghostize(1)
|
||||
ghost.admin_ghosted = 1
|
||||
if(body)
|
||||
body.teleop = ghost
|
||||
@@ -525,12 +522,16 @@ var/list/admin_verbs_mentor = list(
|
||||
if(holder)
|
||||
if(holder.fakekey)
|
||||
holder.fakekey = null
|
||||
if(istype(src.mob, /mob/new_player))
|
||||
mob.name = capitalize(ckey)
|
||||
else
|
||||
var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null)
|
||||
if(!new_key) return
|
||||
if(length(new_key) >= 26)
|
||||
new_key = copytext(new_key, 1, 26)
|
||||
holder.fakekey = new_key
|
||||
if(istype(mob, /mob/new_player))
|
||||
mob.name = new_key
|
||||
log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
|
||||
message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1)
|
||||
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -903,17 +904,6 @@ var/list/admin_verbs_mentor = list(
|
||||
message_admins("A job slot for [job] has been opened by [key_name_admin(usr)]")
|
||||
return
|
||||
|
||||
/client/proc/toggleattacklogs()
|
||||
set name = "Toggle Attack Log Messages"
|
||||
set category = "Preferences"
|
||||
|
||||
prefs.toggles ^= CHAT_ATTACKLOGS
|
||||
if (prefs.toggles & CHAT_ATTACKLOGS)
|
||||
usr << "You now will get attack log messages"
|
||||
else
|
||||
usr << "You now won't get attack log messages"
|
||||
|
||||
|
||||
/client/proc/toggleghostwriters()
|
||||
set name = "Toggle ghost writers"
|
||||
set category = "Server"
|
||||
@@ -942,17 +932,6 @@ var/list/admin_verbs_mentor = list(
|
||||
src << "<b>Enabled maint drones.</b>"
|
||||
message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1)
|
||||
|
||||
/client/proc/toggledebuglogs()
|
||||
set name = "Toggle Debug Log Messages"
|
||||
set category = "Preferences"
|
||||
|
||||
prefs.toggles ^= CHAT_DEBUGLOGS
|
||||
if (prefs.toggles & CHAT_DEBUGLOGS)
|
||||
usr << "You now will get debug log messages"
|
||||
else
|
||||
usr << "You now won't get debug log messages"
|
||||
|
||||
|
||||
/client/proc/man_up(mob/T as mob in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Man Up"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/admins/proc/create_mob(var/mob/user)
|
||||
if (!create_mob_html)
|
||||
var/mobjs = null
|
||||
mobjs = list2text(typesof(/mob), ";")
|
||||
mobjs = jointext(typesof(/mob), ";")
|
||||
create_mob_html = file2text('html/create_object.html')
|
||||
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/datum/admins/proc/create_object(var/mob/user)
|
||||
if (!create_object_html)
|
||||
var/objectjs = null
|
||||
objectjs = list2text(typesof(/obj), ";")
|
||||
objectjs = jointext(typesof(/obj), ";")
|
||||
create_object_html = file2text('html/create_object.html')
|
||||
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
if (!quick_create_object_html)
|
||||
var/objectjs = null
|
||||
objectjs = list2text(typesof(path), ";")
|
||||
objectjs = jointext(typesof(path), ";")
|
||||
quick_create_object_html = file2text('html/create_object.html')
|
||||
quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"")
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/admins/proc/create_turf(var/mob/user)
|
||||
if (!create_turf_html)
|
||||
var/turfjs = null
|
||||
turfjs = list2text(typesof(/turf), ";")
|
||||
turfjs = jointext(typesof(/turf), ";")
|
||||
create_turf_html = file2text('html/create_object.html')
|
||||
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
|
||||
|
||||
|
||||
@@ -392,7 +392,7 @@
|
||||
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
|
||||
var/dat = "<html><head><title>Round Status</title></head><body><h1><B>Round Status</B></h1>"
|
||||
dat += "Current Game Mode: <B>[ticker.mode.name]</B><BR>"
|
||||
dat += "Round Duration: <B>[round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10]</B><BR>"
|
||||
dat += "Round Duration: <B>[round_duration_as_text()]</B><BR>"
|
||||
dat += "<B>Emergency shuttle</B><BR>"
|
||||
if (!emergency_shuttle.online())
|
||||
dat += "<a href='?src=\ref[src];call_shuttle=1'>Call Shuttle</a><br>"
|
||||
|
||||
@@ -262,7 +262,7 @@
|
||||
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
|
||||
|
||||
switch(href_list["simplemake"])
|
||||
if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob )
|
||||
if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob )
|
||||
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
|
||||
if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob )
|
||||
if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"])
|
||||
@@ -769,7 +769,7 @@
|
||||
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
|
||||
jobban_remove(t)
|
||||
href_list["ban"] = 1 // lets it fall through and refresh
|
||||
var/t_split = text2list(t, " - ")
|
||||
var/t_split = splittext(t, " - ")
|
||||
var/key = t_split[1]
|
||||
var/job = t_split[2]
|
||||
DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job)
|
||||
@@ -1574,9 +1574,9 @@
|
||||
alert("Select fewer object types, (max 5)")
|
||||
return
|
||||
else if(length(removed_paths))
|
||||
alert("Removed:\n" + list2text(removed_paths, "\n"))
|
||||
alert("Removed:\n" + jointext(removed_paths, "\n"))
|
||||
|
||||
var/list/offset = text2list(href_list["offset"],",")
|
||||
var/list/offset = splittext(href_list["offset"],",")
|
||||
var/number = dd_range(1, 100, text2num(href_list["object_count"]))
|
||||
var/X = offset.len > 0 ? text2num(offset[1]) : 0
|
||||
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
|
||||
@@ -1644,6 +1644,10 @@
|
||||
log_and_message_admins("created [number] [english_list(paths)]")
|
||||
return
|
||||
|
||||
else if(href_list["admin_secrets_panel"])
|
||||
var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories
|
||||
src.Secrets(AC)
|
||||
|
||||
else if(href_list["admin_secrets"])
|
||||
var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items
|
||||
item.execute(usr)
|
||||
@@ -1917,7 +1921,7 @@ mob/living/silicon/ai/can_centcom_reply()
|
||||
if(client && eyeobj)
|
||||
return "|<A HREF='?[source];adminplayerobservejump=\ref[eyeobj]'>EYE</A>"
|
||||
|
||||
/mob/dead/observer/extra_admin_link(var/source)
|
||||
/mob/observer/dead/extra_admin_link(var/source)
|
||||
if(mind && mind.current)
|
||||
return "|<A HREF='?[source];adminplayerobservejump=\ref[mind.current]'>BDY</A>"
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
|
||||
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
|
||||
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
//clean the input msg
|
||||
if(!msg)
|
||||
return
|
||||
@@ -29,7 +26,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
var/original_msg = msg
|
||||
|
||||
//explode the input msg into a list
|
||||
var/list/msglist = text2list(msg, " ")
|
||||
var/list/msglist = splittext(msg, " ")
|
||||
|
||||
//generate keywords lookup
|
||||
var/list/surnames = list()
|
||||
@@ -40,7 +37,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(M.mind) indexing += M.mind.name
|
||||
|
||||
for(var/string in indexing)
|
||||
var/list/L = text2list(string, " ")
|
||||
var/list/L = splittext(string, " ")
|
||||
var/surname_found = 0
|
||||
//surnames
|
||||
for(var/i=L.len, i>=1, i--)
|
||||
@@ -100,7 +97,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights)
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
if(X.holder.rights == R_MENTOR)
|
||||
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/proc/on_mob_jump()
|
||||
return
|
||||
|
||||
/mob/dead/observer/on_mob_jump()
|
||||
/mob/observer/dead/on_mob_jump()
|
||||
following = null
|
||||
|
||||
/client/proc/Jump(var/area/A in return_sorted_areas())
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(T.mob)
|
||||
if(istype(T.mob, /mob/new_player))
|
||||
targets["(New Player) - [T]"] = T
|
||||
else if(istype(T.mob, /mob/dead/observer))
|
||||
else if(istype(T.mob, /mob/observer/dead))
|
||||
targets["[T.mob.name](Ghost) - [T]"] = T
|
||||
else
|
||||
targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T
|
||||
@@ -56,9 +56,6 @@
|
||||
else src << "<font color='red'>Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!</font>"
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
//clean the message if it's not sent by a high-rank admin
|
||||
//todo: sanitize for all???
|
||||
if(!check_rights(R_SERVER|R_DEBUG,0))
|
||||
@@ -104,7 +101,7 @@
|
||||
|
||||
//play the recieving admin the adminhelp sound (if they have them enabled)
|
||||
//non-admins shouldn't be able to disable this
|
||||
if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP)
|
||||
if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
|
||||
|
||||
@@ -71,38 +71,61 @@
|
||||
screen_loc = "NORTH,WEST+1"
|
||||
Click()
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Left Mouse Button = Construct / Upgrade"
|
||||
usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
|
||||
usr << "\blue Left Mouse Button + ctrl = R-Window"
|
||||
usr << "\blue Left Mouse Button + alt = Airlock"
|
||||
if(1) // Basic Build
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button + alt = Airlock</span>"
|
||||
usr << ""
|
||||
usr << "\blue Use the button in the upper left corner to"
|
||||
usr << "\blue change the direction of built objects."
|
||||
usr << "\blue ***********************************************************"
|
||||
if(2)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Right Mouse Button on buildmode button = Set object type"
|
||||
usr << "\blue Middle Mouse Button on buildmode button= On/Off object type saying"
|
||||
usr << "\blue Middle Mouse Button on turf/obj = Capture object type"
|
||||
usr << "\blue Left Mouse Button on turf/obj = Place objects"
|
||||
usr << "\blue Right Mouse Button = Delete objects"
|
||||
usr << "<span class='notice'>Use the button in the upper left corner to</span>"
|
||||
usr << "<span class='notice'>change the direction of built objects.</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(2) // Adv. Build
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>"
|
||||
usr << "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>"
|
||||
usr << "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button = Delete objects</span>"
|
||||
usr << "<span class='notice'>Mouse Button + ctrl = Copy object type</span>"
|
||||
usr << ""
|
||||
usr << "\blue Use the button in the upper left corner to"
|
||||
usr << "\blue change the direction of built objects."
|
||||
usr << "\blue ***********************************************************"
|
||||
if(3)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
|
||||
usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
|
||||
usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
|
||||
usr << "\blue ***********************************************************"
|
||||
if(4)
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "\blue Left Mouse Button on turf/obj/mob = Select"
|
||||
usr << "\blue Right Mouse Button on turf/obj/mob = Throw"
|
||||
usr << "\blue ***********************************************************"
|
||||
usr << "<span class='notice'>Use the button in the upper left corner to</span>"
|
||||
usr << "<span class='notice'>change the direction of built objects.</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(3) // Edit
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(4) // Throw
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(5) // Room Build
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf = Select as point A</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf = Select as point B</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on buildmode button = Change floor/wall type</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(6) // Make Ladders
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf = Set as upper ladder loc</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf = Set as lower ladder loc</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(7) // Move Into Contents
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Move into selection</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
if(8) // Make Lights
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Make it glow</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset glowing</span>"
|
||||
usr << "<span class='notice'>Right Mouse Button on buildmode button = Change glow properties</span>"
|
||||
usr << "<span class='notice'>***********************************************************</span>"
|
||||
return 1
|
||||
|
||||
/obj/effect/bmode/buildquit
|
||||
@@ -144,62 +167,100 @@
|
||||
var/objholder = /obj/structure/closet
|
||||
var/objsay = 1
|
||||
|
||||
Click(location, control, params)
|
||||
var/list/pa = params2list(params)
|
||||
var/wall_holder = /turf/simulated/wall
|
||||
var/floor_holder = /turf/simulated/floor/plating
|
||||
var/turf/coordA = null
|
||||
var/turf/coordB = null
|
||||
|
||||
if(pa.Find("middle"))
|
||||
switch(master.cl.buildmode)
|
||||
if(2)
|
||||
objsay=!objsay
|
||||
var/new_light_color = "#FFFFFF"
|
||||
var/new_light_range = 3
|
||||
var/new_light_intensity = 3
|
||||
|
||||
/obj/effect/bmode/buildmode/Click(location, control, params)
|
||||
var/list/pa = params2list(params)
|
||||
|
||||
if(pa.Find("middle"))
|
||||
switch(master.cl.buildmode)
|
||||
if(2)
|
||||
objsay=!objsay
|
||||
|
||||
|
||||
if(pa.Find("left"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
master.cl.buildmode = 2
|
||||
src.icon_state = "buildmode2"
|
||||
if(2)
|
||||
master.cl.buildmode = 3
|
||||
src.icon_state = "buildmode3"
|
||||
if(3)
|
||||
master.cl.buildmode = 4
|
||||
src.icon_state = "buildmode4"
|
||||
if(4)
|
||||
master.cl.buildmode = 1
|
||||
src.icon_state = "buildmode1"
|
||||
if(pa.Find("left"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
master.cl.buildmode = 2
|
||||
src.icon_state = "buildmode2"
|
||||
if(2)
|
||||
master.cl.buildmode = 3
|
||||
src.icon_state = "buildmode3"
|
||||
if(3)
|
||||
master.cl.buildmode = 4
|
||||
src.icon_state = "buildmode4"
|
||||
if(4)
|
||||
master.cl.buildmode = 5
|
||||
src.icon_state = "buildmode5"
|
||||
if(5)
|
||||
master.cl.buildmode = 6
|
||||
src.icon_state = "buildmode6"
|
||||
if(6)
|
||||
master.cl.buildmode = 7
|
||||
src.icon_state = "buildmode7"
|
||||
if(7)
|
||||
master.cl.buildmode = 8
|
||||
src.icon_state = "buildmode8"
|
||||
if(8)
|
||||
master.cl.buildmode = 1
|
||||
src.icon_state = "buildmode1"
|
||||
|
||||
else if(pa.Find("right"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1)
|
||||
else if(pa.Find("right"))
|
||||
switch(master.cl.buildmode)
|
||||
if(1) // Basic Build
|
||||
return 1
|
||||
if(2) // Adv. Build
|
||||
objholder = get_path_from_partial_text(/obj/structure/closet)
|
||||
|
||||
if(3) // Edit
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
|
||||
|
||||
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
|
||||
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
|
||||
return 1
|
||||
if(2)
|
||||
objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
|
||||
if(!ispath(objholder))
|
||||
objholder = /obj/structure/closet
|
||||
alert("That path is not allowed.")
|
||||
else
|
||||
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
|
||||
objholder = /obj/structure/closet
|
||||
if(3)
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
|
||||
|
||||
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
|
||||
if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
|
||||
return 1
|
||||
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
|
||||
if(!thetype) return 1
|
||||
switch(thetype)
|
||||
if("text")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
|
||||
if("number")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
|
||||
if("mob-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
|
||||
if("obj-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
|
||||
if("turf-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
|
||||
return 1
|
||||
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
|
||||
if(!thetype) return 1
|
||||
switch(thetype)
|
||||
if("text")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
|
||||
if("number")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
|
||||
if("mob-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
|
||||
if("obj-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
|
||||
if("turf-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
|
||||
if(5) // Room build
|
||||
var/choice = alert("Would you like to change the floor or wall holders?","Room Builder", "Floor", "Wall")
|
||||
switch(choice)
|
||||
if("Floor")
|
||||
floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating)
|
||||
if("Wall")
|
||||
wall_holder = get_path_from_partial_text(/turf/simulated/wall)
|
||||
if(8) // Lights
|
||||
var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color")
|
||||
switch(choice)
|
||||
if("Range")
|
||||
var/input = input("New light range.","Light Maker",3) as null|num
|
||||
if(input)
|
||||
new_light_range = input
|
||||
if("Power")
|
||||
var/input = input("New light power.","Light Maker",3) as null|num
|
||||
if(input)
|
||||
new_light_intensity = input
|
||||
if("Color")
|
||||
var/input = input("New light color.","Light Maker",3) as null|color
|
||||
if(input)
|
||||
new_light_color = input
|
||||
return 1
|
||||
|
||||
/proc/build_click(var/mob/user, buildmode, params, var/obj/object)
|
||||
var/obj/effect/bmode/buildholder/holder = null
|
||||
@@ -211,7 +272,7 @@
|
||||
var/list/pa = params2list(params)
|
||||
|
||||
switch(buildmode)
|
||||
if(1)
|
||||
if(1) // Basic Build
|
||||
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
|
||||
if(istype(object,/turf/space))
|
||||
var/turf/T = object
|
||||
@@ -260,8 +321,8 @@
|
||||
if(NORTHWEST)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.set_dir(NORTHWEST)
|
||||
if(2)
|
||||
if(pa.Find("left"))
|
||||
if(2) // Adv. Build
|
||||
if(pa.Find("left") && !pa.Find("ctrl"))
|
||||
if(ispath(holder.buildmode.objholder,/turf))
|
||||
var/turf/T = get_turf(object)
|
||||
T.ChangeTurf(holder.buildmode.objholder)
|
||||
@@ -269,27 +330,31 @@
|
||||
var/obj/A = new holder.buildmode.objholder (get_turf(object))
|
||||
A.set_dir(holder.builddir.dir)
|
||||
else if(pa.Find("right"))
|
||||
if(isobj(object)) qdel(object)
|
||||
if(isobj(object))
|
||||
qdel(object)
|
||||
else if(pa.Find("ctrl"))
|
||||
holder.buildmode.objholder = object.type
|
||||
user << "<span class='notice'>[object]([object.type]) copied to buildmode.</span>"
|
||||
if(pa.Find("middle"))
|
||||
holder.buildmode.objholder = text2path("[object.type]")
|
||||
if(holder.buildmode.objsay) usr << "[object.type]"
|
||||
|
||||
|
||||
if(3)
|
||||
if(3) // Edit
|
||||
if(pa.Find("left")) //I cant believe this shit actually compiles.
|
||||
if(object.vars.Find(holder.buildmode.varholder))
|
||||
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
|
||||
object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder
|
||||
else
|
||||
usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
|
||||
user << "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>"
|
||||
if(pa.Find("right"))
|
||||
if(object.vars.Find(holder.buildmode.varholder))
|
||||
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
|
||||
object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder])
|
||||
else
|
||||
usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
|
||||
user << "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>"
|
||||
|
||||
if(4)
|
||||
if(4) // Throw
|
||||
if(pa.Find("left"))
|
||||
if(istype(object, /atom/movable))
|
||||
holder.throw_atom = object
|
||||
@@ -297,3 +362,127 @@
|
||||
if(holder.throw_atom)
|
||||
holder.throw_atom.throw_at(object, 10, 1)
|
||||
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]")
|
||||
if(5) // Room build
|
||||
if(pa.Find("left"))
|
||||
holder.buildmode.coordA = get_turf(object)
|
||||
user << "<span class='notice'>Defined [object] ([object.type]) as point A.</span>"
|
||||
|
||||
if(pa.Find("right"))
|
||||
holder.buildmode.coordB = get_turf(object)
|
||||
user << "<span class='notice'>Defined [object] ([object.type]) as point B.</span>"
|
||||
|
||||
if(holder.buildmode.coordA && holder.buildmode.coordB)
|
||||
user << "<span class='notice'>A and B set, creating rectangle.</span>"
|
||||
holder.buildmode.make_rectangle(
|
||||
holder.buildmode.coordA,
|
||||
holder.buildmode.coordB,
|
||||
holder.buildmode.wall_holder,
|
||||
holder.buildmode.floor_holder
|
||||
)
|
||||
holder.buildmode.coordA = null
|
||||
holder.buildmode.coordB = null
|
||||
if(6) // Ladders
|
||||
if(pa.Find("left"))
|
||||
holder.buildmode.coordA = get_turf(object)
|
||||
user << "<span class='notice'>Defined [object] ([object.type]) as upper ladder location.</span>"
|
||||
|
||||
if(pa.Find("right"))
|
||||
holder.buildmode.coordB = get_turf(object)
|
||||
user << "<span class='notice'>Defined [object] ([object.type]) as lower ladder location.</span>"
|
||||
|
||||
if(holder.buildmode.coordA && holder.buildmode.coordB)
|
||||
user << "<span class='notice'>Ladder locations set, building ladders.</span>"
|
||||
var/obj/structure/ladder/A = new /obj/structure/ladder(holder.buildmode.coordA)
|
||||
var/obj/structure/ladder/B = new /obj/structure/ladder(holder.buildmode.coordB)
|
||||
A.target = B
|
||||
B.target = A
|
||||
B.icon_state = "ladderup"
|
||||
holder.buildmode.coordA = null
|
||||
holder.buildmode.coordB = null
|
||||
if(7) // Move into contents
|
||||
if(pa.Find("left"))
|
||||
if(istype(object, /atom))
|
||||
holder.throw_atom = object
|
||||
if(pa.Find("right"))
|
||||
if(holder.throw_atom && istype(object, /atom/movable))
|
||||
object.forceMove(holder.throw_atom)
|
||||
log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].")
|
||||
if(8) // Lights
|
||||
if(pa.Find("left"))
|
||||
if(object)
|
||||
object.set_light(holder.buildmode.new_light_range, holder.buildmode.new_light_intensity, holder.buildmode.new_light_color)
|
||||
if(pa.Find("right"))
|
||||
if(object)
|
||||
object.set_light(0, 0, "#FFFFFF")
|
||||
|
||||
/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path)
|
||||
var/desired_path = input("Enter full or partial typepath.","Typepath","[default_path]")
|
||||
|
||||
var/list/types = typesof(/atom)
|
||||
var/list/matches = list()
|
||||
|
||||
for(var/path in types)
|
||||
if(findtext("[path]", desired_path))
|
||||
matches += path
|
||||
|
||||
if(matches.len==0)
|
||||
alert("No results found. Sorry.")
|
||||
return
|
||||
|
||||
var/result = null
|
||||
|
||||
if(matches.len==1)
|
||||
result = matches[1]
|
||||
else
|
||||
result = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
|
||||
if(!objholder)
|
||||
result = default_path
|
||||
return result
|
||||
|
||||
/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type)
|
||||
if(!A || !B) // No coords
|
||||
return
|
||||
if(A.z != B.z) // Not same z-level
|
||||
return
|
||||
|
||||
var/height = A.y - B.y
|
||||
var/width = A.x - B.x
|
||||
var/z_level = A.z
|
||||
|
||||
var/turf/lower_left_corner = null
|
||||
// First, try to find the lowest part
|
||||
var/desired_y = 0
|
||||
if(A.y <= B.y)
|
||||
desired_y = A.y
|
||||
else
|
||||
desired_y = B.y
|
||||
|
||||
//Now for the left-most part.
|
||||
var/desired_x = 0
|
||||
if(A.x <= B.x)
|
||||
desired_x = A.x
|
||||
else
|
||||
desired_x = B.x
|
||||
|
||||
lower_left_corner = locate(desired_x, desired_y, z_level)
|
||||
|
||||
// Now we can begin building the actual room. This defines the boundries for the room.
|
||||
var/low_bound_x = lower_left_corner.x
|
||||
var/low_bound_y = lower_left_corner.y
|
||||
|
||||
var/high_bound_x = lower_left_corner.x + abs(width)
|
||||
var/high_bound_y = lower_left_corner.y + abs(height)
|
||||
|
||||
for(var/i = low_bound_x, i <= high_bound_x, i++)
|
||||
for(var/j = low_bound_y, j <= high_bound_y, j++)
|
||||
var/turf/T = locate(i, j, z_level)
|
||||
if(i == low_bound_x || i == high_bound_x || j == low_bound_y || j == high_bound_y)
|
||||
if(isturf(wall_type))
|
||||
T.ChangeTurf(wall_type)
|
||||
else
|
||||
new wall_type(T)
|
||||
else
|
||||
if(isturf(floor_type))
|
||||
T.ChangeTurf(floor_type)
|
||||
else
|
||||
new floor_type(T)
|
||||
@@ -37,11 +37,11 @@ var/inactive_keys = "None<br>"
|
||||
var/list/ckeys_with_customitems = list()
|
||||
|
||||
var/file = file2text("config/custom_items.txt")
|
||||
var/lines = text2list(file, "\n")
|
||||
var/lines = splittext(file, "\n")
|
||||
|
||||
for(var/line in lines)
|
||||
// split & clean up
|
||||
var/list/Entry = text2list(line, ":")
|
||||
var/list/Entry = splittext(line, ":")
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
|
||||
@@ -8,14 +8,11 @@
|
||||
if(!src.mob)
|
||||
return
|
||||
if(prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot send DSAY messages (muted)."
|
||||
src << "<span class='warning'>You cannot send DSAY messages (muted).</span>"
|
||||
return
|
||||
|
||||
if(!(prefs.toggles & CHAT_DEAD))
|
||||
src << "\red You have deadchat muted."
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_DEADCHAT))
|
||||
if(!is_preference_enabled(/datum/client_preference/show_dsay))
|
||||
src << "<span class='warning'>You have deadchat muted.</span>"
|
||||
return
|
||||
|
||||
var/stafftype = uppertext(holder.rank)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available
|
||||
if(!choice)
|
||||
return 0
|
||||
if(!istype(choice, /mob/dead/observer))
|
||||
if(!istype(choice, /mob/observer/dead))
|
||||
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank them out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
return 0
|
||||
@@ -214,7 +214,7 @@
|
||||
set name = "Del-All"
|
||||
|
||||
// to prevent REALLY stupid deletions
|
||||
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/dead, /mob/dead/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
|
||||
var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer/dead, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
|
||||
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked
|
||||
if(hsbitem)
|
||||
for(var/atom/O in world)
|
||||
@@ -282,7 +282,7 @@
|
||||
if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
|
||||
return
|
||||
else
|
||||
var/mob/dead/observer/ghost = new/mob/dead/observer(M,1)
|
||||
var/mob/observer/dead/ghost = new/mob/observer/dead(M,1)
|
||||
ghost.ckey = M.ckey
|
||||
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
|
||||
log_admin("[key_name(usr)] assumed direct control of [M].")
|
||||
@@ -732,7 +732,7 @@
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("blue wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
@@ -744,7 +744,7 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("red wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
@@ -756,7 +756,7 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("marisa wizard")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
@@ -932,17 +932,17 @@
|
||||
|
||||
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))
|
||||
if("Players")
|
||||
usr << list2text(player_list,",")
|
||||
usr << jointext(player_list,",")
|
||||
if("Admins")
|
||||
usr << list2text(admins,",")
|
||||
usr << jointext(admins,",")
|
||||
if("Mobs")
|
||||
usr << list2text(mob_list,",")
|
||||
usr << jointext(mob_list,",")
|
||||
if("Living Mobs")
|
||||
usr << list2text(living_mob_list,",")
|
||||
usr << jointext(living_mob_list,",")
|
||||
if("Dead Mobs")
|
||||
usr << list2text(dead_mob_list,",")
|
||||
usr << jointext(dead_mob_list,",")
|
||||
if("Clients")
|
||||
usr << list2text(clients,",")
|
||||
usr << jointext(clients,",")
|
||||
|
||||
// DNA2 - Admin Hax
|
||||
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/client/proc/fixatmos()
|
||||
set category = "Admin"
|
||||
set name = "Fix Atmospherics Grief"
|
||||
|
||||
if(!check_rights(R_ADMIN|R_DEBUG)) return
|
||||
|
||||
|
||||
if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No")
|
||||
return
|
||||
feedback_add_details("admin_verb","FA")
|
||||
|
||||
log_and_message_admins("Full atmosphere reset initiated by [usr].")
|
||||
world << "<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>"
|
||||
sleep(10)
|
||||
var/current_time = world.timeofday
|
||||
|
||||
// Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
|
||||
for(var/obj/machinery/power/supermatter/S in machines)
|
||||
S.power = 0
|
||||
usr << "\[1/5\] - Supermatter depowered"
|
||||
|
||||
// Remove all gases from all pipenets
|
||||
for(var/datum/pipe_network/PN in pipe_networks)
|
||||
for(var/datum/gas_mixture/G in PN.gases)
|
||||
G.gas = list()
|
||||
G.update_values()
|
||||
|
||||
usr << "\[2/5\] - All pipenets purged of gas."
|
||||
|
||||
// Delete all zones.
|
||||
for(var/zone/Z in world)
|
||||
Z.c_invalidate()
|
||||
|
||||
usr << "\[3/5\] - All ZAS Zones removed."
|
||||
|
||||
var/list/unsorted_overlays = list()
|
||||
for(var/id in gas_data.tile_overlay)
|
||||
unsorted_overlays |= gas_data.tile_overlay[id]
|
||||
|
||||
|
||||
for(var/turf/simulated/T in world)
|
||||
T.air = null
|
||||
T.overlays.Remove(unsorted_overlays)
|
||||
T.zone = null
|
||||
|
||||
usr << "\[4/5\] - All turfs reset to roundstart values."
|
||||
|
||||
qdel(air_master)
|
||||
air_master = new
|
||||
air_master.Setup()
|
||||
spawn air_master.Start()
|
||||
|
||||
usr << "\[5/5\] - ZAS Rebooted"
|
||||
world << "<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>"
|
||||
@@ -1,7 +1,7 @@
|
||||
var/list/forbidden_varedit_object_types = list(
|
||||
/datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea.
|
||||
/obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering
|
||||
/datum/feedback_variable //Prevents people messing with feedback gathering
|
||||
/datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea,
|
||||
/obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering,
|
||||
/datum/feedback_variable //Prevents people messing with feedback gathering,
|
||||
)
|
||||
|
||||
var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending")
|
||||
|
||||
@@ -16,7 +16,7 @@ var/list/sounds_cache = list()
|
||||
log_admin("[key_name(src)] played sound [S]")
|
||||
message_admins("[key_name_admin(src)] played sound [S]", 1)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client.prefs.toggles & SOUND_MIDI)
|
||||
if(M.is_preference_enabled(/datum/client_preference/play_admin_midis))
|
||||
M << uploaded_sound
|
||||
|
||||
feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -13,16 +13,15 @@
|
||||
if(usr.client.prefs.muted & MUTE_PRAY)
|
||||
usr << "\red You cannot pray (muted)."
|
||||
return
|
||||
if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
|
||||
return
|
||||
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers))
|
||||
C << msg
|
||||
C << 'sound/effects/ding.ogg'
|
||||
usr << "Your prayers have been received by the gods."
|
||||
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -33,9 +32,11 @@
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
C << 'sound/machines/signal.ogg'
|
||||
|
||||
/proc/Syndicate_announce(var/msg, var/mob/Sender)
|
||||
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
C << 'sound/machines/signal.ogg'
|
||||
@@ -189,7 +189,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
|
||||
M.client.prefs.muted |= mute_type
|
||||
log_admin("SPAM AUTOMUTE: [muteunmute] [key_name(M)] from [mute_string]")
|
||||
message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
|
||||
M << "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin."
|
||||
M << "<span class='alert'>You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.</span>"
|
||||
feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -202,7 +202,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
|
||||
|
||||
log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]")
|
||||
message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
|
||||
M << "You have been [muteunmute] from [mute_string]."
|
||||
M << "<span class = 'alert'>You have been [muteunmute] from [mute_string].</span>"
|
||||
feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_add_random_ai_law()
|
||||
@@ -235,8 +235,8 @@ Ccomp's first proc.
|
||||
var/list/mobs = list()
|
||||
var/list/ghosts = list()
|
||||
var/list/sortmob = sortAtom(mob_list) // get the mob list.
|
||||
/var/any=0
|
||||
for(var/mob/dead/observer/M in sortmob)
|
||||
var/any=0
|
||||
for(var/mob/observer/dead/M in sortmob)
|
||||
mobs.Add(M) //filter it where it's only ghosts
|
||||
any = 1 //if no ghosts show up, any will just be 0
|
||||
if(!any)
|
||||
@@ -266,7 +266,7 @@ Ccomp's first proc.
|
||||
src << "Hrm, appears you didn't select a ghost" // Sanity check, if no ghosts in the list we don't want to edit a null variable and cause a runtime error.
|
||||
return
|
||||
|
||||
var/mob/dead/observer/G = ghosts[target]
|
||||
var/mob/observer/dead/G = ghosts[target]
|
||||
if(G.has_enabled_antagHUD && config.antag_hud_restricted)
|
||||
var/response = alert(src, "Are you sure you wish to allow this individual to play?","Ghost has used AntagHUD","Yes","No")
|
||||
if(response == "No") return
|
||||
@@ -291,9 +291,9 @@ Ccomp's first proc.
|
||||
src << "Only administrators may use this command."
|
||||
var/action=""
|
||||
if(config.antag_hud_allowed)
|
||||
for(var/mob/dead/observer/g in get_ghosts())
|
||||
for(var/mob/observer/dead/g in get_ghosts())
|
||||
if(!g.client.holder) //Remove the verb from non-admin ghosts
|
||||
g.verbs -= /mob/dead/observer/verb/toggle_antagHUD
|
||||
g.verbs -= /mob/observer/dead/verb/toggle_antagHUD
|
||||
if(g.antagHUD)
|
||||
g.antagHUD = 0 // Disable it on those that have it enabled
|
||||
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
|
||||
@@ -302,9 +302,9 @@ Ccomp's first proc.
|
||||
src << "\red <B>AntagHUD usage has been disabled</B>"
|
||||
action = "disabled"
|
||||
else
|
||||
for(var/mob/dead/observer/g in get_ghosts())
|
||||
for(var/mob/observer/dead/g in get_ghosts())
|
||||
if(!g.client.holder) // Add the verb back for all non-admin ghosts
|
||||
g.verbs += /mob/dead/observer/verb/toggle_antagHUD
|
||||
g.verbs += /mob/observer/dead/verb/toggle_antagHUD
|
||||
g << "\blue <B>The Administrator has enabled AntagHUD </B>" // Notify all observers they can now use AntagHUD
|
||||
config.antag_hud_allowed = 1
|
||||
action = "enabled"
|
||||
@@ -324,13 +324,13 @@ Ccomp's first proc.
|
||||
src << "Only administrators may use this command."
|
||||
var/action=""
|
||||
if(config.antag_hud_restricted)
|
||||
for(var/mob/dead/observer/g in get_ghosts())
|
||||
for(var/mob/observer/dead/g in get_ghosts())
|
||||
g << "\blue <B>The administrator has lifted restrictions on joining the round if you use AntagHUD</B>"
|
||||
action = "lifted restrictions"
|
||||
config.antag_hud_restricted = 0
|
||||
src << "\blue <B>AntagHUD restrictions have been lifted</B>"
|
||||
else
|
||||
for(var/mob/dead/observer/g in get_ghosts())
|
||||
for(var/mob/observer/dead/g in get_ghosts())
|
||||
g << "\red <B>The administrator has placed restrictions on joining the round if you use AntagHUD</B>"
|
||||
g << "\red <B>Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions </B>"
|
||||
g.antagHUD = 0
|
||||
@@ -358,8 +358,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!input)
|
||||
return
|
||||
|
||||
var/mob/dead/observer/G_found
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
var/mob/observer/dead/G_found
|
||||
for(var/mob/observer/dead/G in player_list)
|
||||
if(G.ckey == input)
|
||||
G_found = G
|
||||
break
|
||||
@@ -388,7 +388,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
else
|
||||
new_character.gender = pick(MALE,FEMALE)
|
||||
var/datum/preferences/A = new()
|
||||
A.randomize_appearance_for(new_character)
|
||||
A.randomize_appearance_and_body_for(new_character)
|
||||
new_character.real_name = G_found.real_name
|
||||
|
||||
if(!new_character.real_name)
|
||||
@@ -627,7 +627,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
log_admin("[key_name(usr)] has gibbed [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1)
|
||||
|
||||
if(istype(M, /mob/dead/observer))
|
||||
if(istype(M, /mob/observer/dead))
|
||||
gibs(M.loc)
|
||||
return
|
||||
|
||||
@@ -640,7 +640,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
|
||||
if (istype(mob, /mob/observer/dead)) // so they don't spam gibs everywhere
|
||||
return
|
||||
else
|
||||
mob.gib()
|
||||
|
||||
@@ -76,9 +76,9 @@
|
||||
|
||||
/datum/alarm/proc/cameras()
|
||||
// reset camera cache
|
||||
if(camera_cache_id != cache_id)
|
||||
if(camera_repository.camera_cache_id != cache_id)
|
||||
cameras = null
|
||||
cache_id = camera_cache_id
|
||||
cache_id = camera_repository.camera_cache_id
|
||||
// If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras
|
||||
else if(cameras && (last_camera_area != alarm_area()))
|
||||
cameras = null
|
||||
|
||||
@@ -86,10 +86,10 @@
|
||||
/turf/get_alarm_origin()
|
||||
return get_area(src)
|
||||
|
||||
/datum/alarm_handler/proc/register(var/object, var/procName)
|
||||
/datum/alarm_handler/proc/register_alarm(var/object, var/procName)
|
||||
listeners[object] = procName
|
||||
|
||||
/datum/alarm_handler/proc/unregister(var/object)
|
||||
/datum/alarm_handler/proc/unregister_alarm(var/object)
|
||||
listeners -= object
|
||||
|
||||
/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised)
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
..()
|
||||
|
||||
|
||||
on_found(mob/finder as mob)
|
||||
on_found(mob/living/finder as mob)
|
||||
if(armed)
|
||||
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
|
||||
"<span class='warning'>You accidentally trigger [src]!</span>")
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
////////////
|
||||
//SECURITY//
|
||||
////////////
|
||||
var/next_allowed_topic_time = 10
|
||||
// comment out the line below when debugging locally to enable the options & messages menu
|
||||
//control_freak = 1
|
||||
|
||||
@@ -47,3 +46,5 @@
|
||||
var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
|
||||
|
||||
preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server.
|
||||
var/global/obj/screen/click_catcher/void
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
////////////
|
||||
//SECURITY//
|
||||
////////////
|
||||
#define TOPIC_SPAM_DELAY 2 //2 ticks is about 2/10ths of a second; it was 4 ticks, but that caused too many clicks to be lost due to lag
|
||||
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
|
||||
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
|
||||
//I would just like the code ready should it ever need to be used.
|
||||
|
||||
//#define TOPIC_DEBUGGING 1
|
||||
|
||||
/*
|
||||
When somebody clicks a link in game, this Topic is called first.
|
||||
It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever]
|
||||
@@ -24,10 +26,13 @@
|
||||
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
|
||||
return
|
||||
|
||||
//Reduces spamming of links by dropping calls that happen during the delay period
|
||||
if(next_allowed_topic_time > world.time)
|
||||
return
|
||||
next_allowed_topic_time = world.time + TOPIC_SPAM_DELAY
|
||||
#if defined(TOPIC_DEBUGGING)
|
||||
world << "[src]'s Topic: [href] destined for [hsrc]."
|
||||
|
||||
if(href_list["nano_err"]) //nano throwing errors
|
||||
world << "## NanoUI, Subject [src]: " + html_decode(href_list["nano_err"]) //NANO DEBUG HOOK
|
||||
|
||||
#endif
|
||||
|
||||
//search the href for script injection
|
||||
if( findtext(href,"<script",1,0) )
|
||||
@@ -69,21 +74,6 @@
|
||||
|
||||
..() //redirect to hsrc.Topic()
|
||||
|
||||
/client/proc/handle_spam_prevention(var/message, var/mute_type)
|
||||
if(config.automute_on && !holder && src.last_message == message)
|
||||
src.last_message_count++
|
||||
if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE)
|
||||
src << "\red You have exceeded the spam filter limit for identical messages. An auto-mute was applied."
|
||||
cmd_admin_mute(src.mob, mute_type, 1)
|
||||
return 1
|
||||
if(src.last_message_count >= SPAM_TRIGGER_WARNING)
|
||||
src << "\red You are nearing the spam filter limit for identical messages."
|
||||
return 0
|
||||
else
|
||||
last_message = message
|
||||
src.last_message_count = 0
|
||||
return 0
|
||||
|
||||
//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc.
|
||||
/client/AllowUpload(filename, filelength)
|
||||
if(filelength > UPLOAD_LIMIT)
|
||||
@@ -166,6 +156,11 @@
|
||||
send_resources()
|
||||
nanomanager.send_resources(src)
|
||||
|
||||
if(!void)
|
||||
void = new()
|
||||
void.MakeGreed()
|
||||
screen += void
|
||||
|
||||
if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates.
|
||||
src << "<span class='info'>You have unread updates in the changelog.</span>"
|
||||
winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold")
|
||||
|
||||
@@ -15,6 +15,10 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
|
||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.exploit_record = pref.exploit_record
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||
. +="<b>Uplink Type : <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a></b>"
|
||||
. +="<br>"
|
||||
|
||||
@@ -10,7 +10,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
||||
"alien candidate" = 1, //always show // 6
|
||||
"positronic brain" = 1, // 7
|
||||
"cultist" = IS_MODE_COMPILED("cult"), // 8
|
||||
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
||||
"renegade" = 1, // 9
|
||||
"ninja" = "true", // 10
|
||||
"raider" = IS_MODE_COMPILED("heist"), // 11
|
||||
"diona" = 1, // 12
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
datum/preferences
|
||||
var/biological_gender = MALE
|
||||
var/identifying_gender = MALE
|
||||
|
||||
datum/preferences/proc/set_biological_gender(var/gender)
|
||||
biological_gender = gender
|
||||
identifying_gender = gender
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic
|
||||
name = "Basic"
|
||||
sort_order = 1
|
||||
var/list/valid_player_genders = list(MALE, FEMALE, NEUTER, PLURAL)
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
||||
S["real_name"] >> pref.real_name
|
||||
S["name_is_always_random"] >> pref.be_random_name
|
||||
S["gender"] >> pref.gender
|
||||
S["gender"] >> pref.biological_gender
|
||||
S["id_gender"] >> pref.identifying_gender
|
||||
S["age"] >> pref.age
|
||||
S["spawnpoint"] >> pref.spawnpoint
|
||||
S["OOC_Notes"] >> pref.metadata
|
||||
@@ -14,35 +22,60 @@
|
||||
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
||||
S["real_name"] << pref.real_name
|
||||
S["name_is_always_random"] << pref.be_random_name
|
||||
S["gender"] << pref.gender
|
||||
S["gender"] << pref.biological_gender
|
||||
S["id_gender"] << pref.identifying_gender
|
||||
S["age"] << pref.age
|
||||
S["spawnpoint"] << pref.spawnpoint
|
||||
S["OOC_Notes"] << pref.metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
|
||||
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
||||
pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
|
||||
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
||||
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
if(!pref.real_name)
|
||||
pref.real_name = random_name(pref.gender, pref.species)
|
||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
if(config.humans_need_surnames)
|
||||
var/firstspace = findtext(pref.real_name, " ")
|
||||
var/name_length = length(pref.real_name)
|
||||
if(!firstspace) //we need a surname
|
||||
pref.real_name += " [pick(last_names)]"
|
||||
else if(firstspace == name_length)
|
||||
pref.real_name += "[pick(last_names)]"
|
||||
|
||||
character.real_name = pref.real_name
|
||||
character.name = character.real_name
|
||||
if(character.dna)
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
character.gender = pref.biological_gender
|
||||
character.identifying_gender = pref.identifying_gender
|
||||
character.age = pref.age
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/content()
|
||||
. = "<b>Name:</b> "
|
||||
. = list()
|
||||
. += "<b>Name:</b> "
|
||||
. += "<a href='?src=\ref[src];rename=1'><b>[pref.real_name]</b></a><br>"
|
||||
. += "(<a href='?src=\ref[src];random_name=1'>Random Name</A>) "
|
||||
. += "(<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a>)"
|
||||
. += "<a href='?src=\ref[src];random_name=1'>Randomize Name</A><br>"
|
||||
. += "<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a>"
|
||||
. += "<br>"
|
||||
. += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
|
||||
. += "<b>Biological Gender:</b> <a href='?src=\ref[src];bio_gender=1'><b>[gender2text(pref.biological_gender)]</b></a><br>"
|
||||
. += "<b>Gender Identity:</b> <a href='?src=\ref[src];id_gender=1'><b>[gender2text(pref.identifying_gender)]</b></a><br>"
|
||||
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
||||
. += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
||||
if(config.allow_Metadata)
|
||||
. += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
if(href_list["rename"])
|
||||
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
|
||||
if (!isnull(raw_name) && CanUseTopic(user))
|
||||
@@ -55,20 +88,27 @@
|
||||
return TOPIC_NOACTION
|
||||
|
||||
else if(href_list["random_name"])
|
||||
pref.real_name = random_name(pref.gender, pref.species)
|
||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["always_random_name"])
|
||||
pref.be_random_name = !pref.be_random_name
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["gender"])
|
||||
pref.gender = next_in_list(pref.gender, valid_player_genders)
|
||||
else if(href_list["bio_gender"])
|
||||
var/new_gender = input(user, "Choose your character's biological gender:", "Character Preference", pref.biological_gender) as null|anything in get_genders()
|
||||
if(new_gender && CanUseTopic(user))
|
||||
pref.set_biological_gender(new_gender)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["id_gender"])
|
||||
var/new_gender = input(user, "Choose your character's identifying gender:", "Character Preference", pref.identifying_gender) as null|anything in all_genders_define_list
|
||||
if(new_gender && CanUseTopic(user))
|
||||
pref.identifying_gender = new_gender
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["age"])
|
||||
if(!pref.species) pref.species = "Human"
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null
|
||||
if(new_age && CanUseTopic(user))
|
||||
pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
|
||||
@@ -76,8 +116,8 @@
|
||||
|
||||
else if(href_list["spawnpoint"])
|
||||
var/list/spawnkeys = list()
|
||||
for(var/S in spawntypes)
|
||||
spawnkeys += S
|
||||
for(var/spawntype in spawntypes)
|
||||
spawnkeys += spawntype
|
||||
var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys
|
||||
if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.spawnpoint = choice
|
||||
@@ -86,7 +126,16 @@
|
||||
else if(href_list["metadata"])
|
||||
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , pref.metadata)) as message|null
|
||||
if(new_metadata && CanUseTopic(user))
|
||||
pref.metadata = sanitize(new_metadata)
|
||||
pref.metadata = new_metadata
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
var/list/possible_genders = S.genders
|
||||
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
||||
return possible_genders
|
||||
possible_genders = possible_genders.Copy()
|
||||
possible_genders |= NEUTER
|
||||
return possible_genders
|
||||
@@ -1,5 +1,8 @@
|
||||
var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
|
||||
|
||||
/datum/preferences
|
||||
var/dress_mob = TRUE
|
||||
|
||||
/datum/category_item/player_setup_item/general/body
|
||||
name = "Body"
|
||||
sort_order = 3
|
||||
@@ -25,6 +28,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["disabilities"] >> pref.disabilities
|
||||
S["organ_data"] >> pref.organ_data
|
||||
S["rlimb_data"] >> pref.rlimb_data
|
||||
pref.preview_icon = null
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
|
||||
S["species"] << pref.species
|
||||
@@ -72,11 +76,58 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(!pref.organ_data) pref.organ_data = list()
|
||||
if(!pref.rlimb_data) pref.rlimb_data = list()
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
// Copy basic values
|
||||
character.r_eyes = pref.r_eyes
|
||||
character.g_eyes = pref.g_eyes
|
||||
character.b_eyes = pref.b_eyes
|
||||
character.h_style = pref.h_style
|
||||
character.r_hair = pref.r_hair
|
||||
character.g_hair = pref.g_hair
|
||||
character.b_hair = pref.b_hair
|
||||
character.f_style = pref.f_style
|
||||
character.r_facial = pref.r_facial
|
||||
character.g_facial = pref.g_facial
|
||||
character.b_facial = pref.b_facial
|
||||
character.r_skin = pref.r_skin
|
||||
character.g_skin = pref.g_skin
|
||||
character.b_skin = pref.b_skin
|
||||
character.s_tone = pref.s_tone
|
||||
character.h_style = pref.h_style
|
||||
character.f_style = pref.f_style
|
||||
character.b_type = pref.b_type
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/status = pref.organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
if(status == "amputated")
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(pref.rlimb_data[name])
|
||||
O.robotize(pref.rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
|
||||
var/status = pref.organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
|
||||
pref.update_preview_icon()
|
||||
if(pref.preview_icon_front && pref.preview_icon_side)
|
||||
user << browse_rsc(pref.preview_icon_front, "preview_icon.png")
|
||||
user << browse_rsc(pref.preview_icon_side, "preview_icon2.png")
|
||||
. = list()
|
||||
if(!pref.preview_icon)
|
||||
pref.update_preview_icon()
|
||||
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
||||
|
||||
var/mob_species = all_species[pref.species]
|
||||
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
||||
@@ -166,7 +217,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else
|
||||
. += "<br><br>"
|
||||
|
||||
. += "</td><td><b>Preview</b><br><img src=preview_icon.png height=64 width=64><img src=preview_icon2.png height=64 width=64>"
|
||||
. += "</td><td><b>Preview</b><br>"
|
||||
. += "<div class='statusDisplay'><center><img src=previewicon.png width=[pref.preview_icon.Width()] height=[pref.preview_icon.Height()]></center></div>"
|
||||
. += "<br><a href='?src=\ref[src];toggle_clothing=1'>[pref.dress_mob ? "Hide equipment" : "Show equipment"]</a>"
|
||||
|
||||
. += "</td></tr></table>"
|
||||
|
||||
. += "<b>Hair</b><br>"
|
||||
@@ -186,16 +240,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
. += "<br><b>Body Color</b><br>"
|
||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin)]'><tr><td>__</td></tr></table></font><br>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag)
|
||||
return mob_species && (mob_species.appearance_flags & flag)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
var/mob_species = all_species[pref.species]
|
||||
var/datum/species/mob_species = all_species[pref.species]
|
||||
|
||||
if(href_list["random"])
|
||||
pref.randomize_appearance_for()
|
||||
return TOPIC_REFRESH
|
||||
pref.randomize_appearance_and_body_for()
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["blood_type"])
|
||||
var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in valid_bloodtypes
|
||||
@@ -220,13 +275,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/prev_species = pref.species
|
||||
pref.species = href_list["set_species"]
|
||||
if(prev_species != pref.species)
|
||||
if(!(pref.biological_gender in mob_species.genders))
|
||||
pref.set_biological_gender(mob_species.genders[1])
|
||||
|
||||
|
||||
//grab one of the valid hair styles for the newly chosen species
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(pref.gender == MALE && S.gender == FEMALE)
|
||||
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(pref.gender == FEMALE && S.gender == MALE)
|
||||
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(pref.species in S.species_allowed))
|
||||
continue
|
||||
@@ -242,9 +301,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(pref.gender == MALE && S.gender == FEMALE)
|
||||
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(pref.gender == FEMALE && S.gender == MALE)
|
||||
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(pref.species in S.species_allowed))
|
||||
continue
|
||||
@@ -268,7 +327,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/datum/species/S = all_species[pref.species]
|
||||
pref.age = max(min(pref.age, S.max_age), S.min_age)
|
||||
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["hair_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
@@ -278,7 +337,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
pref.g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
pref.b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["hair_style"])
|
||||
var/list/valid_hairstyles = list()
|
||||
@@ -292,7 +351,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference", pref.h_style) as null|anything in valid_hairstyles
|
||||
if(new_h_style && CanUseTopic(user))
|
||||
pref.h_style = new_h_style
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["facial_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
@@ -302,7 +361,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_facial = hex2num(copytext(new_facial, 2, 4))
|
||||
pref.g_facial = hex2num(copytext(new_facial, 4, 6))
|
||||
pref.b_facial = hex2num(copytext(new_facial, 6, 8))
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["eye_color"])
|
||||
if(!has_flag(mob_species, HAS_EYE_COLOR))
|
||||
@@ -312,7 +371,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
||||
pref.g_eyes = hex2num(copytext(new_eyes, 4, 6))
|
||||
pref.b_eyes = hex2num(copytext(new_eyes, 6, 8))
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["skin_tone"])
|
||||
if(!has_flag(mob_species, HAS_SKIN_TONE))
|
||||
@@ -320,7 +379,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference", (-pref.s_tone) + 35) as num|null
|
||||
if(new_s_tone && has_flag(mob_species, HAS_SKIN_TONE) && CanUseTopic(user))
|
||||
pref.s_tone = 35 - max(min( round(new_s_tone), 220),1)
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["skin_color"])
|
||||
if(!has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
@@ -330,15 +389,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_skin = hex2num(copytext(new_skin, 2, 4))
|
||||
pref.g_skin = hex2num(copytext(new_skin, 4, 6))
|
||||
pref.b_skin = hex2num(copytext(new_skin, 6, 8))
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["facial_style"])
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(pref.gender == MALE && S.gender == FEMALE)
|
||||
if(pref.biological_gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(pref.gender == FEMALE && S.gender == MALE)
|
||||
if(pref.biological_gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(pref.species in S.species_allowed))
|
||||
continue
|
||||
@@ -348,11 +407,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference", pref.f_style) as null|anything in valid_facialhairstyles
|
||||
if(new_f_style && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.f_style = new_f_style
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["reset_limbs"])
|
||||
reset_limbs()
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["limbs"])
|
||||
|
||||
@@ -367,7 +426,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list
|
||||
|
||||
if(!organ_tag && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(!organ_tag || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
var/limb = null
|
||||
var/second_limb = null // if you try to change the arm, the hand should also change
|
||||
@@ -409,11 +468,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
choice_options = list("Normal","Prosthesis")
|
||||
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options
|
||||
if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
|
||||
if(limb == BP_TORSO)
|
||||
for(var/other_limb in BP_ALL - BP_TORSO)
|
||||
pref.organ_data[other_limb] = null
|
||||
@@ -438,6 +496,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/usable_manufacturers = list()
|
||||
for(var/company in chargen_robolimbs)
|
||||
var/datum/robolimb/M = chargen_robolimbs[company]
|
||||
if(!(limb in M.parts))
|
||||
continue
|
||||
if(tmp_species in M.species_cannot_use)
|
||||
continue
|
||||
usable_manufacturers[company] = M
|
||||
@@ -467,7 +527,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
for(var/internal_organ in list(O_HEART,O_EYES))
|
||||
pref.organ_data[internal_organ] = "mechanical"
|
||||
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["organs"])
|
||||
|
||||
@@ -505,7 +565,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
else if(href_list["disabilities"])
|
||||
var/disability_flag = text2num(href_list["disabilities"])
|
||||
pref.disabilities ^= disability_flag
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["toggle_clothing"])
|
||||
pref.dress_mob = !pref.dress_mob
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -536,9 +600,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
dat += "<img src='species_preview_[current_species.name].png' width='64px' height='64px'><br/><br/>"
|
||||
dat += "<b>Language:</b> [current_species.language]<br/>"
|
||||
dat += "<small>"
|
||||
if(current_species.spawn_flags & CAN_JOIN)
|
||||
if(current_species.spawn_flags & SPECIES_CAN_JOIN)
|
||||
dat += "</br><b>Often present on human stations.</b>"
|
||||
if(current_species.spawn_flags & IS_WHITELISTED)
|
||||
if(current_species.spawn_flags & SPECIES_IS_WHITELISTED)
|
||||
dat += "</br><b>Whitelist restricted.</b>"
|
||||
if(!current_species.has_organ[O_HEART])
|
||||
dat += "</br><b>Does not have a circulatory system.</b>"
|
||||
@@ -566,9 +630,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
var/restricted = 0
|
||||
if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it!
|
||||
if(!(current_species.spawn_flags & CAN_JOIN))
|
||||
if(!(current_species.spawn_flags & SPECIES_CAN_JOIN))
|
||||
restricted = 2
|
||||
else if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species))
|
||||
else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species))
|
||||
restricted = 1
|
||||
|
||||
if(restricted)
|
||||
|
||||
@@ -1,90 +1,143 @@
|
||||
/datum/preferences
|
||||
var/list/all_underwear
|
||||
var/list/all_underwear_metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment
|
||||
name = "Clothing"
|
||||
sort_order = 4
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
||||
S["underwear_top"] >> pref.underwear_top
|
||||
S["underwear_bottom"] >> pref.underwear_bottom
|
||||
S["undershirt"] >> pref.undershirt
|
||||
S["socks"] >> pref.socks
|
||||
S["all_underwear"] >> pref.all_underwear
|
||||
S["all_underwear_metadata"] >> pref.all_underwear_metadata
|
||||
S["backbag"] >> pref.backbag
|
||||
S["pdachoice"] >> pref.pdachoice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||
S["underwear_top"] << pref.underwear_top
|
||||
S["underwear_bottom"] << pref.underwear_bottom
|
||||
S["undershirt"] << pref.undershirt
|
||||
S["socks"] << pref.socks
|
||||
S["all_underwear"] << pref.all_underwear
|
||||
S["all_underwear_metadata"] << pref.all_underwear_metadata
|
||||
S["backbag"] << pref.backbag
|
||||
S["pdachoice"] << pref.pdachoice
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.all_underwear.Cut()
|
||||
character.all_underwear_metadata.Cut()
|
||||
|
||||
for(var/underwear_category_name in pref.all_underwear)
|
||||
var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name]
|
||||
if(underwear_category)
|
||||
var/underwear_item_name = pref.all_underwear[underwear_category_name]
|
||||
character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name]
|
||||
if(pref.all_underwear_metadata[underwear_category_name])
|
||||
character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name]
|
||||
else
|
||||
pref.all_underwear -= underwear_category_name
|
||||
|
||||
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
||||
if(pref.backbag > 4 || pref.backbag < 1)
|
||||
pref.backbag = 1 //Same as above
|
||||
character.backbag = pref.backbag
|
||||
|
||||
if(pref.pdachoice > 3 || pref.pdachoice < 1)
|
||||
pref.pdachoice = 1
|
||||
character.pdachoice = pref.pdachoice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
|
||||
if(!islist(pref.gear)) pref.gear = list()
|
||||
|
||||
if(!istype(pref.all_underwear))
|
||||
pref.all_underwear = list()
|
||||
|
||||
for(var/datum/category_group/underwear/WRC in global_underwear.categories)
|
||||
for(var/datum/category_item/underwear/WRI in WRC.items)
|
||||
if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE))
|
||||
pref.all_underwear[WRC.name] = WRI.name
|
||||
break
|
||||
|
||||
if(!istype(pref.all_underwear_metadata))
|
||||
pref.all_underwear_metadata = list()
|
||||
|
||||
for(var/underwear_category in pref.all_underwear)
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category]
|
||||
if(!UWC)
|
||||
pref.all_underwear -= underwear_category
|
||||
else
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]]
|
||||
if(!UWI)
|
||||
pref.all_underwear -= underwear_category
|
||||
|
||||
for(var/underwear_metadata in pref.all_underwear_metadata)
|
||||
if(!(underwear_metadata in pref.all_underwear))
|
||||
pref.all_underwear_metadata -= underwear_metadata
|
||||
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
|
||||
pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice))
|
||||
|
||||
if(!islist(pref.gear)) pref.gear = list()
|
||||
|
||||
var/undies_top = get_undies_top()
|
||||
var/undies_bottom = get_undies_bottom()
|
||||
if(!get_key_by_value(undies_top, pref.underwear_top))
|
||||
pref.underwear_top = undies_top[1]
|
||||
if(!get_key_by_value(undies_bottom, pref.underwear_bottom))
|
||||
pref.underwear_bottom = undies_bottom[1]
|
||||
if(!get_key_by_value(undershirt_t, pref.undershirt))
|
||||
pref.undershirt = undershirt_t[1]
|
||||
if(!get_key_by_value(socks_t, pref.socks))
|
||||
pref.socks = socks_t[1]
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/content()
|
||||
. = list()
|
||||
. += "<b>Equipment:</b><br>"
|
||||
. += "Underwear Top: <a href='?src=\ref[src];change_underwear_top=1'><b>[get_key_by_value(get_undies_top(),pref.underwear_top)]</b></a><br>"
|
||||
. += "Underwear Bottom: <a href='?src=\ref[src];change_underwear_bottom=1'><b>[get_key_by_value(get_undies_bottom(),pref.underwear_bottom)]</b></a><br>"
|
||||
. += "Undershirt: <a href='?src=\ref[src];change_undershirt=1'><b>[get_key_by_value(undershirt_t,pref.undershirt)]</b></a><br>"
|
||||
. += "Socks: <a href='?src=\ref[src];change_socks=1'><b>[get_key_by_value(socks_t,pref.socks)]</b></a><br>"
|
||||
for(var/datum/category_group/underwear/UWC in global_underwear.categories)
|
||||
var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None"
|
||||
. += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'><b>[item_name]</b></a>"
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
|
||||
if(UWI)
|
||||
for(var/datum/gear_tweak/gt in UWI.tweaks)
|
||||
. += " <a href='?src=\ref[src];underwear=[UWC.name];tweak=\ref[gt]'>[gt.get_contents(get_metadata(UWC.name, gt))]</a>"
|
||||
|
||||
. += "<br>"
|
||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_undies_top()
|
||||
return underwear_top_t
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_undies_bottom()
|
||||
return underwear_bottom_t
|
||||
return jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt)
|
||||
var/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
if(!metadata)
|
||||
metadata = list()
|
||||
pref.all_underwear_metadata[underwear_category] = metadata
|
||||
|
||||
var/tweak_data = metadata["[gt]"]
|
||||
if(!tweak_data)
|
||||
tweak_data = gt.get_default()
|
||||
metadata["[gt]"] = tweak_data
|
||||
return tweak_data
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
|
||||
var/list/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
metadata["[gt]"] = new_metadata
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["change_underwear_top"])
|
||||
var/underwear_top_options = get_undies_top()
|
||||
var/new_underwear_top = input(user, "Choose your character's top underwear:", "Character Preference", get_key_by_value(get_undies_top(),pref.underwear_top)) as null|anything in underwear_top_options
|
||||
if(!isnull(new_underwear_top) && CanUseTopic(user))
|
||||
pref.underwear_top = underwear_top_options[new_underwear_top]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_underwear_bottom"])
|
||||
var/underwear_bottom_options = get_undies_bottom()
|
||||
var/new_underwear_bottom = input(user, "Choose your character's bottom underwear:", "Character Preference", get_key_by_value(get_undies_bottom(),pref.underwear_bottom)) as null|anything in underwear_bottom_options
|
||||
if(!isnull(new_underwear_bottom) && CanUseTopic(user))
|
||||
pref.underwear_bottom = underwear_bottom_options[new_underwear_bottom]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_undershirt"])
|
||||
var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference", get_key_by_value(undershirt_t,pref.undershirt)) as null|anything in undershirt_t
|
||||
if(!isnull(new_undershirt) && CanUseTopic(user))
|
||||
pref.undershirt = undershirt_t[new_undershirt]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_socks"])
|
||||
var/new_socks = input(user, "Choose your character's socks:", "Character Preference", get_key_by_value(socks_t,pref.socks)) as null|anything in socks_t
|
||||
if(!isnull(new_socks) && CanUseTopic(user))
|
||||
pref.socks = socks_t[new_socks]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_backpack"])
|
||||
if(href_list["change_backpack"])
|
||||
var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference", backbaglist[pref.backbag]) as null|anything in backbaglist
|
||||
if(!isnull(new_backbag) && CanUseTopic(user))
|
||||
pref.backbag = backbaglist.Find(new_backbag)
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["change_pda"])
|
||||
var/new_pdachoice = input(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist[pref.pdachoice]) as null|anything in pdachoicelist
|
||||
if(!isnull(new_pdachoice) && CanUseTopic(user))
|
||||
pref.pdachoice = pdachoicelist.Find(new_pdachoice)
|
||||
return TOPIC_REFRESH
|
||||
return ..()
|
||||
|
||||
else if(href_list["change_underwear"])
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
|
||||
if(!UWC)
|
||||
return
|
||||
var/datum/category_item/underwear/selected_underwear = input(user, "Choose underwear:", "Character Preference", pref.all_underwear[UWC.name]) as null|anything in UWC.items
|
||||
if(selected_underwear && CanUseTopic(user))
|
||||
pref.all_underwear[UWC.name] = selected_underwear.name
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["underwear"] && href_list["tweak"])
|
||||
var/underwear = href_list["underwear"]
|
||||
if(!(underwear in pref.all_underwear))
|
||||
return TOPIC_NOACTION
|
||||
var/datum/gear_tweak/gt = locate(href_list["tweak"])
|
||||
if(!gt)
|
||||
return TOPIC_NOACTION
|
||||
var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt))
|
||||
if(new_metadata)
|
||||
set_metadata(underwear, gt, new_metadata)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
return ..()
|
||||
@@ -30,6 +30,16 @@
|
||||
|
||||
pref.nanotrasen_relation = sanitize_inlist(pref.nanotrasen_relation, COMPANY_ALIGNMENTS, initial(pref.nanotrasen_relation))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.med_record = pref.med_record
|
||||
character.sec_record = pref.sec_record
|
||||
character.gen_record = pref.gen_record
|
||||
character.home_system = pref.home_system
|
||||
character.citizenship = pref.citizenship
|
||||
character.personal_faction = pref.faction
|
||||
character.religion = pref.religion
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
||||
. += "<b>Background Information</b><br>"
|
||||
. += "[company_name] Relation: <a href='?src=\ref[src];nt_relation=1'>[pref.nanotrasen_relation]</a><br/>"
|
||||
|
||||
@@ -36,6 +36,18 @@
|
||||
/datum/category_item/player_setup_item/general/flavor/sanitize_character()
|
||||
return
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.flavor_texts["general"] = pref.flavor_texts["general"]
|
||||
character.flavor_texts["head"] = pref.flavor_texts["head"]
|
||||
character.flavor_texts["face"] = pref.flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = pref.flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = pref.flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = pref.flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = pref.flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = pref.flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = pref.flavor_texts["feet"]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||
. += "<b>Flavor:</b><br>"
|
||||
. += "<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>"
|
||||
|
||||
@@ -1,38 +1,130 @@
|
||||
/datum/preferences
|
||||
var/preferences_enabled = null
|
||||
var/preferences_disabled = null
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings
|
||||
name = "Settings"
|
||||
sort_order = 2
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S)
|
||||
S["lastchangelog"] >> pref.lastchangelog
|
||||
S["default_slot"] >> pref.default_slot
|
||||
S["toggles"] >> pref.toggles
|
||||
S["lastchangelog"] >> pref.lastchangelog
|
||||
S["default_slot"] >> pref.default_slot
|
||||
S["preferences"] >> pref.preferences_enabled
|
||||
S["preferences_disabled"] >> pref.preferences_disabled
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
|
||||
S["lastchangelog"] << pref.lastchangelog
|
||||
S["default_slot"] << pref.default_slot
|
||||
S["toggles"] << pref.toggles
|
||||
S["lastchangelog"] << pref.lastchangelog
|
||||
S["default_slot"] << pref.default_slot
|
||||
S["preferences"] << pref.preferences_enabled
|
||||
S["preferences_disabled"] << pref.preferences_disabled
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences()
|
||||
// Ensure our preferences are lists.
|
||||
if(!istype(pref.preferences_enabled, /list))
|
||||
pref.preferences_enabled = list()
|
||||
if(!istype(pref.preferences_disabled, /list))
|
||||
pref.preferences_disabled = list()
|
||||
|
||||
// Arrange preferences that have never been enabled/disabled.
|
||||
var/list/client_preference_keys = list()
|
||||
for(var/cp in get_client_preferences())
|
||||
var/datum/client_preference/client_pref = cp
|
||||
client_preference_keys += client_pref.key
|
||||
if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled))
|
||||
continue
|
||||
|
||||
if(client_pref.enabled_by_default)
|
||||
pref.preferences_enabled += client_pref.key
|
||||
else
|
||||
pref.preferences_disabled += client_pref.key
|
||||
|
||||
// Clean out preferences that no longer exist.
|
||||
for(var/key in pref.preferences_enabled)
|
||||
if(!(key in client_preference_keys))
|
||||
pref.preferences_enabled -= key
|
||||
for(var/key in pref.preferences_disabled)
|
||||
if(!(key in client_preference_keys))
|
||||
pref.preferences_disabled -= key
|
||||
|
||||
pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog))
|
||||
pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot))
|
||||
pref.toggles = sanitize_integer(pref.toggles, 0, 65535, initial(pref.toggles))
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/content(var/mob/user)
|
||||
. += "<b>Play admin midis:</b> <a href='?src=\ref[src];toggle=[SOUND_MIDI]'><b>[(pref.toggles & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
|
||||
. += "<b>Play lobby music:</b> <a href='?src=\ref[src];toggle=[SOUND_LOBBY]'><b>[(pref.toggles & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
|
||||
. += "<b>Ghost ears:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTEARS]'><b>[(pref.toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>"
|
||||
. += "<b>Ghost sight:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTSIGHT]'><b>[(pref.toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>"
|
||||
. += "<b>Ghost radio:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTRADIO]'><b>[(pref.toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>"
|
||||
. = list()
|
||||
. += "<b>Preferences</b><br>"
|
||||
. += "<table>"
|
||||
var/mob/pref_mob = preference_mob()
|
||||
for(var/cp in get_client_preferences())
|
||||
var/datum/client_preference/client_pref = cp
|
||||
if(!client_pref.may_toggle(pref_mob))
|
||||
continue
|
||||
|
||||
. += "<tr><td>[client_pref.description]: </td>"
|
||||
if(pref_mob.is_preference_enabled(client_pref.key))
|
||||
. += "<td><span class='linkOn'><b>[client_pref.enabled_description]</b></span></td> <td><a href='?src=\ref[src];toggle_off=[client_pref.key]'>[client_pref.disabled_description]</a></td>"
|
||||
else
|
||||
. += "<td><a href='?src=\ref[src];toggle_on=[client_pref.key]'>[client_pref.enabled_description]</a></td> <td><span class='linkOn'><b>[client_pref.disabled_description]</b></span></td>"
|
||||
. += "</tr>"
|
||||
|
||||
. += "</table>"
|
||||
return jointext(., "")
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["toggle"])
|
||||
var/toggle_flag = text2num(href_list["toggle"])
|
||||
pref.toggles ^= toggle_flag
|
||||
if(toggle_flag == SOUND_LOBBY && isnewplayer(user))
|
||||
if(pref.toggles & SOUND_LOBBY)
|
||||
user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
else
|
||||
user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
var/mob/pref_mob = preference_mob()
|
||||
if(href_list["toggle_on"])
|
||||
. = pref_mob.set_preference(href_list["toggle_on"], TRUE)
|
||||
else if(href_list["toggle_off"])
|
||||
. = pref_mob.set_preference(href_list["toggle_off"], FALSE)
|
||||
if(.)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
/client/proc/is_preference_enabled(var/preference)
|
||||
var/datum/client_preference/cp = get_client_preference(preference)
|
||||
return cp && (cp.key in prefs.preferences_enabled)
|
||||
|
||||
/client/proc/set_preference(var/preference, var/set_preference)
|
||||
var/datum/client_preference/cp = get_client_preference(preference)
|
||||
if(!cp)
|
||||
return FALSE
|
||||
preference = cp.key
|
||||
|
||||
if(set_preference && !(preference in prefs.preferences_enabled))
|
||||
return toggle_preference(cp)
|
||||
else if(!set_preference && (preference in prefs.preferences_enabled))
|
||||
return toggle_preference(cp)
|
||||
|
||||
/client/proc/toggle_preference(var/preference, var/set_preference)
|
||||
var/datum/client_preference/cp = get_client_preference(preference)
|
||||
if(!cp)
|
||||
return FALSE
|
||||
preference = cp.key
|
||||
|
||||
var/enabled
|
||||
if(preference in prefs.preferences_disabled)
|
||||
prefs.preferences_enabled |= preference
|
||||
prefs.preferences_disabled -= preference
|
||||
enabled = TRUE
|
||||
. = TRUE
|
||||
else if(preference in prefs.preferences_enabled)
|
||||
prefs.preferences_enabled -= preference
|
||||
prefs.preferences_disabled |= preference
|
||||
enabled = FALSE
|
||||
. = TRUE
|
||||
if(.)
|
||||
cp.toggled(mob, enabled)
|
||||
|
||||
/mob/proc/is_preference_enabled(var/preference)
|
||||
if(!client)
|
||||
return FALSE
|
||||
return client.is_preference_enabled(preference)
|
||||
|
||||
/mob/proc/set_preference(var/preference, var/set_preference)
|
||||
if(!client)
|
||||
return FALSE
|
||||
if(!client.prefs)
|
||||
log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.")
|
||||
return FALSE
|
||||
|
||||
return client.set_preference(preference, set_preference)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/datum/category_item/player_setup_item/player_global/ooc
|
||||
name = "OOC"
|
||||
sort_order = 5
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/load_preferences(var/savefile/S)
|
||||
S["ignored_players"] >> pref.ignored_players
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/save_preferences(var/savefile/S)
|
||||
S["ignored_players"] << pref.ignored_players
|
||||
|
||||
/*
|
||||
/datum/category_item/player_setup_item/player_global/ooc/sanitize_preferences()
|
||||
if(isnull(pref.ignored_players))
|
||||
pref.ignored_players = list()
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/content(var/mob/user)
|
||||
. += "<b>OOC:</b><br>"
|
||||
. += "Ignored Players<br>"
|
||||
for(var/ignored_player in pref.ignored_players)
|
||||
. += "[ignored_player] (<a href='?src=\ref[src];unignore_player=[ignored_player]'>Unignore</a>)<br>"
|
||||
. += "(<a href='?src=\ref[src];ignore_player=1'>Ignore Player</a>)"
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ooc/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["unignore_player"])
|
||||
if(CanUseTopic(user))
|
||||
pref.ignored_players -= href_list["unignore_player"]
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["ignore_player"])
|
||||
if(CanUseTopic(user))
|
||||
var/player_to_ignore = input(user, "Who do you want to ignore?","Ignore") as null|text
|
||||
if(player_to_ignore)
|
||||
player_to_ignore = sanitize(ckey(player_to_ignore))
|
||||
if(player_to_ignore == user.ckey)
|
||||
user <<"<span class='notice'>You can't ignore yourself.</span>"
|
||||
return TOPIC_REFRESH
|
||||
pref.ignored_players |= player_to_ignore
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
*/
|
||||
@@ -0,0 +1,198 @@
|
||||
var/list/_client_preferences
|
||||
var/list/_client_preferences_by_key
|
||||
var/list/_client_preferences_by_type
|
||||
|
||||
/proc/get_client_preferences()
|
||||
if(!_client_preferences)
|
||||
_client_preferences = list()
|
||||
for(var/ct in subtypesof(/datum/client_preference))
|
||||
var/datum/client_preference/client_type = ct
|
||||
if(initial(client_type.description))
|
||||
_client_preferences += new client_type()
|
||||
return _client_preferences
|
||||
|
||||
/proc/get_client_preference(var/datum/client_preference/preference)
|
||||
if(istype(preference))
|
||||
return preference
|
||||
if(ispath(preference))
|
||||
return get_client_preference_by_type(preference)
|
||||
return get_client_preference_by_key(preference)
|
||||
|
||||
/proc/get_client_preference_by_key(var/preference)
|
||||
if(!_client_preferences_by_key)
|
||||
_client_preferences_by_key = list()
|
||||
for(var/ct in get_client_preferences())
|
||||
var/datum/client_preference/client_pref = ct
|
||||
_client_preferences_by_key[client_pref.key] = client_pref
|
||||
return _client_preferences_by_key[preference]
|
||||
|
||||
/proc/get_client_preference_by_type(var/preference)
|
||||
if(!_client_preferences_by_type)
|
||||
_client_preferences_by_type = list()
|
||||
for(var/ct in get_client_preferences())
|
||||
var/datum/client_preference/client_pref = ct
|
||||
_client_preferences_by_type[client_pref.type] = client_pref
|
||||
return _client_preferences_by_type[preference]
|
||||
|
||||
/datum/client_preference
|
||||
var/description
|
||||
var/key
|
||||
var/enabled_by_default = TRUE
|
||||
var/enabled_description = "Yes"
|
||||
var/disabled_description = "No"
|
||||
|
||||
/datum/client_preference/proc/may_toggle(var/mob/preference_mob)
|
||||
return TRUE
|
||||
|
||||
/datum/client_preference/proc/toggled(var/mob/preference_mob, var/enabled)
|
||||
return
|
||||
|
||||
/*********************
|
||||
* Player Preferences *
|
||||
*********************/
|
||||
|
||||
/datum/client_preference/play_admin_midis
|
||||
description ="Play admin midis"
|
||||
key = "SOUND_MIDI"
|
||||
|
||||
/datum/client_preference/play_lobby_music
|
||||
description ="Play lobby music"
|
||||
key = "SOUND_LOBBY"
|
||||
|
||||
/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled)
|
||||
if(enabled)
|
||||
preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
else
|
||||
preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
|
||||
/datum/client_preference/play_ambiance
|
||||
description ="Play ambience"
|
||||
key = "SOUND_AMBIENCE"
|
||||
|
||||
/datum/client_preference/play_ambiance/toggled(var/mob/preference_mob, var/enabled)
|
||||
if(!enabled)
|
||||
preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
|
||||
preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
|
||||
|
||||
/datum/client_preference/ghost_ears
|
||||
description ="Ghost ears"
|
||||
key = "CHAT_GHOSTEARS"
|
||||
enabled_description = "All Speech"
|
||||
disabled_description = "Nearby"
|
||||
|
||||
/datum/client_preference/ghost_sight
|
||||
description ="Ghost sight"
|
||||
key = "CHAT_GHOSTSIGHT"
|
||||
enabled_description = "All Emotes"
|
||||
disabled_description = "Nearby"
|
||||
|
||||
/datum/client_preference/ghost_radio
|
||||
description ="Ghost radio"
|
||||
key = "CHAT_GHOSTRADIO"
|
||||
enabled_description = "All Chatter"
|
||||
disabled_description = "Nearby"
|
||||
|
||||
/datum/client_preference/chat_tags
|
||||
description ="Chat tags"
|
||||
key = "CHAT_SHOWICONS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/show_typing_indicator
|
||||
description ="Typing indicator"
|
||||
key = "SHOW_TYPING"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled)
|
||||
if(!enabled)
|
||||
preference_mob.set_typing_indicator(0)
|
||||
|
||||
/datum/client_preference/show_ooc
|
||||
description ="OOC chat"
|
||||
key = "CHAT_OOC"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/show_looc
|
||||
description ="LOOC chat"
|
||||
key = "CHAT_LOOC"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/show_dsay
|
||||
description ="Dead chat"
|
||||
key = "CHAT_DEAD"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/show_progress_bar
|
||||
description ="Progress Bar"
|
||||
key = "SHOW_PROGRESS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/safefiring
|
||||
description = "Gun Firing Intent Requirement"
|
||||
key = "SAFE_FIRING"
|
||||
enabled_description = "Safe"
|
||||
disabled_description = "Dangerous"
|
||||
|
||||
/datum/client_preference/browser_style
|
||||
description = "Fake NanoUI Browser Style"
|
||||
key = "BROWSER_STYLED"
|
||||
enabled_description = "Fancy"
|
||||
disabled_description = "Plain"
|
||||
|
||||
/********************
|
||||
* Staff Preferences *
|
||||
********************/
|
||||
/datum/client_preference/admin/may_toggle(var/mob/preference_mob)
|
||||
return check_rights(R_ADMIN, 0, preference_mob)
|
||||
|
||||
/datum/client_preference/mod/may_toggle(var/mob/preference_mob)
|
||||
return check_rights(R_MOD|R_ADMIN, 0, preference_mob)
|
||||
|
||||
/datum/client_preference/debug/may_toggle(var/mob/preference_mob)
|
||||
return check_rights(R_DEBUG|R_ADMIN, 0, preference_mob)
|
||||
|
||||
/datum/client_preference/mod/show_attack_logs
|
||||
description = "Attack Log Messages"
|
||||
key = "CHAT_ATTACKLOGS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
enabled_by_default = FALSE
|
||||
|
||||
/datum/client_preference/debug/show_debug_logs
|
||||
description = "Debug Log Messages"
|
||||
key = "CHAT_DEBUGLOGS"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
enabled_by_default = FALSE
|
||||
|
||||
/datum/client_preference/admin/show_chat_prayers
|
||||
description = "Chat Prayers"
|
||||
key = "CHAT_PRAYER"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/holder/may_toggle(var/mob/preference_mob)
|
||||
return preference_mob && preference_mob.client && preference_mob.client.holder
|
||||
|
||||
/datum/client_preference/holder/play_adminhelp_ping
|
||||
description = "Adminhelps"
|
||||
key = "SOUND_ADMINHELP"
|
||||
enabled_description = "Hear"
|
||||
disabled_description = "Silent"
|
||||
|
||||
/datum/client_preference/holder/hear_radio
|
||||
description = "Radio chatter"
|
||||
key = "CHAT_RADIO"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/holder/show_rlooc
|
||||
description ="Remote LOOC chat"
|
||||
key = "CHAT_RLOOC"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
@@ -0,0 +1,142 @@
|
||||
/datum/gear_tweak/proc/get_contents(var/metadata)
|
||||
return
|
||||
|
||||
/datum/gear_tweak/proc/get_metadata(var/user, var/metadata)
|
||||
return
|
||||
|
||||
/datum/gear_tweak/proc/get_default()
|
||||
return
|
||||
|
||||
/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data)
|
||||
return
|
||||
|
||||
/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata)
|
||||
return
|
||||
|
||||
/*
|
||||
* Color adjustment
|
||||
*/
|
||||
|
||||
/datum/gear_tweak/color
|
||||
var/list/valid_colors
|
||||
|
||||
/datum/gear_tweak/color/New(var/list/valid_colors)
|
||||
src.valid_colors = valid_colors
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/color/get_contents(var/metadata)
|
||||
return "Color: <font color='[metadata]'>⚫</font>"
|
||||
|
||||
/datum/gear_tweak/color/get_default()
|
||||
return valid_colors ? valid_colors[1] : COLOR_GRAY
|
||||
|
||||
/datum/gear_tweak/color/get_metadata(var/user, var/metadata, var/title = "Character Preference")
|
||||
if(valid_colors)
|
||||
return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors
|
||||
return input(user, "Choose a color.", title, metadata) as color|null
|
||||
|
||||
/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
|
||||
if(valid_colors && !(metadata in valid_colors))
|
||||
return
|
||||
I.color = metadata
|
||||
|
||||
/*
|
||||
* Path adjustment
|
||||
*/
|
||||
|
||||
/datum/gear_tweak/path
|
||||
var/list/valid_paths
|
||||
|
||||
/datum/gear_tweak/path/New(var/list/valid_paths)
|
||||
src.valid_paths = valid_paths
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/path/get_contents(var/metadata)
|
||||
return "Type: [metadata]"
|
||||
|
||||
/datum/gear_tweak/path/get_default()
|
||||
return valid_paths[1]
|
||||
|
||||
/datum/gear_tweak/path/get_metadata(var/user, var/metadata)
|
||||
return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths
|
||||
|
||||
/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data)
|
||||
if(!(metadata in valid_paths))
|
||||
return
|
||||
gear_data.path = valid_paths[metadata]
|
||||
|
||||
/*
|
||||
* Content adjustment
|
||||
*/
|
||||
|
||||
/datum/gear_tweak/contents
|
||||
var/list/valid_contents
|
||||
|
||||
/datum/gear_tweak/contents/New()
|
||||
valid_contents = args.Copy()
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/contents/get_contents(var/metadata)
|
||||
return "Contents: [english_list(metadata, and_text = ", ")]"
|
||||
|
||||
/datum/gear_tweak/contents/get_default()
|
||||
. = list()
|
||||
for(var/i = 1 to valid_contents.len)
|
||||
. += "Random"
|
||||
|
||||
/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata)
|
||||
. = list()
|
||||
for(var/i = metadata.len to valid_contents.len)
|
||||
metadata += "Random"
|
||||
for(var/i = 1 to valid_contents.len)
|
||||
var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None"))
|
||||
if(entry)
|
||||
. += entry
|
||||
else
|
||||
return metadata
|
||||
|
||||
/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata)
|
||||
if(metadata.len != valid_contents.len)
|
||||
return
|
||||
for(var/i = 1 to valid_contents.len)
|
||||
var/path
|
||||
var/list/contents = valid_contents[i]
|
||||
if(metadata[i] == "Random")
|
||||
path = pick(contents)
|
||||
path = contents[path]
|
||||
else if(metadata[i] == "None")
|
||||
continue
|
||||
else
|
||||
path = contents[metadata[i]]
|
||||
new path(I)
|
||||
|
||||
/*
|
||||
* Ragent adjustment
|
||||
*/
|
||||
|
||||
/datum/gear_tweak/reagents
|
||||
var/list/valid_reagents
|
||||
|
||||
/datum/gear_tweak/reagents/New(var/list/reagents)
|
||||
valid_reagents = reagents.Copy()
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/reagents/get_contents(var/metadata)
|
||||
return "Reagents: [metadata]"
|
||||
|
||||
/datum/gear_tweak/reagents/get_default()
|
||||
return "Random"
|
||||
|
||||
/datum/gear_tweak/reagents/get_metadata(var/user, var/list/metadata)
|
||||
. = input(user, "Choose an entry.", "Character Preference", metadata) as null|anything in (valid_reagents + list("Random", "None"))
|
||||
if(!.)
|
||||
return metadata
|
||||
|
||||
/datum/gear_tweak/reagents/tweak_item(var/obj/item/I, var/list/metadata)
|
||||
if(metadata == "None")
|
||||
return
|
||||
if(metadata == "Random")
|
||||
. = valid_reagents[pick(valid_reagents)]
|
||||
else
|
||||
. = valid_reagents[metadata]
|
||||
I.reagents.add_reagent(., I.reagents.get_free_space())
|
||||
@@ -63,6 +63,8 @@ var/list/gear_datums = list()
|
||||
return valid_gear_choices
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/sanitize_character()
|
||||
if(!islist(pref.gear))
|
||||
pref.gear = list()
|
||||
|
||||
for(var/gear_name in pref.gear)
|
||||
if(!(gear_name in gear_datums))
|
||||
@@ -82,6 +84,7 @@ var/list/gear_datums = list()
|
||||
total_cost += G.cost
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/content()
|
||||
. = list()
|
||||
var/total_cost = 0
|
||||
if(pref.gear && pref.gear.len)
|
||||
for(var/i = 1; i <= pref.gear.len; i++)
|
||||
@@ -92,7 +95,8 @@ var/list/gear_datums = list()
|
||||
var/fcolor = "#3366CC"
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
fcolor = "#E67300"
|
||||
. += "<table align = 'center' width = 500px>"
|
||||
|
||||
. += "<table align = 'center' width = 100%>"
|
||||
. += "<tr><td colspan=3><center><b><font color = '[fcolor]'>[total_cost]/[MAX_GEAR_COST]</font> loadout points spent.</b> \[<a href='?src=\ref[src];clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
|
||||
|
||||
. += "<tr><td colspan=3><center><b>"
|
||||
@@ -103,16 +107,21 @@ var/list/gear_datums = list()
|
||||
firstcat = 0
|
||||
else
|
||||
. += " |"
|
||||
|
||||
var/datum/loadout_category/LC = loadout_categories[category]
|
||||
var/category_cost = 0
|
||||
for(var/gear in LC.gear)
|
||||
if(gear in pref.gear)
|
||||
var/datum/gear/G = LC.gear[gear]
|
||||
category_cost += G.cost
|
||||
|
||||
if(category == current_tab)
|
||||
. += " [category] "
|
||||
. += " <span class='linkOn'>[category] - [category_cost]</span> "
|
||||
else
|
||||
var/datum/loadout_category/LC = loadout_categories[category]
|
||||
var/tcolor = "#3366CC"
|
||||
for(var/thing in LC.gear)
|
||||
if(thing in pref.gear)
|
||||
tcolor = "#E67300"
|
||||
break
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'><font color = '[tcolor]'>[category]</font></a> "
|
||||
if(category_cost)
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'><font color = '#E67300'>[category] - [category_cost]</font></a> "
|
||||
else
|
||||
. += " <a href='?src=\ref[src];select_category=[category]'>[category] - 0</a> "
|
||||
. += "</b></center></td></tr>"
|
||||
|
||||
var/datum/loadout_category/LC = loadout_categories[current_tab]
|
||||
@@ -122,11 +131,33 @@ var/list/gear_datums = list()
|
||||
for(var/gear_name in LC.gear)
|
||||
var/datum/gear/G = LC.gear[gear_name]
|
||||
var/ticked = (G.display_name in pref.gear)
|
||||
var/obj/item/temp = G.path
|
||||
. += "<tr><td width=25%><a href='?src=\ref[src];toggle_gear=[G.display_name]'><font color='[ticked ? "#E67300" : "#3366CC"]'>[G.display_name]</font></a></td>"
|
||||
. += "<td width = 10%>[G.cost]</td>"
|
||||
. += "<td><font size=2><i>[initial(temp.desc)]</i></font></td></tr>"
|
||||
. += "<tr style='vertical-align:top;'><td width=25%><a style='white-space:normal;' [ticked ? "class='linkOn' " : ""]href='?src=\ref[src];toggle_gear=[html_encode(G.display_name)]'>[G.display_name]</a></td>"
|
||||
. += "<td width = 10% style='vertical-align:top'>[G.cost]</td>"
|
||||
. += "<td><font size=2><i>[G.description]</i></font></td></tr>"
|
||||
if(ticked)
|
||||
. += "<tr><td colspan=3>"
|
||||
for(var/datum/gear_tweak/tweak in G.gear_tweaks)
|
||||
. += " <a href='?src=\ref[src];gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
|
||||
. += "</td></tr>"
|
||||
. += "</table>"
|
||||
. = jointext(., null)
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G)
|
||||
. = pref.gear[G.display_name]
|
||||
if(!.)
|
||||
. = list()
|
||||
pref.gear[G.display_name] = .
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak)
|
||||
var/list/metadata = get_gear_metadata(G)
|
||||
. = metadata["[tweak]"]
|
||||
if(!.)
|
||||
. = tweak.get_default()
|
||||
metadata["[tweak]"] = .
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata)
|
||||
var/list/metadata = get_gear_metadata(G)
|
||||
metadata["[tweak]"] = new_metadata
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user)
|
||||
if(href_list["toggle_gear"])
|
||||
@@ -140,22 +171,55 @@ var/list/gear_datums = list()
|
||||
if(istype(G)) total_cost += G.cost
|
||||
if((total_cost+TG.cost) <= MAX_GEAR_COST)
|
||||
pref.gear += TG.display_name
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
if(href_list["gear"] && href_list["tweak"])
|
||||
var/datum/gear/gear = gear_datums[href_list["gear"]]
|
||||
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
|
||||
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
|
||||
return TOPIC_NOACTION
|
||||
var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak))
|
||||
if(!metadata || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
set_tweak_metadata(gear, tweak, metadata)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
else if(href_list["select_category"])
|
||||
current_tab = href_list["select_category"]
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["clear_loadout"])
|
||||
pref.gear.Cut()
|
||||
return TOPIC_REFRESH
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
return ..()
|
||||
|
||||
/datum/gear
|
||||
var/display_name //Name/index. Must be unique.
|
||||
var/description //Description of this gear. If left blank will default to the description of the pathed item.
|
||||
var/path //Path to item.
|
||||
var/cost = 1 //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..
|
||||
var/sort_category = "General"
|
||||
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
|
||||
|
||||
/datum/gear/New()
|
||||
..()
|
||||
if(!description)
|
||||
var/obj/O = path
|
||||
description = initial(O.desc)
|
||||
|
||||
/datum/gear_data
|
||||
var/path
|
||||
var/location
|
||||
|
||||
/datum/gear_data/New(var/path, var/location)
|
||||
src.path = path
|
||||
src.location = location
|
||||
|
||||
/datum/gear/proc/spawn_item(var/location, var/metadata)
|
||||
var/datum/gear_data/gd = new(path, location)
|
||||
for(var/datum/gear_tweak/gt in gear_tweaks)
|
||||
gt.tweak_gear_data(metadata["[gt]"], gd)
|
||||
var/item = new gd.path(gd.location)
|
||||
for(var/datum/gear_tweak/gt in gear_tweaks)
|
||||
gt.tweak_item(item, metadata["[gt]"])
|
||||
return item
|
||||
|
||||
@@ -28,6 +28,14 @@
|
||||
display_name = "armband, science"
|
||||
path = /obj/item/clothing/accessory/armband/science
|
||||
|
||||
/datum/gear/accessory/wallet
|
||||
display_name = "wallet, orange"
|
||||
path = /obj/item/weapon/storage/wallet/random
|
||||
|
||||
/datum/gear/accessory/wallet_poly
|
||||
display_name = "wallet, polychromic"
|
||||
path = /obj/item/weapon/storage/wallet/poly
|
||||
|
||||
/datum/gear/accessory/holster
|
||||
display_name = "holster, armpit"
|
||||
path = /obj/item/clothing/accessory/holster/armpit
|
||||
@@ -49,10 +57,34 @@
|
||||
display_name = "tie, blue"
|
||||
path = /obj/item/clothing/accessory/blue
|
||||
|
||||
/datum/gear/accessory/tie/blue_clip
|
||||
display_name = "tie, blue with clip"
|
||||
path = /obj/item/clothing/accessory/blue_clip
|
||||
|
||||
/datum/gear/accessory/tie/blue_long
|
||||
display_name = "tie, blue long"
|
||||
path = /obj/item/clothing/accessory/blue_long
|
||||
|
||||
/datum/gear/accessory/tie/red
|
||||
display_name = "tie, red"
|
||||
path = /obj/item/clothing/accessory/red
|
||||
|
||||
/datum/gear/accessory/tie/red_clip
|
||||
display_name = "tie, red with clip"
|
||||
path = /obj/item/clothing/accessory/red_clip
|
||||
|
||||
/datum/gear/accessory/tie/red_long
|
||||
display_name = "tie, red long"
|
||||
path = /obj/item/clothing/accessory/red_long
|
||||
|
||||
/datum/gear/accessory/tie/yellow
|
||||
display_name = "tie, yellow"
|
||||
path = /obj/item/clothing/accessory/yellow
|
||||
|
||||
/datum/gear/accessory/tie/navy
|
||||
display_name = "tie, navy blue"
|
||||
path = /obj/item/clothing/accessory/navy
|
||||
|
||||
/datum/gear/accessory/tie/horrible
|
||||
display_name = "tie, socially disgraceful"
|
||||
path = /obj/item/clothing/accessory/horrible
|
||||
@@ -117,15 +149,59 @@
|
||||
display_name = "scarf, striped blue"
|
||||
path = /obj/item/clothing/accessory/stripedbluescarf
|
||||
|
||||
/datum/gear/accessory/suitjacket
|
||||
display_name = "suit jacket, tan"
|
||||
path = /obj/item/clothing/accessory/tan_jacket
|
||||
|
||||
/datum/gear/accessory/suitjacket/charcoal
|
||||
display_name = "suit jacket, charcoal"
|
||||
path = /obj/item/clothing/accessory/charcoal_jacket
|
||||
|
||||
/datum/gear/accessory/suitjacket/navy
|
||||
display_name = "suit jacket, navy blue"
|
||||
path = /obj/item/clothing/accessory/navy_jacket
|
||||
|
||||
/datum/gear/accessory/suitjacket/burgundy
|
||||
display_name = "suit jacket, burgundy"
|
||||
path = /obj/item/clothing/accessory/burgundy_jacket
|
||||
|
||||
/datum/gear/accessory/suitjacket/checkered
|
||||
display_name = "suit jacket, checkered"
|
||||
path = /obj/item/clothing/accessory/checkered_jacket
|
||||
|
||||
/datum/gear/accessory/suitvest
|
||||
display_name = "suit vest"
|
||||
path = /obj/item/clothing/accessory/vest
|
||||
|
||||
/datum/gear/accessory/brown_vest
|
||||
display_name = "webbing, engineering"
|
||||
path = /obj/item/clothing/accessory/storage/brown_vest
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/black_vest
|
||||
display_name = "webbing, security"
|
||||
path = /obj/item/clothing/accessory/storage/black_vest
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/white_vest
|
||||
display_name = "webbing, medical"
|
||||
path = /obj/item/clothing/accessory/storage/white_vest
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/brown_drop_pouches
|
||||
display_name = "drop pouches, engineering"
|
||||
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/black_drop_pouches
|
||||
display_name = "drop pouches, security"
|
||||
path = /obj/item/clothing/accessory/storage/black_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/white_drop_pouches
|
||||
display_name = "drop pouches, medical"
|
||||
path = /obj/item/clothing/accessory/storage/white_drop_pouches
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/accessory/webbing
|
||||
display_name = "webbing, simple"
|
||||
|
||||
@@ -30,10 +30,52 @@
|
||||
display_name = "flask"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
|
||||
|
||||
/datum/gear/flask/New()
|
||||
..()
|
||||
gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents())
|
||||
|
||||
/datum/gear/vacflask
|
||||
display_name = "vacuum-flask"
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
|
||||
|
||||
/datum/gear/vacflask/New()
|
||||
..()
|
||||
gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents())
|
||||
|
||||
/datum/gear/comb
|
||||
display_name = "purple comb"
|
||||
path = /obj/item/weapon/haircomb
|
||||
path = /obj/item/weapon/haircomb
|
||||
|
||||
/datum/gear/lunchbox
|
||||
display_name = "lunchbox"
|
||||
description = "A little lunchbox."
|
||||
cost = 2
|
||||
path = /obj/item/weapon/storage/toolbox/lunchbox
|
||||
|
||||
/datum/gear/lunchbox/New()
|
||||
..()
|
||||
var/list/lunchboxes = list()
|
||||
for(var/lunchbox_type in typesof(/obj/item/weapon/storage/toolbox/lunchbox))
|
||||
var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type
|
||||
if(!initial(lunchbox.filled))
|
||||
lunchboxes[initial(lunchbox.name)] = lunchbox_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes))
|
||||
gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())
|
||||
|
||||
/datum/gear/towel
|
||||
display_name = "towel"
|
||||
path = /obj/item/weapon/towel
|
||||
|
||||
/datum/gear/towel/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/cahwhite
|
||||
display_name = "Cards Against The Galaxy (white deck)"
|
||||
path = /obj/item/weapon/deck/cah
|
||||
description = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the white deck."
|
||||
|
||||
/datum/gear/cahblack
|
||||
display_name = "Cards Against The Galaxy (black deck)"
|
||||
path = /obj/item/weapon/deck/cah/black
|
||||
description = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the black deck."
|
||||
|
||||
@@ -187,253 +187,25 @@
|
||||
whitelisted = "Tajara"
|
||||
|
||||
/datum/gear/head/hijab
|
||||
display_name = "hijab, black"
|
||||
display_name = "hijab"
|
||||
path = /obj/item/clothing/head/hijab
|
||||
|
||||
/datum/gear/head/hijab/white
|
||||
display_name = "hijab, white"
|
||||
path = /obj/item/clothing/head/hijab/white
|
||||
|
||||
/datum/gear/head/hijab/aqua
|
||||
display_name = "hijab, aqua"
|
||||
path = /obj/item/clothing/head/hijab/aqua
|
||||
|
||||
/datum/gear/head/hijab/blue
|
||||
display_name = "hijab, blue"
|
||||
path = /obj/item/clothing/head/hijab/blue
|
||||
|
||||
/datum/gear/head/hijab/brown
|
||||
display_name = "hijab, brown"
|
||||
path = /obj/item/clothing/head/hijab/brown
|
||||
|
||||
/datum/gear/head/hijab/darkblue
|
||||
display_name = "hijab, dark blue"
|
||||
path = /obj/item/clothing/head/hijab/darkblue
|
||||
|
||||
/datum/gear/head/hijab/darkred
|
||||
display_name = "hijab, dark red"
|
||||
path = /obj/item/clothing/head/hijab/darkred
|
||||
|
||||
/datum/gear/head/hijab/green
|
||||
display_name = "hijab, green"
|
||||
path = /obj/item/clothing/head/hijab/green
|
||||
|
||||
/datum/gear/head/hijab/grey
|
||||
display_name = "hijab, grey"
|
||||
path = /obj/item/clothing/head/hijab/grey
|
||||
|
||||
/datum/gear/head/hijab/lightblue
|
||||
display_name = "hijab, light blue"
|
||||
path = /obj/item/clothing/head/hijab/lightblue
|
||||
|
||||
/datum/gear/head/hijab/lightbrown
|
||||
display_name = "hijab, light brown"
|
||||
path = /obj/item/clothing/head/hijab/lightbrown
|
||||
|
||||
/datum/gear/head/hijab/lightgreen
|
||||
display_name = "hijab, light green"
|
||||
path = /obj/item/clothing/head/hijab/lightgreen
|
||||
|
||||
/datum/gear/head/hijab/lightpurple
|
||||
display_name = "hijab, light purple"
|
||||
path = /obj/item/clothing/head/hijab/lightpurple
|
||||
|
||||
/datum/gear/head/hijab/lightred
|
||||
display_name = "hijab, light red"
|
||||
path = /obj/item/clothing/head/hijab/lightred
|
||||
|
||||
/datum/gear/head/hijab/maroon
|
||||
display_name = "hijab, maroon"
|
||||
path = /obj/item/clothing/head/hijab/maroon
|
||||
|
||||
/datum/gear/head/hijab/orange
|
||||
display_name = "hijab, orange"
|
||||
path = /obj/item/clothing/head/hijab/orange
|
||||
|
||||
/datum/gear/head/hijab/pink
|
||||
display_name = "hijab, pink"
|
||||
path = /obj/item/clothing/head/hijab/pink
|
||||
|
||||
/datum/gear/head/hijab/purple
|
||||
display_name = "hijab, purple"
|
||||
path = /obj/item/clothing/head/hijab/purple
|
||||
|
||||
/datum/gear/head/hijab/red
|
||||
display_name = "hijab, red"
|
||||
path = /obj/item/clothing/head/hijab/red
|
||||
|
||||
/datum/gear/head/hijab/yellowgreen
|
||||
display_name = "hijab, yellow green"
|
||||
path = /obj/item/clothing/head/hijab/yellowgreen
|
||||
|
||||
/datum/gear/head/hijab/yellow
|
||||
display_name = "hijab, yellow"
|
||||
path = /obj/item/clothing/head/hijab/yellow
|
||||
/datum/gear/head/hijab/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/head/kippa
|
||||
display_name = "kippa, black"
|
||||
display_name = "kippa"
|
||||
path = /obj/item/clothing/head/kippa
|
||||
|
||||
/datum/gear/head/kippa/white
|
||||
display_name = "kippa, white"
|
||||
path = /obj/item/clothing/head/kippa/white
|
||||
|
||||
/datum/gear/head/kippa/aqua
|
||||
display_name = "kippa, aqua"
|
||||
path = /obj/item/clothing/head/kippa/aqua
|
||||
|
||||
/datum/gear/head/kippa/blue
|
||||
display_name = "kippa, blue"
|
||||
path = /obj/item/clothing/head/kippa/blue
|
||||
|
||||
/datum/gear/head/kippa/brown
|
||||
display_name = "kippa, brown"
|
||||
path = /obj/item/clothing/head/kippa/brown
|
||||
|
||||
/datum/gear/head/kippa/darkblue
|
||||
display_name = "kippa, dark blue"
|
||||
path = /obj/item/clothing/head/kippa/darkblue
|
||||
|
||||
/datum/gear/head/kippa/darkred
|
||||
display_name = "kippa, dark red"
|
||||
path = /obj/item/clothing/head/kippa/darkred
|
||||
|
||||
/datum/gear/head/kippa/green
|
||||
display_name = "kippa, green"
|
||||
path = /obj/item/clothing/head/kippa/green
|
||||
|
||||
/datum/gear/head/kippa/grey
|
||||
display_name = "kippa, grey"
|
||||
path = /obj/item/clothing/head/kippa/grey
|
||||
|
||||
/datum/gear/head/kippa/lightblue
|
||||
display_name = "kippa, light blue"
|
||||
path = /obj/item/clothing/head/kippa/lightblue
|
||||
|
||||
/datum/gear/head/kippa/lightbrown
|
||||
display_name = "kippa, light brown"
|
||||
path = /obj/item/clothing/head/kippa/lightbrown
|
||||
|
||||
/datum/gear/head/kippa/lightgreen
|
||||
display_name = "kippa, light green"
|
||||
path = /obj/item/clothing/head/kippa/lightgreen
|
||||
|
||||
/datum/gear/head/kippa/lightpurple
|
||||
display_name = "kippa, light purple"
|
||||
path = /obj/item/clothing/head/kippa/lightpurple
|
||||
|
||||
/datum/gear/head/kippa/lightred
|
||||
display_name = "kippa, light red"
|
||||
path = /obj/item/clothing/head/kippa/lightred
|
||||
|
||||
/datum/gear/head/kippa/maroon
|
||||
display_name = "kippa, maroon"
|
||||
path = /obj/item/clothing/head/kippa/maroon
|
||||
|
||||
/datum/gear/head/kippa/orange
|
||||
display_name = "kippa, orange"
|
||||
path = /obj/item/clothing/head/kippa/orange
|
||||
|
||||
/datum/gear/head/kippa/pink
|
||||
display_name = "kippa, pink"
|
||||
path = /obj/item/clothing/head/kippa/pink
|
||||
|
||||
/datum/gear/head/kippa/purple
|
||||
display_name = "kippa, purple"
|
||||
path = /obj/item/clothing/head/kippa/purple
|
||||
|
||||
/datum/gear/head/kippa/red
|
||||
display_name = "kippa, red"
|
||||
path = /obj/item/clothing/head/kippa/red
|
||||
|
||||
/datum/gear/head/kippa/yellowgreen
|
||||
display_name = "kippa, yellow green"
|
||||
path = /obj/item/clothing/head/kippa/yellowgreen
|
||||
|
||||
/datum/gear/head/kippa/yellow
|
||||
display_name = "kippa, yellow"
|
||||
path = /obj/item/clothing/head/kippa/yellow
|
||||
/datum/gear/head/kippa/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/head/turban
|
||||
display_name = "turban, black"
|
||||
display_name = "turban"
|
||||
path = /obj/item/clothing/head/turban
|
||||
|
||||
/datum/gear/head/turban/white
|
||||
display_name = "turban, white"
|
||||
path = /obj/item/clothing/head/turban/white
|
||||
|
||||
/datum/gear/head/turban/aqua
|
||||
display_name = "turban, aqua"
|
||||
path = /obj/item/clothing/head/turban/aqua
|
||||
|
||||
/datum/gear/head/turban/blue
|
||||
display_name = "turban, blue"
|
||||
path = /obj/item/clothing/head/turban/blue
|
||||
|
||||
/datum/gear/head/turban/brown
|
||||
display_name = "turban, brown"
|
||||
path = /obj/item/clothing/head/turban/brown
|
||||
|
||||
/datum/gear/head/turban/darkblue
|
||||
display_name = "turban, dark blue"
|
||||
path = /obj/item/clothing/head/turban/darkblue
|
||||
|
||||
/datum/gear/head/turban/darkred
|
||||
display_name = "turban, dark red"
|
||||
path = /obj/item/clothing/head/turban/darkred
|
||||
|
||||
/datum/gear/head/turban/green
|
||||
display_name = "turban, green"
|
||||
path = /obj/item/clothing/head/turban/green
|
||||
|
||||
/datum/gear/head/turban/grey
|
||||
display_name = "turban, grey"
|
||||
path = /obj/item/clothing/head/turban/grey
|
||||
|
||||
/datum/gear/head/turban/lightblue
|
||||
display_name = "turban, light blue"
|
||||
path = /obj/item/clothing/head/turban/lightblue
|
||||
|
||||
/datum/gear/head/turban/lightbrown
|
||||
display_name = "turban, light brown"
|
||||
path = /obj/item/clothing/head/turban/lightbrown
|
||||
|
||||
/datum/gear/head/turban/lightgreen
|
||||
display_name = "turban, light green"
|
||||
path = /obj/item/clothing/head/turban/lightgreen
|
||||
|
||||
/datum/gear/head/turban/lightpurple
|
||||
display_name = "turban, light purple"
|
||||
path = /obj/item/clothing/head/turban/lightpurple
|
||||
|
||||
/datum/gear/head/turban/lightred
|
||||
display_name = "turban, light red"
|
||||
path = /obj/item/clothing/head/turban/lightred
|
||||
|
||||
/datum/gear/head/turban/maroon
|
||||
display_name = "turban, maroon"
|
||||
path = /obj/item/clothing/head/turban/maroon
|
||||
|
||||
/datum/gear/head/turban/orange
|
||||
display_name = "turban, orange"
|
||||
path = /obj/item/clothing/head/turban/orange
|
||||
|
||||
/datum/gear/head/turban/pink
|
||||
display_name = "turban, pink"
|
||||
path = /obj/item/clothing/head/turban/pink
|
||||
|
||||
/datum/gear/head/turban/purple
|
||||
display_name = "turban, purple"
|
||||
path = /obj/item/clothing/head/turban/purple
|
||||
|
||||
/datum/gear/head/turban/red
|
||||
display_name = "turban, red"
|
||||
path = /obj/item/clothing/head/turban/red
|
||||
|
||||
/datum/gear/head/turban/yellowgreen
|
||||
display_name = "turban, yellow green"
|
||||
path = /obj/item/clothing/head/turban/yellowgreen
|
||||
|
||||
/datum/gear/head/turban/yellow
|
||||
display_name = "turban, yellow"
|
||||
path = /obj/item/clothing/head/turban/yellow
|
||||
/datum/gear/head/turban/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/datum/gear/shoes/toeless
|
||||
display_name = "toe-less jackboots"
|
||||
path = /obj/item/clothing/shoes/jackboots/unathi
|
||||
path = /obj/item/clothing/shoes/jackboots/toeless
|
||||
|
||||
/datum/gear/shoes/workboots
|
||||
display_name = "workboots"
|
||||
|
||||
@@ -17,3 +17,19 @@
|
||||
/datum/gear/ashtray
|
||||
display_name = "ashtray, plastic"
|
||||
path = /obj/item/weapon/material/ashtray/plastic
|
||||
|
||||
/datum/gear/cigar
|
||||
display_name = "cigar"
|
||||
path = /obj/item/clothing/mask/smokable/cigarette/cigar
|
||||
|
||||
/datum/gear/cigarettes
|
||||
display_name = "cigarette selection"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes
|
||||
|
||||
/datum/gear/cigarettes/New()
|
||||
..()
|
||||
var/list/cigarettes = list()
|
||||
for(var/cigarette in (typesof(/obj/item/weapon/storage/fancy/cigarettes) - typesof(/obj/item/weapon/storage/fancy/cigarettes/killthroat)))
|
||||
var/obj/item/weapon/storage/fancy/cigarettes/cigarette_brand = cigarette
|
||||
cigarettes[initial(cigarette_brand.name)] = cigarette_brand
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cigarettes))
|
||||
@@ -59,48 +59,16 @@
|
||||
path = /obj/item/clothing/suit/storage/hazardvest
|
||||
|
||||
/datum/gear/suit/hoodie
|
||||
display_name = "hoodie, grey"
|
||||
display_name = "hoodie selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie
|
||||
|
||||
/datum/gear/suit/hoodie/red
|
||||
display_name = "hoodie, red"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/red
|
||||
|
||||
/datum/gear/suit/hoodie/blue
|
||||
display_name = "hoodie, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/blue
|
||||
|
||||
/datum/gear/suit/hoodie/yellow
|
||||
display_name = "hoodie, yellow"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/yellow
|
||||
|
||||
/datum/gear/suit/hoodie/green
|
||||
display_name = "hoodie, green"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/green
|
||||
|
||||
/datum/gear/suit/hoodie/orange
|
||||
display_name = "hoodie, orange"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/orange
|
||||
|
||||
/datum/gear/suit/hoodie/black
|
||||
display_name = "hoodie, black"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/black
|
||||
|
||||
/datum/gear/suit/hoodie/cti
|
||||
display_name = "hoodie, CTI"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/cti
|
||||
|
||||
/datum/gear/suit/hoodie/mu
|
||||
display_name = "hoodie, MU"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/mu
|
||||
|
||||
/datum/gear/suit/hoodie/nt
|
||||
display_name = "hoodie, NT"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/nt
|
||||
|
||||
/datum/gear/suit/hoodie/smw
|
||||
display_name = "hoodie, Space Mountain Wind"
|
||||
path = /obj/item/clothing/suit/storage/toggle/hoodie/smw
|
||||
/datum/gear/suit/hoodie/New()
|
||||
..()
|
||||
var/list/hoodies = list()
|
||||
for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/toggle/hoodie))
|
||||
var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style
|
||||
hoodies[initial(hoodie.name)] = hoodie
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies))
|
||||
|
||||
/datum/gear/suit/labcoat
|
||||
display_name = "labcoat"
|
||||
@@ -145,25 +113,42 @@
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho, tan"
|
||||
display_name = "poncho selection"
|
||||
path = /obj/item/clothing/suit/poncho
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/poncho/blue
|
||||
display_name = "poncho, blue"
|
||||
path = /obj/item/clothing/suit/poncho/blue
|
||||
/datum/gear/suit/poncho/New()
|
||||
..()
|
||||
var/list/ponchos = list()
|
||||
for(var/poncho_style in (typesof(/obj/item/clothing/suit/poncho) - typesof(/obj/item/clothing/suit/poncho/roles)))
|
||||
var/obj/item/clothing/suit/storage/toggle/hoodie/poncho = poncho_style
|
||||
ponchos[initial(poncho.name)] = poncho
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos))
|
||||
|
||||
/datum/gear/suit/poncho/green
|
||||
display_name = "poncho, green"
|
||||
path = /obj/item/clothing/suit/poncho/green
|
||||
/datum/gear/suit/roles/poncho/security
|
||||
display_name = "poncho, security"
|
||||
path = /obj/item/clothing/suit/poncho/roles/security
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/suit/poncho/purple
|
||||
display_name = "poncho, purple"
|
||||
path = /obj/item/clothing/suit/poncho/purple
|
||||
/datum/gear/suit/roles/poncho/medical
|
||||
display_name = "poncho, medical"
|
||||
path = /obj/item/clothing/suit/poncho/roles/medical
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
|
||||
/datum/gear/suit/poncho/red
|
||||
display_name = "poncho, red"
|
||||
path = /obj/item/clothing/suit/poncho/red
|
||||
/datum/gear/suit/roles/poncho/engineering
|
||||
display_name = "poncho, engineering"
|
||||
path = /obj/item/clothing/suit/poncho/roles/engineering
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
|
||||
|
||||
/datum/gear/suit/roles/poncho/science
|
||||
display_name = "poncho, science"
|
||||
path = /obj/item/clothing/suit/poncho/roles/science
|
||||
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cargo
|
||||
display_name = "poncho, cargo"
|
||||
path = /obj/item/clothing/suit/poncho/roles/cargo
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/suit/unathi_robe
|
||||
display_name = "roughspun robe"
|
||||
@@ -209,4 +194,77 @@
|
||||
/datum/gear/suit/forensics/red/short
|
||||
display_name = "forensics, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red
|
||||
allowed_roles = list("Detective")
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/suit/wintercoat
|
||||
display_name = "winter coat"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat
|
||||
|
||||
/datum/gear/suit/wintercoat/captain
|
||||
display_name = "winter coat, captain"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain
|
||||
allowed_roles = list("Captain")
|
||||
|
||||
/datum/gear/suit/wintercoat/security
|
||||
display_name = "winter coat, security"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security
|
||||
allowed_roles = list("Security Officer, Head of Security, Warden, Detective")
|
||||
|
||||
/datum/gear/suit/wintercoat/medical
|
||||
display_name = "winter coat, medical"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
|
||||
/datum/gear/suit/wintercoat/science
|
||||
display_name = "winter coat, science"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science
|
||||
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
|
||||
|
||||
/datum/gear/suit/wintercoat/engineering
|
||||
display_name = "winter coat, engineering"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
|
||||
|
||||
/datum/gear/suit/wintercoat/atmos
|
||||
display_name = "winter coat, atmospherics"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos
|
||||
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
|
||||
|
||||
/datum/gear/suit/wintercoat/hydro
|
||||
display_name = "winter coat, hydroponics"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/hydro
|
||||
allowed_roles = list("Botanist", "Xenobiologist")
|
||||
|
||||
/datum/gear/suit/wintercoat/cargo
|
||||
display_name = "winter coat, cargo"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/suit/wintercoat/miner
|
||||
display_name = "winter coat, mining"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner
|
||||
allowed_roles = list("Shaft Miner")
|
||||
|
||||
/datum/gear/suit/varsity
|
||||
display_name = "varsity jacket selection"
|
||||
path = /obj/item/clothing/suit/varsity
|
||||
|
||||
/datum/gear/suit/varsity/New()
|
||||
..()
|
||||
var/list/varsities = list()
|
||||
for(var/varsity_style in typesof(/obj/item/clothing/suit/varsity))
|
||||
var/obj/item/clothing/suit/varsity/varsity = varsity_style
|
||||
varsities[initial(varsity.name)] = varsity
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(varsities))
|
||||
|
||||
/datum/gear/suit/track
|
||||
display_name = "track jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/track
|
||||
|
||||
/datum/gear/suit/track/New()
|
||||
..()
|
||||
var/list/tracks = list()
|
||||
for(var/track_style in typesof(/obj/item/clothing/suit/storage/toggle/track))
|
||||
var/obj/item/clothing/suit/storage/toggle/track/track = track_style
|
||||
tracks[initial(track.name)] = track
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tracks))
|
||||
@@ -6,8 +6,15 @@
|
||||
sort_category = "Uniforms and Casual Dress"
|
||||
|
||||
/datum/gear/uniform/cheongsam
|
||||
display_name = "cheongsam, white"
|
||||
path = /obj/item/clothing/under/cheongsam
|
||||
display_name = "cheongsam selection"
|
||||
|
||||
/datum/gear/uniform/cheongsam/New()
|
||||
..()
|
||||
var/list/cheongasms = list()
|
||||
for(var/cheongasm in typesof(/obj/item/clothing/under/cheongsam))
|
||||
var/obj/item/clothing/under/cheongsam/cheongasm_type = cheongasm
|
||||
cheongasms[initial(cheongasm_type.name)] = cheongasm_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cheongasms))
|
||||
|
||||
/datum/gear/uniform/kilt
|
||||
display_name = "kilt"
|
||||
@@ -33,165 +40,124 @@
|
||||
display_name = "cut top, red"
|
||||
path = /obj/item/clothing/under/cuttop/red
|
||||
|
||||
/datum/gear/uniform/jumpskirt
|
||||
display_name = "jumpskirt, black"
|
||||
path = /obj/item/clothing/under/blackjumpskirt
|
||||
|
||||
/datum/gear/uniform/jumpsuit
|
||||
display_name = "jumpsuit, rainbow"
|
||||
path = /obj/item/clothing/under/rainbow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/black
|
||||
display_name = "jumpsuit, black"
|
||||
path = /obj/item/clothing/under/color/black
|
||||
|
||||
/datum/gear/uniform/jumpsuit/blackfemale
|
||||
display_name = "jumpsuit, female-black"
|
||||
path = /obj/item/clothing/under/color/blackf
|
||||
|
||||
/datum/gear/uniform/jumpsuit/blue
|
||||
display_name = "jumpsuit, blue"
|
||||
path = /obj/item/clothing/under/color/blue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/green
|
||||
display_name = "jumpsuit, green"
|
||||
path = /obj/item/clothing/under/color/green
|
||||
|
||||
/datum/gear/uniform/jumpsuit/grey
|
||||
display_name = "jumpsuit, grey"
|
||||
display_name = "jumpclothes selection"
|
||||
path = /obj/item/clothing/under/color/grey
|
||||
|
||||
/datum/gear/uniform/jumpsuit/pink
|
||||
display_name = "jumpsuit, pink"
|
||||
path = /obj/item/clothing/under/color/pink
|
||||
|
||||
/datum/gear/uniform/jumpsuit/white
|
||||
display_name = "jumpsuit, white"
|
||||
path = /obj/item/clothing/under/color/white
|
||||
|
||||
/datum/gear/uniform/jumpsuit/yellow
|
||||
display_name = "jumpsuit, yellow"
|
||||
path = /obj/item/clothing/under/color/yellow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightblue
|
||||
display_name = "jumpsuit, lightblue"
|
||||
path = /obj/item/clothing/under/lightblue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/red
|
||||
display_name = "jumpsuit, red"
|
||||
path = /obj/item/clothing/under/color/red
|
||||
|
||||
/datum/gear/uniform/jumpsuit/aqua
|
||||
display_name = "jumpsuit, aqua"
|
||||
path = /obj/item/clothing/under/aqua
|
||||
|
||||
/datum/gear/uniform/jumpsuit/purple
|
||||
display_name = "jumpsuit, purple"
|
||||
path = /obj/item/clothing/under/purple
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightpurple
|
||||
display_name = "jumpsuit, lightpurple"
|
||||
path = /obj/item/clothing/under/lightpurple
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightgreen
|
||||
display_name = "jumpsuit, lightgreen"
|
||||
path = /obj/item/clothing/under/lightgreen
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightbrown
|
||||
display_name = "jumpsuit, lightbrown"
|
||||
path = /obj/item/clothing/under/lightbrown
|
||||
|
||||
/datum/gear/uniform/jumpsuit/brown
|
||||
display_name = "jumpsuit, brown"
|
||||
path = /obj/item/clothing/under/brown
|
||||
|
||||
/datum/gear/uniform/jumpsuit/yellowgreen
|
||||
display_name = "jumpsuit, yellowgreen"
|
||||
path = /obj/item/clothing/under/yellowgreen
|
||||
|
||||
/datum/gear/uniform/jumpsuit/darkblue
|
||||
display_name = "jumpsuit, darkblue"
|
||||
path = /obj/item/clothing/under/darkblue
|
||||
|
||||
/datum/gear/uniform/jumpsuit/lightred
|
||||
display_name = "jumpsuit, lightred"
|
||||
path = /obj/item/clothing/under/lightred
|
||||
|
||||
/datum/gear/uniform/jumpsuit/darkred
|
||||
display_name = "jumpsuit, darkred"
|
||||
path = /obj/item/clothing/under/darkred
|
||||
/datum/gear/uniform/jumpsuit/New()
|
||||
..()
|
||||
var/list/jumpclothes = list()
|
||||
for(var/jump in typesof(/obj/item/clothing/under/color))
|
||||
var/obj/item/clothing/under/color/jumps = jump
|
||||
jumpclothes[initial(jumps.name)] = jumps
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
display_name = "plaid skirt, blue"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
display_name = "skirt selection"
|
||||
path = /obj/item/clothing/under/skirt
|
||||
|
||||
/datum/gear/uniform/skirt/purple
|
||||
display_name = "plaid skirt, purple"
|
||||
path = /obj/item/clothing/under/dress/plaid_purple
|
||||
/datum/gear/uniform/skirt/New()
|
||||
..()
|
||||
var/list/skirts = list()
|
||||
for(var/skirt in (typesof(/obj/item/clothing/under/skirt)))
|
||||
var/obj/item/clothing/under/skirt/skirt_type = skirt
|
||||
skirts[initial(skirt_type.name)] = skirt_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(skirts))
|
||||
|
||||
/datum/gear/uniform/skirt/red
|
||||
display_name = "plaid skirt, red"
|
||||
path = /obj/item/clothing/under/dress/plaid_red
|
||||
/datum/gear/uniform/pants
|
||||
display_name = "pants selection"
|
||||
path = /obj/item/clothing/under/pants/white
|
||||
|
||||
/datum/gear/uniform/skirt/black
|
||||
display_name = "skirt, black"
|
||||
path = /obj/item/clothing/under/blackskirt
|
||||
/datum/gear/uniform/pants/New()
|
||||
..()
|
||||
var/list/pants = list()
|
||||
for(var/pant in typesof(/obj/item/clothing/under/pants))
|
||||
var/obj/item/clothing/under/pants/pant_type = pant
|
||||
pants[initial(pant_type.name)] = pant_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants))
|
||||
|
||||
/datum/gear/uniform/skirt/ce
|
||||
/datum/gear/uniform/shorts
|
||||
display_name = "shorts selection"
|
||||
path = /obj/item/clothing/under/shorts/jeans
|
||||
|
||||
/datum/gear/uniform/shorts/New()
|
||||
..()
|
||||
var/list/shorts = list()
|
||||
for(var/short in typesof(/obj/item/clothing/under/shorts))
|
||||
var/obj/item/clothing/under/pants/short_type = short
|
||||
shorts[initial(short_type.name)] = short_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts))
|
||||
|
||||
/datum/gear/uniform/job_skirt/ce
|
||||
display_name = "skirt, ce"
|
||||
path = /obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
path = /obj/item/clothing/under/rank/engineer/chief_engineer/skirt
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/atmos
|
||||
/datum/gear/uniform/job_skirt/atmos
|
||||
display_name = "skirt, atmos"
|
||||
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
path = /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/eng
|
||||
/datum/gear/uniform/job_skirt/eng
|
||||
display_name = "skirt, engineer"
|
||||
path = /obj/item/clothing/under/rank/engineer/skirt
|
||||
allowed_roles = list("Chief Engineer","Station Engineer")
|
||||
|
||||
/datum/gear/uniform/skirt/roboticist
|
||||
/datum/gear/uniform/job_skirt/roboticist
|
||||
display_name = "skirt, roboticist"
|
||||
path = /obj/item/clothing/under/rank/roboticist/skirt
|
||||
allowed_roles = list("Research Director","Roboticist")
|
||||
|
||||
/datum/gear/uniform/skirt/cmo
|
||||
/datum/gear/uniform/job_skirt/cmo
|
||||
display_name = "skirt, cmo"
|
||||
path = /obj/item/clothing/under/rank/chief_medical_officer
|
||||
path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/uniform/skirt/chem
|
||||
/datum/gear/uniform/job_skirt/chem
|
||||
display_name = "skirt, chemist"
|
||||
path = /obj/item/clothing/under/rank/chemist/skirt
|
||||
path = /obj/item/clothing/under/rank/medical/chemist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
|
||||
/datum/gear/uniform/skirt/viro
|
||||
/datum/gear/uniform/job_skirt/viro
|
||||
display_name = "skirt, virologist"
|
||||
path = /obj/item/clothing/under/rank/virologist/skirt
|
||||
path = /obj/item/clothing/under/rank/medical/virologist/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/skirt/med
|
||||
/datum/gear/uniform/job_skirt/med
|
||||
display_name = "skirt, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/skirt
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
|
||||
/datum/gear/uniform/skirt/sci
|
||||
/datum/gear/uniform/job_skirt/sci
|
||||
display_name = "skirt, scientist"
|
||||
path = /obj/item/clothing/under/rank/scientist/skirt
|
||||
allowed_roles = list("Research Director","Scientist")
|
||||
allowed_roles = list("Research Director","Scientist", "Xenobiologist")
|
||||
|
||||
/datum/gear/uniform/skirt/cargo
|
||||
/datum/gear/uniform/job_skirt/cargo
|
||||
display_name = "skirt, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/skirt/qm
|
||||
/datum/gear/uniform/job_skirt/qm
|
||||
display_name = "skirt, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/skirt
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/uniform/job_skirt/warden
|
||||
display_name = "skirt, warden"
|
||||
path = /obj/item/clothing/under/rank/security/warden/skirt
|
||||
allowed_roles = list("Head of Security", "Warden")
|
||||
|
||||
/datum/gear/uniform/job_skirt/security
|
||||
display_name = "skirt, security"
|
||||
path = /obj/item/clothing/under/rank/security/skirt
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/job_skirt/head_of_security
|
||||
display_name = "skirt, hos"
|
||||
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/jeans_qm
|
||||
display_name = "jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
@@ -212,102 +178,6 @@
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/pants
|
||||
display_name = "pants, white"
|
||||
path = /obj/item/clothing/under/pants/white
|
||||
|
||||
/datum/gear/uniform/pants/red
|
||||
display_name = "pants, red"
|
||||
path = /obj/item/clothing/under/pants/red
|
||||
|
||||
/datum/gear/uniform/pants/black
|
||||
display_name = "pants, black"
|
||||
path = /obj/item/clothing/under/pants/black
|
||||
|
||||
/datum/gear/uniform/pants/tan
|
||||
display_name = "pants, tan"
|
||||
path = /obj/item/clothing/under/pants/tan
|
||||
|
||||
/datum/gear/uniform/pants/track
|
||||
display_name = "pants, track"
|
||||
path = /obj/item/clothing/under/pants/track
|
||||
|
||||
/datum/gear/uniform/pants/khaki
|
||||
display_name = "pants, khaki"
|
||||
path = /obj/item/clothing/under/pants/khaki
|
||||
|
||||
/datum/gear/uniform/pants/camo
|
||||
display_name = "pants, camo"
|
||||
path = /obj/item/clothing/under/pants/camo
|
||||
|
||||
/datum/gear/uniform/pants/jeans
|
||||
display_name = "pants, jeans"
|
||||
path = /obj/item/clothing/under/pants/jeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/classic
|
||||
display_name = "pants, classic jeans"
|
||||
path = /obj/item/clothing/under/pants/classicjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/mustang
|
||||
display_name = "pants, mustang jeans"
|
||||
path = /obj/item/clothing/under/pants/mustangjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/black
|
||||
display_name = "pants, black jeans"
|
||||
path = /obj/item/clothing/under/pants/blackjeans
|
||||
|
||||
/datum/gear/uniform/pants/jeans/youngfolks
|
||||
display_name = "pants, young folks jeans"
|
||||
path = /obj/item/clothing/under/pants/youngfolksjeans
|
||||
|
||||
/datum/gear/uniform/jeans
|
||||
display_name = "shorts, jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans
|
||||
|
||||
/datum/gear/uniform/jeans/classic
|
||||
display_name = "shorts, classic jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/classic
|
||||
|
||||
/datum/gear/uniform/jeans/mustang
|
||||
display_name = "shorts, mustang jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/mustang
|
||||
|
||||
/datum/gear/uniform/jeans/youngfolks
|
||||
display_name = "shorts, young folks jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/youngfolks
|
||||
|
||||
/datum/gear/uniform/jeans/black
|
||||
display_name = "shorts, black jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/black
|
||||
|
||||
/datum/gear/uniform/jeans/female
|
||||
display_name = "shorts, female, jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/female
|
||||
|
||||
/datum/gear/uniform/jeans/classic/female
|
||||
display_name = "shorts, female, classic jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/classic/female
|
||||
|
||||
/datum/gear/uniform/jeans/mustang/female
|
||||
display_name = "shorts, female, mustang jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/mustang/female
|
||||
|
||||
/datum/gear/uniform/jeans/youngfolks/female
|
||||
display_name = "shorts, female, young folks jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/youngfolks/female
|
||||
|
||||
/datum/gear/uniform/jeans/black/female
|
||||
display_name = "shorts, female, black jeans"
|
||||
path = /obj/item/clothing/under/shorts/jeans/black/female
|
||||
|
||||
/datum/gear/uniform/khaki
|
||||
display_name = "shorts, khaki"
|
||||
path = /obj/item/clothing/under/shorts/khaki
|
||||
|
||||
/datum/gear/uniform/khaki/female
|
||||
display_name = "shorts, female, khaki"
|
||||
path = /obj/item/clothing/under/shorts/khaki/female
|
||||
|
||||
/datum/gear/uniform/suit //amish
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
@@ -383,7 +253,7 @@
|
||||
/datum/gear/uniform/scrubs
|
||||
display_name = "scrubs, black"
|
||||
path = /obj/item/clothing/under/rank/medical/black
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist")
|
||||
|
||||
/datum/gear/uniform/scrubs/blue
|
||||
display_name = "scrubs, blue"
|
||||
@@ -397,6 +267,10 @@
|
||||
display_name = "scrubs, green"
|
||||
path = /obj/item/clothing/under/rank/medical/green
|
||||
|
||||
/datum/gear/uniform/scrubs/navyblue
|
||||
display_name = "scrubs, navy blue"
|
||||
path = /obj/item/clothing/under/rank/medical/navyblue
|
||||
|
||||
/datum/gear/uniform/sundress
|
||||
display_name = "sundress"
|
||||
path = /obj/item/clothing/under/sundress
|
||||
@@ -424,6 +298,16 @@
|
||||
path = /obj/item/clothing/under/rank/security/corp
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/uniform/corpwarsuit
|
||||
display_name = "uniform, corporate (Warden)"
|
||||
path = /obj/item/clothing/under/rank/warden/corp
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
|
||||
/datum/gear/uniform/corphossuit
|
||||
display_name = "uniform, corporate (Head of Security)"
|
||||
path = /obj/item/clothing/under/rank/head_of_security/corp
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/uniform_hop
|
||||
display_name = "uniform, HoP's dress"
|
||||
path = /obj/item/clothing/under/dress/dress_hop
|
||||
@@ -436,6 +320,48 @@
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/uniform/navysecsuit
|
||||
display_name = "uniform, navyblue (Security)"
|
||||
display_name = "uniform, navy blue (Security)"
|
||||
path = /obj/item/clothing/under/rank/security/navyblue
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/uniform/navywarsuit
|
||||
display_name = "uniform, navy blue (Wardem)"
|
||||
path = /obj/item/clothing/under/rank/warden/navyblue
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
|
||||
/datum/gear/uniform/navyhossuit
|
||||
display_name = "uniform, navy blue (Head of Security)"
|
||||
path = /obj/item/clothing/under/rank/head_of_security/navyblue
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/shortplaindress
|
||||
display_name = "plain dress"
|
||||
path = /obj/item/clothing/under/dress/white3
|
||||
|
||||
/datum/gear/uniform/shortplaindress/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/longdress
|
||||
display_name = "long dress"
|
||||
path = /obj/item/clothing/under/dress/white2
|
||||
|
||||
/datum/gear/uniform/longdress/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/longwidedress
|
||||
display_name = "long wide dress"
|
||||
path = /obj/item/clothing/under/dress/white4
|
||||
|
||||
/datum/gear/uniform/longwidedress/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/reddress
|
||||
display_name = "red dress with belt"
|
||||
path = /obj/item/clothing/under/dress/darkred
|
||||
|
||||
/datum/gear/uniform/whitewedding
|
||||
display_name= "white wedding dress"
|
||||
path = /obj/item/clothing/under/dress/white
|
||||
@@ -12,79 +12,105 @@
|
||||
whitelisted = "Unathi"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/ears/skrell
|
||||
display_name = "headtail-wear, female, chain (Skrell)"
|
||||
/datum/gear/ears/skrell/chains //Chains
|
||||
display_name = "headtail chain selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/plate
|
||||
display_name = "headtail-wear, male, bands (Skrell)"
|
||||
/datum/gear/ears/skrell/chains/New()
|
||||
..()
|
||||
var/list/chaintypes = list()
|
||||
for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain))
|
||||
var/obj/item/clothing/ears/skrell/chain/chain = chain_style
|
||||
chaintypes[initial(chain.name)] = chain
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(chaintypes))
|
||||
|
||||
/datum/gear/ears/skrell/bands
|
||||
display_name = "headtail band selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth //male/red
|
||||
display_name = "headtail-wear, male, red, cloth (Skrell)"
|
||||
/datum/gear/ears/skrell/bands/New()
|
||||
..()
|
||||
var/list/bandtypes = list()
|
||||
for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band))
|
||||
var/obj/item/clothing/ears/skrell/band/band = band_style
|
||||
bandtypes[initial(band.name)] = band
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male
|
||||
display_name = "male headtail cloth selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male //black
|
||||
display_name = "headtail-wear, male, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/black
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/blue
|
||||
display_name = "headtail-wear, male, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/green
|
||||
display_name = "headtail-wear, male, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/male/pink
|
||||
display_name = "headtail-wear, male, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
/datum/gear/ears/skrell/cloth/male/New()
|
||||
..()
|
||||
var/list/clothtypes = list()
|
||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_male))
|
||||
var/obj/item/clothing/ears/skrell/cloth_male/cloth = cloth_style
|
||||
clothtypes[initial(cloth.name)] = cloth
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female
|
||||
display_name = "headtail-wear, female, red, cloth (Skrell)"
|
||||
display_name = "female headtail cloth selection (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/black
|
||||
display_name = "headtail-wear, female, black, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/black
|
||||
/datum/gear/ears/skrell/cloth/female/New()
|
||||
..()
|
||||
var/list/clothtypes = list()
|
||||
for(var/cloth_style in typesof(/obj/item/clothing/ears/skrell/cloth_female))
|
||||
var/obj/item/clothing/ears/skrell/cloth_female/cloth = cloth_style
|
||||
clothtypes[initial(cloth.name)] = cloth
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(clothtypes))
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/blue
|
||||
display_name = "headtail-wear, female, blue, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
/datum/gear/ears/skrell/colored/band
|
||||
display_name = "Colored bands (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/band
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/colored/band/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/ears/skrell/colored/chain
|
||||
display_name = "Colored chain (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/colored/chain
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = "Skrell"
|
||||
|
||||
/datum/gear/ears/skrell/colored/chain/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/green
|
||||
display_name = "headtail-wear, female, green, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/green
|
||||
|
||||
/datum/gear/ears/skrell/cloth/female/pink
|
||||
display_name = "headtail-wear, female, pink, cloth (Skrell)"
|
||||
path = /obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari
|
||||
/datum/gear/uniform/teshari
|
||||
display_name = "smock, grey (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi
|
||||
whitelisted = "Teshari"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/yellow
|
||||
/datum/gear/uniform/teshari/jumpsuit
|
||||
display_name = "smock, yellow (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/yellow
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/red
|
||||
/datum/gear/uniform/teshari/jumpsuit/red
|
||||
display_name = "smock, red (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/red
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/white
|
||||
/datum/gear/uniform/teshari/jumpsuit/white
|
||||
display_name = "smock, white (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/white
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/medical
|
||||
/datum/gear/uniform/teshari/jumpsuit/medical
|
||||
display_name = "smock, Medical (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/medical
|
||||
|
||||
/datum/gear/uniform/jumpsuit/teshari/rainbow
|
||||
/datum/gear/uniform/teshari/jumpsuit/rainbow
|
||||
display_name = "smock, rainbow (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/rainbow
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
pref.job_engsec_high = sanitize_integer(pref.job_engsec_high, 0, 65535, initial(pref.job_engsec_high))
|
||||
pref.job_engsec_med = sanitize_integer(pref.job_engsec_med, 0, 65535, initial(pref.job_engsec_med))
|
||||
pref.job_engsec_low = sanitize_integer(pref.job_engsec_low, 0, 65535, initial(pref.job_engsec_low))
|
||||
if(!pref.player_alt_titles) pref.player_alt_titles = new()
|
||||
if(!(pref.player_alt_titles)) pref.player_alt_titles = new()
|
||||
|
||||
if(!job_master)
|
||||
return
|
||||
@@ -58,9 +58,10 @@
|
||||
if(!job_master)
|
||||
return
|
||||
|
||||
. = list()
|
||||
. += "<tt><center>"
|
||||
. += "<b>Choose occupation chances</b><br>Unavailable occupations are crossed out.<br>"
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%'>" // Table within a table for alignment, also allows you to easily add more colomns.
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%'>" // Table within a table for alignment, also allows you to easily add more columns.
|
||||
. += "<table width='100%' cellpadding='1' cellspacing='0'>"
|
||||
var/index = -1
|
||||
|
||||
@@ -93,7 +94,7 @@
|
||||
. += "<del>[rank]</del></td><td> \[MINIMUM CHARACTER AGE: [job.minimum_character_age]]</td></tr>"
|
||||
continue
|
||||
if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant"))
|
||||
. += "<font color=orange>[rank]</font></td><td></td></tr>"
|
||||
. += "<font color=grey>[rank]</font></td><td></td></tr>"
|
||||
continue
|
||||
if((rank in command_positions) || (rank == "AI"))//Bold head jobs
|
||||
. += "<b>[rank]</b>"
|
||||
@@ -106,40 +107,39 @@
|
||||
|
||||
if(rank == "Assistant")//Assistant is special
|
||||
if(pref.job_civilian_low & ASSISTANT)
|
||||
. += " <font color=green>\[Yes]</font>"
|
||||
. += " <font color=55cc55>\[Yes]</font>"
|
||||
else
|
||||
. += " <font color=red>\[No]</font>"
|
||||
. += " <font color=black>\[No]</font>"
|
||||
if(job.alt_titles) //Blatantly cloned from a few lines down.
|
||||
. += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||
. += "</a></td></tr>"
|
||||
continue
|
||||
|
||||
if(pref.GetJobDepartment(job, 1) & job.flag)
|
||||
. += " <font color=blue>\[High]</font>"
|
||||
. += " <font color=55cc55>\[High]</font>"
|
||||
else if(pref.GetJobDepartment(job, 2) & job.flag)
|
||||
. += " <font color=green>\[Medium]</font>"
|
||||
. += " <font color=eecc22>\[Medium]</font>"
|
||||
else if(pref.GetJobDepartment(job, 3) & job.flag)
|
||||
. += " <font color=orange>\[Low]</font>"
|
||||
. += " <font color=cc5555>\[Low]</font>"
|
||||
else
|
||||
. += " <font color=red>\[NEVER]</font>"
|
||||
. += " <font color=black>\[NEVER]</font>"
|
||||
if(job.alt_titles)
|
||||
. += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||
. += "</a></td></tr>"
|
||||
|
||||
. += "</td'></tr></table>"
|
||||
|
||||
. += "</center></table>"
|
||||
. += "</center></table><center>"
|
||||
|
||||
switch(pref.alternate_option)
|
||||
if(GET_RANDOM_JOB)
|
||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=green>Get random job if preferences unavailable</font></a></u></center><br>"
|
||||
. += "<u><a href='?src=\ref[src];job_alternative=1'>Get random job if preferences unavailable</a></u>"
|
||||
if(BE_ASSISTANT)
|
||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=red>Be assistant if preference unavailable</font></a></u></center><br>"
|
||||
. += "<u><a href='?src=\ref[src];job_alternative=1'>Be assistant if preference unavailable</a></u>"
|
||||
if(RETURN_TO_LOBBY)
|
||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=purple>Return to lobby if preference unavailable</font></a></u></center><br>"
|
||||
. += "<u><a href='?src=\ref[src];job_alternative=1'>Return to lobby if preference unavailable</a></u>"
|
||||
|
||||
. += "<center><a href='?src=\ref[src];reset_jobs=1'>\[Reset\]</a></center>"
|
||||
. += "<a href='?src=\ref[src];reset_jobs=1'>\[Reset\]</a></center>"
|
||||
. += "</tt>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, user)
|
||||
if(href_list["reset_jobs"])
|
||||
@@ -160,10 +160,10 @@
|
||||
var/choice = input("Choose an title for [job.title].", "Choose Title", pref.GetPlayerAltTitle(job)) as anything in choices|null
|
||||
if(choice && CanUseTopic(user))
|
||||
SetPlayerAltTitle(job, choice)
|
||||
return TOPIC_REFRESH
|
||||
return (pref.dress_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
|
||||
|
||||
else if(href_list["set_job"])
|
||||
if(SetJob(user, href_list["set_job"])) return TOPIC_REFRESH
|
||||
if(SetJob(user, href_list["set_job"])) return (pref.dress_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// These are not flags, binary operations not intended
|
||||
#define TOPIC_NOACTION 0
|
||||
#define TOPIC_HANDLED 1
|
||||
#define TOPIC_REFRESH 2
|
||||
#define TOPIC_UPDATE_PREVIEW 4
|
||||
#define TOPIC_REFRESH_UPDATE_PREVIEW (TOPIC_REFRESH|TOPIC_UPDATE_PREVIEW)
|
||||
|
||||
/datum/category_group/player_setup_category/general_preferences
|
||||
name = "General"
|
||||
@@ -71,6 +72,10 @@
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
PS.save_preferences(S)
|
||||
|
||||
/datum/category_collection/player_setup_collection/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
PS.copy_to_mob(C)
|
||||
|
||||
/datum/category_collection/player_setup_collection/proc/header()
|
||||
var/dat = ""
|
||||
for(var/datum/category_group/player_setup_category/PS in categories)
|
||||
@@ -142,6 +147,10 @@
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.save_preferences(S)
|
||||
|
||||
/datum/category_group/player_setup_category/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.copy_to_mob(C)
|
||||
|
||||
/datum/category_group/player_setup_category/proc/content(var/mob/user)
|
||||
. = "<table style='width:100%'><tr style='vertical-align:top'><td style='width:50%'>"
|
||||
var/current = 0
|
||||
@@ -200,6 +209,12 @@
|
||||
/datum/category_item/player_setup_item/proc/save_preferences(var/savefile/S)
|
||||
return
|
||||
|
||||
/*
|
||||
* Called when the item is asked to apply its per character settings to a new mob.
|
||||
*/
|
||||
/datum/category_item/player_setup_item/proc/copy_to_mob(var/mob/living/carbon/human/C)
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/proc/content()
|
||||
return
|
||||
|
||||
@@ -212,13 +227,15 @@
|
||||
/datum/category_item/player_setup_item/Topic(var/href,var/list/href_list)
|
||||
if(..())
|
||||
return 1
|
||||
var/mob/user = usr
|
||||
if(!user.client)
|
||||
var/mob/pref_mob = preference_mob()
|
||||
if(!pref_mob || !pref_mob.client)
|
||||
return 1
|
||||
|
||||
. = OnTopic(href, href_list, user)
|
||||
if(. == TOPIC_REFRESH)
|
||||
user.client.prefs.ShowChoices(user)
|
||||
. = OnTopic(href, href_list, usr)
|
||||
if(. & TOPIC_UPDATE_PREVIEW)
|
||||
pref_mob.client.prefs.preview_icon = null
|
||||
if(. & TOPIC_REFRESH)
|
||||
pref_mob.client.prefs.ShowChoices(usr)
|
||||
|
||||
/datum/category_item/player_setup_item/CanUseTopic(var/mob/user)
|
||||
return 1
|
||||
@@ -227,5 +244,11 @@
|
||||
return TOPIC_NOACTION
|
||||
|
||||
/datum/category_item/player_setup_item/proc/preference_mob()
|
||||
if(pref && pref.client && pref.client.mob)
|
||||
if(!pref.client)
|
||||
for(var/client/C)
|
||||
if(C.ckey == pref.client_ckey)
|
||||
pref.client = C
|
||||
break
|
||||
|
||||
if(pref.client)
|
||||
return pref.client.mob
|
||||
|
||||
@@ -18,7 +18,13 @@
|
||||
if(!pref.skills.len) pref.ZeroSkills()
|
||||
if(pref.used_skillpoints < 0) pref.used_skillpoints = 0
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.skills = pref.skills
|
||||
character.used_skillpoints = pref.used_skillpoints
|
||||
|
||||
/datum/category_item/player_setup_item/skills/content()
|
||||
. = list()
|
||||
. += "<b>Select your Skills</b><br>"
|
||||
. += "Current skill level: <b>[pref.GetSkillClass(pref.used_skillpoints)]</b> ([pref.used_skillpoints])<br>"
|
||||
. += "<a href='?src=\ref[src];preconfigured=1'>Use preconfigured skillset</a><br>"
|
||||
@@ -30,16 +36,22 @@
|
||||
var/level = pref.skills[S.ID]
|
||||
. += "<tr style='text-align:left;'>"
|
||||
. += "<th><a href='?src=\ref[src];skillinfo=\ref[S]'>[S.name]</a></th>"
|
||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_NONE]'><font color=[(level == SKILL_NONE) ? "red" : "black"]>\[Untrained\]</font></a></th>"
|
||||
. += skill_to_button(S, "Untrained", level, SKILL_NONE)
|
||||
// secondary skills don't have an amateur level
|
||||
if(S.secondary)
|
||||
. += "<th></th>"
|
||||
else
|
||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_BASIC]'><font color=[(level == SKILL_BASIC) ? "red" : "black"]>\[Amateur\]</font></a></th>"
|
||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_ADEPT]'><font color=[(level == SKILL_ADEPT) ? "red" : "black"]>\[Trained\]</font></a></th>"
|
||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_EXPERT]'><font color=[(level == SKILL_EXPERT) ? "red" : "black"]>\[Professional\]</font></a></th>"
|
||||
. += skill_to_button(S, "Amateur", level, SKILL_BASIC)
|
||||
. += skill_to_button(S, "Trained", level, SKILL_ADEPT)
|
||||
. += skill_to_button(S, "Professional", level, SKILL_EXPERT)
|
||||
. += "</tr>"
|
||||
. += "</table>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level)
|
||||
if(current_level == selection_level)
|
||||
return "<th><span class='linkOn'>[level_name]</span></th>"
|
||||
return "<th><a href='?src=\ref[src];setskill=\ref[skill];newvalue=[selection_level]'>[level_name]</a></th>"
|
||||
|
||||
/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user)
|
||||
if(href_list["skillinfo"])
|
||||
@@ -57,7 +69,7 @@
|
||||
|
||||
else if(href_list["preconfigured"])
|
||||
var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE
|
||||
if(!selected && !CanUseTopic(user)) return
|
||||
if(!selected || !CanUseTopic(user)) return
|
||||
|
||||
pref.ZeroSkills(1)
|
||||
for(var/V in SKILL_PRE[selected])
|
||||
|
||||
@@ -19,21 +19,15 @@ datum/preferences
|
||||
var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color
|
||||
var/be_special = 0 //Special role selection
|
||||
var/UI_style = "Midnight"
|
||||
var/toggles = TOGGLES_DEFAULT
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
var/be_random_name = 0 //whether we are a random name every round
|
||||
var/gender = MALE //gender of character (well duh)
|
||||
var/age = 30 //age of character
|
||||
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/underwear_top
|
||||
var/underwear_bottom
|
||||
var/undershirt //undershirt type
|
||||
var/socks //socks type
|
||||
var/backbag = 2 //backpack type
|
||||
var/pdachoice = 1 //PDA type
|
||||
var/h_style = "Bald" //Hair type
|
||||
@@ -65,8 +59,6 @@ datum/preferences
|
||||
|
||||
//Mob preview
|
||||
var/icon/preview_icon = null
|
||||
var/icon/preview_icon_front = null
|
||||
var/icon/preview_icon_side = null
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
@@ -109,24 +101,28 @@ datum/preferences
|
||||
|
||||
// OOC Metadata:
|
||||
var/metadata = ""
|
||||
var/list/ignored_players = list()
|
||||
|
||||
var/client/client = null
|
||||
var/client_ckey = null
|
||||
|
||||
// Communicator identity data
|
||||
var/communicator_visibility = 0
|
||||
|
||||
var/client/client = null
|
||||
|
||||
var/datum/category_collection/player_setup_collection/player_setup
|
||||
var/datum/browser/panel
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
player_setup = new(src)
|
||||
gender = pick(MALE, FEMALE)
|
||||
real_name = random_name(gender,species)
|
||||
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
||||
set_biological_gender(pick(MALE, FEMALE))
|
||||
real_name = random_name(identifying_gender,species)
|
||||
b_type = RANDOM_BLOOD_TYPE
|
||||
|
||||
gear = list()
|
||||
|
||||
if(istype(C))
|
||||
client = C
|
||||
client_ckey = C.ckey
|
||||
if(!IsGuestKey(C.key))
|
||||
load_path(C.ckey)
|
||||
if(load_preferences())
|
||||
@@ -187,6 +183,12 @@ datum/preferences
|
||||
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
|
||||
if(!get_mob_by_key(client_ckey))
|
||||
user << "<span class='danger'>No mob exists for the given client!</span>"
|
||||
close_load_dialog(user)
|
||||
return
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
@@ -204,7 +206,10 @@ datum/preferences
|
||||
dat += player_setup.content(user)
|
||||
|
||||
dat += "</html></body>"
|
||||
user << browse(dat, "window=preferences;size=625x736")
|
||||
//user << browse(dat, "window=preferences;size=635x736")
|
||||
var/datum/browser/popup = new(user, "Character Setup","Character Setup", 800, 800, src)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/datum/preferences/proc/process_link(mob/user, list/href_list)
|
||||
if(!user) return
|
||||
@@ -243,111 +248,26 @@ datum/preferences
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0)
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1)
|
||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
// This needs to happen before anything else becuase it sets some variables.
|
||||
character.set_species(species)
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(be_random_name)
|
||||
real_name = random_name(gender,species)
|
||||
real_name = random_name(identifying_gender,species)
|
||||
|
||||
if(config.humans_need_surnames)
|
||||
var/firstspace = findtext(real_name, " ")
|
||||
var/name_length = length(real_name)
|
||||
if(!firstspace) //we need a surname
|
||||
real_name += " [pick(last_names)]"
|
||||
else if(firstspace == name_length)
|
||||
real_name += "[pick(last_names)]"
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
player_setup.copy_to_mob(character)
|
||||
|
||||
character.real_name = real_name
|
||||
character.name = character.real_name
|
||||
if(character.dna)
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
character.flavor_texts["general"] = flavor_texts["general"]
|
||||
character.flavor_texts["head"] = flavor_texts["head"]
|
||||
character.flavor_texts["face"] = flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = flavor_texts["feet"]
|
||||
|
||||
character.med_record = med_record
|
||||
character.sec_record = sec_record
|
||||
character.gen_record = gen_record
|
||||
character.exploit_record = exploit_record
|
||||
|
||||
character.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.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.home_system = home_system
|
||||
character.citizenship = citizenship
|
||||
character.personal_faction = faction
|
||||
character.religion = religion
|
||||
|
||||
character.skills = skills
|
||||
character.used_skillpoints = used_skillpoints
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/status = organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
if(status == "amputated")
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(rlimb_data[name])
|
||||
O.robotize(rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
|
||||
var/status = organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
|
||||
character.underwear_bottom = underwear_bottom
|
||||
character.underwear_top = underwear_top
|
||||
character.undershirt = undershirt
|
||||
character.socks = socks
|
||||
|
||||
if(backbag > 4 || backbag < 1)
|
||||
backbag = 1 //Same as above
|
||||
character.backbag = backbag
|
||||
|
||||
if(pdachoice > 3 || pdachoice < 1)
|
||||
pdachoice = 1
|
||||
character.pdachoice = pdachoice
|
||||
|
||||
character.update_body()
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
character.update_mutations(0)
|
||||
character.update_body(0)
|
||||
character.update_underwear(0)
|
||||
character.update_hair(0)
|
||||
character.update_icons()
|
||||
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
var/dat = "<body>"
|
||||
@@ -367,7 +287,11 @@ datum/preferences
|
||||
|
||||
dat += "<hr>"
|
||||
dat += "</center></tt>"
|
||||
user << browse(dat, "window=saves;size=300x390")
|
||||
//user << browse(dat, "window=saves;size=300x390")
|
||||
panel = new(user, "Character Slots", "Character Slots", 300, 390, src)
|
||||
panel.set_content(dat)
|
||||
panel.open()
|
||||
|
||||
/datum/preferences/proc/close_load_dialog(mob/user)
|
||||
user << browse(null, "window=saves")
|
||||
//user << browse(null, "window=saves")
|
||||
panel.close()
|
||||
@@ -22,7 +22,7 @@ var/global/list/citizenship_choices = list(
|
||||
|
||||
var/global/list/home_system_choices = list(
|
||||
"Sol",
|
||||
"Vir",
|
||||
starsys_name,
|
||||
"Nyx",
|
||||
"Tau Ceti",
|
||||
"Epsilon Ursae Minoris",
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
//Toggles for preferences, normal clients
|
||||
/client/verb/toggle_ghost_ears()
|
||||
set name = "Show/Hide Ghost Ears"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles between seeing all mob speech and nearby mob speech."
|
||||
|
||||
var/pref_path = /datum/client_preference/ghost_ears
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all mob speech as a ghost."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TGEars") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ghost_vision()
|
||||
set name = "Show/Hide Ghost Vision"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles between seeing all mob emotes and nearby mob emotes."
|
||||
|
||||
var/pref_path = /datum/client_preference/ghost_sight
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see all emotes as a ghost."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TGVision") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ghost_radio()
|
||||
set name = "Show/Hide Radio Chatter"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles between seeing all radio chat and nearby radio chatter."
|
||||
|
||||
var/pref_path = /datum/client_preference/ghost_radio
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TGRadio") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_deadchat()
|
||||
set name = "Show/Hide Deadchat"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the dead chat channel."
|
||||
|
||||
var/pref_path = /datum/client_preference/show_dsay
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TDeadChat") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ooc()
|
||||
set name = "Show/Hide OOC"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles global out of character chat."
|
||||
|
||||
var/pref_path = /datum/client_preference/show_ooc
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_looc()
|
||||
set name = "Show/Hide LOOC"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles local out of character chat."
|
||||
|
||||
var/pref_path = /datum/client_preference/show_looc
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_typing()
|
||||
set name = "Show/Hide Typing Indicator"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the speech bubble typing indicator."
|
||||
|
||||
var/pref_path = /datum/client_preference/show_typing_indicator
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see the speech indicator."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ahelp_sound()
|
||||
set name = "Toggle Admin Help Sound"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the ability to hear a noise broadcasted when you get an admin message."
|
||||
|
||||
var/pref_path = /datum/client_preference/holder/play_adminhelp_ping
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TAHelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_lobby_music()
|
||||
set name = "Toggle Lobby Music"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the music in the lobby."
|
||||
|
||||
var/pref_path = /datum/client_preference/play_lobby_music
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TLobMusic") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_admin_midis()
|
||||
set name = "Toggle Admin MIDIs"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the music in the lobby."
|
||||
|
||||
var/pref_path = /datum/client_preference/play_admin_midis
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear MIDIs from admins."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TAMidis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ambience()
|
||||
set name = "Toggle Ambience"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles the playing of ambience."
|
||||
|
||||
var/pref_path = /datum/client_preference/play_ambiance
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear ambient noise."
|
||||
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_be_special(role in be_special_flags)
|
||||
set name = "Toggle SpecialRole Candidacy"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles which special roles you would like to be a candidate for, during events."
|
||||
|
||||
var/role_flag = be_special_flags[role]
|
||||
if(!role_flag) return
|
||||
|
||||
prefs.be_special ^= role_flag
|
||||
prefs.save_preferences()
|
||||
|
||||
src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)."
|
||||
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_safe_firing()
|
||||
set name = "Toggle Gun Firing Intent Requirement"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles between safe and dangerous firing. Safe requires a non-help intent to fire, dangerous can be fired on help intent."
|
||||
|
||||
var/pref_path = /datum/client_preference/safefiring
|
||||
toggle_preference(pref_path)
|
||||
prefs.save_preferences()
|
||||
|
||||
src << "You will now use [(is_preference_enabled(/datum/client_preference/safefiring)) ? "safe" : "dangerous"] firearms firing."
|
||||
|
||||
feedback_add_details("admin_verb","TFiringMode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//Toggles for Staff
|
||||
//Developers
|
||||
|
||||
/client/proc/toggle_debug_logs()
|
||||
set name = "Toggle Debug Logs"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles debug logs."
|
||||
|
||||
var/pref_path = /datum/client_preference/debug/show_debug_logs
|
||||
|
||||
if(check_rights(R_ADMIN|R_DEBUG))
|
||||
toggle_preference(pref_path)
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs."
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//Mods
|
||||
/client/proc/toggle_attack_logs()
|
||||
set name = "Toggle Attack Logs"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles attack logs."
|
||||
|
||||
var/pref_path = /datum/client_preference/mod/show_attack_logs
|
||||
|
||||
if(check_rights(R_ADMIN|R_MOD))
|
||||
toggle_preference(pref_path)
|
||||
src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs."
|
||||
prefs.save_preferences()
|
||||
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -1,159 +0,0 @@
|
||||
//toggles
|
||||
/client/verb/toggle_ghost_ears()
|
||||
set name = "Show/Hide GhostEars"
|
||||
set category = "Preferences"
|
||||
set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs"
|
||||
prefs.toggles ^= CHAT_GHOSTEARS
|
||||
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]."
|
||||
prefs.save_preferences()
|
||||
feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ghost_sight()
|
||||
set name = "Show/Hide GhostSight"
|
||||
set category = "Preferences"
|
||||
set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs"
|
||||
prefs.toggles ^= CHAT_GHOSTSIGHT
|
||||
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]."
|
||||
prefs.save_preferences()
|
||||
feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ghost_radio()
|
||||
set name = "Enable/Disable GhostRadio"
|
||||
set category = "Preferences"
|
||||
set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers"
|
||||
prefs.toggles ^= CHAT_GHOSTRADIO
|
||||
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"]."
|
||||
prefs.save_preferences()
|
||||
feedback_add_details("admin_verb","TGR")
|
||||
|
||||
/client/proc/toggle_hear_radio()
|
||||
set name = "Show/Hide RadioChatter"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggle seeing radiochatter from radios and speakers"
|
||||
if(!holder) return
|
||||
prefs.toggles ^= CHAT_RADIO
|
||||
prefs.save_preferences()
|
||||
usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers"
|
||||
feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggleadminhelpsound()
|
||||
set name = "Hear/Silence Adminhelps"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggle hearing a notification when admin PMs are recieved"
|
||||
if(!holder) return
|
||||
prefs.toggles ^= SOUND_ADMINHELP
|
||||
prefs.save_preferences()
|
||||
usr << "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive."
|
||||
feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/deadchat() // Deadchat toggle is usable by anyone.
|
||||
set name = "Show/Hide Deadchat"
|
||||
set category = "Preferences"
|
||||
set desc ="Toggles seeing deadchat"
|
||||
prefs.toggles ^= CHAT_DEAD
|
||||
prefs.save_preferences()
|
||||
|
||||
if(src.holder)
|
||||
src << "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat."
|
||||
else
|
||||
src << "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat."
|
||||
|
||||
feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggleprayers()
|
||||
set name = "Show/Hide Prayers"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles seeing prayers"
|
||||
prefs.toggles ^= CHAT_PRAYER
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat."
|
||||
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggletitlemusic()
|
||||
set name = "Hear/Silence LobbyMusic"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles hearing the GameLobby music"
|
||||
prefs.toggles ^= SOUND_LOBBY
|
||||
prefs.save_preferences()
|
||||
if(prefs.toggles & SOUND_LOBBY)
|
||||
src << "You will now hear music in the game lobby."
|
||||
if(istype(mob, /mob/new_player))
|
||||
playtitlemusic()
|
||||
else
|
||||
src << "You will no longer hear music in the game lobby."
|
||||
if(istype(mob, /mob/new_player))
|
||||
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jamsz
|
||||
feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/togglemidis()
|
||||
set name = "Hear/Silence Midis"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles hearing sounds uploaded by admins"
|
||||
prefs.toggles ^= SOUND_MIDI
|
||||
prefs.save_preferences()
|
||||
if(prefs.toggles & SOUND_MIDI)
|
||||
src << "You will now hear any sounds uploaded by admins."
|
||||
var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777)
|
||||
break_sound.priority = 250
|
||||
src << break_sound //breaks the client's sound output on channel 777
|
||||
else
|
||||
src << "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled."
|
||||
feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/listen_ooc()
|
||||
set name = "Show/Hide OOC"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles seeing OutOfCharacter chat"
|
||||
prefs.toggles ^= CHAT_OOC
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel."
|
||||
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/listen_looc()
|
||||
set name = "Show/Hide LOOC"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles seeing Local OutOfCharacter chat"
|
||||
prefs.toggles ^= CHAT_LOOC
|
||||
prefs.save_preferences()
|
||||
|
||||
src << "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel."
|
||||
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/toggle_chattags()
|
||||
set name = "Show/Hide Chat Tags"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles seeing chat tags/icons"
|
||||
prefs.toggles ^= CHAT_NOICONS
|
||||
prefs.save_preferences()
|
||||
|
||||
src << "You will [!(prefs.toggles & CHAT_NOICONS) ? "now" : "no longer"] see chat tag icons."
|
||||
feedback_add_details("admin_verb","TCTAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful
|
||||
set name = "Hear/Silence Ambience"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles hearing ambient sound effects"
|
||||
prefs.toggles ^= SOUND_AMBIENCE
|
||||
prefs.save_preferences()
|
||||
if(prefs.toggles & SOUND_AMBIENCE)
|
||||
src << "You will now hear ambient sounds."
|
||||
else
|
||||
src << "You will no longer hear ambient sounds."
|
||||
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1)
|
||||
src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2)
|
||||
feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//be special
|
||||
/client/verb/toggle_be_special(role in be_special_flags)
|
||||
set name = "Toggle SpecialRole Candidacy"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles which special roles you would like to be a candidate for, during events."
|
||||
var/role_flag = be_special_flags[role]
|
||||
if(!role_flag) return
|
||||
prefs.be_special ^= role_flag
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)."
|
||||
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -5,7 +5,17 @@
|
||||
"Orange" = 'icons/mob/screen/orange.dmi',
|
||||
"old" = 'icons/mob/screen/old.dmi',
|
||||
"White" = 'icons/mob/screen/white.dmi',
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi'
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi',
|
||||
"minimalist" = 'icons/mob/screen/minimalist.dmi'
|
||||
)
|
||||
|
||||
/var/all_ui_styles_robot = list(
|
||||
"Midnight" = 'icons/mob/screen1_robot.dmi',
|
||||
"Orange" = 'icons/mob/screen1_robot.dmi',
|
||||
"old" = 'icons/mob/screen1_robot.dmi',
|
||||
"White" = 'icons/mob/screen1_robot.dmi',
|
||||
"old-noborder" = 'icons/mob/screen1_robot.dmi',
|
||||
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi'
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
@@ -20,8 +30,9 @@
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
usr << "<span class='warning'>You must be human to use this verb.</span>"
|
||||
return
|
||||
if(!isrobot(usr))
|
||||
usr << "<span class='warning'>You must be a human or a robot to use this verb.</span>"
|
||||
return
|
||||
|
||||
var/UI_style_new = input(usr, "Select a style. White is recommended for customization") as null|anything in all_ui_styles
|
||||
if(!UI_style_new) return
|
||||
@@ -41,6 +52,8 @@
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
if(isrobot(usr))
|
||||
ic = all_ui_styles_robot[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
var/list/species_restricted = null //Only these species can wear this kit.
|
||||
var/gunshot_residue //Used by forensics.
|
||||
|
||||
var/list/accessories = list()
|
||||
var/list/valid_accessory_slots
|
||||
var/list/restricted_accessory_slots
|
||||
var/list/starting_accessories
|
||||
|
||||
/*
|
||||
Sprites used when the clothing item is refit. This is done by setting icon_override.
|
||||
For best results, if this is set then sprite_sheets should be null and vice versa, but that is by no means necessary.
|
||||
@@ -22,6 +27,13 @@
|
||||
..()
|
||||
gunshot_residue = null
|
||||
|
||||
/obj/item/clothing/New()
|
||||
..()
|
||||
if(starting_accessories)
|
||||
for(var/T in starting_accessories)
|
||||
var/obj/item/clothing/accessory/tie = new T(src)
|
||||
src.attach_accessory(null, tie)
|
||||
|
||||
//BS12: Species-restricted clothing check.
|
||||
/obj/item/clothing/mob_can_equip(M as mob, slot)
|
||||
|
||||
@@ -204,7 +216,7 @@
|
||||
body_parts_covered = HANDS
|
||||
slot_flags = SLOT_GLOVES
|
||||
attack_verb = list("challenged")
|
||||
species_restricted = list("exclude","Unathi","Tajara")
|
||||
species_restricted = null
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
|
||||
)
|
||||
@@ -226,7 +238,7 @@
|
||||
/obj/item/clothing/gloves/proc/Touch(var/atom/A, var/proximity)
|
||||
return 0 // return 1 to cancel attack_hand()
|
||||
|
||||
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
|
||||
/*/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
|
||||
if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
|
||||
if (clipped)
|
||||
user << "<span class='notice'>The [src] have already been clipped!</span>"
|
||||
@@ -243,7 +255,7 @@
|
||||
species_restricted -= "Unathi"
|
||||
species_restricted -= "Tajara"
|
||||
return
|
||||
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//Head
|
||||
/obj/item/clothing/head
|
||||
@@ -337,11 +349,11 @@
|
||||
overlays |= light_overlay_cache["[light_overlay]_icon"]
|
||||
|
||||
// Generate and cache the on-mob icon, which is used in update_inv_head().
|
||||
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype()]" : ""]"
|
||||
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype(H)]" : ""]"
|
||||
if(!light_overlay_cache[cache_key])
|
||||
var/use_icon = 'icons/mob/light_overlays.dmi'
|
||||
if(H && sprite_sheets[H.species.get_bodytype()])
|
||||
use_icon = sprite_sheets[H.species.get_bodytype()]
|
||||
if(H && sprite_sheets[H.species.get_bodytype(H)])
|
||||
use_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||
light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
|
||||
|
||||
if(H)
|
||||
@@ -394,7 +406,7 @@
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
force = 2
|
||||
var/overshoes = 0
|
||||
species_restricted = list("exclude","Teshari", "Unathi","Tajara")
|
||||
species_restricted = list("exclude","Teshari")
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
|
||||
)
|
||||
@@ -501,7 +513,6 @@
|
||||
2 = Report detailed damages
|
||||
3 = Report location
|
||||
*/
|
||||
var/list/accessories = list()
|
||||
var/displays_id = 1
|
||||
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
@@ -512,6 +523,16 @@
|
||||
//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
|
||||
valid_accessory_slots = list("utility","armband","decor")
|
||||
restricted_accessory_slots = list("utility", "armband")
|
||||
|
||||
|
||||
/obj/item/clothing/under/attack_hand(var/mob/user)
|
||||
if(accessories && accessories.len)
|
||||
..()
|
||||
if ((ishuman(usr) || issmall(usr)) && src.loc == user)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/New()
|
||||
..()
|
||||
@@ -535,8 +556,8 @@
|
||||
var/icon/under_icon
|
||||
if(icon_override)
|
||||
under_icon = icon_override
|
||||
else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()])
|
||||
under_icon = sprite_sheets[H.species.get_bodytype()]
|
||||
else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)])
|
||||
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||
else if(item_icons && item_icons[slot_w_uniform_str])
|
||||
under_icon = item_icons[slot_w_uniform_str]
|
||||
else
|
||||
@@ -558,8 +579,8 @@
|
||||
var/icon/under_icon
|
||||
if(icon_override)
|
||||
under_icon = icon_override
|
||||
else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()])
|
||||
under_icon = sprite_sheets[H.species.get_bodytype()]
|
||||
else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)])
|
||||
under_icon = sprite_sheets[H.species.get_bodytype(H)]
|
||||
else if(item_icons && item_icons[slot_w_uniform_str])
|
||||
under_icon = item_icons[slot_w_uniform_str]
|
||||
else
|
||||
@@ -578,69 +599,6 @@
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_w_uniform()
|
||||
|
||||
/obj/item/clothing/under/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
if(istype(A))
|
||||
.=1
|
||||
else
|
||||
return 0
|
||||
if(accessories.len && (A.slot in list("utility","armband")))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/under/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/clothing/accessory))
|
||||
var/obj/item/clothing/accessory/A = I
|
||||
if(can_attach_accessory(A))
|
||||
user.drop_item()
|
||||
accessories += A
|
||||
A.on_attached(src, user)
|
||||
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_w_uniform()
|
||||
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You cannot attach more accessories of this type to [src].</span>"
|
||||
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attackby(I, user)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/attack_hand(mob/user as mob)
|
||||
//only forward to the attached accessory if the clothing is equipped (not in a storage)
|
||||
if(accessories.len && src.loc == user)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attack_hand(user)
|
||||
return
|
||||
|
||||
if ((ishuman(usr) || issmall(usr)) && src.loc == user) //make it harder to accidentally undress yourself
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/MouseDrop(obj/over_object as obj)
|
||||
if (ishuman(usr) || issmall(usr))
|
||||
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
|
||||
if (!(src.loc == usr))
|
||||
return
|
||||
|
||||
if (( usr.restrained() ) || ( usr.stat ))
|
||||
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)
|
||||
@@ -653,13 +611,10 @@
|
||||
user << "Its vital tracker appears to be enabled."
|
||||
if(3)
|
||||
user << "Its vital tracker and tracking beacon appear to be enabled."
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
user << "\A [A] is attached to it."
|
||||
|
||||
/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
|
||||
var/mob/M = usr
|
||||
if (istype(M, /mob/dead/)) return
|
||||
if (istype(M, /mob/observer)) return
|
||||
if (usr.stat || usr.restrained()) return
|
||||
if(has_sensor >= 2)
|
||||
usr << "The controls are locked."
|
||||
@@ -678,27 +633,16 @@
|
||||
if (src.loc == usr)
|
||||
switch(sensor_mode)
|
||||
if(0)
|
||||
usr << "You disable your suit's remote sensing equipment."
|
||||
usr.visible_message("[usr] adjusts their sensors.", "You disable your suit's remote sensing equipment.")
|
||||
if(1)
|
||||
usr << "Your suit will now report whether you are live or dead."
|
||||
usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report whether you are live or dead.")
|
||||
if(2)
|
||||
usr << "Your suit will now report your vital lifesigns."
|
||||
usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns.")
|
||||
if(3)
|
||||
usr << "Your suit will now report your vital lifesigns as well as your coordinate position."
|
||||
usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns as well as your coordinate position.")
|
||||
|
||||
else if (istype(src.loc, /mob))
|
||||
switch(sensor_mode)
|
||||
if(0)
|
||||
for(var/mob/V in viewers(usr, 1))
|
||||
V.show_message("\red [usr] disables [src.loc]'s remote sensing equipment.", 1)
|
||||
if(1)
|
||||
for(var/mob/V in viewers(usr, 1))
|
||||
V.show_message("[usr] turns [src.loc]'s remote sensors to binary.", 1)
|
||||
if(2)
|
||||
for(var/mob/V in viewers(usr, 1))
|
||||
V.show_message("[usr] sets [src.loc]'s sensors to track vitals.", 1)
|
||||
if(3)
|
||||
for(var/mob/V in viewers(usr, 1))
|
||||
V.show_message("[usr] sets [src.loc]'s sensors to maximum.", 1)
|
||||
usr.visible_message("[usr] adjusts [src.loc]'s sensors.", "You adjust [src.loc]'s sensors.")
|
||||
|
||||
/obj/item/clothing/under/verb/toggle()
|
||||
set name = "Toggle Suit Sensors"
|
||||
@@ -759,34 +703,7 @@
|
||||
usr << "<span class='notice'>You roll down your [src]'s sleeves.</span>"
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
if(!(A in accessories))
|
||||
return
|
||||
|
||||
A.on_removed(user)
|
||||
accessories -= A
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/under/verb/removetie()
|
||||
set name = "Remove Accessory"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
if(!accessories.len) return
|
||||
var/obj/item/clothing/accessory/A
|
||||
if(accessories.len > 1)
|
||||
A = input("Select an accessory to remove from [src]") as null|anything in accessories
|
||||
else
|
||||
A = accessories[1]
|
||||
src.remove_accessory(usr,A)
|
||||
|
||||
/obj/item/clothing/under/rank/New()
|
||||
sensor_mode = pick(0,1,2,3)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/emp_act(severity)
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.emp_act(severity)
|
||||
..()
|
||||
@@ -0,0 +1,107 @@
|
||||
/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
if(valid_accessory_slots && istype(A) && (A.slot in valid_accessory_slots))
|
||||
.=1
|
||||
else
|
||||
return 0
|
||||
if(accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/clothing/accessory))
|
||||
|
||||
if(!valid_accessory_slots || !valid_accessory_slots.len)
|
||||
usr << "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>"
|
||||
return
|
||||
|
||||
var/obj/item/clothing/accessory/A = I
|
||||
if(can_attach_accessory(A))
|
||||
user.drop_item()
|
||||
attach_accessory(user, A)
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>You cannot attach more accessories of this type to [src].</span>"
|
||||
return
|
||||
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attackby(I, user)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/attack_hand(var/mob/user)
|
||||
//only forward to the attached accessory if the clothing is equipped (not in a storage)
|
||||
if(accessories.len && src.loc == user)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attack_hand(user)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/MouseDrop(var/obj/over_object)
|
||||
if (ishuman(usr) || issmall(usr))
|
||||
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
|
||||
if (!(src.loc == usr))
|
||||
return
|
||||
|
||||
if (( usr.restrained() ) || ( usr.stat ))
|
||||
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/examine(var/mob/user)
|
||||
..(user)
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
user << "\A [A] is attached to it."
|
||||
|
||||
/**
|
||||
* Attach accessory A to src
|
||||
*
|
||||
* user is the user doing the attaching. Can be null, such as when attaching
|
||||
* items on spawn
|
||||
*/
|
||||
/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
accessories += A
|
||||
A.on_attached(src, user)
|
||||
src.verbs |= /obj/item/clothing/proc/removetie_verb
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
if(!(A in accessories))
|
||||
return
|
||||
|
||||
A.on_removed(user)
|
||||
accessories -= A
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/proc/removetie_verb()
|
||||
set name = "Remove Accessory"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
if(!accessories.len) return
|
||||
var/obj/item/clothing/accessory/A
|
||||
if(accessories.len > 1)
|
||||
A = input("Select an accessory to remove from [src]") as null|anything in accessories
|
||||
else
|
||||
A = accessories[1]
|
||||
src.remove_accessory(usr,A)
|
||||
if(!accessories.len)
|
||||
src.verbs -= /obj/item/clothing/proc/removetie_verb
|
||||
|
||||
/obj/item/clothing/emp_act(severity)
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.emp_act(severity)
|
||||
..()
|
||||
@@ -11,73 +11,135 @@
|
||||
species_restricted = list("Skrell")
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain
|
||||
name = "skrell headtail chains"
|
||||
name = "Gold headtail chains"
|
||||
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain"
|
||||
item_state = "skrell_chain"
|
||||
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/silver
|
||||
name = "Silver headtail chains"
|
||||
desc = "A delicate silver chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "skrell_chain_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/bluejewels
|
||||
name = "Blue jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with blue jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_bjewel"
|
||||
item_state = "skrell_chain_bjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/redjewels
|
||||
name = "Red jeweled golden headtail chains"
|
||||
desc = "A delicate golden chain adorned with red jewels worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_rjewel"
|
||||
item_state = "skrell_chain_rjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/chain/ebony
|
||||
name = "Ebony headtail chains"
|
||||
desc = "A delicate ebony chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_ebony"
|
||||
item_state = "skrell_chain_ebony"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band
|
||||
name = "skrell headtail bands"
|
||||
name = "Gold headtail bands"
|
||||
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band"
|
||||
item_state = "skrell_band"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/silver
|
||||
name = "Silver headtail bands"
|
||||
desc = "Silver metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "skrell_band_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/bluejewels
|
||||
name = "Blue jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with blue jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_bjewel"
|
||||
item_state = "skrell_band_bjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/redjewels
|
||||
name = "Red jeweled golden headtail bands"
|
||||
desc = "Golden metallic bands adorned with red jewels worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_rjewel"
|
||||
item_state = "skrell_band_rjewel"
|
||||
|
||||
/obj/item/clothing/ears/skrell/band/ebony
|
||||
name = "Ebony headtail bands"
|
||||
desc = "Ebony bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_ebony"
|
||||
item_state = "skrell_band_ebony"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/band
|
||||
name = "Colored headtail bands"
|
||||
desc = "Metallic bands worn by male skrell to adorn their head tails."
|
||||
icon_state = "skrell_band_sil"
|
||||
item_state = "skrell_band_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/colored/chain
|
||||
name = "Colored headtail chains"
|
||||
desc = "A delicate chain worn by female skrell to decorate their head tails."
|
||||
icon_state = "skrell_chain_sil"
|
||||
item_state = "skrell_chain_sil"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female
|
||||
name = "skrell headtail cloth"
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
icon_state = "skrell_cloth_female"
|
||||
item_state = "skrell_cloth_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/black
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_female"
|
||||
item_state = "skrell_cloth_black_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/blue
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_female"
|
||||
item_state = "skrell_cloth_blue_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/green
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_female"
|
||||
item_state = "skrell_cloth_green_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/pink
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth shawl worn by female skrell draped around their head tails."
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_female"
|
||||
item_state = "skrell_cloth_pink_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_female/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_female"
|
||||
item_state = "skrell_cloth_lblue_female"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male
|
||||
name = "skrell headtail cloth"
|
||||
name = "red headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
icon_state = "skrell_cloth_male"
|
||||
item_state = "skrell_cloth_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/black
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "black headtail cloth"
|
||||
icon_state = "skrell_cloth_black_male"
|
||||
item_state = "skrell_cloth_black_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/blue
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "blue headtail cloth"
|
||||
icon_state = "skrell_cloth_blue_male"
|
||||
item_state = "skrell_cloth_blue_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/green
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "green headtail cloth"
|
||||
icon_state = "skrell_cloth_green_male"
|
||||
item_state = "skrell_cloth_green_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/pink
|
||||
name = "skrell headtail cloth"
|
||||
desc = "A cloth band worn by male skrell around their head tails."
|
||||
name = "pink headtail cloth"
|
||||
icon_state = "skrell_cloth_pink_male"
|
||||
item_state = "skrell_cloth_pink_male"
|
||||
item_state = "skrell_cloth_pink_male"
|
||||
|
||||
/obj/item/clothing/ears/skrell/cloth_male/lightblue
|
||||
name = "light blue headtail cloth"
|
||||
icon_state = "skrell_cloth_lblue_male"
|
||||
item_state = "skrell_cloth_lblue_male"
|
||||
@@ -25,21 +25,14 @@
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
action_button_name = "Toggle Visor"
|
||||
var/flipped = 0 //Piggybacked from cap flipping.
|
||||
|
||||
/obj/item/clothing/head/helmet/riot/dropped()
|
||||
src.icon_state = initial(icon_state)
|
||||
src.flipped=0
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/helmet/riot/attack_self(mob/user)
|
||||
src.flipped = !src.flipped
|
||||
if(src.flipped)
|
||||
icon_state = "[icon_state]up"
|
||||
user << "You flip the visor up."
|
||||
/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]up"
|
||||
user << "You raise the visor on the riot helmet."
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
user << "You flip the visor down."
|
||||
user << "You lower the visor on the riot helmet."
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
|
||||
/obj/item/clothing/head/helmet/laserproof
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
icon_state = "beret_navy_officer"
|
||||
/obj/item/clothing/head/beret/sec/navy/hos
|
||||
name = "officer beret"
|
||||
desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
|
||||
desc = "A navy blue beret with a head of security's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_navy_hos"
|
||||
/obj/item/clothing/head/beret/sec/navy/warden
|
||||
name = "warden beret"
|
||||
@@ -79,7 +79,7 @@
|
||||
icon_state = "beret_corporate_officer"
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos
|
||||
name = "officer beret"
|
||||
desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
|
||||
desc = "A corporate black beret with a head of security's rank emblem. For officers that are more inclined towards style than safety."
|
||||
icon_state = "beret_corporate_hos"
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden
|
||||
name = "warden beret"
|
||||
@@ -95,11 +95,11 @@
|
||||
icon_state = "beret_purple"
|
||||
/obj/item/clothing/head/beret/centcom/officer
|
||||
name = "officers beret"
|
||||
desc = "A black beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces."
|
||||
desc = "A dark blue beret adorned with a silver patch. Worn by NanoTrasen Officials."
|
||||
icon_state = "beret_centcom_officer"
|
||||
/obj/item/clothing/head/beret/centcom/captain
|
||||
name = "captains beret"
|
||||
desc = "A white beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces."
|
||||
desc = "A white beret adorned with a blue patch. Worn by NanoTrasen command staff."
|
||||
icon_state = "beret_centcom_captain"
|
||||
|
||||
//Medical
|
||||
@@ -123,4 +123,8 @@
|
||||
|
||||
/obj/item/clothing/head/surgery/black
|
||||
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black."
|
||||
icon_state = "surgcap_black"
|
||||
icon_state = "surgcap_black"
|
||||
|
||||
/obj/item/clothing/head/surgery/navyblue
|
||||
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue."
|
||||
icon_state = "surgcap_navyblue"
|
||||
@@ -273,329 +273,22 @@
|
||||
icon_state = "orange_bandana"
|
||||
body_parts_covered = 0
|
||||
|
||||
//Hijabs
|
||||
|
||||
/obj/item/clothing/head/hijab
|
||||
name = "black hijab"
|
||||
desc = "A black veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_black"
|
||||
name = "hijab"
|
||||
desc = "A veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab"
|
||||
body_parts_covered = 0
|
||||
flags_inv = BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/hijab/white
|
||||
name = "white hijab"
|
||||
desc = "A white veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_white"
|
||||
|
||||
/obj/item/clothing/head/hijab/aqua
|
||||
name = "aqua hijab"
|
||||
desc = "An aqua veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_aqua"
|
||||
|
||||
/obj/item/clothing/head/hijab/blue
|
||||
name = "blue hijab"
|
||||
desc = "A blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_blue"
|
||||
|
||||
/obj/item/clothing/head/hijab/brown
|
||||
name = "brown hijab"
|
||||
desc = "A brown veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_brown"
|
||||
|
||||
/obj/item/clothing/head/hijab/darkblue
|
||||
name = "bark blue hijab"
|
||||
desc = "A dark blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_darkblue"
|
||||
|
||||
/obj/item/clothing/head/hijab/darkred
|
||||
name = "dark red hijab"
|
||||
desc = "A dark red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_darkred"
|
||||
|
||||
/obj/item/clothing/head/hijab/green
|
||||
name = "green hijab"
|
||||
desc = "A green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_green"
|
||||
|
||||
/obj/item/clothing/head/hijab/grey
|
||||
name = "grey hijab"
|
||||
desc = "A grey veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_grey"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightblue
|
||||
name = "light blue hijab"
|
||||
desc = "A light blue veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightblue"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightbrown
|
||||
name = "light brown hijab"
|
||||
desc = "A light brown veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightbrown"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightgreen
|
||||
name = "light green hijab"
|
||||
desc = "A light green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightgreen"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightpurple
|
||||
name = "light purple hijab"
|
||||
desc = "A light purple veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightpurple"
|
||||
|
||||
/obj/item/clothing/head/hijab/lightred
|
||||
name = "light red hijab"
|
||||
desc = "A light red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_lightred"
|
||||
|
||||
/obj/item/clothing/head/hijab/maroon
|
||||
name = "maroon hijab"
|
||||
desc = "A maroon veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_maroon"
|
||||
|
||||
/obj/item/clothing/head/hijab/orange
|
||||
name = "orange hijab"
|
||||
desc = "An orange veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_orange"
|
||||
|
||||
/obj/item/clothing/head/hijab/pink
|
||||
name = "pink hijab"
|
||||
desc = "A pink veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_pink"
|
||||
|
||||
/obj/item/clothing/head/hijab/purple
|
||||
name = "purple hijab"
|
||||
desc = "A purple veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_purple"
|
||||
|
||||
/obj/item/clothing/head/hijab/red
|
||||
name = "red hijab"
|
||||
desc = "A red veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_red"
|
||||
|
||||
/obj/item/clothing/head/hijab/yellowgreen
|
||||
name = "yellow green hijab"
|
||||
desc = "A yellow green veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_yellowgreen"
|
||||
|
||||
/obj/item/clothing/head/hijab/yellow
|
||||
name = "yellow hijab"
|
||||
desc = "A yellow veil that is wrapped to cover the head and chest"
|
||||
icon_state = "hijab_yellow"
|
||||
|
||||
//Kippot
|
||||
|
||||
/obj/item/clothing/head/kippa
|
||||
name = "black kippa"
|
||||
desc = "A small, brimless cap. It is black."
|
||||
icon_state = "kippa_black"
|
||||
name = "kippa"
|
||||
desc = "A small, brimless cap."
|
||||
icon_state = "kippa"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/kippa/aqua
|
||||
name = "aqua kippa"
|
||||
desc = "A small, brimless cap. It is aqua."
|
||||
icon_state = "kippa_aqua"
|
||||
|
||||
/obj/item/clothing/head/kippa/blue
|
||||
name = "blue kippa"
|
||||
desc = "A small, brimless cap. It is blue."
|
||||
icon_state = "kippa_blue"
|
||||
|
||||
/obj/item/clothing/head/kippa/brown
|
||||
name = "brown kippa"
|
||||
desc = "A small, brimless cap. It is blue."
|
||||
icon_state = "kippa_brown"
|
||||
|
||||
/obj/item/clothing/head/kippa/darkblue
|
||||
name = "dark blue kippa"
|
||||
desc = "A small, brimless cap. It is dark blue."
|
||||
icon_state = "kippa_darkblue"
|
||||
|
||||
/obj/item/clothing/head/kippa/darkred
|
||||
name = "dark red kippa"
|
||||
desc = "A small, brimless cap. It is dark red."
|
||||
icon_state = "kippa_darkred"
|
||||
|
||||
/obj/item/clothing/head/kippa/green
|
||||
name = "green kippa"
|
||||
desc = "A small, brimless cap. It is green."
|
||||
icon_state = "kippa_green"
|
||||
|
||||
/obj/item/clothing/head/kippa/grey
|
||||
name = "grey kippa"
|
||||
desc = "A small, brimless cap. It is grey."
|
||||
icon_state = "kippa_grey"
|
||||
|
||||
/obj/item/clothing/head/kippa/lightblue
|
||||
name = "light blue kippa"
|
||||
desc = "A small, brimless cap. It is light blue."
|
||||
icon_state = "kippa_lightblue"
|
||||
|
||||
/obj/item/clothing/head/kippa/lightbrown
|
||||
name = "light brown kippa"
|
||||
desc = "A small, brimless cap. It is light brown."
|
||||
icon_state = "kippa_lightbrown"
|
||||
|
||||
/obj/item/clothing/head/kippa/lightgreen
|
||||
name = "light green kippa"
|
||||
desc = "A small, brimless cap. It is light green."
|
||||
icon_state = "kippa_lightgreen"
|
||||
|
||||
/obj/item/clothing/head/kippa/lightpurple
|
||||
name = "light purple kippa"
|
||||
desc = "A small, brimless cap. It is light purple."
|
||||
icon_state = "kippa_lightpurple"
|
||||
|
||||
/obj/item/clothing/head/kippa/lightred
|
||||
name = "light red kippa"
|
||||
desc = "A small, brimless cap. It is light red."
|
||||
icon_state = "kippa_lightred"
|
||||
|
||||
/obj/item/clothing/head/kippa/maroon
|
||||
name = "maroon kippa"
|
||||
desc = "A small, brimless cap. It is maroon."
|
||||
icon_state = "kippa_maroon"
|
||||
|
||||
/obj/item/clothing/head/kippa/orange
|
||||
name = "orange kippa"
|
||||
desc = "A small, brimless cap. It is orange."
|
||||
icon_state = "kippa_orange"
|
||||
|
||||
/obj/item/clothing/head/kippa/pink
|
||||
name = "pink kippa"
|
||||
desc = "A small, brimless cap. It is pink."
|
||||
icon_state = "kippa_pink"
|
||||
|
||||
/obj/item/clothing/head/kippa/purple
|
||||
name = "purple kippa"
|
||||
desc = "A small, brimless cap. It is purple."
|
||||
icon_state = "kippa_purple"
|
||||
|
||||
/obj/item/clothing/head/kippa/red
|
||||
name = "red kippa"
|
||||
desc = "A small, brimless cap. It is red."
|
||||
icon_state = "kippa_red"
|
||||
|
||||
/obj/item/clothing/head/kippa/white
|
||||
name = "white kippa"
|
||||
desc = "A small, brimless cap. It is white."
|
||||
icon_state = "kippa_white"
|
||||
|
||||
/obj/item/clothing/head/kippa/yellowgreen
|
||||
name = "yellow green kippa"
|
||||
desc = "A small, brimless cap. It is yellow green."
|
||||
icon_state = "kippa_yellowgreen"
|
||||
|
||||
/obj/item/clothing/head/kippa/yellow
|
||||
name = "yellow kippa"
|
||||
desc = "A small, brimless cap. It is yellow."
|
||||
icon_state = "kippa_yellow"
|
||||
|
||||
//Turbans
|
||||
|
||||
/obj/item/clothing/head/turban
|
||||
name = "black turban"
|
||||
desc = "A black cloth used to wind around the head"
|
||||
icon_state = "turban_black"
|
||||
name = "turban"
|
||||
desc = "A cloth used to wind around the head"
|
||||
icon_state = "turban"
|
||||
body_parts_covered = 0
|
||||
flags_inv = BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/turban/aqua
|
||||
name = "aqua turban"
|
||||
desc = "An aqua cloth used to wind around the head."
|
||||
icon_state = "turban_aqua"
|
||||
|
||||
/obj/item/clothing/head/turban/blue
|
||||
name = "blue turban"
|
||||
desc = "A blue cloth used to wind around the head."
|
||||
icon_state = "turban_blue"
|
||||
|
||||
/obj/item/clothing/head/turban/brown
|
||||
name = "brown turban"
|
||||
desc = "A brown cloth used to wind around the head."
|
||||
icon_state = "turban_brown"
|
||||
|
||||
/obj/item/clothing/head/turban/darkblue
|
||||
name = "dark blue turban"
|
||||
desc = "A dark blue cloth used to wind around the head."
|
||||
icon_state = "turban_darkblue"
|
||||
|
||||
/obj/item/clothing/head/turban/darkred
|
||||
name = "dark red turban"
|
||||
desc = "A dark red cloth used to wind around the head."
|
||||
icon_state = "turban_darkred"
|
||||
|
||||
/obj/item/clothing/head/turban/green
|
||||
name = "green turban"
|
||||
desc = "A green cloth used to wind around the head."
|
||||
icon_state = "turban_green"
|
||||
|
||||
/obj/item/clothing/head/turban/grey
|
||||
name = "grey turban"
|
||||
desc = "A grey cloth used to wind around the head."
|
||||
icon_state = "turban_grey"
|
||||
|
||||
/obj/item/clothing/head/turban/lightblue
|
||||
name = "light blue turban"
|
||||
desc = "A light blue cloth used to wind around the head."
|
||||
icon_state = "turban_lightblue"
|
||||
|
||||
/obj/item/clothing/head/turban/lightbrown
|
||||
name = "light brown turban"
|
||||
desc = "A light brown cloth used to wind around the head."
|
||||
icon_state = "turban_lightbrown"
|
||||
|
||||
/obj/item/clothing/head/turban/lightgreen
|
||||
name = "light green turban"
|
||||
desc = "A light green cloth used to wind around the head."
|
||||
icon_state = "turban_lightgreen"
|
||||
|
||||
/obj/item/clothing/head/turban/lightpurple
|
||||
name = "light purple turban"
|
||||
desc = "A light purple cloth used to wind around the head."
|
||||
icon_state = "turban_lightpurple"
|
||||
|
||||
/obj/item/clothing/head/turban/lightred
|
||||
name = "light red turban"
|
||||
desc = "A light red cloth used to wind around the head."
|
||||
icon_state = "turban_lightred"
|
||||
|
||||
/obj/item/clothing/head/turban/maroon
|
||||
name = "maroon turban"
|
||||
desc = "A maroon cloth used to wind around the head."
|
||||
icon_state = "turban_maroon"
|
||||
|
||||
/obj/item/clothing/head/turban/orange
|
||||
name = "orange turban"
|
||||
desc = "An orange cloth used to wind around the head."
|
||||
icon_state = "turban_orange"
|
||||
|
||||
/obj/item/clothing/head/turban/pink
|
||||
name = "pink turban"
|
||||
desc = "A pink cloth used to wind around the head."
|
||||
icon_state = "turban_pink"
|
||||
|
||||
/obj/item/clothing/head/turban/purple
|
||||
name = "purple turban"
|
||||
desc = "A purple cloth used to wind around the head."
|
||||
icon_state = "turban_purple"
|
||||
|
||||
/obj/item/clothing/head/turban/red
|
||||
name = "red turban"
|
||||
desc = "A red cloth used to wind around the head."
|
||||
icon_state = "turban_red"
|
||||
|
||||
/obj/item/clothing/head/turban/white
|
||||
name = "white turban"
|
||||
desc = "A white cloth used to wind around the head."
|
||||
icon_state = "turban_white"
|
||||
|
||||
/obj/item/clothing/head/turban/yellowgreen
|
||||
name = "yellow green turban"
|
||||
desc = "A yellow green cloth used to wind around the head."
|
||||
icon_state = "turban_yellowgreen"
|
||||
|
||||
/obj/item/clothing/head/turban/yellow
|
||||
name = "yellow turban"
|
||||
desc = "A yellow cloth used to wind around the head."
|
||||
icon_state = "turban_yellow"
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
var/turf/location = src.loc
|
||||
if(istype(location, /mob/))
|
||||
var/mob/living/carbon/human/M = location
|
||||
if(M.l_hand == src || M.r_hand == src || M.head == src)
|
||||
if(M.item_is_in_hands(src) || M.head == src)
|
||||
location = M.loc
|
||||
|
||||
if (istype(location, /turf))
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
say_verbs = list("mumbles", "says")
|
||||
|
||||
// Clumsy folks can't take the mask off themselves.
|
||||
/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob)
|
||||
/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob)
|
||||
if(user.wear_mask == src && !user.IsAdvancedToolUser())
|
||||
return 0
|
||||
..()
|
||||
@@ -129,7 +129,7 @@
|
||||
item_state = "s-ninja"
|
||||
flags_inv = HIDEFACE
|
||||
body_parts_covered = 0
|
||||
var/mob/eye/aiEye/eye
|
||||
var/mob/observer/eye/aiEye/eye
|
||||
|
||||
/obj/item/clothing/mask/ai/New()
|
||||
eye = new(src)
|
||||
|
||||
@@ -9,28 +9,10 @@
|
||||
|
||||
icon = 'icons/mob/monitor_icons.dmi'
|
||||
icon_override = 'icons/mob/monitor_icons.dmi'
|
||||
icon_state = "ipc_blank"
|
||||
item_state = null
|
||||
icon_state = "monitor"
|
||||
|
||||
var/monitor_state_index = "blank"
|
||||
var/global/list/monitor_states = list(
|
||||
"blank" = "ipc_blank",
|
||||
"pink" = "ipc_pink",
|
||||
"red" = "ipc_red",
|
||||
"green" = "ipc_green",
|
||||
"blue" = "ipc_blue",
|
||||
"breakout" = "ipc_breakout",
|
||||
"eight" = "ipc_eight",
|
||||
"goggles" = "ipc_goggles",
|
||||
"heart" = "ipc_heart",
|
||||
"monoeye" = "ipc_monoeye",
|
||||
"nature" = "ipc_nature",
|
||||
"orange" = "ipc_orange",
|
||||
"purple" = "ipc_purple",
|
||||
"shower" = "ipc_shower",
|
||||
"static" = "ipc_static",
|
||||
"yellow" = "ipc_yellow"
|
||||
)
|
||||
var/global/list/monitor_states = list()
|
||||
|
||||
/obj/item/clothing/mask/monitor/set_dir()
|
||||
dir = SOUTH
|
||||
@@ -40,8 +22,13 @@
|
||||
..()
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H) && H.wear_mask == src)
|
||||
var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD]
|
||||
var/datum/robolimb/robohead = all_robolimbs[E.model]
|
||||
canremove = 0
|
||||
H << "<span class='notice'>\The [src] connects to your display output.</span>"
|
||||
if(robohead.monitor_styles)
|
||||
monitor_states = params2list(robohead.monitor_styles)
|
||||
icon_state = monitor_states[monitor_state_index]
|
||||
H << "<span class='notice'>\The [src] connects to your display output.</span>"
|
||||
|
||||
/obj/item/clothing/mask/monitor/dropped()
|
||||
canremove = 1
|
||||
@@ -52,9 +39,10 @@
|
||||
return 0
|
||||
if(istype(user))
|
||||
var/obj/item/organ/external/E = user.organs_by_name[BP_HEAD]
|
||||
if(istype(E) && (E.status & ORGAN_ROBOT))
|
||||
var/datum/robolimb/robohead = all_robolimbs[E.model]
|
||||
if(istype(E) && (E.robotic >= ORGAN_ROBOT) && robohead.monitor_styles)
|
||||
return 1
|
||||
user << "<span class='warning'>You must have a robotic head to install this upgrade.</span>"
|
||||
user << "<span class='warning'>You must have a compatible robotic head to install this upgrade.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/mask/monitor/verb/set_monitor_state()
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
siemens_coefficient = 0.7
|
||||
can_hold_knife = 1
|
||||
|
||||
/obj/item/clothing/shoes/jackboots/unathi
|
||||
/obj/item/clothing/shoes/jackboots/toeless
|
||||
name = "toe-less jackboots"
|
||||
desc = "Modified pair of jackboots, particularly friendly to those species whose toes hold claws."
|
||||
item_state = "digiboots"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "These will protect your legs and feet."
|
||||
body_parts_covered = LEGS|FEET
|
||||
slowdown = 0 //Shoes have a slowdown of -1, so this needs to be 0 in order for it to effectively be 1 slowdown.
|
||||
species_restricted = null //Unathi and Taj can wear leg armor now
|
||||
w_class = 3
|
||||
|
||||
/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
@@ -25,14 +26,14 @@
|
||||
desc = "These will protect your legs and feet from ballistic weapons."
|
||||
icon_state = "leg_guards_bullet"
|
||||
siemens_coefficient = 0.7
|
||||
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/shoes/leg_guard/riot
|
||||
name = "riot leg guards"
|
||||
desc = "These will protect your legs and feet from close combat weapons."
|
||||
icon_state = "leg_guards_riot"
|
||||
siemens_coefficient = 0.5
|
||||
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/shoes/leg_guard/combat
|
||||
name = "combat leg guards"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!"
|
||||
icon_state = "caparmor"
|
||||
item_state = "capspacesuit"
|
||||
w_class = 4
|
||||
w_class = 5
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
|
||||
@@ -449,8 +449,9 @@
|
||||
drain_complete(H)
|
||||
return
|
||||
|
||||
// Attempts to drain up to 40kW, determines this value from remaining cell capacity to ensure we don't drain too much..
|
||||
var/to_drain = min(40000, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE))
|
||||
// Attempts to drain up to 12.5*cell-capacity kW, determines this value from remaining cell capacity to ensure we don't drain too much.
|
||||
// 1Ws/(12.5*CELLRATE) = 40s to charge
|
||||
var/to_drain = min(12.5*holder.cell.maxcharge, ((holder.cell.maxcharge - holder.cell.charge) / CELLRATE))
|
||||
var/target_drained = interfaced_with.drain_power(0,0,to_drain)
|
||||
if(target_drained <= 0)
|
||||
H << "<span class = 'danger'>Your power sink flashes a red light; there is no power left in [interfaced_with].</span>"
|
||||
@@ -460,14 +461,14 @@
|
||||
holder.cell.give(target_drained * CELLRATE)
|
||||
total_power_drained += target_drained
|
||||
|
||||
return 1
|
||||
return
|
||||
|
||||
/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M)
|
||||
|
||||
if(!interfaced_with)
|
||||
if(M) M << "<font color='blue'><b>Total power drained:</b> [round(total_power_drained/1000)]kJ.</font>"
|
||||
if(M) M << "<font color='blue'><b>Total power drained:</b> [round(total_power_drained*CELLRATE)] cell units.</font>"
|
||||
else
|
||||
if(M) M << "<font color='blue'><b>Total power drained from [interfaced_with]:</b> [round(total_power_drained/1000)]kJ.</font>"
|
||||
if(M) M << "<font color='blue'><b>Total power drained from [interfaced_with]:</b> [round(total_power_drained*CELLRATE)] cell units.</font>"
|
||||
interfaced_with.drain_power(0,1,0) // Damage the victim.
|
||||
|
||||
drain_loc = null
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
name = "teleportation module"
|
||||
desc = "A complex, sleek-looking, hardsuit-integrated teleportation module."
|
||||
icon_state = "teleporter"
|
||||
use_power_cost = 40
|
||||
use_power_cost = 200
|
||||
redundant = 1
|
||||
usable = 1
|
||||
selectable = 1
|
||||
@@ -97,8 +97,6 @@
|
||||
|
||||
/obj/item/rig_module/teleporter/engage(var/atom/target, var/notify_ai)
|
||||
|
||||
if(!..()) return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
|
||||
if(!istype(H.loc, /turf))
|
||||
@@ -109,9 +107,13 @@
|
||||
if(target)
|
||||
T = get_turf(target)
|
||||
else
|
||||
T = get_teleport_loc(get_turf(H), H, rand(5, 9))
|
||||
T = get_teleport_loc(get_turf(H), H, 6, 1, 1, 1)
|
||||
|
||||
if(!T || T.density)
|
||||
if(!T)
|
||||
H << "<span class='warning'>No valid teleport target found.</span>"
|
||||
return 0
|
||||
|
||||
if(T.density)
|
||||
H << "<span class='warning'>You cannot teleport into solid walls.</span>"
|
||||
return 0
|
||||
|
||||
@@ -127,6 +129,8 @@
|
||||
H << "<span class='warning'>You cannot teleport to such a distant object.</span>"
|
||||
return 0
|
||||
|
||||
if(!..()) return 0
|
||||
|
||||
phase_out(H,get_turf(H))
|
||||
H.forceMove(T)
|
||||
phase_in(H,get_turf(H))
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
list("dexalin plus", "dexalinp", 0, 80),
|
||||
list("antibiotics", "spaceacillin", 0, 80),
|
||||
list("antitoxins", "anti_toxin", 0, 80),
|
||||
list("nutrients", "nutriment", 0, 80),
|
||||
list("nutrients", "glucose", 0, 80),
|
||||
list("hyronalin", "hyronalin", 0, 80),
|
||||
list("radium", "radium", 0, 80)
|
||||
)
|
||||
@@ -156,7 +156,7 @@
|
||||
list("dexalin plus", "dexalinp", 0, 20),
|
||||
list("antibiotics", "spaceacillin", 0, 20),
|
||||
list("antitoxins", "anti_toxin", 0, 20),
|
||||
list("nutrients", "nutriment", 0, 80),
|
||||
list("nutrients", "glucose", 0, 80),
|
||||
list("hyronalin", "hyronalin", 0, 20),
|
||||
list("radium", "radium", 0, 20)
|
||||
)
|
||||
@@ -245,7 +245,7 @@
|
||||
list("synaptizine", "synaptizine", 0, 30),
|
||||
list("hyperzine", "hyperzine", 0, 30),
|
||||
list("oxycodone", "oxycodone", 0, 30),
|
||||
list("nutrients", "nutriment", 0, 80),
|
||||
list("nutrients", "glucose", 0, 80),
|
||||
)
|
||||
|
||||
interface_name = "combat chem dispenser"
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
usable = 1
|
||||
toggleable = 1
|
||||
disruptive = 0
|
||||
module_cooldown = 0
|
||||
|
||||
engage_string = "Cycle Visor Mode"
|
||||
activate_string = "Enable Visor"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
slot_flags = SLOT_BACK
|
||||
req_one_access = list()
|
||||
req_access = list()
|
||||
w_class = 4
|
||||
w_class = 5
|
||||
|
||||
// These values are passed on to all component pieces.
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
|
||||
@@ -133,7 +133,6 @@
|
||||
chest = new chest_type(src)
|
||||
if(allowed)
|
||||
chest.allowed = allowed
|
||||
chest.slowdown = offline_slowdown
|
||||
verbs |= /obj/item/weapon/rig/proc/toggle_chest
|
||||
|
||||
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
|
||||
@@ -332,14 +331,14 @@
|
||||
offline = 0
|
||||
if(istype(wearer) && !wearer.wearing_rig)
|
||||
wearer.wearing_rig = src
|
||||
chest.slowdown = initial(slowdown)
|
||||
slowdown = initial(slowdown)
|
||||
|
||||
if(offline)
|
||||
if(offline == 1)
|
||||
for(var/obj/item/rig_module/module in installed_modules)
|
||||
module.deactivate()
|
||||
offline = 2
|
||||
chest.slowdown = offline_slowdown
|
||||
slowdown = offline_slowdown
|
||||
return
|
||||
|
||||
if(cell && cell.charge > 0 && electrified > 0)
|
||||
@@ -472,8 +471,8 @@
|
||||
var/species_icon = 'icons/mob/rig_back.dmi'
|
||||
// Since setting mob_icon will override the species checks in
|
||||
// update_inv_wear_suit(), handle species checks here.
|
||||
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype()])
|
||||
species_icon = sprite_sheets[wearer.species.get_bodytype()]
|
||||
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
|
||||
species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)]
|
||||
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
|
||||
|
||||
if(installed_modules.len)
|
||||
@@ -495,6 +494,8 @@
|
||||
return 1
|
||||
|
||||
if(istype(user))
|
||||
if(!canremove)
|
||||
return 1
|
||||
if(malfunction_check(user))
|
||||
return 0
|
||||
if(user.back != src)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
|
||||
if(!istype(user,/mob/living)) return 0
|
||||
if(!istype(user)) return 0
|
||||
|
||||
if(electrified != 0)
|
||||
if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/rig/unathi
|
||||
name = "NT breacher chassis control module"
|
||||
/obj/item/weapon/rig/breacher
|
||||
name = "\improper NT breacher chassis control module"
|
||||
desc = "A cheap NT knock-off of an Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
|
||||
suit_type = "NT breacher"
|
||||
suit_type = "\improper NT breacher"
|
||||
icon_state = "breacher_rig_cheap"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 70, bio = 100, rad = 50)
|
||||
emp_protection = -20
|
||||
@@ -9,12 +9,12 @@
|
||||
offline_slowdown = 10
|
||||
vision_restriction = 1
|
||||
offline_vision_restriction = 2
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/unathi
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/unathi
|
||||
|
||||
/obj/item/weapon/rig/unathi/fancy
|
||||
chest_type = /obj/item/clothing/suit/space/rig/breacher
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/breacher
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/breacher
|
||||
|
||||
/obj/item/weapon/rig/breacher/fancy
|
||||
name = "breacher chassis control module"
|
||||
desc = "An authentic Unathi breacher chassis. Huge, bulky and absurdly heavy. It must be like wearing a tank."
|
||||
suit_type = "breacher chassis"
|
||||
@@ -22,11 +22,12 @@
|
||||
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 80) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow.
|
||||
vision_restriction = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/unathi
|
||||
/obj/item/clothing/head/helmet/space/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
force = 5
|
||||
|
||||
/obj/item/clothing/suit/space/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/unathi
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/unathi
|
||||
/obj/item/clothing/shoes/magboots/rig/breacher
|
||||
species_restricted = list("Unathi")
|
||||
@@ -82,6 +82,7 @@
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig/light/ninja
|
||||
glove_type = /obj/item/clothing/gloves/rig/light/ninja
|
||||
cell_type = /obj/item/weapon/cell/hyper
|
||||
|
||||
req_access = list(access_syndicate)
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back."
|
||||
desc = "A suit that protects against low pressure environments. \""+station_short+"\" is written in large block letters on the back."
|
||||
icon_state = "space"
|
||||
item_state = "s_suit"
|
||||
w_class = 4//bulky item
|
||||
w_class = 5 // So you can't fit this in your bag and be prepared at all times.
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL
|
||||
|
||||
@@ -15,12 +15,14 @@
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
|
||||
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
|
||||
"Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi',
|
||||
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
|
||||
"Teshari" = 'icons/obj/clothing/species/seromi/hats.dmi'
|
||||
)
|
||||
|
||||
light_overlay = "helmet_light"
|
||||
@@ -40,12 +42,14 @@
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
|
||||
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
|
||||
"Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi',
|
||||
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi',
|
||||
"Teshari" = 'icons/obj/clothing/species/seromi/suits.dmi'
|
||||
)
|
||||
|
||||
//Breach thresholds, should ideally be inherited by most (if not all) voidsuits.
|
||||
@@ -206,8 +210,11 @@
|
||||
|
||||
if(!istype(user,/mob/living)) return
|
||||
|
||||
if(istype(W,/obj/item/clothing/accessory) || istype(W, /obj/item/weapon/hand_labeler))
|
||||
return ..()
|
||||
|
||||
if(istype(src.loc,/mob/living))
|
||||
user << "<span class='danger'>How do you propose to modify a voidsuit while it is being worn?</span>"
|
||||
user << "<span class='warning'>You cannot modify \the [src] while it is being worn.</span>"
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
item_flags = THICKMATERIAL
|
||||
|
||||
@@ -46,14 +46,14 @@
|
||||
desc = "An armoured jacket with silver rank pips and livery."
|
||||
icon_state = "warden_jacket"
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/warden/alt
|
||||
name = "Warden's jacket"
|
||||
desc = "An armoured jacket with silver rank pips and livery."
|
||||
icon_state = "warden_alt"
|
||||
item_state = "warden_alt"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/riot
|
||||
@@ -143,6 +143,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
w_class = 5
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
@@ -263,7 +264,7 @@
|
||||
icon_state = "kvest"
|
||||
item_state = "kvest"
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight)
|
||||
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
item_flags = THICKMATERIAL
|
||||
@@ -291,7 +292,7 @@
|
||||
icon_nobadge = "wardenvest_nobadge"
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/hos
|
||||
name = "commander armor vest"
|
||||
name = "head of security armor vest"
|
||||
desc = "A simple kevlar plate carrier. This one has a gold badge clipped to the chest."
|
||||
icon_state = "hosvest_nobadge"
|
||||
item_state = "hosvest_nobadge"
|
||||
@@ -339,7 +340,7 @@
|
||||
icon_nobadge = "wardenwebvest_nobadge"
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/heavy/hos
|
||||
name = "commander heavy armor vest"
|
||||
name = "head of security heavy armor vest"
|
||||
desc = "A heavy kevlar plate carrier with webbing attached. This one has a gold badge clipped to the chest."
|
||||
icon_state = "hoswebvest_nobadge"
|
||||
item_state = "hoswebvest_nobadge"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
item_state = "apron"
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = 0
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/fertilizer,/obj/item/weapon/material/minihoe)
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/material/minihoe)
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/suit/captunic
|
||||
@@ -96,7 +96,7 @@
|
||||
item_state = "det_suit"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/grey
|
||||
@@ -109,7 +109,7 @@
|
||||
desc = "A forensics technician jacket."
|
||||
item_state = "det_suit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/red
|
||||
|
||||
@@ -343,6 +343,36 @@
|
||||
icon_state = "blueponcho"
|
||||
item_state = "blueponcho"
|
||||
|
||||
/obj/item/clothing/suit/poncho/roles/security
|
||||
name = "security poncho"
|
||||
desc = "A simple, comfortable cloak without sleeves. This one is black and red, standard NanoTrasen Security colors."
|
||||
icon_state = "secponcho"
|
||||
item_state = "secponcho"
|
||||
|
||||
/obj/item/clothing/suit/poncho/roles/medical
|
||||
name = "medical poncho"
|
||||
desc = "A simple, comfortable cloak without sleeves. This one is white with green and blue tint, standard Medical colors."
|
||||
icon_state = "medponcho"
|
||||
item_state = "medponcho"
|
||||
|
||||
/obj/item/clothing/suit/poncho/roles/engineering
|
||||
name = "engineering poncho"
|
||||
desc = "A simple, comfortable cloak without sleeves. This one is yellow and orange, standard Engineering colors."
|
||||
icon_state = "engiponcho"
|
||||
item_state = "engiponcho"
|
||||
|
||||
/obj/item/clothing/suit/poncho/roles/science
|
||||
name = "science poncho"
|
||||
desc = "A simple, comfortable cloak without sleeves. This one is white with purple trim, standard NanoTrasen Science colors."
|
||||
icon_state = "sciponcho"
|
||||
item_state = "sciponcho"
|
||||
|
||||
/obj/item/clothing/suit/poncho/roles/cargo
|
||||
name = "cargo poncho"
|
||||
desc = "A simple, comfortable cloak without sleeves. This one is tan and grey, the colors of Cargo."
|
||||
icon_state = "cargoponcho"
|
||||
item_state = "cargoponcho"
|
||||
|
||||
/obj/item/clothing/suit/jacket/puffer
|
||||
name = "puffer jacket"
|
||||
desc = "A thick jacket with a rubbery, water-resistant shell."
|
||||
@@ -480,15 +510,15 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/hoodie/cti
|
||||
name = "CTI hoodie"
|
||||
desc = "A warm, black sweatshirt. It bears the letters ‘CTI’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI."
|
||||
desc = "A warm, black sweatshirt. It bears the letters CTI on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI."
|
||||
icon_state = "cti_hoodie"
|
||||
item_state = "cti_hoodie"
|
||||
icon_open = "cti_hoodie_open"
|
||||
icon_closed = "cti_hoodie"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/hoodie/mu
|
||||
name = "mars university hoodie"
|
||||
desc = "A warm, gray sweatshirt. It bears the letters ‘MU’ on the front, a lettering to the well-known public college, Mars University."
|
||||
name = "mojave university hoodie"
|
||||
desc = "A warm, gray sweatshirt. It bears the letters MU on the front, a lettering to the well-known public college, Mojave University."
|
||||
icon_state = "mu_hoodie"
|
||||
item_state = "mu_hoodie"
|
||||
icon_open = "mu_hoodie_open"
|
||||
@@ -625,4 +655,68 @@
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/miner
|
||||
name = "mining winter coat"
|
||||
icon_state = "coatminer"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/varsity
|
||||
name = "black varsity jacket"
|
||||
desc = "A favorite of jocks everywhere from Sol to Nyx."
|
||||
icon_state = "varsity"
|
||||
item_state = "leather_jacket"
|
||||
|
||||
/obj/item/clothing/suit/varsity/red
|
||||
name = "red varsity jacket"
|
||||
icon_state = "varsity_red"
|
||||
|
||||
/obj/item/clothing/suit/varsity/purple
|
||||
name = "purple varsity jacket"
|
||||
icon_state = "varsity_purple"
|
||||
|
||||
/obj/item/clothing/suit/varsity/green
|
||||
name = "green varsity jacket"
|
||||
icon_state = "varsity_green"
|
||||
|
||||
/obj/item/clothing/suit/varsity/blue
|
||||
name = "blue varsity jacket"
|
||||
icon_state = "varsity_blue"
|
||||
|
||||
/obj/item/clothing/suit/varsity/brown
|
||||
name = "brown varsity jacket"
|
||||
icon_state = "varsity_brown"
|
||||
|
||||
//Track Jackets
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/track
|
||||
name = "track jacket"
|
||||
desc = "a track jacket, for the athletic."
|
||||
icon_state = "trackjacket"
|
||||
item_state = "trackjacket"
|
||||
icon_open = "trackjacket_open"
|
||||
icon_closed = "trackjacket"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/track/blue
|
||||
name = "blue track jacket"
|
||||
icon_state = "trackjacketblue"
|
||||
item_state = "trackjacketblue"
|
||||
icon_open = "trackjacketblue_open"
|
||||
icon_closed = "trackjacketblue"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/track/green
|
||||
name = "green track jacket"
|
||||
icon_state = "trackjacketgreen"
|
||||
item_state = "trackjacketgreen"
|
||||
icon_open = "trackjacketgreen_open"
|
||||
icon_closed = "trackjacketgreen"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/track/red
|
||||
name = "red track jacket"
|
||||
icon_state = "trackjacketred"
|
||||
item_state = "trackjacketred"
|
||||
icon_open = "trackjacketred_open"
|
||||
icon_closed = "trackjacketred"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/track/white
|
||||
name = "white track jacket"
|
||||
icon_state = "trackjacketwhite"
|
||||
item_state = "trackjacketwhite"
|
||||
icon_open = "trackjacketwhite_open"
|
||||
icon_closed = "trackjacketwhite"
|
||||
@@ -4,7 +4,6 @@
|
||||
/obj/item/clothing/suit/storage/New()
|
||||
..()
|
||||
pockets = new/obj/item/weapon/storage/internal(src)
|
||||
pockets.storage_slots = 2 //two slots
|
||||
pockets.max_w_class = 2 //fit only pocket sized items
|
||||
pockets.max_storage_space = 4
|
||||
|
||||
@@ -77,7 +76,6 @@
|
||||
/obj/item/clothing/suit/storage/vest/heavy/New()
|
||||
..()
|
||||
pockets = new/obj/item/weapon/storage/internal(src)
|
||||
pockets.storage_slots = 4
|
||||
pockets.max_w_class = 2
|
||||
pockets.max_storage_space = 8
|
||||
|
||||
|
||||
@@ -7,11 +7,15 @@
|
||||
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/obj/item/clothing/has_suit = null //the suit the tie may be attached to
|
||||
var/image/inv_overlay = null //overlay used when attached to clothing.
|
||||
var/image/mob_overlay = null
|
||||
var/overlay_state = null
|
||||
|
||||
/obj/item/clothing/accessory/Destroy()
|
||||
on_removed()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/accessory/proc/get_inv_overlay()
|
||||
if(!inv_overlay)
|
||||
if(!mob_overlay)
|
||||
@@ -36,23 +40,27 @@
|
||||
return mob_overlay
|
||||
|
||||
//when user attached an accessory to S
|
||||
/obj/item/clothing/accessory/proc/on_attached(obj/item/clothing/under/S, mob/user as mob)
|
||||
/obj/item/clothing/accessory/proc/on_attached(var/obj/item/clothing/S, var/mob/user)
|
||||
if(!istype(S))
|
||||
return
|
||||
has_suit = S
|
||||
loc = has_suit
|
||||
has_suit.overlays += get_inv_overlay()
|
||||
|
||||
user << "<span class='notice'>You attach [src] to [has_suit].</span>"
|
||||
src.add_fingerprint(user)
|
||||
if(user)
|
||||
user << "<span class='notice'>You attach \the [src] to \the [has_suit].</span>"
|
||||
src.add_fingerprint(user)
|
||||
|
||||
/obj/item/clothing/accessory/proc/on_removed(mob/user as mob)
|
||||
/obj/item/clothing/accessory/proc/on_removed(var/mob/user)
|
||||
if(!has_suit)
|
||||
return
|
||||
has_suit.overlays -= get_inv_overlay()
|
||||
has_suit = null
|
||||
usr.put_in_hands(src)
|
||||
src.add_fingerprint(user)
|
||||
if(user)
|
||||
usr.put_in_hands(src)
|
||||
src.add_fingerprint(user)
|
||||
else
|
||||
src.forceMove(get_turf(src))
|
||||
|
||||
//default attackby behaviour
|
||||
/obj/item/clothing/accessory/attackby(obj/item/I, mob/user)
|
||||
@@ -72,10 +80,34 @@
|
||||
name = "red tie"
|
||||
icon_state = "redtie"
|
||||
|
||||
/obj/item/clothing/accessory/blue_clip
|
||||
name = "blue tie with a clip"
|
||||
icon_state = "bluecliptie"
|
||||
|
||||
/obj/item/clothing/accessory/blue_long
|
||||
name = "blue long tie"
|
||||
icon_state = "bluelongtie"
|
||||
|
||||
/obj/item/clothing/accessory/red_clip
|
||||
name = "red tie with a clip"
|
||||
icon_state = "redcliptie"
|
||||
|
||||
/obj/item/clothing/accessory/red_long
|
||||
name = "red long tie"
|
||||
icon_state = "redlongtie"
|
||||
|
||||
/obj/item/clothing/accessory/black
|
||||
name = "black tie"
|
||||
icon_state = "blacktie"
|
||||
|
||||
/obj/item/clothing/accessory/yellow
|
||||
name = "yellow tie"
|
||||
icon_state = "yellowtie"
|
||||
|
||||
/obj/item/clothing/accessory/navy
|
||||
name = "navy tie"
|
||||
icon_state = "navytie"
|
||||
|
||||
/obj/item/clothing/accessory/horrible
|
||||
name = "horrible tie"
|
||||
desc = "A neosilk clip-on tie. This one is disgusting."
|
||||
@@ -100,7 +132,7 @@
|
||||
var/sound_strength = "cannot hear"
|
||||
var/heartbeat = 0
|
||||
var/obj/item/organ/internal/heart/heart = M.internal_organs_by_name[O_HEART]
|
||||
if(heart && !(heart.status & ORGAN_ROBOT))
|
||||
if(heart && !(heart.robotic >= ORGAN_ROBOT))
|
||||
heartbeat = 1
|
||||
if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
|
||||
sound_strength = "cannot hear"
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='danger'>You invade [M]'s personal space, thrusting [src] into their face insistently.</span>")
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
||||
|
||||
//.Holobadges.
|
||||
/obj/item/clothing/accessory/badge/holo
|
||||
@@ -127,4 +129,4 @@
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/cord(src)
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/obj/item/clothing/accessory/vest
|
||||
name = "black vest"
|
||||
desc = "Slick black suit vest."
|
||||
icon_state = "det_vest"
|
||||
|
||||
/obj/item/clothing/accessory/tan_jacket
|
||||
name = "tan suit jacket"
|
||||
desc = "Cozy suit jacket."
|
||||
icon_state = "tan_jacket"
|
||||
|
||||
/obj/item/clothing/accessory/charcoal_jacket
|
||||
name = "charcoal suit jacket"
|
||||
desc = "Strict suit jacket."
|
||||
icon_state = "charcoal_jacket"
|
||||
|
||||
/obj/item/clothing/accessory/navy_jacket
|
||||
name = "navy suit jacket"
|
||||
desc = "Official suit jacket."
|
||||
icon_state = "navy_jacket"
|
||||
|
||||
/obj/item/clothing/accessory/burgundy_jacket
|
||||
name = "burgundy suit jacket"
|
||||
desc = "Expensive suit jacket."
|
||||
icon_state = "burgundy_jacket"
|
||||
|
||||
/obj/item/clothing/accessory/checkered_jacket
|
||||
name = "checkered suit jacket"
|
||||
desc = "Lucky suit jacket."
|
||||
icon_state = "checkered_jacket"
|
||||
@@ -12,7 +12,8 @@
|
||||
/obj/item/clothing/accessory/storage/New()
|
||||
..()
|
||||
hold = new/obj/item/weapon/storage/internal(src)
|
||||
hold.storage_slots = slots
|
||||
hold.max_storage_space = slots * 2
|
||||
hold.max_w_class = 2
|
||||
|
||||
/obj/item/clothing/accessory/storage/attack_hand(mob/user as mob)
|
||||
if (has_suit) //if we are part of a suit
|
||||
@@ -61,6 +62,33 @@
|
||||
icon_state = "vest_brown"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/white_vest
|
||||
name = "white webbing vest"
|
||||
desc = "Durable white synthcotton vest with lots of pockets to carry essentials."
|
||||
icon_state = "vest_white"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches
|
||||
name = "black drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Robust black synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_black"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
name = "brown drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Worn brownish synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_brown"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/white_drop_pouches
|
||||
name = "white drop pouches"
|
||||
gender = PLURAL
|
||||
desc = "Durable white synthcotton bags to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "thigh_white"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/knifeharness
|
||||
name = "decorated harness"
|
||||
desc = "A heavily decorated harness of sinew and leather with two knife-loops."
|
||||
|
||||
@@ -12,6 +12,13 @@
|
||||
item_state = "bl_suit"
|
||||
worn_state = "blackf"
|
||||
|
||||
/obj/item/clothing/under/color/blackjumpskirt
|
||||
name = "black jumpskirt"
|
||||
desc = "A slimming black jumpskirt."
|
||||
icon_state = "blackjumpskirt"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "blackjumpskirt"
|
||||
|
||||
/obj/item/clothing/under/color/blue
|
||||
name = "blue jumpsuit"
|
||||
icon_state = "blue"
|
||||
@@ -78,89 +85,89 @@
|
||||
item_state = "psyche"
|
||||
worn_state = "psyche"
|
||||
|
||||
/obj/item/clothing/under/lightblue
|
||||
/obj/item/clothing/under/color/lightblue
|
||||
name = "lightblue jumpsuit"
|
||||
desc = "lightblue"
|
||||
desc = "A light blue jumpsuit."
|
||||
icon_state = "lightblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "lightblue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/aqua
|
||||
/obj/item/clothing/under/color/aqua
|
||||
name = "aqua jumpsuit"
|
||||
desc = "aqua"
|
||||
desc = "An aqua jumpsuit."
|
||||
icon_state = "aqua"
|
||||
item_state = "b_suit"
|
||||
worn_state = "aqua"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/purple
|
||||
/obj/item/clothing/under/color
|
||||
name = "purple jumpsuit"
|
||||
desc = "purple"
|
||||
desc = "The latest in space fashion."
|
||||
icon_state = "purple"
|
||||
item_state = "p_suit"
|
||||
worn_state = "purple"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightpurple
|
||||
/obj/item/clothing/under/color/lightpurple
|
||||
name = "lightpurple jumpsuit"
|
||||
desc = "lightpurple"
|
||||
desc = "A light purple jumpsuit."
|
||||
icon_state = "lightpurple"
|
||||
item_state = "p_suit"
|
||||
worn_state = "lightpurple"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightgreen
|
||||
/obj/item/clothing/under/color/lightgreen
|
||||
name = "lightgreen jumpsuit"
|
||||
desc = "lightgreen"
|
||||
desc = "A light green jumpsuit."
|
||||
icon_state = "lightgreen"
|
||||
item_state = "g_suit"
|
||||
worn_state = "lightgreen"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightbrown
|
||||
/obj/item/clothing/under/color/lightbrown
|
||||
name = "lightbrown jumpsuit"
|
||||
desc = "lightbrown"
|
||||
desc = "A light brown jumpsuit."
|
||||
icon_state = "lightbrown"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "lightbrown"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/brown
|
||||
/obj/item/clothing/under/color/brown
|
||||
name = "brown jumpsuit"
|
||||
desc = "brown"
|
||||
desc = "A brown jumpsuit."
|
||||
icon_state = "brown"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "brown"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/yellowgreen
|
||||
/obj/item/clothing/under/color/yellowgreen
|
||||
name = "yellowgreen jumpsuit"
|
||||
desc = "yellowgreen"
|
||||
desc = "A... yellow green jumpsuit?"
|
||||
icon_state = "yellowgreen"
|
||||
item_state = "y_suit"
|
||||
worn_state = "yellowgreen"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/darkblue
|
||||
/obj/item/clothing/under/color/darkblue
|
||||
name = "darkblue jumpsuit"
|
||||
desc = "darkblue"
|
||||
desc = "A dark blue jumpsuit."
|
||||
icon_state = "darkblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "darkblue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lightred
|
||||
/obj/item/clothing/under/color/lightred
|
||||
name = "lightred jumpsuit"
|
||||
desc = "lightred"
|
||||
desc = "A light red jumpsuit."
|
||||
icon_state = "lightred"
|
||||
item_state = "r_suit"
|
||||
worn_state = "lightred"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/darkred
|
||||
/obj/item/clothing/under/color/darkred
|
||||
name = "darkred jumpsuit"
|
||||
desc = "darkred"
|
||||
desc = "A dark red jumpsuit."
|
||||
icon_state = "darkred"
|
||||
item_state = "r_suit"
|
||||
worn_state = "darkred"
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
worn_state = "ba_suit"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/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"
|
||||
@@ -17,7 +16,6 @@
|
||||
worn_state = "captain"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/cargo
|
||||
name = "quartermaster's jumpsuit"
|
||||
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
@@ -26,14 +24,6 @@
|
||||
worn_state = "qm"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
icon_state = "qmf"
|
||||
worn_state = "qmf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/jeans
|
||||
name = "quartermaster's jumpjeans"
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
@@ -56,13 +46,6 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skirrrrrts! They're comfy and easy to wear!"
|
||||
icon_state = "cargof"
|
||||
worn_state = "cargof"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/jeans
|
||||
name = "cargo technician's jumpjeans"
|
||||
desc = "Jeeeaaans! They're comfy!"
|
||||
@@ -76,7 +59,6 @@
|
||||
icon_state = "cargojf"
|
||||
worn_state = "cargojf"
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/chaplain
|
||||
desc = "It's a black jumpsuit, often worn by religious folk."
|
||||
name = "chaplain's jumpsuit"
|
||||
@@ -85,7 +67,6 @@
|
||||
worn_state = "chapblack"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/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"
|
||||
@@ -94,7 +75,6 @@
|
||||
worn_state = "chef"
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/clown
|
||||
name = "clown suit"
|
||||
desc = "<i>'HONK!'</i>"
|
||||
@@ -103,7 +83,6 @@
|
||||
worn_state = "clown"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_personnel
|
||||
desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"."
|
||||
name = "head of personnel's jumpsuit"
|
||||
@@ -120,7 +99,6 @@
|
||||
worn_state = "hopwhimsy"
|
||||
rolled_sleeves = -1
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/hydroponics
|
||||
desc = "It's a jumpsuit designed to protect against minor plant-related hazards."
|
||||
name = "botanist's jumpsuit"
|
||||
@@ -130,7 +108,6 @@
|
||||
permeability_coefficient = 0.50
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/internalaffairs
|
||||
desc = "The plain, professional attire of an Internal Affairs Agent. The collar is <i>immaculately</i> starched."
|
||||
name = "Internal Affairs uniform"
|
||||
@@ -138,7 +115,7 @@
|
||||
item_state = "ba_suit"
|
||||
worn_state = "internalaffairs"
|
||||
rolled_sleeves = 0
|
||||
|
||||
starting_accessories = list(/obj/item/clothing/accessory/black)
|
||||
|
||||
/obj/item/clothing/under/rank/janitor
|
||||
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
|
||||
@@ -149,47 +126,41 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer
|
||||
desc = "Slick threads."
|
||||
name = "Lawyer suit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/black
|
||||
name = "black Lawyer suit"
|
||||
icon_state = "lawyer_black"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "lawyer_black"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/female
|
||||
name = "black Lawyer suit"
|
||||
icon_state = "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"
|
||||
worn_state = "lawyer_red"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue
|
||||
name = "blue Lawyer suit"
|
||||
icon_state = "lawyer_blue"
|
||||
item_state = "lawyer_blue"
|
||||
worn_state = "lawyer_blue"
|
||||
|
||||
|
||||
/obj/item/clothing/under/lawyer/bluesuit
|
||||
name = "Blue Suit"
|
||||
desc = "A classy suit and tie"
|
||||
desc = "A classy suit."
|
||||
icon_state = "bluesuit"
|
||||
item_state = "ba_suit"
|
||||
worn_state = "bluesuit"
|
||||
|
||||
starting_accessories = list(/obj/item/clothing/accessory/red)
|
||||
|
||||
/obj/item/clothing/under/lawyer/purpsuit
|
||||
name = "Purple Suit"
|
||||
@@ -204,7 +175,6 @@
|
||||
item_state = "johnny"
|
||||
worn_state = "oldman"
|
||||
|
||||
|
||||
/obj/item/clothing/under/librarian
|
||||
name = "sensible suit"
|
||||
desc = "It's very... sensible."
|
||||
|
||||
@@ -8,14 +8,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
|
||||
name = "chief engineer's jumpskirt"
|
||||
icon_state = "chieff"
|
||||
worn_state = "chieff"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician
|
||||
desc = "It's a jumpsuit worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpsuit"
|
||||
@@ -24,14 +16,6 @@
|
||||
worn_state = "atmos"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
desc = "It's a jumpskirt worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpskirt"
|
||||
icon_state = "atmosf"
|
||||
worn_state = "atmosf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/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"
|
||||
@@ -41,25 +25,10 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/skirt
|
||||
desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding."
|
||||
name = "engineer's jumpskirt"
|
||||
icon_state = "enginef"
|
||||
worn_state = "enginef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist
|
||||
desc = "It's a slimming black jumpsuit with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpsuit"
|
||||
icon_state = "robotics"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "robotics"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
rolled_sleeves = -1
|
||||
rolled_sleeves = 0
|
||||
@@ -36,13 +36,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
icon_state = "sciencewhitef"
|
||||
worn_state = "sciencewhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/chemist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
|
||||
name = "chemist's jumpsuit"
|
||||
@@ -53,13 +46,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
icon_state = "chemistrywhitef"
|
||||
worn_state = "chemistrywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/*
|
||||
* Medical
|
||||
*/
|
||||
@@ -73,14 +59,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt
|
||||
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
|
||||
name = "chief medical officer's jumpskirt"
|
||||
icon_state = "cmof"
|
||||
worn_state = "cmof"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
|
||||
name = "geneticist's jumpsuit"
|
||||
@@ -91,13 +69,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
icon_state = "geneticswhitef"
|
||||
worn_state = "geneticswhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/virologist
|
||||
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
|
||||
name = "virologist's jumpsuit"
|
||||
@@ -108,13 +79,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
icon_state = "virologywhitef"
|
||||
worn_state = "virologywhitef"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/nursesuit
|
||||
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
|
||||
name = "nurse's suit"
|
||||
@@ -157,13 +121,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/medical/skirt
|
||||
name = "medical doctor's jumpskirt"
|
||||
icon_state = "medicalf"
|
||||
worn_state = "medicalf"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
name = "short sleeve medical jumpsuit"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel."
|
||||
@@ -204,6 +161,14 @@
|
||||
worn_state = "scrubsblack"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/navyblue
|
||||
name = "medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue."
|
||||
icon_state = "scrubsnavyblue"
|
||||
item_state = "b_suit"
|
||||
worn_state = "scrubsnavyblue"
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/psych
|
||||
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
|
||||
name = "psychiatrist's jumpsuit"
|
||||
|
||||
@@ -58,13 +58,13 @@
|
||||
icon_state = "sec_corporate"
|
||||
//item_state = "sec_corporate"
|
||||
worn_state = "sec_corporate"
|
||||
rolled_sleeves = -1
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/warden/corp
|
||||
icon_state = "warden_corporate"
|
||||
//item_state = "warden_corporate"
|
||||
worn_state = "warden_corporate"
|
||||
rolled_sleeves = -1
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/tactical
|
||||
name = "tactical jumpsuit"
|
||||
@@ -81,13 +81,14 @@
|
||||
*/
|
||||
/obj/item/clothing/under/det
|
||||
name = "detective's suit"
|
||||
desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie and a faux-gold tie clip."
|
||||
desc = "A rumpled white dress shirt paired with well-worn grey slacks."
|
||||
icon_state = "detective"
|
||||
item_state = "det"
|
||||
worn_state = "detective"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
rolled_sleeves = 0
|
||||
starting_accessories = list(/obj/item/clothing/accessory/blue_clip)
|
||||
|
||||
/*
|
||||
/obj/item/clothing/under/det/verb/rollup()
|
||||
@@ -103,13 +104,15 @@
|
||||
/obj/item/clothing/under/det/grey
|
||||
icon_state = "detective2"
|
||||
worn_state = "detective2"
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie."
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks."
|
||||
starting_accessories = list(/obj/item/clothing/accessory/red_long)
|
||||
|
||||
/obj/item/clothing/under/det/black
|
||||
icon_state = "detective3"
|
||||
worn_state = "detective3"
|
||||
item_state = "sl_suit"
|
||||
desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest."
|
||||
starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/vest)
|
||||
|
||||
/obj/item/clothing/under/det/corporate
|
||||
name = "detective's jumpsuit"
|
||||
@@ -127,7 +130,7 @@
|
||||
icon_state = "detective2_waistcoat"
|
||||
worn_state = "detective2_waistcoat"
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/head/det
|
||||
name = "fedora"
|
||||
@@ -164,7 +167,7 @@
|
||||
icon_state = "hos_corporate"
|
||||
//item_state = "hos_corporate"
|
||||
worn_state = "hos_corporate"
|
||||
rolled_sleeves = -1
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "Head of Security Hat"
|
||||
@@ -202,11 +205,10 @@
|
||||
/obj/item/clothing/suit/armor/hos/jensen
|
||||
name = "armored trenchcoat"
|
||||
desc = "A trenchcoat augmented with a special alloy for some protection and style."
|
||||
icon_state = "jensencoat"
|
||||
item_state = "jensencoat"
|
||||
icon_state = "hostrench"
|
||||
item_state = "hostrench"
|
||||
flags_inv = 0
|
||||
siemens_coefficient = 0.6
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/*
|
||||
* Navy uniforms
|
||||
|
||||
@@ -140,9 +140,9 @@
|
||||
worn_state = "johnny"
|
||||
item_state = "johnny"
|
||||
|
||||
/obj/item/clothing/under/rainbow
|
||||
name = "rainbow"
|
||||
desc = "rainbow"
|
||||
/obj/item/clothing/under/color/rainbow
|
||||
name = "rainbow jumpsuit"
|
||||
desc = "A multi-colored jumpsuit."
|
||||
icon_state = "rainbow"
|
||||
item_state = "rainbow"
|
||||
worn_state = "rainbow"
|
||||
@@ -211,14 +211,6 @@
|
||||
item_state = "r_suit"
|
||||
worn_state = "red_suit"
|
||||
|
||||
/obj/item/clothing/under/blackskirt
|
||||
name = "black skirt"
|
||||
desc = "A black skirt, very fancy!"
|
||||
icon_state = "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!"
|
||||
@@ -401,26 +393,6 @@
|
||||
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"
|
||||
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_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_state = "kilt"
|
||||
worn_state = "plaid_purple"
|
||||
|
||||
//wedding stuff
|
||||
/obj/item/clothing/under/wedding/
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
@@ -482,13 +454,6 @@
|
||||
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 = "bl_suit"
|
||||
worn_state = "blackjumpskirt"
|
||||
|
||||
/obj/item/clothing/under/captainformal
|
||||
name = "captain's formal uniform"
|
||||
desc = "A captain's formal-wear, for special occasions."
|
||||
@@ -523,6 +488,7 @@
|
||||
icon_state = "charcoal_suit"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "charcoal_suit"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/charcoal_jacket)
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/navy
|
||||
name = "navy suit"
|
||||
@@ -530,6 +496,7 @@
|
||||
icon_state = "navy_suit"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "navy_suit"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/navy_jacket)
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/burgundy
|
||||
name = "burgundy suit"
|
||||
@@ -537,6 +504,7 @@
|
||||
icon_state = "burgundy_suit"
|
||||
item_state = "r_suit"
|
||||
worn_state = "burgundy_suit"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/burgundy_jacket)
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/checkered
|
||||
name = "checkered suit"
|
||||
@@ -544,13 +512,15 @@
|
||||
icon_state = "checkered_suit"
|
||||
item_state = "gy_suit"
|
||||
worn_state = "checkered_suit"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/checkered_jacket)
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/tan
|
||||
name = "tan suit"
|
||||
desc = "A tan suit with a yellow tie. Smart, but casual."
|
||||
desc = "A tan suit. Smart, but casual."
|
||||
icon_state = "tan_suit"
|
||||
item_state = "lb_suit"
|
||||
worn_state = "tan_suit"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/tan_jacket)
|
||||
|
||||
/obj/item/clothing/under/serviceoveralls
|
||||
name = "workman outfit"
|
||||
@@ -568,6 +538,27 @@
|
||||
worn_state = "mai_yang"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
|
||||
/obj/item/clothing/under/cheongsam/red
|
||||
name = "red cheongsam"
|
||||
desc = "It is a red cheongsam dress."
|
||||
icon_state = "cheongsam-red"
|
||||
item_state = "cheongsam-red"
|
||||
worn_state = "cheongsam-red"
|
||||
|
||||
/obj/item/clothing/under/cheongsam/blue
|
||||
name = "blue cheongsam"
|
||||
desc = "It is a blue cheongsam dress."
|
||||
icon_state = "cheongsam-blue"
|
||||
item_state = "cheongsam-blue"
|
||||
worn_state = "cheongsam-blue"
|
||||
|
||||
/obj/item/clothing/under/cheongsam/black
|
||||
name = "black cheongsam"
|
||||
desc = "It is a black cheongsam dress."
|
||||
icon_state = "cheongsam-black"
|
||||
item_state = "cheongsam-black"
|
||||
worn_state = "cheongsam-black"
|
||||
|
||||
/obj/item/clothing/under/blazer
|
||||
name = "blue blazer"
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
@@ -615,4 +606,42 @@
|
||||
desc = "How... minimalist."
|
||||
icon_state = "gear_harness"
|
||||
worn_state = "gear_harness"
|
||||
body_parts_covered = 0
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/under/dress/white
|
||||
name = "white wedding dress"
|
||||
desc = "A fancy white dress with a blue underdress."
|
||||
icon_state = "whitedress1"
|
||||
item_state = "whitedress1"
|
||||
worn_state = "whitedress1"
|
||||
flags_inv = HIDESHOES
|
||||
|
||||
/obj/item/clothing/under/dress/white2
|
||||
name = "long dress"
|
||||
desc = "A long dress."
|
||||
icon_state = "whitedress2"
|
||||
item_state = "whitedress2"
|
||||
worn_state = "whitedress2"
|
||||
flags_inv = HIDESHOES
|
||||
|
||||
/obj/item/clothing/under/dress/white3
|
||||
name = "short dress"
|
||||
desc = "A short, plain dress."
|
||||
icon_state = "whitedress3"
|
||||
item_state = "whitedress3"
|
||||
worn_state = "whitedress3"
|
||||
|
||||
/obj/item/clothing/under/dress/white4
|
||||
name = "long flared dress"
|
||||
desc = "A long white dress that flares out at the bottom."
|
||||
icon_state = "whitedress4"
|
||||
item_state = "whitedress4"
|
||||
worn_state = "whitedress4"
|
||||
flags_inv = HIDESHOES
|
||||
|
||||
/obj/item/clothing/under/dress/darkred
|
||||
name = "fancy dark red dress"
|
||||
desc = "A short, red dress with a black belt. Fancy."
|
||||
icon_state = "darkreddress"
|
||||
item_state = "darkreddress"
|
||||
worn_state = "darkreddress"
|
||||
@@ -1,4 +1,7 @@
|
||||
/obj/item/clothing/under/pants
|
||||
name = "jeans"
|
||||
desc = "A nondescript pair of tough blue jeans."
|
||||
icon_state = "jeans"
|
||||
gender = PLURAL
|
||||
body_parts_covered = LOWER_TORSO|LEGS
|
||||
|
||||
@@ -8,7 +11,7 @@
|
||||
icon_state = "jeansclassic"
|
||||
|
||||
/obj/item/clothing/under/pants/mustangjeans
|
||||
name = "Must Hang jeans"
|
||||
name = "must hang jeans"
|
||||
desc = "Made in the finest space jeans factory this side of Alpha Centauri."
|
||||
icon_state = "jeansmustang"
|
||||
|
||||
@@ -17,8 +20,13 @@
|
||||
desc = "Only for those who can pull it off."
|
||||
icon_state = "jeansblack"
|
||||
|
||||
/obj/item/clothing/under/pants/greyjeans
|
||||
name = "grey jeans"
|
||||
desc = "Only for those who can pull it off."
|
||||
icon_state = "jeansgrey"
|
||||
|
||||
/obj/item/clothing/under/pants/youngfolksjeans
|
||||
name = "Young Folks jeans"
|
||||
name = "young folks jeans"
|
||||
desc = "For those tired of boring old jeans. Relive the passion of your youth!"
|
||||
icon_state = "jeansyoungfolks"
|
||||
|
||||
@@ -47,10 +55,21 @@
|
||||
desc = "A pair of track pants, for the athletic."
|
||||
icon_state = "trackpants"
|
||||
|
||||
/obj/item/clothing/under/pants/jeans
|
||||
name = "jeans"
|
||||
desc = "A nondescript pair of tough blue jeans."
|
||||
icon_state = "jeans"
|
||||
/obj/item/clothing/under/pants/track/blue
|
||||
name = "blue track pants"
|
||||
icon_state = "trackpantsblue"
|
||||
|
||||
/obj/item/clothing/under/pants/track/green
|
||||
name = "green track pants"
|
||||
icon_state = "trackpantsgreen"
|
||||
|
||||
/obj/item/clothing/under/pants/track/white
|
||||
name = "white track pants"
|
||||
icon_state = "trackpantswhite"
|
||||
|
||||
/obj/item/clothing/under/pants/track/red
|
||||
name = "red track pants"
|
||||
icon_state = "trackpantsred"
|
||||
|
||||
/obj/item/clothing/under/pants/khaki
|
||||
name = "khaki pants"
|
||||
@@ -60,4 +79,71 @@
|
||||
/obj/item/clothing/under/pants/camo
|
||||
name = "camo pants"
|
||||
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
|
||||
icon_state = "camopants"
|
||||
icon_state = "camopants"
|
||||
|
||||
//Baggy Pants//
|
||||
|
||||
/obj/item/clothing/under/pants/baggy
|
||||
name = "baggy jeans"
|
||||
desc = "A nondescript pair of tough baggy blue jeans."
|
||||
icon_state = "baggy_jeans"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/classicjeans
|
||||
name = "baggy classic jeans"
|
||||
desc = "You feel cooler already."
|
||||
icon_state = "baggy_jeansclassic"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/mustangjeans
|
||||
name = "maggy must hang jeans"
|
||||
desc = "Made in the finest space jeans factory this side of Alpha Centauri."
|
||||
icon_state = "baggy_jeansmustang"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/blackjeans
|
||||
name = "baggy black jeans"
|
||||
desc = "Only for those who can pull it off."
|
||||
icon_state = "baggy_jeansblack"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/greyjeans
|
||||
name = "baggy grey jeans"
|
||||
desc = "Only for those who can pull it off."
|
||||
icon_state = "baggy_jeansgrey"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/youngfolksjeans
|
||||
name = "baggy young folks jeans"
|
||||
desc = "For those tired of boring old jeans. Relive the passion of your youth!"
|
||||
icon_state = "baggy_jeansyoungfolks"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/white
|
||||
name = "baggy white pants"
|
||||
desc = "Plain white pants. Boring."
|
||||
icon_state = "baggy_whitepants"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/red
|
||||
name = "baggy red pants"
|
||||
desc = "Bright red pants. Overflowing with personality."
|
||||
icon_state = "baggy_redpants"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/black
|
||||
name = "baggy black pants"
|
||||
desc = "These pants are dark, like your soul."
|
||||
icon_state = "baggy_blackpants"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/tan
|
||||
name = "baggy tan pants"
|
||||
desc = "Some tan pants. You look like a white collar worker with these on."
|
||||
icon_state = "baggy_tanpants"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/track
|
||||
name = "baggy track pants"
|
||||
desc = "A pair of track pants, for the athletic."
|
||||
icon_state = "baggy_trackpants"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/khaki
|
||||
name = "baggy khaki pants"
|
||||
desc = "A pair of dust beige khaki pants."
|
||||
icon_state = "baggy_khaki"
|
||||
|
||||
/obj/item/clothing/under/pants/baggy/camo
|
||||
name = "baggy camo pants"
|
||||
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
|
||||
icon_state = "baggy_camopants"
|
||||
@@ -36,6 +36,7 @@
|
||||
worn_state = "jeans_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/female
|
||||
name = "jeans short shorts"
|
||||
icon_state = "jeans_shorts_f"
|
||||
worn_state = "jeans_shorts_f"
|
||||
|
||||
@@ -45,6 +46,7 @@
|
||||
worn_state = "jeansclassic_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/classic/female
|
||||
name = "classic jeans short shorts"
|
||||
icon_state = "jeansclassic_shorts_f"
|
||||
worn_state = "jeansclassic_shorts_f"
|
||||
|
||||
@@ -54,6 +56,7 @@
|
||||
worn_state = "jeansmustang_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/mustang/female
|
||||
name = "mustang jeans short shorts"
|
||||
icon_state = "jeansmustang_shorts_f"
|
||||
worn_state = "jeansmustang_shorts_f"
|
||||
|
||||
@@ -63,6 +66,7 @@
|
||||
worn_state = "jeansyoungfolks_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/youngfolks/female
|
||||
name = "young folks jeans short shorts"
|
||||
icon_state = "jeansyoungfolks_shorts_f"
|
||||
worn_state = "jeansyoungfolks_shorts_f"
|
||||
|
||||
@@ -72,9 +76,20 @@
|
||||
worn_state = "blackpants_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/black/female
|
||||
name = "black jeans short shorts"
|
||||
icon_state = "black_shorts_f"
|
||||
worn_state = "black_shorts_f"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/grey
|
||||
name = "grey jeans shorts"
|
||||
icon_state = "greypants_shorts"
|
||||
worn_state = "greypants_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/jeans/grey/female
|
||||
name = "grey jeans short shorts"
|
||||
icon_state = "grey_shorts_f"
|
||||
worn_state = "grey_shorts_f"
|
||||
|
||||
/obj/item/clothing/under/shorts/khaki
|
||||
name = "khaki shorts"
|
||||
desc = "For that island getaway. It's five o'clock somewhere, right?"
|
||||
@@ -82,5 +97,160 @@
|
||||
worn_state = "tanpants_shorts"
|
||||
|
||||
/obj/item/clothing/under/shorts/khaki/female
|
||||
name = "khaki short shorts"
|
||||
icon_state = "khaki_shorts_f"
|
||||
worn_state = "khaki_shorts_f"
|
||||
|
||||
//Argh, skirts be below this line -> ------------------------------
|
||||
|
||||
/obj/item/clothing/under/skirt
|
||||
name = "black skirt"
|
||||
desc = "A black skirt, very fancy!"
|
||||
icon_state = "blackskirt"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "blackskirt"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/skirt/khaki
|
||||
name = "khaki skirt"
|
||||
desc = "A skirt that is a khaki color."
|
||||
icon_state = "skirt_khaki"
|
||||
worn_state = "skirt_khaki"
|
||||
|
||||
/obj/item/clothing/under/skirt/black
|
||||
name = "short black skirt"
|
||||
desc = "A skirt that is a shiny black."
|
||||
icon_state = "skirt_short_black"
|
||||
worn_state = "skirt_short_black"
|
||||
|
||||
/obj/item/clothing/under/skirt/blue
|
||||
name = "short blue skirt"
|
||||
desc = "A skirt that is a shiny blue."
|
||||
icon_state = "skirt_short_blue"
|
||||
worn_state = "skirt_short_blue"
|
||||
|
||||
/obj/item/clothing/under/skirt/red
|
||||
name = "short red skirt"
|
||||
desc = "A skirt that is a shiny red."
|
||||
icon_state = "skirt_short_red"
|
||||
worn_state = "skirt_short_red"
|
||||
|
||||
/obj/item/clothing/under/skirt/swept
|
||||
name = "swept skirt"
|
||||
desc = "A skirt that is swept to one side."
|
||||
icon_state = "skirt_swept"
|
||||
worn_state = "skirt_swept"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_blue
|
||||
name = "blue plaid skirt"
|
||||
desc = "A preppy blue skirt with a white blouse."
|
||||
icon_state = "plaid_blue"
|
||||
worn_state = "plaid_blue"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_red
|
||||
name = "red plaid skirt"
|
||||
desc = "A preppy red skirt with a white blouse."
|
||||
icon_state = "plaid_red"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_red"
|
||||
|
||||
/obj/item/clothing/under/skirt/plaid_purple
|
||||
name = "blue purple skirt"
|
||||
desc = "A preppy purple skirt with a white blouse."
|
||||
icon_state = "plaid_purple"
|
||||
item_state = "kilt"
|
||||
worn_state = "plaid_purple"
|
||||
|
||||
/obj/item/clothing/under/rank/cargo/skirt
|
||||
name = "quartermaster's jumpskirt"
|
||||
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
|
||||
icon_state = "qmf"
|
||||
worn_state = "qmf"
|
||||
|
||||
/obj/item/clothing/under/rank/cargotech/skirt
|
||||
name = "cargo technician's jumpskirt"
|
||||
desc = "Skirrrrrts! They're comfy and easy to wear!"
|
||||
icon_state = "cargof"
|
||||
worn_state = "cargof"
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/skirt
|
||||
desc = "It's an orange high visibility jumpskirt worn by engineers. It has minor radiation shielding."
|
||||
name = "engineer's jumpskirt"
|
||||
icon_state = "enginef"
|
||||
worn_state = "enginef"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/chief_engineer/skirt
|
||||
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief engineer\". It has minor radiation shielding."
|
||||
name = "chief engineer's jumpskirt"
|
||||
icon_state = "chieff"
|
||||
worn_state = "chieff"
|
||||
|
||||
/obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
|
||||
desc = "It's a jumpskirt worn by atmospheric technicians."
|
||||
name = "atmospheric technician's jumpskirt"
|
||||
icon_state = "atmosf"
|
||||
worn_state = "atmosf"
|
||||
|
||||
/obj/item/clothing/under/rank/roboticist/skirt
|
||||
desc = "It's a slimming black jumpskirt with reinforced seams; great for industrial work."
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
worn_state = "roboticsf"
|
||||
|
||||
/obj/item/clothing/under/rank/scientist/skirt
|
||||
name = "scientist's jumpskirt"
|
||||
icon_state = "sciencewhitef"
|
||||
worn_state = "sciencewhitef"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/skirt
|
||||
name = "medical doctor's jumpskirt"
|
||||
icon_state = "medicalf"
|
||||
worn_state = "medicalf"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/chemist/skirt
|
||||
name = "chemist's jumpskirt"
|
||||
icon_state = "chemistrywhitef"
|
||||
worn_state = "chemistrywhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
|
||||
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
|
||||
name = "chief medical officer's jumpskirt"
|
||||
icon_state = "cmof"
|
||||
worn_state = "cmof"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/geneticist/skirt
|
||||
name = "geneticist's jumpskirt"
|
||||
icon_state = "geneticswhitef"
|
||||
worn_state = "geneticswhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/medical/virologist/skirt
|
||||
name = "virologist's jumpskirt"
|
||||
icon_state = "virologywhitef"
|
||||
worn_state = "virologywhitef"
|
||||
|
||||
/obj/item/clothing/under/rank/security/skirt
|
||||
name = "security officer's jumpskirt"
|
||||
desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts."
|
||||
icon_state = "secredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "secredf"
|
||||
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/warden/skirt
|
||||
desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders."
|
||||
name = "warden's jumpskirt"
|
||||
icon_state = "wardenf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "wardenf"
|
||||
|
||||
/obj/item/clothing/under/rank/security/head_of_security/skirt
|
||||
desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer."
|
||||
name = "head of security's jumpskirt"
|
||||
icon_state = "hosredf"
|
||||
item_state = "r_suit"
|
||||
worn_state = "hosredf"
|
||||
@@ -11,9 +11,9 @@
|
||||
/obj/item/clothing/under/syndicate/combat //ERT tactleneck
|
||||
name = "combat turtleneck"
|
||||
desc = "It's some non-descript, slightly suspicious looking, civilian clothing."
|
||||
icon_state = "syndicate"
|
||||
icon_state = "combat"
|
||||
item_state = "bl_suit"
|
||||
worn_state = "syndicate"
|
||||
worn_state = "combat"
|
||||
has_sensor = 1
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
K.new_icon_file = CUSTOM_ITEM_OBJ
|
||||
if(istype(item, /obj/item/device/kit/paint))
|
||||
var/obj/item/device/kit/paint/kit = item
|
||||
kit.allowed_types = text2list(additional_data, ", ")
|
||||
kit.allowed_types = splittext(additional_data, ", ")
|
||||
else if(istype(item, /obj/item/device/kit/suit))
|
||||
var/obj/item/device/kit/suit/kit = item
|
||||
kit.new_light_overlay = additional_data
|
||||
@@ -130,7 +130,7 @@
|
||||
/hook/startup/proc/load_custom_items()
|
||||
|
||||
var/datum/custom_item/current_data
|
||||
for(var/line in text2list(file2text("config/custom_items.txt"), "\n"))
|
||||
for(var/line in splittext(file2text("config/custom_items.txt"), "\n"))
|
||||
|
||||
line = trim(line)
|
||||
if(line == "" || !line || findtext(line, "#", 1, 2))
|
||||
@@ -173,7 +173,7 @@
|
||||
if("req_access")
|
||||
current_data.req_access = text2num(field_data)
|
||||
if("req_titles")
|
||||
current_data.req_titles = text2list(field_data,", ")
|
||||
current_data.req_titles = splittext(field_data,", ")
|
||||
if("kit_name")
|
||||
current_data.kit_name = field_data
|
||||
if("kit_desc")
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_state = "dnaopen"
|
||||
anchored = 1
|
||||
density = 1
|
||||
circuit = /obj/item/weapon/circuitboard/dna_analyzer
|
||||
|
||||
var/obj/item/weapon/forensics/swab/bloodsamp = null
|
||||
var/closed = 0
|
||||
@@ -15,6 +16,16 @@
|
||||
var/last_process_worldtime = 0
|
||||
var/report_num = 0
|
||||
|
||||
/obj/machinery/dnaforensics/New()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
RefreshParts()
|
||||
..()
|
||||
|
||||
/obj/machinery/dnaforensics/attackby(var/obj/item/W, mob/user as mob)
|
||||
|
||||
if(bloodsamp)
|
||||
@@ -22,7 +33,13 @@
|
||||
return
|
||||
|
||||
if(closed)
|
||||
user << "<span class='warning'>Open the cover before inserting the sample.</span>"
|
||||
if(!scanning)
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>Open the cover before inserting the sample.</span>"
|
||||
return
|
||||
|
||||
var/obj/item/weapon/forensics/swab/swab = W
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
var/mob/living/carbon/human/user = usr
|
||||
|
||||
if (!(user.l_hand == src || user.r_hand == src))
|
||||
if(!user.item_is_in_hands(src))
|
||||
return //bag must be in your hands to use
|
||||
|
||||
if (isturf(I.loc))
|
||||
@@ -31,10 +31,8 @@
|
||||
var/obj/item/weapon/storage/U = I.loc
|
||||
user.client.screen -= I
|
||||
U.contents.Remove(I)
|
||||
else if(user.l_hand == I) //in a hand
|
||||
user.drop_l_hand()
|
||||
else if(user.r_hand == I) //in a hand
|
||||
user.drop_r_hand()
|
||||
else if(user.item_is_in_hands(I))
|
||||
user.drop_from_inventory(I)
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(!on_fire && istype(W, /obj/item/weapon/flame))
|
||||
var/obj/item/weapon/flame/F = W
|
||||
if(F.lit)
|
||||
ignite()
|
||||
src.ignite()
|
||||
if(on_fire)
|
||||
visible_message("<span class='warning'>\The [user] lights [src] with [W].</span>")
|
||||
else
|
||||
@@ -151,15 +151,21 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/rag/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature >= 50 + T0C)
|
||||
ignite()
|
||||
src.ignite()
|
||||
if(exposed_temperature >= 900 + T0C)
|
||||
new /obj/effect/decal/cleanable/ash(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
//rag must have a minimum of 2 units welder fuel and at least 80% of the reagents must be welder fuel.
|
||||
//maybe generalize flammable reagents someday
|
||||
//rag must have a minimum of 2 units welder fuel or ehtanol based reagents and at least 80% of the reagents must so.
|
||||
/obj/item/weapon/reagent_containers/glass/rag/proc/can_ignite()
|
||||
var/fuel = reagents.get_reagent_amount("fuel")
|
||||
var/fuel
|
||||
if(reagents.get_reagent_amount("fuel"))
|
||||
fuel += reagents.get_reagent_amount("fuel")
|
||||
|
||||
else
|
||||
for(var/datum/reagent/ethanol/R in reagents.reagent_list)
|
||||
fuel += reagents.get_reagent_amount(R.id)
|
||||
|
||||
return (fuel >= 2 && fuel >= reagents.total_volume*0.8)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/rag/proc/ignite()
|
||||
@@ -217,5 +223,8 @@
|
||||
return
|
||||
|
||||
reagents.remove_reagent("fuel", reagents.maximum_volume/25)
|
||||
for(var/datum/reagent/ethanol/R in reagents.reagent_list)
|
||||
if(istype(R, /datum/reagent/ethanol))
|
||||
reagents.remove_reagent(R.id, reagents.maximum_volume/25)
|
||||
update_name()
|
||||
burn_time--
|
||||
|
||||
@@ -8,16 +8,18 @@
|
||||
|
||||
/obj/item/weapon/storage/box/swabs/New()
|
||||
..()
|
||||
for(var/i=0;i<storage_slots,i++) // Fill 'er up.
|
||||
for(var/i = 1 to storage_slots) // Fill 'er up.
|
||||
new /obj/item/weapon/forensics/swab(src)
|
||||
|
||||
/obj/item/weapon/storage/box/evidence
|
||||
name = "evidence bag box"
|
||||
desc = "A box claiming to contain evidence bags."
|
||||
storage_slots = 7
|
||||
can_hold = list(/obj/item/weapon/evidencebag)
|
||||
|
||||
/obj/item/weapon/storage/box/evidence/New()
|
||||
..()
|
||||
for(var/i=0;i<storage_slots,i++)
|
||||
for(var/i = 1 to storage_slots)
|
||||
new /obj/item/weapon/evidencebag(src)
|
||||
|
||||
/obj/item/weapon/storage/box/fingerprints
|
||||
@@ -30,5 +32,5 @@
|
||||
|
||||
/obj/item/weapon/storage/box/fingerprints/New()
|
||||
..()
|
||||
for(var/i=0;i<storage_slots,i++)
|
||||
for(var/i = 1 to storage_slots)
|
||||
new /obj/item/weapon/sample/print(src)
|
||||
@@ -22,6 +22,7 @@ log transactions
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
circuit = /obj/item/weapon/circuitboard/atm
|
||||
var/datum/money_account/authenticated_account
|
||||
var/number_incorrect_tries = 0
|
||||
var/previous_account_number = 0
|
||||
@@ -79,6 +80,25 @@ log transactions
|
||||
return 1
|
||||
|
||||
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "atm"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "atm_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/card))
|
||||
if(emagged > 0)
|
||||
//prevent inserting id into an emagged ATM
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
affected_dest.temp_price_change[good_type] = rand(1,100) / 100
|
||||
|
||||
/datum/event/economic_event/announce()
|
||||
var/author = "The Vir Times"
|
||||
var/author = "The "+starsys_name+" Times"
|
||||
var/channel = author
|
||||
|
||||
//see if our location has custom event info for this event
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user