Merge pull request #14902 from silicons/combat_patches_1
misc patches, fixes, some small refactors
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
// Sorted alphabetically
|
||||
#define span_abductor(str) ("<span class='abductor'>" + str + "</span>")
|
||||
#define span_admin(str) ("<span class='admin'>" + str + "</span>")
|
||||
#define span_adminhelp(str) ("<span class='adminhelp'>" + str + "</span>")
|
||||
#define span_adminnotice(str) ("<span class='adminnotice'>" + str + "</span>")
|
||||
#define span_adminobserverooc(str) ("<span class='adminobserverooc'>" + str + "</span>")
|
||||
#define span_adminooc(str) ("<span class='adminooc'>" + str + "</span>")
|
||||
#define span_adminsay(str) ("<span class='adminsay'>" + str + "</span>")
|
||||
#define span_aiprivradio(str) ("<span class='aiprivradio'>" + str + "</span>")
|
||||
#define span_alert(str) ("<span class='alert'>" + str + "</span>")
|
||||
#define span_alertalien(str) ("<span class='alertalien'>" + str + "</span>")
|
||||
#define span_alertsyndie(str) ("<span class='alertsyndie'>" + str + "</span>")
|
||||
#define span_alertwarning(str) ("<span class='alertwarning'>" + str + "</span>")
|
||||
#define span_alien(str) ("<span class='alien'>" + str + "</span>")
|
||||
#define span_announce(str) ("<span class='announce'>" + str + "</span>")
|
||||
#define span_big(str) ("<span class='big'>" + str + "</span>")
|
||||
#define span_bigicon(str) ("<span class='bigicon'>" + str + "</span>")
|
||||
#define span_binarysay(str) ("<span class='binarysay'>" + str + "</span>")
|
||||
#define span_blue(str) ("<span class='blue'>" + str + "</span>")
|
||||
#define span_blueteamradio(str) ("<span class='blueteamradio'>" + str + "</span>")
|
||||
#define span_bold(str) ("<span class='bold'>" + str + "</span>")
|
||||
#define span_boldannounce(str) ("<span class='boldannounce'>" + str + "</span>")
|
||||
#define span_boldnotice(str) ("<span class='boldnotice'>" + str + "</span>")
|
||||
#define span_boldwarning(str) ("<span class='boldwarning'>" + str + "</span>")
|
||||
#define span_centcomradio(str) ("<span class='centcomradio'>" + str + "</span>")
|
||||
#define span_changeling(str) ("<span class='changeling'>" + str + "</span>")
|
||||
#define span_clown(str) ("<span class='clown'>" + str + "</span>")
|
||||
#define span_colossus(str) ("<span class='colossus'>" + str + "</span>")
|
||||
#define span_command_headset(str) ("<span class='command_headset'>" + str + "</span>")
|
||||
#define span_comradio(str) ("<span class='comradio'>" + str + "</span>")
|
||||
#define span_cult(str) ("<span class='cult'>" + str + "</span>")
|
||||
#define span_cultbold(str) ("<span class='cultbold'>" + str + "</span>")
|
||||
#define span_cultboldtalic(str) ("<span class='cultboldtalic'>" + str + "</span>")
|
||||
#define span_cultitalic(str) ("<span class='cultitalic'>" + str + "</span>")
|
||||
#define span_cultlarge(str) ("<span class='cultlarge'>" + str + "</span>")
|
||||
#define span_danger(str) ("<span class='danger'>" + str + "</span>")
|
||||
#define span_deadsay(str) ("<span class='deadsay'>" + str + "</span>")
|
||||
#define span_deconversion_message(str) ("<span class='deconversion_message'>" + str + "</span>")
|
||||
#define span_drone(str) ("<span class='drone'>" + str + "</span>")
|
||||
#define span_engradio(str) ("<span class='engradio'>" + str + "</span>")
|
||||
#define span_extremelybig(str) ("<span class='extremelybig'>" + str + "</span>")
|
||||
#define span_ghostalert(str) ("<span class='ghostalert'>" + str + "</span>")
|
||||
#define span_green(str) ("<span class='green'>" + str + "</span>")
|
||||
#define span_greenannounce(str) ("<span class='greenannounce'>" + str + "</span>")
|
||||
#define span_greenteamradio(str) ("<span class='greenteamradio'>" + str + "</span>")
|
||||
#define span_greentext(str) ("<span class='greentext'>" + str + "</span>")
|
||||
#define span_hear(str) ("<span class='hear'>" + str + "</span>")
|
||||
#define span_hidden(str) ("<span class='hidden'>" + str + "</span>")
|
||||
#define span_hierophant(str) ("<span class='hierophant'>" + str + "</span>")
|
||||
#define span_hierophant_warning(str) ("<span class='hierophant_warning'>" + str + "</span>")
|
||||
#define span_highlight(str) ("<span class='highlight'>" + str + "</span>")
|
||||
#define span_his_grace(str) ("<span class='his_grace'>" + str + "</span>")
|
||||
#define span_holoparasite(str) ("<span class='holoparasite'>" + str + "</span>")
|
||||
#define span_hypnophrase(str) ("<span class='hypnophrase'>" + str + "</span>")
|
||||
#define span_icon(str) ("<span class='icon'>" + str + "</span>")
|
||||
#define span_info(str) ("<span class='info'>" + str + "</span>")
|
||||
#define span_interface(str) ("<span class='interface'>" + str + "</span>")
|
||||
#define span_looc(str) ("<span class='looc'>" + str + "</span>")
|
||||
#define span_medal(str) ("<span class='medal'>" + str + "</span>")
|
||||
#define span_medradio(str) ("<span class='medradio'>" + str + "</span>")
|
||||
#define span_memo(str) ("<span class='memo'>" + str + "</span>")
|
||||
#define span_memoedit(str) ("<span class='memoedit'>" + str + "</span>")
|
||||
#define span_mind_control(str) ("<span class='mind_control'>" + str + "</span>")
|
||||
#define span_minorannounce(str) ("<span class='minorannounce'>" + str + "</span>")
|
||||
#define span_monkey(str) ("<span class='monkey'>" + str + "</span>")
|
||||
#define span_monkeyhive(str) ("<span class='monkeyhive'>" + str + "</span>")
|
||||
#define span_monkeylead(str) ("<span class='monkeylead'>" + str + "</span>")
|
||||
#define span_name(str) ("<span class='name'>" + str + "</span>")
|
||||
#define span_narsie(str) ("<span class='narsie'>" + str + "</span>")
|
||||
#define span_narsiesmall(str) ("<span class='narsiesmall'>" + str + "</span>")
|
||||
#define span_nicegreen(str) ("<span class='nicegreen'>" + str + "</span>")
|
||||
#define span_notice(str) ("<span class='notice'>" + str + "</span>")
|
||||
#define span_noticealien(str) ("<span class='noticealien'>" + str + "</span>")
|
||||
#define span_ooc(str) ("<span class='ooc'>" + str + "</span>")
|
||||
#define span_papyrus(str) ("<span class='papyrus'>" + str + "</span>")
|
||||
#define span_phobia(str) ("<span class='phobia'>" + str + "</span>")
|
||||
#define span_prefix(str) ("<span class='prefix'>" + str + "</span>")
|
||||
#define span_purple(str) ("<span class='purple'>" + str + "</span>")
|
||||
#define span_radio(str) ("<span class='radio'>" + str + "</span>")
|
||||
#define span_reallybig(str) ("<span class='reallybig'>" + str + "</span>")
|
||||
#define span_red(str) ("<span class='red'>" + str + "</span>")
|
||||
#define span_redteamradio(str) ("<span class='redteamradio'>" + str + "</span>")
|
||||
#define span_redtext(str) ("<span class='redtext'>" + str + "</span>")
|
||||
#define span_resonate(str) ("<span class='resonate'>" + str + "</span>")
|
||||
#define span_revenbignotice(str) ("<span class='revenbignotice'>" + str + "</span>")
|
||||
#define span_revenboldnotice(str) ("<span class='revenboldnotice'>" + str + "</span>")
|
||||
#define span_revendanger(str) ("<span class='revendanger'>" + str + "</span>")
|
||||
#define span_revenminor(str) ("<span class='revenminor'>" + str + "</span>")
|
||||
#define span_revennotice(str) ("<span class='revennotice'>" + str + "</span>")
|
||||
#define span_revenwarning(str) ("<span class='revenwarning'>" + str + "</span>")
|
||||
#define span_robot(str) ("<span class='robot'>" + str + "</span>")
|
||||
#define span_rose(str) ("<span class='rose'>" + str + "</span>")
|
||||
#define span_sans(str) ("<span class='sans'>" + str + "</span>")
|
||||
#define span_sciradio(str) ("<span class='sciradio'>" + str + "</span>")
|
||||
#define span_secradio(str) ("<span class='secradio'>" + str + "</span>")
|
||||
#define span_servradio(str) ("<span class='servradio'>" + str + "</span>")
|
||||
#define span_singing(str) ("<span class='singing'>" + str + "</span>")
|
||||
#define span_slime(str) ("<span class='slime'>" + str + "</span>")
|
||||
#define span_small(str) ("<span class='small'>" + str + "</span>")
|
||||
#define span_smallnotice(str) ("<span class='smallnotice'>" + str + "</span>")
|
||||
#define span_smallnoticeital(str) ("<span class='smallnoticeital'>" + str + "</span>")
|
||||
#define span_spider(str) ("<span class='spider'>" + str + "</span>")
|
||||
#define span_suicide(str) ("<span class='suicide'>" + str + "</span>")
|
||||
#define span_suppradio(str) ("<span class='suppradio'>" + str + "</span>")
|
||||
#define span_swarmer(str) ("<span class='swarmer'>" + str + "</span>")
|
||||
#define span_syndradio(str) ("<span class='syndradio'>" + str + "</span>")
|
||||
#define span_tape_recorder(str) ("<span class='tape_recorder'>" + str + "</span>")
|
||||
#define span_tinynotice(str) ("<span class='tinynotice'>" + str + "</span>")
|
||||
#define span_tinynoticeital(str) ("<span class='tinynoticeital'>" + str + "</span>")
|
||||
#define span_unconscious(str) ("<span class='unconscious'>" + str + "</span>")
|
||||
#define span_userdanger(str) ("<span class='userdanger'>" + str + "</span>")
|
||||
#define span_warning(str) ("<span class='warning'>" + str + "</span>")
|
||||
#define span_yell(str) ("<span class='yell'>" + str + "</span>")
|
||||
#define span_yellowteamradio(str) ("<span class='yellowteamradio'>" + str + "</span>")
|
||||
@@ -215,6 +215,12 @@
|
||||
#define SSAIR_ATMOSMACHINERY_AIR 12
|
||||
#define SSAIR_DEFERRED_AIRS 13
|
||||
|
||||
// Subsystem delta times or tickrates, in seconds. I.e, how many seconds in between each process() call for objects being processed by that subsystem.
|
||||
// Only use these defines if you want to access some other objects processing delta_time, otherwise use the delta_time that is sent as a parameter to process()
|
||||
#define SSFLUIDS_DT (SSfluids.wait/10)
|
||||
#define SSMACHINES_DT (SSmachines.wait/10)
|
||||
#define SSMOBS_DT (SSmobs.wait/10)
|
||||
#define SSOBJ_DT (SSobj.wait/10)
|
||||
|
||||
//! ## Overlays subsystem
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/datum/config_entry/flag/admin_legacy_system //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/protect_legacy_admins //Stops any admins loaded by the legacy system from having their rank edited by the permissions panel
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/protect_legacy_ranks //Stops any ranks loaded by the legacy system from having their flags edited by the permissions panel
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/enable_localhost_rank //Gives the !localhost! rank to any client connecting from 127.0.0.1 or ::1
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/mentors_mobname_only
|
||||
|
||||
/datum/config_entry/flag/mentor_legacy_system //Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/forbid_singulo_possession
|
||||
|
||||
/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
|
||||
|
||||
/datum/config_entry/number/note_fresh_days
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/note_stale_days
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/autoconvert_notes //if all connecting player's notes should attempt to be converted to the database
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/announce_admin_logout
|
||||
|
||||
/datum/config_entry/flag/announce_admin_login
|
||||
|
||||
/datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API
|
||||
|
||||
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
|
||||
config_entry_value = "Game Master"
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
|
||||
|
||||
/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
|
||||
|
||||
/datum/config_entry/flag/guest_jobban
|
||||
|
||||
/datum/config_entry/flag/ban_legacy_system //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/guest_ban
|
||||
|
||||
/datum/config_entry/flag/automute_on //enables automuting/spam prevention
|
||||
|
||||
/datum/config_entry/flag/debug_admin_hrefs
|
||||
@@ -0,0 +1,26 @@
|
||||
/datum/config_entry/string/alert_green
|
||||
config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
|
||||
/datum/config_entry/string/alert_blue_upto
|
||||
config_entry_value = "The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted."
|
||||
|
||||
/datum/config_entry/string/alert_blue_downto
|
||||
config_entry_value = "Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted."
|
||||
|
||||
/datum/config_entry/string/alert_amber_upto
|
||||
config_entry_value = "There are significant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
|
||||
|
||||
/datum/config_entry/string/alert_amber_downto
|
||||
config_entry_value = "The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored."
|
||||
|
||||
/datum/config_entry/string/alert_red_upto
|
||||
config_entry_value = "There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted."
|
||||
|
||||
/datum/config_entry/string/alert_red_downto
|
||||
config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force."
|
||||
|
||||
/datum/config_entry/string/alert_delta
|
||||
config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
|
||||
|
||||
/datum/config_entry/number/minimum_secborg_alert //Minimum alert level for secborgs to be chosen.
|
||||
config_entry_value = 3
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/config_entry/flag/use_antag_rep // see game_options.txt for details
|
||||
|
||||
/datum/config_entry/number/antag_rep_maximum
|
||||
config_entry_value = 200
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/default_antag_tickets
|
||||
config_entry_value = 100
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/max_tickets_per_roll
|
||||
config_entry_value = 100
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/antag_rep
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
@@ -0,0 +1,106 @@
|
||||
/datum/config_entry/flag/panic_bunker // prevents people the server hasn't seen before from connecting
|
||||
|
||||
/datum/config_entry/number/panic_bunker_living // living time in minutes that a player needs to pass the panic bunker
|
||||
|
||||
/datum/config_entry/string/panic_bunker_message
|
||||
config_entry_value = "Sorry but the server is currently not accepting connections from never before seen players."
|
||||
|
||||
/datum/config_entry/string/panic_server_name
|
||||
|
||||
/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
|
||||
return str_val != "\[Put the name here\]" && ..()
|
||||
|
||||
/datum/config_entry/string/panic_server_address //Reconnect a player this linked server if this server isn't accepting new players
|
||||
|
||||
/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
|
||||
return str_val != "byond://address:port" && ..()
|
||||
|
||||
/datum/config_entry/number/max_bunker_days
|
||||
config_entry_value = 7
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
|
||||
|
||||
/datum/config_entry/flag/check_randomizer
|
||||
|
||||
/datum/config_entry/string/ipintel_email
|
||||
|
||||
/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
|
||||
return str_val != "ch@nge.me" && ..()
|
||||
|
||||
/datum/config_entry/number/ipintel_rating_bad
|
||||
config_entry_value = 1
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
|
||||
/datum/config_entry/number/ipintel_save_good
|
||||
config_entry_value = 12
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ipintel_save_bad
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/ipintel_domain
|
||||
config_entry_value = "check.getipintel.net"
|
||||
|
||||
/datum/config_entry/flag/aggressive_changelog
|
||||
|
||||
/datum/config_entry/flag/allow_webclient
|
||||
|
||||
/datum/config_entry/flag/webclient_only_byond_members
|
||||
|
||||
/datum/config_entry/number/client_warn_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/number/client_warn_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_warn_message
|
||||
config_entry_value = "Your version of byond may have issues or be blocked from accessing this server in the future."
|
||||
|
||||
/datum/config_entry/flag/client_warn_popup
|
||||
|
||||
/datum/config_entry/number/client_error_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_error_message
|
||||
config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
|
||||
|
||||
/datum/config_entry/number/client_error_build
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/soft_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/hard_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/extreme_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/soft_popcap_message
|
||||
config_entry_value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
|
||||
|
||||
/datum/config_entry/string/hard_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
|
||||
|
||||
/datum/config_entry/string/extreme_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, find alternative servers."
|
||||
@@ -0,0 +1,16 @@
|
||||
/// Amount of dirtyness tiles need to spawn dirt.
|
||||
/datum/config_entry/number/turf_dirt_threshold
|
||||
config_entry_value = 100
|
||||
min_val = 1
|
||||
integer = TRUE
|
||||
|
||||
/// Alpha dirt starts at
|
||||
/datum/config_entry/number/dirt_alpha_starting
|
||||
config_entry_value = 127
|
||||
max_val = 255
|
||||
min_val = 0
|
||||
integer = TRUE
|
||||
|
||||
/// Dirtyness multiplier for making turfs dirty
|
||||
/datum/config_entry/number/turf_dirty_multiplier
|
||||
config_entry_value = 1
|
||||
@@ -0,0 +1,45 @@
|
||||
/datum/config_entry/keyed_list/breasts_cups_prefs
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list("a", "b", "c", "d", "e") //keep these lowercase
|
||||
|
||||
/datum/config_entry/number/penis_min_inches_prefs
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/penis_max_inches_prefs
|
||||
config_entry_value = 20
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/safe_visibility_toggles
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
||||
|
||||
//Body size configs, the feature will be disabled if both min and max have the same value.
|
||||
/datum/config_entry/number/body_size_min
|
||||
config_entry_value = 0.9
|
||||
min_val = 0.1 //to avoid issues with zeros and negative values.
|
||||
max_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/body_size_max
|
||||
config_entry_value = 1.25
|
||||
min_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
//Penalties given to characters with a body size smaller than this value,
|
||||
//to compensate for their smaller hitbox.
|
||||
//To disable, just make sure the value is lower than 'body_size_min'
|
||||
/datum/config_entry/number/threshold_body_size_penalty
|
||||
config_entry_value = RESIZE_DEFAULT_SIZE
|
||||
min_val = 0
|
||||
max_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
|
||||
//doesn't apply to floating or crawling mobs
|
||||
/datum/config_entry/number/body_size_slowdown_multiplier
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
@@ -1,619 +0,0 @@
|
||||
/datum/config_entry/number_list/repeated_mode_adjust
|
||||
|
||||
/datum/config_entry/keyed_list/probability
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/probability/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/chaos_level
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/chaos_level/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/max_pop
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/max_pop/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/min_pop
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/min_pop/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/continuous // which roundtypes continue if all antagonists die
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/continuous/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/midround_antag // which roundtypes use the midround antagonist system
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/force_antag_count
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/policy
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_TEXT
|
||||
|
||||
/datum/config_entry/number/damage_multiplier
|
||||
config_entry_value = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/jobs_have_minimal_access //determines whether jobs use minimal access or expanded access.
|
||||
|
||||
/datum/config_entry/flag/assistants_have_maint_access
|
||||
|
||||
/datum/config_entry/flag/security_has_maint_access
|
||||
|
||||
/datum/config_entry/flag/everyone_has_maint_access
|
||||
|
||||
/datum/config_entry/flag/sec_start_brig //makes sec start in brig instead of dept sec posts
|
||||
|
||||
/datum/config_entry/flag/force_random_names
|
||||
|
||||
/datum/config_entry/flag/humans_need_surnames
|
||||
|
||||
/datum/config_entry/flag/allow_ai // allow ai job
|
||||
|
||||
/datum/config_entry/flag/allow_ai_multicam //whether the AI can use their multicam
|
||||
|
||||
/datum/config_entry/flag/disable_human_mood
|
||||
|
||||
/datum/config_entry/flag/disable_borg_flash_knockdown //Should borg flashes be capable of knocking humanoid entities down?
|
||||
|
||||
/datum/config_entry/flag/weaken_secborg //Brings secborgs and k9s back in-line with the other borg modules
|
||||
|
||||
/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
|
||||
|
||||
/datum/config_entry/flag/disable_peaceborg
|
||||
|
||||
/datum/config_entry/flag/economy //money money money money money money money money money money money money
|
||||
|
||||
/datum/config_entry/number/minimum_secborg_alert //Minimum alert level for secborgs to be chosen.
|
||||
config_entry_value = 3
|
||||
|
||||
/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
|
||||
config_entry_value = 6
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
|
||||
config_entry_value = 25
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
|
||||
config_entry_value = 6
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
|
||||
config_entry_value = 6
|
||||
integer = FALSE
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
|
||||
config_entry_value = 8
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/abductor_scaling_coeff //how many players per abductor team
|
||||
config_entry_value = 15
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/traitor_objectives_amount
|
||||
config_entry_value = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/brother_objectives_amount
|
||||
config_entry_value = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
|
||||
|
||||
/datum/config_entry/flag/protect_roles_from_antagonist //If security and such can be traitor/cult/other
|
||||
|
||||
/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
|
||||
|
||||
/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff
|
||||
|
||||
/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
|
||||
|
||||
/datum/config_entry/flag/use_antag_rep // see game_options.txt for details
|
||||
|
||||
/datum/config_entry/number/antag_rep_maximum
|
||||
config_entry_value = 200
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/default_antag_tickets
|
||||
config_entry_value = 100
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/max_tickets_per_roll
|
||||
config_entry_value = 100
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/midround_antag_time_check // How late (in minutes you want the midround antag system to stay on, setting this to 0 will disable the system)
|
||||
config_entry_value = 60
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/midround_antag_life_check // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
|
||||
config_entry_value = 0.7
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
|
||||
/datum/config_entry/number/suicide_reenter_round_timer
|
||||
config_entry_value = 30
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/roundstart_suicide_time_limit
|
||||
config_entry_value = 30
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/shuttle_refuel_delay
|
||||
config_entry_value = 12000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/show_game_type_odds //if set this allows players to see the odds of each roundtype on the get revision screen
|
||||
|
||||
/datum/config_entry/keyed_list/roundstart_races //races you can play as from the get go.
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
|
||||
|
||||
/datum/config_entry/flag/no_summon_guns //No
|
||||
|
||||
/datum/config_entry/flag/no_summon_magic //Fun
|
||||
|
||||
/datum/config_entry/flag/no_summon_events //Allowed
|
||||
|
||||
/datum/config_entry/flag/no_summon_traumas //!
|
||||
|
||||
/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
|
||||
|
||||
/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
|
||||
config_entry_value = 55
|
||||
min_val = 30
|
||||
|
||||
/datum/config_entry/flag/arrivals_shuttle_require_undocked //Require the arrivals shuttle to be undocked before latejoiners can join
|
||||
|
||||
/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
|
||||
|
||||
/datum/config_entry/string/alert_green
|
||||
config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
|
||||
/datum/config_entry/string/alert_blue_upto
|
||||
config_entry_value = "The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted."
|
||||
|
||||
/datum/config_entry/string/alert_blue_downto
|
||||
config_entry_value = "Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted."
|
||||
|
||||
/datum/config_entry/string/alert_amber_upto
|
||||
config_entry_value = "There are significant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
|
||||
|
||||
/datum/config_entry/string/alert_amber_downto
|
||||
config_entry_value = "The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored."
|
||||
|
||||
/datum/config_entry/string/alert_red_upto
|
||||
config_entry_value = "There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted."
|
||||
|
||||
/datum/config_entry/string/alert_red_downto
|
||||
config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force."
|
||||
|
||||
/datum/config_entry/string/alert_delta
|
||||
config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
|
||||
|
||||
/datum/config_entry/flag/revival_pod_plants
|
||||
|
||||
/datum/config_entry/flag/revival_cloning
|
||||
|
||||
/datum/config_entry/number/revival_brain_life
|
||||
config_entry_value = -1
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/flag/ooc_during_round
|
||||
|
||||
/datum/config_entry/flag/emojis
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed
|
||||
key_mode = KEY_MODE_TYPE
|
||||
value_mode = VALUE_MODE_NUM
|
||||
abstract_type = /datum/config_entry/keyed_list/multiplicative_movespeed
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet()
|
||||
. = ..()
|
||||
if(.)
|
||||
update_config_movespeed_type_lookup(TRUE)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(. && (var_name == NAMEOF(src, config_entry_value)))
|
||||
update_config_movespeed_type_lookup(TRUE)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/normal
|
||||
name = "multiplicative_movespeed"
|
||||
config_entry_value = list( //DEFAULTS
|
||||
/mob/living/simple_animal = 1,
|
||||
/mob/living/silicon/pai = 1,
|
||||
/mob/living/carbon/alien/humanoid/sentinel = 0.25,
|
||||
/mob/living/carbon/alien/humanoid/drone = 0.5,
|
||||
/mob/living/carbon/alien/humanoid/royal/praetorian = 1,
|
||||
/mob/living/carbon/alien/humanoid/royal/queen = 3
|
||||
)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/floating
|
||||
name = "multiplicative_movespeed_floating"
|
||||
config_entry_value = list(
|
||||
/mob/living = 0,
|
||||
/mob/living/carbon/alien/humanoid = 0,
|
||||
/mob/living/carbon/alien/humanoid/royal/praetorian = 0,
|
||||
/mob/living/carbon/alien/humanoid/royal/queen = 2
|
||||
)
|
||||
|
||||
/datum/config_entry/number/sprintless_stagger_slowdown
|
||||
config_entry_value = 0
|
||||
|
||||
/datum/config_entry/number/melee_stagger_factor
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/sprintless_off_balance_slowdown
|
||||
config_entry_value = 0.85
|
||||
|
||||
/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
|
||||
abstract_type = /datum/config_entry/number/movedelay
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/movedelay/ValidateAndSet()
|
||||
. = ..()
|
||||
if(.)
|
||||
update_mob_config_movespeeds()
|
||||
|
||||
/datum/config_entry/number/movedelay/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(. && (var_name == NAMEOF(src, config_entry_value)))
|
||||
update_mob_config_movespeeds()
|
||||
|
||||
/datum/config_entry/number/movedelay/run_delay
|
||||
|
||||
/datum/config_entry/number/movedelay/run_delay/ValidateAndSet()
|
||||
. = ..()
|
||||
var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run)
|
||||
M.sync()
|
||||
|
||||
/datum/config_entry/number/movedelay/walk_delay
|
||||
|
||||
/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet()
|
||||
. = ..()
|
||||
var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
|
||||
M.sync()
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
for(var/datum/hud/human/H)
|
||||
H.assert_move_intent_ui()
|
||||
if(!config_entry_value) // disabled
|
||||
for(var/mob/living/L in world)
|
||||
L.disable_intentional_sprint_mode()
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_speed_increase
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_max_tiles_increase
|
||||
config_entry_value = 5
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_absolute_max_tiles
|
||||
config_entry_value = 13
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_buffer_max
|
||||
config_entry_value = 24
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_stamina_cost
|
||||
config_entry_value = 1.4
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_buffer_regen_per_ds
|
||||
config_entry_value = 0.4
|
||||
|
||||
/////////////////////////////////////////////////Outdated move delay
|
||||
/datum/config_entry/number/outdated_movedelay
|
||||
deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed/normal
|
||||
abstract_type = /datum/config_entry/number/outdated_movedelay
|
||||
|
||||
var/movedelay_type
|
||||
|
||||
/datum/config_entry/number/outdated_movedelay/DeprecationUpdate(value)
|
||||
return "[movedelay_type] [value]"
|
||||
|
||||
/datum/config_entry/number/outdated_movedelay/human_delay
|
||||
movedelay_type = /mob/living/carbon/human
|
||||
/datum/config_entry/number/outdated_movedelay/robot_delay
|
||||
movedelay_type = /mob/living/silicon/robot
|
||||
/datum/config_entry/number/outdated_movedelay/monkey_delay
|
||||
movedelay_type = /mob/living/carbon/monkey
|
||||
/datum/config_entry/number/outdated_movedelay/alien_delay
|
||||
movedelay_type = /mob/living/carbon/alien
|
||||
/datum/config_entry/number/outdated_movedelay/slime_delay
|
||||
movedelay_type = /mob/living/simple_animal/slime
|
||||
/datum/config_entry/number/outdated_movedelay/animal_delay
|
||||
movedelay_type = /mob/living/simple_animal
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
|
||||
|
||||
/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded?
|
||||
|
||||
/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
|
||||
config_entry_value = 18000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/ghost_interaction
|
||||
|
||||
/datum/config_entry/flag/silent_ai
|
||||
/datum/config_entry/flag/silent_borg
|
||||
|
||||
/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
|
||||
|
||||
/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
max_val = 3
|
||||
|
||||
/datum/config_entry/number/silicon_max_law_amount
|
||||
config_entry_value = 12
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/random_laws
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/law_weight
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
splitter = ","
|
||||
|
||||
/datum/config_entry/number/overflow_cap
|
||||
config_entry_value = -1
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/string/overflow_job
|
||||
config_entry_value = "Assistant"
|
||||
|
||||
/datum/config_entry/flag/starlight
|
||||
/datum/config_entry/flag/grey_assistants
|
||||
|
||||
/datum/config_entry/number/lavaland_budget
|
||||
config_entry_value = 60
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/space_budget
|
||||
config_entry_value = 16
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/icemoon_budget
|
||||
config_entry_value = 90
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/station_space_budget
|
||||
config_entry_value = 10
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
|
||||
|
||||
/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/events_min_players_mul
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/mice_roundstart
|
||||
config_entry_value = 10
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/bombcap
|
||||
config_entry_value = 14
|
||||
min_val = 4
|
||||
|
||||
/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(.)
|
||||
GLOB.MAX_EX_DEVESTATION_RANGE = round(config_entry_value / 4)
|
||||
GLOB.MAX_EX_HEAVY_RANGE = round(config_entry_value / 2)
|
||||
GLOB.MAX_EX_LIGHT_RANGE = config_entry_value
|
||||
GLOB.MAX_EX_FLASH_RANGE = config_entry_value
|
||||
GLOB.MAX_EX_FLAME_RANGE = config_entry_value
|
||||
|
||||
/datum/config_entry/number/emergency_shuttle_autocall_threshold
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/ic_printing
|
||||
|
||||
/datum/config_entry/flag/roundstart_traits
|
||||
|
||||
/datum/config_entry/flag/enable_night_shifts
|
||||
|
||||
/datum/config_entry/number/night_shift_public_areas_only
|
||||
config_entry_value = NIGHTSHIFT_AREA_PUBLIC
|
||||
|
||||
/datum/config_entry/flag/nightshift_toggle_requires_auth
|
||||
config_entry_value = FALSE
|
||||
|
||||
/datum/config_entry/flag/nightshift_toggle_public_requires_auth
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/randomize_shift_time
|
||||
|
||||
/datum/config_entry/flag/shift_time_realtime
|
||||
|
||||
/datum/config_entry/keyed_list/antag_rep
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/job_threat
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/antag_threat
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/number/monkeycap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ratcap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/disable_stambuffer
|
||||
|
||||
/datum/config_entry/keyed_list/box_random_engine
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
lowercase = FALSE
|
||||
splitter = ","
|
||||
|
||||
/datum/config_entry/flag/pai_custom_holoforms
|
||||
|
||||
/datum/config_entry/number/marauder_delay_non_reebe
|
||||
config_entry_value = 1800
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_clockwork_marauder_on_station
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/modetier_voting
|
||||
|
||||
/datum/config_entry/flag/must_be_readied_to_vote_gamemode
|
||||
|
||||
/datum/config_entry/number/dropped_modes
|
||||
config_entry_value = 3
|
||||
|
||||
/datum/config_entry/flag/suicide_allowed
|
||||
|
||||
/datum/config_entry/keyed_list/breasts_cups_prefs
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list("a", "b", "c", "d", "e") //keep these lowercase
|
||||
|
||||
/datum/config_entry/number/penis_min_inches_prefs
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/penis_max_inches_prefs
|
||||
config_entry_value = 20
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/safe_visibility_toggles
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
config_entry_value = list(GEN_VISIBLE_NO_CLOTHES, GEN_VISIBLE_NO_UNDIES, GEN_VISIBLE_NEVER) //refer to cit_helpers for all toggles.
|
||||
|
||||
//Body size configs, the feature will be disabled if both min and max have the same value.
|
||||
/datum/config_entry/number/body_size_min
|
||||
config_entry_value = 0.9
|
||||
min_val = 0.1 //to avoid issues with zeros and negative values.
|
||||
max_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/body_size_max
|
||||
config_entry_value = 1.25
|
||||
min_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
//Penalties given to characters with a body size smaller than this value,
|
||||
//to compensate for their smaller hitbox.
|
||||
//To disable, just make sure the value is lower than 'body_size_min'
|
||||
/datum/config_entry/number/threshold_body_size_penalty
|
||||
config_entry_value = RESIZE_DEFAULT_SIZE
|
||||
min_val = 0
|
||||
max_val = RESIZE_DEFAULT_SIZE
|
||||
integer = FALSE
|
||||
|
||||
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
|
||||
//doesn't apply to floating or crawling mobs
|
||||
/datum/config_entry/number/body_size_slowdown_multiplier
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
|
||||
/datum/config_entry/flag/allow_custom_skintones
|
||||
|
||||
///Initial loadout points
|
||||
/datum/config_entry/number/initial_gear_points
|
||||
config_entry_value = 10
|
||||
|
||||
/**
|
||||
* Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
|
||||
* Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
|
||||
*/
|
||||
/datum/config_entry/flag/use_field_of_vision
|
||||
|
||||
//Shuttle size limiter
|
||||
/datum/config_entry/number/max_shuttle_count
|
||||
config_entry_value = 6
|
||||
|
||||
/datum/config_entry/number/max_shuttle_size
|
||||
config_entry_value = 500
|
||||
|
||||
//wound config stuff (increases the max injury roll, making injuries more likely)
|
||||
/datum/config_entry/number/wound_exponent
|
||||
config_entry_value = WOUND_DAMAGE_EXPONENT
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
//adds a set amount to any injury rolls on a limb using get_damage() multiplied by this number
|
||||
/datum/config_entry/number/wound_damage_multiplier
|
||||
config_entry_value = 0.333
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/// Amount of dirtyness tiles need to spawn dirt.
|
||||
/datum/config_entry/number/turf_dirt_threshold
|
||||
config_entry_value = 100
|
||||
min_val = 1
|
||||
integer = TRUE
|
||||
|
||||
/// Alpha dirt starts at
|
||||
/datum/config_entry/number/dirt_alpha_starting
|
||||
config_entry_value = 127
|
||||
max_val = 255
|
||||
min_val = 0
|
||||
integer = TRUE
|
||||
|
||||
/// Dirtyness multiplier for making turfs dirty
|
||||
/datum/config_entry/number/turf_dirty_multiplier
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/flag/weigh_by_recent_chaos
|
||||
|
||||
/datum/config_entry/number/chaos_exponent
|
||||
config_entry_value = 1
|
||||
@@ -0,0 +1,94 @@
|
||||
/datum/config_entry/number_list/repeated_mode_adjust
|
||||
|
||||
/datum/config_entry/flag/weigh_by_recent_chaos
|
||||
|
||||
/datum/config_entry/number/chaos_exponent
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/keyed_list/probability
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/probability/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/chaos_level
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/chaos_level/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/max_pop
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/max_pop/ValidateListEntry(key_name)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/min_pop
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/min_pop/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/continuous // which roundtypes continue if all antagonists die
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/continuous/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/midround_antag // which roundtypes use the midround antagonist system
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/midround_antag/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/keyed_list/force_antag_count
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/force_antag_count/ValidateListEntry(key_name, key_value)
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
|
||||
config_entry_value = 6
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
|
||||
config_entry_value = 25
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
|
||||
config_entry_value = 6
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
|
||||
config_entry_value = 6
|
||||
integer = FALSE
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
|
||||
config_entry_value = 8
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/abductor_scaling_coeff //how many players per abductor team
|
||||
config_entry_value = 15
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/traitor_objectives_amount
|
||||
config_entry_value = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/brother_objectives_amount
|
||||
config_entry_value = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/protect_roles_from_antagonist //If security and such can be traitor/cult/other
|
||||
|
||||
/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
|
||||
|
||||
/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
|
||||
@@ -1,21 +1,3 @@
|
||||
/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
|
||||
|
||||
/datum/config_entry/flag/autoadmin // if autoadmin is enabled
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
|
||||
config_entry_value = "Game Master"
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/servername // server name (the name of the game window)
|
||||
|
||||
/datum/config_entry/string/servertagline
|
||||
config_entry_value = "We forgot to set the server's tagline in config.txt"
|
||||
|
||||
/datum/config_entry/string/serversqlname // short form server name used for the DB
|
||||
|
||||
/datum/config_entry/string/stationname // station name (the name of the station in-game)
|
||||
|
||||
/datum/config_entry/number/lobby_countdown // In between round countdown.
|
||||
config_entry_value = 120
|
||||
min_val = 0
|
||||
@@ -24,164 +6,11 @@
|
||||
config_entry_value = 25
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/hub // if the game appears on the hub or not
|
||||
|
||||
/datum/config_entry/flag/allow_admin_ooccolor // Allows admins with relevant permissions to have their own ooc colour
|
||||
|
||||
/datum/config_entry/flag/allow_vote_restart // allow votes to restart
|
||||
|
||||
/datum/config_entry/flag/allow_vote_mode // allow votes to change mode
|
||||
|
||||
/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
|
||||
config_entry_value = 6000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
|
||||
config_entry_value = 600
|
||||
min_val = 0
|
||||
|
||||
/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
|
||||
/// Set to 0 to disable the subsystem altogether.
|
||||
/datum/config_entry/number/vote_autotransfer_initial
|
||||
config_entry_value = 72000
|
||||
min_val = 0
|
||||
|
||||
///length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
|
||||
/datum/config_entry/number/vote_autotransfer_interval
|
||||
config_entry_value = 18000
|
||||
min_val = 0
|
||||
|
||||
/// maximum extensions until the round autoends.
|
||||
/// Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
|
||||
/// Set to -1 to disable the maximum extensions cap.
|
||||
/datum/config_entry/number/vote_autotransfer_maximum
|
||||
config_entry_value = 4
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
|
||||
|
||||
/datum/config_entry/flag/no_dead_vote // dead people can't vote
|
||||
|
||||
/datum/config_entry/flag/allow_metadata // Metadata is supported.
|
||||
|
||||
/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
|
||||
|
||||
/datum/config_entry/number/fps
|
||||
config_entry_value = 20
|
||||
min_val = 1
|
||||
max_val = 100 //byond will start crapping out at 50, so this is just ridic
|
||||
var/sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/fps/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(.)
|
||||
sync_validate = TRUE
|
||||
var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
|
||||
if(!TL.sync_validate)
|
||||
TL.ValidateAndSet(10 / config_entry_value)
|
||||
sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/ticklag
|
||||
integer = FALSE
|
||||
var/sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
|
||||
var/datum/config_entry/CE = /datum/config_entry/number/fps
|
||||
config_entry_value = 10 / initial(CE.config_entry_value)
|
||||
..()
|
||||
|
||||
/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
|
||||
. = text2num(str_val) > 0 && ..()
|
||||
if(.)
|
||||
sync_validate = TRUE
|
||||
var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
|
||||
if(!FPS.sync_validate)
|
||||
FPS.ValidateAndSet(10 / config_entry_value)
|
||||
sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/flag/allow_holidays
|
||||
|
||||
/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
|
||||
config_entry_value = TICK_LIMIT_MC_INIT_DEFAULT
|
||||
min_val = 0 //oranges warned us
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/admin_legacy_system //Defines whether the server uses the legacy admin system with admins.txt or the SQL system
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/protect_legacy_admins //Stops any admins loaded by the legacy system from having their rank edited by the permissions panel
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/protect_legacy_ranks //Stops any ranks loaded by the legacy system from having their flags edited by the permissions panel
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/enable_localhost_rank //Gives the !localhost! rank to any client connecting from 127.0.0.1 or ::1
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/load_legacy_ranks_only //Loads admin ranks only from legacy admin_ranks.txt, while enabled ranks are mirrored to the database
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/mentors_mobname_only
|
||||
|
||||
/datum/config_entry/flag/mentor_legacy_system //Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/hostedby
|
||||
|
||||
/datum/config_entry/flag/guest_jobban
|
||||
|
||||
/datum/config_entry/flag/usewhitelist
|
||||
|
||||
/datum/config_entry/flag/ban_legacy_system //Defines whether the server uses the legacy banning system with the files in /data or the SQL system.
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/use_age_restriction_for_jobs //Do jobs use account age restrictions? --requires database
|
||||
|
||||
/datum/config_entry/flag/use_account_age_for_jobs //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
|
||||
|
||||
/datum/config_entry/flag/use_exp_tracking
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads
|
||||
|
||||
/datum/config_entry/number/use_exp_restrictions_heads_hours
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads_department
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_other
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_admin_bypass
|
||||
|
||||
/datum/config_entry/string/server
|
||||
|
||||
/datum/config_entry/string/banappeals
|
||||
|
||||
/datum/config_entry/string/wikiurl
|
||||
config_entry_value = "https://katlin.dog/citadel-wiki"
|
||||
|
||||
/datum/config_entry/string/wikiurltg
|
||||
config_entry_value = "http://www.tgstation13.org/wiki"
|
||||
|
||||
/datum/config_entry/string/forumurl
|
||||
config_entry_value = "http://tgstation13.org/phpBB/index.php"
|
||||
|
||||
/datum/config_entry/string/rulesurl
|
||||
config_entry_value = "http://www.tgstation13.org/wiki/Rules"
|
||||
|
||||
/datum/config_entry/string/githuburl
|
||||
config_entry_value = "https://www.github.com/tgstation/-tg-station"
|
||||
|
||||
/datum/config_entry/string/roundstatsurl
|
||||
|
||||
/datum/config_entry/string/gamelogurl
|
||||
|
||||
/datum/config_entry/number/githubrepoid
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/guest_ban
|
||||
|
||||
/datum/config_entry/number/id_console_jobslot_delay
|
||||
config_entry_value = 30
|
||||
min_val = 0
|
||||
@@ -208,181 +37,8 @@
|
||||
|
||||
/datum/config_entry/flag/load_jobs_from_txt
|
||||
|
||||
/datum/config_entry/flag/forbid_singulo_possession
|
||||
|
||||
/datum/config_entry/flag/automute_on //enables automuting/spam prevention
|
||||
|
||||
/datum/config_entry/string/panic_server_name
|
||||
|
||||
/datum/config_entry/string/panic_server_name/ValidateAndSet(str_val)
|
||||
return str_val != "\[Put the name here\]" && ..()
|
||||
|
||||
/datum/config_entry/string/panic_server_address //Reconnect a player this linked server if this server isn't accepting new players
|
||||
|
||||
/datum/config_entry/string/panic_server_address/ValidateAndSet(str_val)
|
||||
return str_val != "byond://address:port" && ..()
|
||||
|
||||
/datum/config_entry/string/invoke_youtubedl
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/flag/show_irc_name
|
||||
|
||||
/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
|
||||
|
||||
/datum/config_entry/number/note_fresh_days
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/note_stale_days
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/maprotation
|
||||
|
||||
/datum/config_entry/flag/tgstyle_maprotation
|
||||
|
||||
/datum/config_entry/string/map_vote_type
|
||||
config_entry_value = APPROVAL_VOTING
|
||||
|
||||
/datum/config_entry/number/maprotatechancedelta
|
||||
config_entry_value = 0.75
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/soft_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/hard_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/extreme_popcap
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/soft_popcap_message
|
||||
config_entry_value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
|
||||
|
||||
/datum/config_entry/string/hard_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
|
||||
|
||||
/datum/config_entry/string/extreme_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, find alternative servers."
|
||||
|
||||
/datum/config_entry/flag/panic_bunker // prevents people the server hasn't seen before from connecting
|
||||
|
||||
/datum/config_entry/number/panic_bunker_living // living time in minutes that a player needs to pass the panic bunker
|
||||
|
||||
/datum/config_entry/string/panic_bunker_message
|
||||
config_entry_value = "Sorry but the server is currently not accepting connections from never before seen players."
|
||||
|
||||
/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
|
||||
|
||||
/datum/config_entry/flag/check_randomizer
|
||||
|
||||
/datum/config_entry/string/ipintel_email
|
||||
|
||||
/datum/config_entry/string/ipintel_email/ValidateAndSet(str_val)
|
||||
return str_val != "ch@nge.me" && ..()
|
||||
|
||||
/datum/config_entry/number/ipintel_rating_bad
|
||||
config_entry_value = 1
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
|
||||
/datum/config_entry/number/ipintel_save_good
|
||||
config_entry_value = 12
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ipintel_save_bad
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/ipintel_domain
|
||||
config_entry_value = "check.getipintel.net"
|
||||
|
||||
/datum/config_entry/flag/aggressive_changelog
|
||||
|
||||
/datum/config_entry/flag/autoconvert_notes //if all connecting player's notes should attempt to be converted to the database
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/allow_webclient
|
||||
|
||||
/datum/config_entry/flag/webclient_only_byond_members
|
||||
|
||||
/datum/config_entry/flag/announce_admin_logout
|
||||
|
||||
/datum/config_entry/flag/announce_admin_login
|
||||
|
||||
/datum/config_entry/flag/allow_map_voting
|
||||
|
||||
/datum/config_entry/number/client_warn_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/number/client_warn_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_warn_message
|
||||
config_entry_value = "Your version of byond may have issues or be blocked from accessing this server in the future."
|
||||
|
||||
/datum/config_entry/flag/client_warn_popup
|
||||
|
||||
/datum/config_entry/number/client_error_version
|
||||
config_entry_value = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_error_message
|
||||
config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
|
||||
|
||||
/datum/config_entry/number/client_error_build
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_topic_limit
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_topic_limit
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_click_limit
|
||||
config_entry_value = 400
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_click_limit
|
||||
config_entry_value = 15
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
|
||||
config_entry_value = 600
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
|
||||
config_entry_value = 50
|
||||
|
||||
/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
|
||||
config_entry_value = 6000
|
||||
|
||||
/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
|
||||
config_entry_value = 50
|
||||
|
||||
/datum/config_entry/flag/irc_announce_new_game
|
||||
deprecated_by = /datum/config_entry/string/chat_announce_new_game
|
||||
|
||||
@@ -390,54 +46,290 @@
|
||||
return "" //default broadcast
|
||||
|
||||
/datum/config_entry/string/chat_announce_new_game
|
||||
|
||||
config_entry_value = null
|
||||
|
||||
/datum/config_entry/flag/debug_admin_hrefs
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1.1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
|
||||
config_entry_value = 65
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
|
||||
config_entry_value = 60
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate
|
||||
abstract_type = /datum/config_entry/number/mc_tick_rate
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if (.)
|
||||
Master.UpdateTickRate()
|
||||
|
||||
/datum/config_entry/flag/resume_after_initializations
|
||||
|
||||
/datum/config_entry/flag/resume_after_initializations/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(. && Master.current_runlevel)
|
||||
world.sleep_offline = !config_entry_value
|
||||
|
||||
/datum/config_entry/number/rounds_until_hard_restart
|
||||
config_entry_value = -1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/default_view
|
||||
config_entry_value = "15x15"
|
||||
|
||||
/datum/config_entry/string/default_view_square
|
||||
config_entry_value = "15x15"
|
||||
|
||||
/datum/config_entry/number/max_bunker_days
|
||||
config_entry_value = 7
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/flag/minimaps_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/string/centcom_ban_db // URL for the CentCom Galactic Ban DB API
|
||||
|
||||
|
||||
/datum/config_entry/number/damage_multiplier
|
||||
config_entry_value = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/jobs_have_minimal_access //determines whether jobs use minimal access or expanded access.
|
||||
|
||||
/datum/config_entry/flag/assistants_have_maint_access
|
||||
|
||||
/datum/config_entry/flag/security_has_maint_access
|
||||
|
||||
/datum/config_entry/flag/everyone_has_maint_access
|
||||
|
||||
/datum/config_entry/flag/sec_start_brig //makes sec start in brig instead of dept sec posts
|
||||
|
||||
/datum/config_entry/flag/force_random_names
|
||||
|
||||
/datum/config_entry/flag/humans_need_surnames
|
||||
|
||||
/datum/config_entry/flag/allow_ai // allow ai job
|
||||
|
||||
/datum/config_entry/flag/allow_ai_multicam //whether the AI can use their multicam
|
||||
|
||||
/datum/config_entry/flag/disable_human_mood
|
||||
|
||||
/datum/config_entry/flag/disable_borg_flash_knockdown //Should borg flashes be capable of knocking humanoid entities down?
|
||||
|
||||
/datum/config_entry/flag/weaken_secborg //Brings secborgs and k9s back in-line with the other borg modules
|
||||
|
||||
/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
|
||||
|
||||
/datum/config_entry/flag/disable_peaceborg
|
||||
|
||||
/datum/config_entry/flag/economy //money money money money money money money money money money money money
|
||||
|
||||
/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
|
||||
|
||||
/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff
|
||||
|
||||
/datum/config_entry/number/midround_antag_time_check // How late (in minutes you want the midround antag system to stay on, setting this to 0 will disable the system)
|
||||
config_entry_value = 60
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/midround_antag_life_check // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist
|
||||
config_entry_value = 0.7
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
|
||||
/datum/config_entry/number/suicide_reenter_round_timer
|
||||
config_entry_value = 30
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/roundstart_suicide_time_limit
|
||||
config_entry_value = 30
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/shuttle_refuel_delay
|
||||
config_entry_value = 12000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/show_game_type_odds //if set this allows players to see the odds of each roundtype on the get revision screen
|
||||
|
||||
/datum/config_entry/keyed_list/roundstart_races //races you can play as from the get go.
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/flag/join_with_mutant_humans //players can pick mutant bodyparts for humans before joining the game
|
||||
|
||||
/datum/config_entry/flag/no_summon_guns //No
|
||||
|
||||
/datum/config_entry/flag/no_summon_magic //Fun
|
||||
|
||||
/datum/config_entry/flag/no_summon_events //Allowed
|
||||
|
||||
/datum/config_entry/flag/no_summon_traumas //!
|
||||
|
||||
/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
|
||||
|
||||
/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
|
||||
config_entry_value = 55
|
||||
min_val = 30
|
||||
|
||||
/datum/config_entry/flag/arrivals_shuttle_require_undocked //Require the arrivals shuttle to be undocked before latejoiners can join
|
||||
|
||||
/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
|
||||
|
||||
|
||||
/datum/config_entry/flag/revival_pod_plants
|
||||
|
||||
/datum/config_entry/flag/revival_cloning
|
||||
|
||||
/datum/config_entry/number/revival_brain_life
|
||||
config_entry_value = -1
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/flag/ooc_during_round
|
||||
|
||||
/datum/config_entry/flag/emojis
|
||||
|
||||
/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
|
||||
|
||||
/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded?
|
||||
|
||||
/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
|
||||
config_entry_value = 18000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/ghost_interaction
|
||||
|
||||
/datum/config_entry/flag/silent_ai
|
||||
/datum/config_entry/flag/silent_borg
|
||||
|
||||
/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
|
||||
|
||||
/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
max_val = 3
|
||||
|
||||
/datum/config_entry/number/silicon_max_law_amount
|
||||
config_entry_value = 12
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/random_laws
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/keyed_list/law_weight
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
splitter = ","
|
||||
|
||||
/datum/config_entry/number/overflow_cap
|
||||
config_entry_value = -1
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/string/overflow_job
|
||||
config_entry_value = "Assistant"
|
||||
|
||||
/datum/config_entry/flag/starlight
|
||||
/datum/config_entry/flag/grey_assistants
|
||||
|
||||
/datum/config_entry/number/lavaland_budget
|
||||
config_entry_value = 60
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/space_budget
|
||||
config_entry_value = 16
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/icemoon_budget
|
||||
config_entry_value = 90
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/station_space_budget
|
||||
config_entry_value = 10
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
|
||||
|
||||
/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/events_min_players_mul
|
||||
config_entry_value = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/mice_roundstart
|
||||
config_entry_value = 10
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/bombcap
|
||||
config_entry_value = 14
|
||||
min_val = 4
|
||||
|
||||
/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(.)
|
||||
GLOB.MAX_EX_DEVESTATION_RANGE = round(config_entry_value / 4)
|
||||
GLOB.MAX_EX_HEAVY_RANGE = round(config_entry_value / 2)
|
||||
GLOB.MAX_EX_LIGHT_RANGE = config_entry_value
|
||||
GLOB.MAX_EX_FLASH_RANGE = config_entry_value
|
||||
GLOB.MAX_EX_FLAME_RANGE = config_entry_value
|
||||
|
||||
/datum/config_entry/number/emergency_shuttle_autocall_threshold
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/ic_printing
|
||||
|
||||
/datum/config_entry/flag/roundstart_traits
|
||||
|
||||
/datum/config_entry/flag/enable_night_shifts
|
||||
|
||||
/datum/config_entry/number/night_shift_public_areas_only
|
||||
config_entry_value = NIGHTSHIFT_AREA_PUBLIC
|
||||
|
||||
/datum/config_entry/flag/nightshift_toggle_requires_auth
|
||||
config_entry_value = FALSE
|
||||
|
||||
/datum/config_entry/flag/nightshift_toggle_public_requires_auth
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/randomize_shift_time
|
||||
|
||||
/datum/config_entry/flag/shift_time_realtime
|
||||
|
||||
/datum/config_entry/number/monkeycap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ratcap
|
||||
config_entry_value = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/box_random_engine
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
lowercase = FALSE
|
||||
splitter = ","
|
||||
|
||||
/datum/config_entry/flag/pai_custom_holoforms
|
||||
|
||||
/datum/config_entry/number/marauder_delay_non_reebe
|
||||
config_entry_value = 1800
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_clockwork_marauder_on_station
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/suicide_allowed
|
||||
|
||||
|
||||
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
|
||||
/datum/config_entry/flag/allow_custom_skintones
|
||||
|
||||
///Initial loadout points
|
||||
/datum/config_entry/number/initial_gear_points
|
||||
config_entry_value = 10
|
||||
|
||||
/**
|
||||
* Enables the FoV component, which hides objects and mobs behind the parent from their sight, unless they turn around, duh.
|
||||
* Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
|
||||
*/
|
||||
/datum/config_entry/flag/use_field_of_vision
|
||||
|
||||
//Shuttle size limiter
|
||||
/datum/config_entry/number/max_shuttle_count
|
||||
config_entry_value = 6
|
||||
|
||||
/datum/config_entry/number/max_shuttle_size
|
||||
config_entry_value = 500
|
||||
|
||||
//wound config stuff (increases the max injury roll, making injuries more likely)
|
||||
/datum/config_entry/number/wound_exponent
|
||||
config_entry_value = WOUND_DAMAGE_EXPONENT
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
//adds a set amount to any injury rolls on a limb using get_damage() multiplied by this number
|
||||
/datum/config_entry/number/wound_damage_multiplier
|
||||
config_entry_value = 0.333
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/config_entry/flag/use_age_restriction_for_jobs //Do jobs use account age restrictions? --requires database
|
||||
|
||||
/datum/config_entry/flag/use_account_age_for_jobs //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected.
|
||||
|
||||
/datum/config_entry/flag/use_exp_tracking
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads
|
||||
|
||||
/datum/config_entry/number/use_exp_restrictions_heads_hours
|
||||
config_entry_value = 0
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads_department
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_other
|
||||
|
||||
/datum/config_entry/flag/use_exp_restrictions_admin_bypass
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
/datum/config_entry/flag/log_admin // log admin actions
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/log_prayer // log prayers
|
||||
config_entry_value = TRUE
|
||||
@@ -68,3 +69,16 @@
|
||||
/// forces log_href for tgui
|
||||
/datum/config_entry/flag/emergency_tgui_logging
|
||||
config_entry_value = FALSE
|
||||
|
||||
/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
|
||||
config_entry_value = 600
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
|
||||
config_entry_value = 50
|
||||
|
||||
/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
|
||||
config_entry_value = 6000
|
||||
|
||||
/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
|
||||
config_entry_value = 50
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed
|
||||
key_mode = KEY_MODE_TYPE
|
||||
value_mode = VALUE_MODE_NUM
|
||||
abstract_type = /datum/config_entry/keyed_list/multiplicative_movespeed
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet()
|
||||
. = ..()
|
||||
if(.)
|
||||
update_config_movespeed_type_lookup(TRUE)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(. && (var_name == NAMEOF(src, config_entry_value)))
|
||||
update_config_movespeed_type_lookup(TRUE)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/normal
|
||||
name = "multiplicative_movespeed"
|
||||
config_entry_value = list( //DEFAULTS
|
||||
/mob/living/simple_animal = 1,
|
||||
/mob/living/silicon/pai = 1,
|
||||
/mob/living/carbon/alien/humanoid/sentinel = 0.25,
|
||||
/mob/living/carbon/alien/humanoid/drone = 0.5,
|
||||
/mob/living/carbon/alien/humanoid/royal/praetorian = 1,
|
||||
/mob/living/carbon/alien/humanoid/royal/queen = 3
|
||||
)
|
||||
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed/floating
|
||||
name = "multiplicative_movespeed_floating"
|
||||
config_entry_value = list(
|
||||
/mob/living = 0,
|
||||
/mob/living/carbon/alien/humanoid = 0,
|
||||
/mob/living/carbon/alien/humanoid/royal/praetorian = 0,
|
||||
/mob/living/carbon/alien/humanoid/royal/queen = 2
|
||||
)
|
||||
|
||||
/datum/config_entry/number/movedelay //Used for modifying movement speed for mobs.
|
||||
abstract_type = /datum/config_entry/number/movedelay
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/movedelay/ValidateAndSet()
|
||||
. = ..()
|
||||
if(.)
|
||||
update_mob_config_movespeeds()
|
||||
|
||||
/datum/config_entry/number/movedelay/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(. && (var_name == NAMEOF(src, config_entry_value)))
|
||||
update_mob_config_movespeeds()
|
||||
|
||||
/datum/config_entry/number/movedelay/run_delay
|
||||
|
||||
/datum/config_entry/number/movedelay/run_delay/ValidateAndSet()
|
||||
. = ..()
|
||||
var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run)
|
||||
M.sync()
|
||||
|
||||
/datum/config_entry/number/movedelay/walk_delay
|
||||
|
||||
/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet()
|
||||
. = ..()
|
||||
var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk)
|
||||
M.sync()
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/flag/sprint_enabled/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
for(var/datum/hud/human/H)
|
||||
H.assert_move_intent_ui()
|
||||
if(!config_entry_value) // disabled
|
||||
for(var/mob/living/L in world)
|
||||
L.disable_intentional_sprint_mode()
|
||||
|
||||
/datum/config_entry/number/sprintless_stagger_slowdown
|
||||
config_entry_value = 0
|
||||
|
||||
/datum/config_entry/number/sprintless_off_balance_slowdown
|
||||
config_entry_value = 0.85
|
||||
|
||||
/datum/config_entry/number/melee_stagger_factor
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_speed_increase
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_max_tiles_increase
|
||||
config_entry_value = 5
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_absolute_max_tiles
|
||||
config_entry_value = 13
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_buffer_max
|
||||
config_entry_value = 24
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_stamina_cost
|
||||
config_entry_value = 1.4
|
||||
|
||||
/datum/config_entry/number/movedelay/sprint_buffer_regen_per_ds
|
||||
config_entry_value = 0.4
|
||||
|
||||
/////////////////////////////////////////////////Outdated move delay
|
||||
/datum/config_entry/number/outdated_movedelay
|
||||
deprecated_by = /datum/config_entry/keyed_list/multiplicative_movespeed/normal
|
||||
abstract_type = /datum/config_entry/number/outdated_movedelay
|
||||
|
||||
var/movedelay_type
|
||||
|
||||
/datum/config_entry/number/outdated_movedelay/DeprecationUpdate(value)
|
||||
return "[movedelay_type] [value]"
|
||||
|
||||
/datum/config_entry/number/outdated_movedelay/human_delay
|
||||
movedelay_type = /mob/living/carbon/human
|
||||
/datum/config_entry/number/outdated_movedelay/robot_delay
|
||||
movedelay_type = /mob/living/silicon/robot
|
||||
/datum/config_entry/number/outdated_movedelay/monkey_delay
|
||||
movedelay_type = /mob/living/carbon/monkey
|
||||
/datum/config_entry/number/outdated_movedelay/alien_delay
|
||||
movedelay_type = /mob/living/carbon/alien
|
||||
/datum/config_entry/number/outdated_movedelay/slime_delay
|
||||
movedelay_type = /mob/living/simple_animal/slime
|
||||
/datum/config_entry/number/outdated_movedelay/animal_delay
|
||||
movedelay_type = /mob/living/simple_animal
|
||||
/////////////////////////////////////////////////
|
||||
@@ -3,9 +3,9 @@
|
||||
config_entry_value = 300
|
||||
integer = TRUE
|
||||
|
||||
/datum/config_entry/keyed_list/policyconfig
|
||||
/datum/config_entry/keyed_list/policy
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_TEXT
|
||||
|
||||
/datum/config_entry/keyed_list/policyconfig/preprocess_key(key)
|
||||
/datum/config_entry/keyed_list/policy/preprocess_key(key)
|
||||
return uppertext(..())
|
||||
|
||||
+16
-1
@@ -9,7 +9,6 @@
|
||||
protection = CONFIG_ENTRY_LOCKED //affects physical server configuration, no touchies!!
|
||||
|
||||
/datum/config_entry/flag/fail2topic_enabled
|
||||
config_entry_value = TRUE
|
||||
|
||||
/datum/config_entry/number/topic_max_size
|
||||
config_entry_value = 8192
|
||||
@@ -17,3 +16,19 @@
|
||||
/datum/config_entry/keyed_list/topic_rate_limit_whitelist
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_FLAG
|
||||
|
||||
/datum/config_entry/number/minute_topic_limit
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_topic_limit
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_click_limit
|
||||
config_entry_value = 400
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_click_limit
|
||||
config_entry_value = 15
|
||||
min_val = 0
|
||||
@@ -0,0 +1,90 @@
|
||||
/datum/config_entry/flag/auto_profile // Automatically start profiler on server start
|
||||
|
||||
/datum/config_entry/string/servername // server name (the name of the game window)
|
||||
|
||||
/datum/config_entry/string/servertagline
|
||||
config_entry_value = "We forgot to set the server's tagline in config.txt"
|
||||
|
||||
/datum/config_entry/string/serversqlname // short form server name used for the DB
|
||||
|
||||
/datum/config_entry/string/stationname // station name (the name of the station in-game)
|
||||
|
||||
/datum/config_entry/number/fps
|
||||
config_entry_value = 20
|
||||
min_val = 1
|
||||
max_val = 100 //byond will start crapping out at 50, so this is just ridic
|
||||
var/sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/fps/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(.)
|
||||
sync_validate = TRUE
|
||||
var/datum/config_entry/number/ticklag/TL = config.entries_by_type[/datum/config_entry/number/ticklag]
|
||||
if(!TL.sync_validate)
|
||||
TL.ValidateAndSet(10 / config_entry_value)
|
||||
sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/ticklag
|
||||
integer = FALSE
|
||||
var/sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
|
||||
var/datum/config_entry/CE = /datum/config_entry/number/fps
|
||||
config_entry_value = 10 / initial(CE.config_entry_value)
|
||||
..()
|
||||
|
||||
/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
|
||||
. = text2num(str_val) > 0 && ..()
|
||||
if(.)
|
||||
sync_validate = TRUE
|
||||
var/datum/config_entry/number/fps/FPS = config.entries_by_type[/datum/config_entry/number/fps]
|
||||
if(!FPS.sync_validate)
|
||||
FPS.ValidateAndSet(10 / config_entry_value)
|
||||
sync_validate = FALSE
|
||||
|
||||
/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
|
||||
config_entry_value = TICK_LIMIT_MC_INIT_DEFAULT
|
||||
min_val = 0 //oranges warned us
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/usewhitelist
|
||||
|
||||
/datum/config_entry/string/hostedby
|
||||
|
||||
/datum/config_entry/flag/hub // if the game appears on the hub or not
|
||||
|
||||
/datum/config_entry/string/invoke_youtubedl
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1.1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
|
||||
config_entry_value = 65
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
|
||||
config_entry_value = 60
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate
|
||||
abstract_type = /datum/config_entry/number/mc_tick_rate
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if (.)
|
||||
Master.UpdateTickRate()
|
||||
|
||||
/datum/config_entry/flag/resume_after_initializations
|
||||
|
||||
/datum/config_entry/flag/resume_after_initializations/ValidateAndSet(str_val)
|
||||
. = ..()
|
||||
if(. && Master.current_runlevel)
|
||||
world.sleep_offline = !config_entry_value
|
||||
|
||||
/datum/config_entry/number/rounds_until_hard_restart
|
||||
config_entry_value = -1
|
||||
min_val = 0
|
||||
@@ -29,3 +29,5 @@
|
||||
/// Factor to multiply by for stamina usage past buffer into health
|
||||
/datum/config_entry/number/stamina_combat/overdraw_penalty_factor
|
||||
config_entry_value = 1.5
|
||||
|
||||
/datum/config_entry/flag/disable_stambuffer
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
/datum/config_entry/keyed_list/job_threat
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
|
||||
/datum/config_entry/keyed_list/antag_threat
|
||||
key_mode = KEY_MODE_TEXT
|
||||
value_mode = VALUE_MODE_NUM
|
||||
@@ -0,0 +1,26 @@
|
||||
/datum/config_entry/string/server
|
||||
|
||||
/datum/config_entry/string/banappeals
|
||||
|
||||
/datum/config_entry/string/wikiurl
|
||||
config_entry_value = "https://katlin.dog/citadel-wiki"
|
||||
|
||||
/datum/config_entry/string/wikiurltg
|
||||
config_entry_value = "http://www.tgstation13.org/wiki"
|
||||
|
||||
/datum/config_entry/string/forumurl
|
||||
config_entry_value = "http://tgstation13.org/phpBB/index.php"
|
||||
|
||||
/datum/config_entry/string/rulesurl
|
||||
config_entry_value = "http://www.tgstation13.org/wiki/Rules"
|
||||
|
||||
/datum/config_entry/string/githuburl
|
||||
config_entry_value = "https://www.github.com/tgstation/-tg-station"
|
||||
|
||||
/datum/config_entry/string/roundstatsurl
|
||||
|
||||
/datum/config_entry/string/gamelogurl
|
||||
|
||||
/datum/config_entry/number/githubrepoid
|
||||
config_entry_value = null
|
||||
min_val = 0
|
||||
@@ -0,0 +1,55 @@
|
||||
/datum/config_entry/flag/allow_vote_restart // allow votes to restart
|
||||
|
||||
/datum/config_entry/flag/allow_vote_mode // allow votes to change mode
|
||||
|
||||
/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
|
||||
config_entry_value = 6000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
|
||||
config_entry_value = 600
|
||||
min_val = 0
|
||||
|
||||
/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours)
|
||||
/// Set to 0 to disable the subsystem altogether.
|
||||
/datum/config_entry/number/vote_autotransfer_initial
|
||||
config_entry_value = 72000
|
||||
min_val = 0
|
||||
|
||||
///length of time to wait before subsequent autotransfer votes (deciseconds, default 30 minutes)
|
||||
/datum/config_entry/number/vote_autotransfer_interval
|
||||
config_entry_value = 18000
|
||||
min_val = 0
|
||||
|
||||
/// maximum extensions until the round autoends.
|
||||
/// Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
|
||||
/// Set to -1 to disable the maximum extensions cap.
|
||||
/datum/config_entry/number/vote_autotransfer_maximum
|
||||
config_entry_value = 4
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/flag/default_no_vote // vote does not default to nochange/norestart
|
||||
|
||||
/datum/config_entry/flag/no_dead_vote // dead people can't vote
|
||||
|
||||
/datum/config_entry/flag/maprotation
|
||||
|
||||
/datum/config_entry/flag/tgstyle_maprotation
|
||||
|
||||
/datum/config_entry/string/map_vote_type
|
||||
config_entry_value = APPROVAL_VOTING
|
||||
|
||||
/datum/config_entry/number/maprotatechancedelta
|
||||
config_entry_value = 0.75
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/allow_map_voting
|
||||
|
||||
/datum/config_entry/flag/modetier_voting
|
||||
|
||||
/datum/config_entry/number/dropped_modes
|
||||
config_entry_value = 3
|
||||
|
||||
/datum/config_entry/flag/must_be_readied_to_vote_gamemode
|
||||
@@ -90,7 +90,7 @@
|
||||
return
|
||||
SEND_SIGNAL(parent, COMSIG_ATOM_ORBIT_END, orbiter, refreshing)
|
||||
UnregisterSignal(orbiter, COMSIG_MOVABLE_MOVED)
|
||||
orbiter.SpinAnimation(0, 0)
|
||||
orbiter.SpinAnimation(0, 0, parallel = FALSE)
|
||||
if(istype(orbiters[orbiter],/matrix)) //This is ugly.
|
||||
orbiter.transform = orbiters[orbiter]
|
||||
orbiters -= orbiter
|
||||
|
||||
@@ -159,9 +159,9 @@
|
||||
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
|
||||
if(!istype(C))
|
||||
return
|
||||
C.reagents.metabolize(C, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
||||
C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
||||
if(triple_metabolism)
|
||||
C.reagents.metabolize(C, can_overdose=TRUE)
|
||||
C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE)
|
||||
C.overeatduration = max(C.overeatduration - 2, 0)
|
||||
var/lost_nutrition = 9 - (reduced_hunger * 5)
|
||||
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
|
||||
|
||||
@@ -199,6 +199,23 @@
|
||||
movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode
|
||||
stamdmg_per_ds = 1
|
||||
|
||||
/datum/status_effect/vtec_disabled
|
||||
id = "vtec_disable"
|
||||
tick = FALSE
|
||||
|
||||
/datum/status_effect/vtec_disabled/on_creation(mob/living/new_owner, set_duration)
|
||||
if(isnum(set_duration))
|
||||
duration = set_duration
|
||||
. = ..()
|
||||
if(iscyborg(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.vtec_disabled = TRUE
|
||||
|
||||
/datum/status_effect/vtec_disabled/on_remove()
|
||||
if(iscyborg(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.vtec_disabled = FALSE
|
||||
return ..()
|
||||
|
||||
//OTHER DEBUFFS
|
||||
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
/datum/status_effect
|
||||
var/id = "effect" //Used for screen alerts.
|
||||
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
|
||||
/// do we tick()?
|
||||
var/tick = TRUE
|
||||
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
|
||||
var/next_tick //The scheduled time for the next tick.
|
||||
var/mob/living/owner //The mob affected by the status effect.
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
to_chat(occupant, "<span class='notice'><b>There is a bright flash!</b><br><i>You feel like a new being.</i></span>")
|
||||
mob_occupant.flash_act()
|
||||
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/policy = policies[POLICYCONFIG_ON_CLONE]
|
||||
if(policy)
|
||||
to_chat(occupant, policy)
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
var/mob/C = pick(candidates)
|
||||
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(S)])")
|
||||
C.transfer_ckey(S, FALSE)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/policy = policies[POLICYCONFIG_ON_PYROCLASTIC_SENTIENT]
|
||||
if(policy)
|
||||
to_chat(S,policy)
|
||||
|
||||
@@ -620,7 +620,7 @@
|
||||
if(req_defib)
|
||||
if(defib.healdisk)
|
||||
H.heal_overall_damage(25, 25)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||
src.pai = personality
|
||||
src.add_overlay("pai-null")
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/policy = policies[POLICYCONFIG_PAI]
|
||||
if(policy)
|
||||
to_chat(personality, policy)
|
||||
|
||||
@@ -73,14 +73,14 @@
|
||||
|
||||
/datum/block_parry_data/captain_saber
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 6
|
||||
parry_time_active = 10
|
||||
parry_time_spindown = 0
|
||||
parry_time_perfect = 0.75
|
||||
parry_time_perfect_leeway = 0.75
|
||||
parry_time_perfect_leeway = 1.5
|
||||
parry_imperfect_falloff_percent = 30
|
||||
parry_efficiency_perfect = 100
|
||||
parry_failed_stagger_duration = 3 SECONDS
|
||||
parry_failed_clickcd_duration = 1 SECONDS
|
||||
parry_failed_clickcd_duration = 0
|
||||
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK
|
||||
parry_automatic_enabled = TRUE
|
||||
|
||||
@@ -179,19 +179,23 @@
|
||||
// Fast, efficient parry.
|
||||
/datum/block_parry_data/traitor_rapier
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 6
|
||||
parry_time_active = 10
|
||||
parry_time_spindown = 0
|
||||
parry_time_active_visual_override = 3
|
||||
parry_time_spindown_visual_override = 2
|
||||
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK | PARRY_LOCK_ATTACKING
|
||||
parry_time_perfect = 1
|
||||
parry_time_perfect_leeway = 1
|
||||
parry_time_perfect = 2
|
||||
parry_time_perfect_leeway = 2
|
||||
parry_time_perfect_leeway_override = list(
|
||||
TEXT_ATTACK_TYPE_PROJECTILE = 1
|
||||
)
|
||||
parry_imperfect_falloff_percent = 30
|
||||
parry_efficiency_to_counterattack = INFINITY
|
||||
parry_efficiency_to_counterattack = 100
|
||||
parry_efficiency_considered_successful = 1
|
||||
parry_data = list(
|
||||
PARRY_KNOCKDOWN_ATTACKER = 10,
|
||||
PARRY_DISARM_ATTACKER = TRUE
|
||||
)
|
||||
parry_efficiency_perfect = 100
|
||||
parry_stamina_cost = 5
|
||||
parry_failed_stagger_duration = 2 SECONDS
|
||||
|
||||
@@ -90,7 +90,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
to_chat(user, "<span class='notice'>There's no room for another VTEC unit!</span>")
|
||||
return FALSE
|
||||
|
||||
//R.speed = -2 // Gotta go fast.
|
||||
//R.vtec = -2 // Gotta go fast.
|
||||
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
|
||||
VC = new /obj/effect/proc_holder/silicon/cyborg/vtecControl
|
||||
R.AddAbility(VC)
|
||||
@@ -100,7 +100,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
. = ..()
|
||||
if (.)
|
||||
R.RemoveAbility(VC)
|
||||
R.speed = initial(R.speed)
|
||||
R.vtec = initial(R.vtec)
|
||||
R.cansprint = 1
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler
|
||||
@@ -690,11 +690,11 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
if(istype(user))
|
||||
switch(currentState)
|
||||
if (0)
|
||||
user.speed = initial(user.speed)
|
||||
user.vtec = initial(user.vtec)
|
||||
if (1)
|
||||
user.speed = initial(user.speed) - maxReduction * 0.5
|
||||
user.vtec = initial(user.vtec) - maxReduction * 0.5
|
||||
if (2)
|
||||
user.speed = initial(user.speed) - maxReduction * 1
|
||||
user.vtec = initial(user.vtec) - maxReduction * 1
|
||||
|
||||
action.button_icon_state = "Chevron_State_[currentState]"
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
|
||||
//Recover from stuns.
|
||||
/obj/effect/proc_holder/changeling/adrenaline/sting_action(mob/living/user)
|
||||
user.do_adrenaline(0, FALSE, 70, 0, TRUE, list(/datum/reagent/medicine/epinephrine = 3, /datum/reagent/drug/methamphetamine/changeling = 10, /datum/reagent/medicine/changelingadrenaline = 5), "<span class='notice'>Energy rushes through us.</span>", 0, 0.75, 0)
|
||||
user.do_adrenaline(0, FALSE, 70, 0, TRUE, list(/datum/reagent/medicine/epinephrine = 3, /datum/reagent/medicine/changelinghaste = 10, /datum/reagent/medicine/changelingadrenaline = 5), "<span class='notice'>Energy rushes through us.</span>", 0, 0.75, 0)
|
||||
return TRUE
|
||||
|
||||
@@ -433,7 +433,7 @@
|
||||
var/list/danger = list()
|
||||
for(var/id in air_contents.get_gases())
|
||||
var/gas = air_contents.get_moles(id)
|
||||
if(!GLOB.gas_data.flags[id] & GAS_FLAG_DANGEROUS)
|
||||
if(!(GLOB.gas_data.flags[id] & GAS_FLAG_DANGEROUS))
|
||||
continue
|
||||
if(gas > (GLOB.gas_data.visibility[id] || MOLES_GAS_VISIBLE)) //if moles_visible is undefined, default to default visibility
|
||||
danger[GLOB.gas_data.names[id]] = gas //ex. "plasma" = 20
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/carbon/BiologicalLife(seconds, times_fired)
|
||||
//Reagent processing needs to come before breathing, to prevent edge cases.
|
||||
handle_organs()
|
||||
handle_organs(seconds, times_fired)
|
||||
. = ..() // if . is false, we are dead.
|
||||
if(stat == DEAD)
|
||||
stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||
@@ -23,7 +23,7 @@
|
||||
handle_brain_damage()
|
||||
|
||||
if(stat != DEAD)
|
||||
handle_liver()
|
||||
handle_liver(seconds, times_fired)
|
||||
|
||||
if(stat != DEAD)
|
||||
handle_corruption()
|
||||
@@ -378,25 +378,25 @@
|
||||
/mob/living/carbon/proc/handle_blood()
|
||||
return
|
||||
|
||||
/mob/living/carbon/proc/handle_bodyparts()
|
||||
/mob/living/carbon/proc/handle_bodyparts(seconds, times_fired)
|
||||
for(var/I in bodyparts)
|
||||
var/obj/item/bodypart/BP = I
|
||||
if(BP.needs_processing)
|
||||
. |= BP.on_life()
|
||||
. |= BP.on_life(seconds, times_fired)
|
||||
|
||||
/mob/living/carbon/proc/handle_organs()
|
||||
/mob/living/carbon/proc/handle_organs(seconds, times_fired)
|
||||
if(stat != DEAD)
|
||||
for(var/V in internal_organs)
|
||||
var/obj/item/organ/O = V
|
||||
if(O)
|
||||
O.on_life()
|
||||
O.on_life(seconds, times_fired)
|
||||
else
|
||||
if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/preservahyde, 1)) // No organ decay if the body contains formaldehyde. Or preservahyde.
|
||||
return
|
||||
for(var/V in internal_organs)
|
||||
var/obj/item/organ/O = V
|
||||
if(O)
|
||||
O.on_death() //Needed so organs decay while inside the body.
|
||||
O.on_death(seconds, times_fired) //Needed so organs decay while inside the body.
|
||||
|
||||
/mob/living/carbon/handle_diseases()
|
||||
for(var/thing in diseases)
|
||||
@@ -687,16 +687,16 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
//LIVER//
|
||||
/////////
|
||||
|
||||
/mob/living/carbon/proc/handle_liver()
|
||||
/mob/living/carbon/proc/handle_liver(seconds, times_fired)
|
||||
var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER)
|
||||
if((!dna && !liver) || (NOLIVER in dna.species.species_traits))
|
||||
return
|
||||
if(!liver || liver.organ_flags & ORGAN_FAILING)
|
||||
liver_failure()
|
||||
liver_failure(seconds, times_fired)
|
||||
|
||||
/mob/living/carbon/proc/liver_failure()
|
||||
/mob/living/carbon/proc/liver_failure(seconds, times_fired)
|
||||
reagents.end_metabolization(src, keep_liverless = TRUE) //Stops trait-based effects on reagents, to prevent permanent buffs
|
||||
reagents.metabolize(src, can_overdose=FALSE, liverless = TRUE)
|
||||
reagents.metabolize(src, seconds, times_fired, can_overdose=FALSE, liverless = TRUE)
|
||||
if(HAS_TRAIT(src, TRAIT_STABLELIVER))
|
||||
return
|
||||
adjustToxLoss(4, TRUE, TRUE)
|
||||
|
||||
@@ -966,7 +966,8 @@
|
||||
|
||||
upgrades.Cut()
|
||||
|
||||
speed = 0
|
||||
vtec = 0
|
||||
vtec_disabled = FALSE
|
||||
ionpulse = FALSE
|
||||
revert_shell()
|
||||
|
||||
|
||||
@@ -82,6 +82,18 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
|
||||
if(!opened)
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/disarm_shove(mob/living/carbon/human/H)
|
||||
visible_message(span_danger("[src]'s motors grind as they are shoved by [H]!"))
|
||||
vtec_disable(10 SECONDS)
|
||||
|
||||
/mob/living/silicon/robot/proc/vtec_disable(time)
|
||||
var/datum/status_effect/vtec_disabled/V = has_status_effect(/datum/status_effect/vtec_disabled)
|
||||
if(V)
|
||||
V.duration = max(V.duration, world.time + time)
|
||||
else
|
||||
apply_status_effect(/datum/status_effect/vtec_disabled, time)
|
||||
update_movespeed()
|
||||
|
||||
/mob/living/silicon/robot/fire_act()
|
||||
if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them
|
||||
IgniteMob()
|
||||
|
||||
@@ -61,7 +61,9 @@
|
||||
|
||||
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list())
|
||||
|
||||
var/speed = 0 // VTEC speed boost.
|
||||
var/vtec = 0 // VTEC speed boost.
|
||||
/// vtec shorted out
|
||||
var/vtec_disabled = FALSE
|
||||
var/magpulse = FALSE // Magboot-like effect.
|
||||
var/ionpulse = FALSE // Jetpack-like effect.
|
||||
var/ionpulse_on = FALSE // Jetpack-like effect.
|
||||
|
||||
@@ -23,4 +23,4 @@
|
||||
. = ..()
|
||||
if(!resting && !(combat_flags & COMBAT_FLAG_SPRINT_ACTIVE))
|
||||
. += 1
|
||||
. += speed
|
||||
. += vtec_disabled? 0 : vtec
|
||||
|
||||
@@ -79,6 +79,8 @@
|
||||
M.visible_message("[M] pets [src].", \
|
||||
"<span class='notice'>You pet [src].</span>", target = src,
|
||||
target_message = "[M] pets you.")
|
||||
if(INTENT_DISARM)
|
||||
disarm_shove(M)
|
||||
if(INTENT_GRAB)
|
||||
grabbedby(M)
|
||||
else
|
||||
@@ -88,6 +90,9 @@
|
||||
"<span class='warning'>[M] punches you, but doesn't leave a dent.</span>", null, COMBAT_MESSAGE_RANGE, null, M,
|
||||
"<span class='danger'>You punch [src], but don't leave a dent.</span>")
|
||||
|
||||
/mob/living/silicon/proc/disarm_shove(mob/living/carbon/human/H)
|
||||
visible_message(span_danger("[H] shoves [src], but doesn't manage to make much of an effect."))
|
||||
|
||||
/mob/living/silicon/attack_drone(mob/living/simple_animal/drone/M)
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
return
|
||||
|
||||
@@ -2,17 +2,53 @@
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
|
||||
/datum/movespeed_modifier/reagent/stimulants
|
||||
multiplicative_slowdown = -0.5
|
||||
multiplicative_slowdown = -0.55
|
||||
|
||||
/datum/movespeed_modifier/reagent/ephedrine
|
||||
// strong painkiller effect that caps out at slightly above runspeed
|
||||
multiplicative_slowdown = -1.5
|
||||
priority = -100
|
||||
complex_calculation = TRUE
|
||||
absolute_max_tiles_per_second = 7
|
||||
|
||||
/datum/movespeed_modifier/reagent/pepperspray
|
||||
multiplicative_slowdown = 0.25
|
||||
|
||||
/datum/movespeed_modifier/reagent/monkey_energy
|
||||
multiplicative_slowdown = -0.35
|
||||
|
||||
/datum/movespeed_modifier/reagent/changelinghaste
|
||||
multiplicative_slowdown = -2
|
||||
// extremely strong painkiller effect: allows user to run at old sprint speeds but not over by cancelling out slowdowns.
|
||||
// however, will not make user go faster than that
|
||||
multiplicative_slowdown = -4
|
||||
priority = -100
|
||||
complex_calculation = TRUE
|
||||
absolute_max_tiles_per_second = 8
|
||||
|
||||
/datum/movespeed_modifier/reagent/methamphetamine
|
||||
// very strong painkiller effect that caps out at slightly above runspeed
|
||||
multiplicative_slowdown = -2.5
|
||||
priority = -100
|
||||
complex_calculation = TRUE
|
||||
absolute_max_tiles_per_second = 7.5
|
||||
|
||||
/datum/movespeed_modifier/reagent/nitryl
|
||||
multiplicative_slowdown = -0.65
|
||||
|
||||
/datum/movespeed_modifier/reagent/freon
|
||||
multiplicative_slowdown = 1.6
|
||||
|
||||
/datum/movespeed_modifier/reagent/halon
|
||||
multiplicative_slowdown = 1.8
|
||||
|
||||
/datum/movespeed_modifier/reagent/lenturi
|
||||
multiplicative_slowdown = 1.5
|
||||
|
||||
/datum/movespeed_modifier/reagent/nuka_cola
|
||||
multiplicative_slowdown = -0.35
|
||||
|
||||
/datum/movespeed_modifier/reagent/nooartrium
|
||||
multiplicative_slowdown = 2
|
||||
|
||||
/datum/movespeed_modifier/reagent/skooma
|
||||
multiplicative_slowdown = -1
|
||||
|
||||
/datum/movespeed_modifier/reagent/nitryl
|
||||
multiplicative_slowdown = -1
|
||||
|
||||
/datum/movespeed_modifier/reagent/meth
|
||||
multiplicative_slowdown = -0.5
|
||||
absolute_max_tiles_per_second = 11
|
||||
|
||||
@@ -51,3 +51,11 @@
|
||||
|
||||
/datum/movespeed_modifier/status_effect/off_balance
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/status_effect/slime/light_pink
|
||||
// decently good painkiller + speedup effect
|
||||
blacklisted_movetypes = FLYING | FLOATING
|
||||
priority = -150 // someday we really need to make these defines lmao
|
||||
multiplicative_slowdown = -2
|
||||
complex_calculation = TRUE
|
||||
absolute_max_tiles_per_second = 7
|
||||
|
||||
@@ -77,6 +77,11 @@ Contents:
|
||||
cell.name = "black power cell"
|
||||
cell.icon_state = "bscell"
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/Destroy()
|
||||
if(affecting)
|
||||
unlock_suit()
|
||||
return ..()
|
||||
|
||||
//Simply deletes all the attachments and self, killing all related procs.
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/terminate()
|
||||
qdel(n_hood)
|
||||
@@ -84,7 +89,6 @@ Contents:
|
||||
qdel(n_shoes)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Randomizes suit parameters.
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/randomize_param()
|
||||
s_cost = rand(1,20)
|
||||
@@ -93,7 +97,6 @@ Contents:
|
||||
s_bombs = rand(5,20)
|
||||
a_boost = rand(1,7)
|
||||
|
||||
|
||||
//This proc prevents the suit from being taken off.
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
@@ -113,14 +116,14 @@ Contents:
|
||||
return FALSE
|
||||
affecting = H
|
||||
ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |=
|
||||
slowdown = 0
|
||||
n_hood = H.head
|
||||
ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
n_shoes = H.shoes
|
||||
ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
n_shoes.slowdown -= 0.5
|
||||
n_shoes.slowdown = -0.25
|
||||
n_gloves = H.gloves
|
||||
ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
ADD_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT)
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H)
|
||||
@@ -133,19 +136,19 @@ Contents:
|
||||
/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit()
|
||||
affecting = null
|
||||
REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
slowdown = 1
|
||||
icon_state = "s-ninja"
|
||||
if(n_hood)//Should be attached, might not be attached.
|
||||
REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
if(n_shoes)
|
||||
REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
n_shoes.slowdown += 0.5
|
||||
n_shoes.slowdown = 0.25
|
||||
if(n_gloves)
|
||||
n_gloves.icon_state = "s-ninja"
|
||||
n_gloves.item_state = "s-ninja"
|
||||
REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
|
||||
n_gloves.candrain=0
|
||||
n_gloves.draining=0
|
||||
REMOVE_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja/examine(mob/user)
|
||||
|
||||
@@ -31,6 +31,11 @@
|
||||
else if(tase_duration && (C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE) && !HAS_TRAIT(C, TRAIT_TASED_RESISTANCE))
|
||||
C.apply_status_effect(strong_tase? STATUS_EFFECT_TASED : STATUS_EFFECT_TASED_WEAK, tase_duration)
|
||||
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
|
||||
else if(iscyborg(target))
|
||||
target.visible_message(span_danger("A shower of sparks emit from [target] on impact from [src]!"))
|
||||
do_sparks(1, TRUE, target)
|
||||
var/mob/living/silicon/robot/R = target
|
||||
R.vtec_disable(10 SECONDS)
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
|
||||
do_sparks(1, TRUE, src)
|
||||
|
||||
@@ -280,71 +280,114 @@
|
||||
R.handle_reactions()
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/metabolize(mob/living/carbon/C, can_overdose = FALSE, liverless = FALSE)
|
||||
/**
|
||||
* Triggers metabolizing for all the reagents in this holder
|
||||
*
|
||||
* Arguments:
|
||||
* * mob/living/carbon/carbon - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom]
|
||||
* * delta_time - the time in server seconds between proc calls (when performing normally it will be 2)
|
||||
* * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired
|
||||
* * can_overdose - Allows overdosing
|
||||
* * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing
|
||||
*/
|
||||
/datum/reagents/proc/metabolize(mob/living/carbon/owner, delta_time, times_fired, can_overdose = FALSE, liverless = FALSE)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/list/cached_addictions = addiction_list
|
||||
if(C)
|
||||
expose_temperature(C.bodytemperature, 0.25)
|
||||
var/need_mob_update = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(QDELETED(R.holder))
|
||||
continue
|
||||
if(liverless && !R.self_consuming) //need to be metabolized
|
||||
continue
|
||||
if(!C)
|
||||
C = R.holder.my_atom
|
||||
if(!R.metabolizing)
|
||||
R.metabolizing = TRUE
|
||||
R.on_mob_metabolize(C)
|
||||
if(C && R)
|
||||
if(C.reagent_check(R) != 1)
|
||||
if(can_overdose)
|
||||
if(R.overdose_threshold)
|
||||
if(R.volume > R.overdose_threshold && !R.overdosed)
|
||||
R.overdosed = 1
|
||||
var/turf/CT = get_turf(C)
|
||||
log_reagent("OVERDOSE START: [key_name(C)] at [AREACOORD(CT)] started overdosing on [R.volume] units of [R].")
|
||||
need_mob_update += R.overdose_start(C)
|
||||
if(R.addiction_threshold)
|
||||
if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
|
||||
var/datum/reagent/new_reagent = new R.type()
|
||||
cached_addictions.Add(new_reagent)
|
||||
if(R.overdosed)
|
||||
need_mob_update += R.overdose_process(C)
|
||||
if(is_type_in_list(R,cached_addictions))
|
||||
for(var/addiction in cached_addictions)
|
||||
var/datum/reagent/A = addiction
|
||||
if(istype(R, A))
|
||||
A.addiction_stage = -15 // you're satisfied for a good while.
|
||||
need_mob_update += R.on_mob_life(C)
|
||||
|
||||
if(owner)
|
||||
expose_temperature(owner.bodytemperature, 0.25)
|
||||
var/need_mob_update = FALSE
|
||||
for(var/datum/reagent/reagent as anything in cached_reagents)
|
||||
need_mob_update += metabolize_reagent(owner, reagent, delta_time, times_fired, can_overdose, liverless)
|
||||
if(can_overdose)
|
||||
if(addiction_tick == 6)
|
||||
addiction_tick = 1
|
||||
for(var/addiction in cached_addictions)
|
||||
for(var/addiction in addiction_list)
|
||||
var/datum/reagent/R = addiction
|
||||
if(C && R)
|
||||
if(owner && R)
|
||||
R.addiction_stage++
|
||||
if(1 <= R.addiction_stage && R.addiction_stage <= R.addiction_stage1_end)
|
||||
need_mob_update += R.addiction_act_stage1(C)
|
||||
need_mob_update += R.addiction_act_stage1(owner)
|
||||
else if(R.addiction_stage1_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage2_end)
|
||||
need_mob_update += R.addiction_act_stage2(C)
|
||||
need_mob_update += R.addiction_act_stage2(owner)
|
||||
else if(R.addiction_stage2_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage3_end)
|
||||
need_mob_update += R.addiction_act_stage3(C)
|
||||
need_mob_update += R.addiction_act_stage3(owner)
|
||||
else if(R.addiction_stage3_end < R.addiction_stage && R.addiction_stage <= R.addiction_stage4_end)
|
||||
need_mob_update += R.addiction_act_stage4(C)
|
||||
need_mob_update += R.addiction_act_stage4(owner)
|
||||
else if(R.addiction_stage4_end < R.addiction_stage)
|
||||
remove_addiction(R)
|
||||
else
|
||||
SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
|
||||
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
|
||||
addiction_tick++
|
||||
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
|
||||
C.updatehealth()
|
||||
C.update_mobility()
|
||||
C.update_stamina()
|
||||
if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
|
||||
owner.updatehealth()
|
||||
owner.update_mobility()
|
||||
owner.update_stamina()
|
||||
update_total()
|
||||
|
||||
/*
|
||||
* Metabolises a single reagent for a target owner carbon mob. See above.
|
||||
*
|
||||
* Arguments:
|
||||
* * mob/living/carbon/owner - The mob to metabolize in, if null it uses [/datum/reagents/var/my_atom]
|
||||
* * delta_time - the time in server seconds between proc calls (when performing normally it will be 2)
|
||||
* * times_fired - the number of times the owner's life() tick has been called aka The number of times SSmobs has fired
|
||||
* * can_overdose - Allows overdosing
|
||||
* * liverless - Stops reagents that aren't set as [/datum/reagent/var/self_consuming] from metabolizing
|
||||
*/
|
||||
/datum/reagents/proc/metabolize_reagent(mob/living/carbon/owner, datum/reagent/reagent, delta_time, times_fired, can_overdose = FALSE, liverless = FALSE)
|
||||
var/need_mob_update = FALSE
|
||||
if(QDELETED(reagent.holder))
|
||||
return FALSE
|
||||
|
||||
if(!owner)
|
||||
owner = reagent.holder.my_atom
|
||||
|
||||
if(owner && reagent)
|
||||
if(!owner.reagent_check(reagent, delta_time, times_fired) != TRUE)
|
||||
return
|
||||
if(liverless && !reagent.self_consuming) //need to be metabolized
|
||||
return
|
||||
if(!reagent.metabolizing)
|
||||
reagent.metabolizing = TRUE
|
||||
reagent.on_mob_metabolize(owner)
|
||||
if(can_overdose)
|
||||
if(reagent.overdose_threshold)
|
||||
if(reagent.volume >= reagent.overdose_threshold && !reagent.overdosed)
|
||||
reagent.overdosed = TRUE
|
||||
need_mob_update += reagent.overdose_start(owner)
|
||||
log_game("[key_name(owner)] has started overdosing on [reagent.name] at [reagent.volume] units.")
|
||||
|
||||
// for(var/addiction in reagent.addiction_types)
|
||||
// owner.mind?.add_addiction_points(addiction, reagent.addiction_types[addiction] * REAGENTS_METABOLISM)
|
||||
if(reagent.addiction_threshold)
|
||||
if(reagent.volume > reagent.addiction_threshold && !is_type_in_list(reagent, addiction_list))
|
||||
var/datum/reagent/new_reagent = new reagent.type()
|
||||
addiction_list.Add(new_reagent)
|
||||
if(is_type_in_list(reagent, addiction_list))
|
||||
for(var/addiction in addiction_list)
|
||||
var/datum/reagent/A = addiction
|
||||
if(istype(reagent, A))
|
||||
A.addiction_stage = -15 // you're satisfied for a good while.
|
||||
|
||||
if(reagent.overdosed)
|
||||
need_mob_update += reagent.overdose_process(owner, delta_time, times_fired)
|
||||
|
||||
need_mob_update += reagent.on_mob_life(owner, delta_time, times_fired)
|
||||
return need_mob_update
|
||||
|
||||
/// Signals that metabolization has stopped, triggering the end of trait-based effects
|
||||
/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/datum/reagent/reagent as anything in cached_reagents)
|
||||
if(QDELETED(reagent.holder))
|
||||
continue
|
||||
if(keep_liverless && reagent.self_consuming) //Will keep working without a liver
|
||||
continue
|
||||
if(!C)
|
||||
C = reagent.holder.my_atom
|
||||
if(reagent.metabolizing)
|
||||
reagent.metabolizing = FALSE
|
||||
reagent.on_mob_end_metabolize(C)
|
||||
|
||||
/datum/reagents/proc/remove_addiction(datum/reagent/R)
|
||||
to_chat(my_atom, "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>")
|
||||
SEND_SIGNAL(my_atom, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
|
||||
@@ -354,21 +397,6 @@
|
||||
addiction_list.Remove(R)
|
||||
qdel(R)
|
||||
|
||||
//Signals that metabolization has stopped, triggering the end of trait-based effects
|
||||
/datum/reagents/proc/end_metabolization(mob/living/carbon/C, keep_liverless = TRUE)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(QDELETED(R.holder))
|
||||
continue
|
||||
if(keep_liverless && R.self_consuming) //Will keep working without a liver
|
||||
continue
|
||||
if(!C)
|
||||
C = R.holder.my_atom
|
||||
if(R.metabolizing)
|
||||
R.metabolizing = FALSE
|
||||
R.on_mob_end_metabolize(C)
|
||||
|
||||
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
|
||||
@@ -505,11 +505,11 @@
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/carbon/M)
|
||||
M.add_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
|
||||
M.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nuka_cola)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_end_metabolize(mob/living/carbon/M)
|
||||
M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
|
||||
M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nuka_cola)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -164,62 +164,54 @@
|
||||
|
||||
/datum/reagent/drug/methamphetamine
|
||||
name = "Methamphetamine"
|
||||
description = "Reduces stun times by about 300%, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#FAFAFA"
|
||||
overdose_threshold = 20
|
||||
addiction_threshold = 10
|
||||
metabolization_rate = 0.75 * REAGENTS_METABOLISM
|
||||
var/brain_damage = TRUE
|
||||
var/jitter = TRUE
|
||||
var/confusion = TRUE
|
||||
pH = 5
|
||||
addiction_threshold = 10
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
|
||||
L.update_movespeed()
|
||||
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/methamphetamine)
|
||||
|
||||
/datum/reagent/drug/methamphetamine/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_IGNOREDAMAGESLOWDOWN, type)
|
||||
L.update_movespeed()
|
||||
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/meth)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/methamphetamine)
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M)
|
||||
/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
|
||||
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[high_message]</span>")
|
||||
M.AdjustAllImmobility(-40, 0)
|
||||
M.AdjustUnconscious(-40, 0)
|
||||
M.adjustStaminaLoss(-7.5 * REM, 0)
|
||||
if(jitter)
|
||||
M.Jitter(2)
|
||||
if(brain_damage)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4))
|
||||
M.heal_overall_damage(2, 2)
|
||||
if(prob(5))
|
||||
if(DT_PROB(2.5, delta_time))
|
||||
to_chat(M, span_notice("[high_message]"))
|
||||
// SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "tweaking", /datum/mood_event/stimulant_medium, name)
|
||||
M.AdjustStun(-40 * REM * delta_time)
|
||||
M.AdjustKnockdown(-40 * REM * delta_time)
|
||||
M.AdjustUnconscious(-40 * REM * delta_time)
|
||||
M.AdjustParalyzed(-40 * REM * delta_time)
|
||||
M.AdjustImmobilized(-40 * REM * delta_time)
|
||||
M.adjustStaminaLoss(-2 * REM * delta_time, 0)
|
||||
M.Jitter(2 * REM * delta_time)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * delta_time)
|
||||
if(DT_PROB(2.5, delta_time))
|
||||
M.emote(pick("twitch", "shiver"))
|
||||
..()
|
||||
. = 1
|
||||
. = TRUE
|
||||
|
||||
/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M)
|
||||
/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M, delta_time, times_fired)
|
||||
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc))
|
||||
for(var/i in 1 to 4)
|
||||
for(var/i in 1 to round(4 * REM * delta_time, 1))
|
||||
step(M, pick(GLOB.cardinals))
|
||||
if(prob(20))
|
||||
if(DT_PROB(10, delta_time))
|
||||
M.emote("laugh")
|
||||
if(prob(33))
|
||||
M.visible_message("<span class='danger'>[M]'s hands flip out and flail everywhere!</span>")
|
||||
if(DT_PROB(18, delta_time))
|
||||
M.visible_message(span_danger("[M]'s hands flip out and flail everywhere!"))
|
||||
M.drop_all_held_items()
|
||||
..()
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
|
||||
. = 1
|
||||
M.adjustToxLoss(1 * REM * delta_time, 0)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, (rand(5, 10) / 10) * REM * delta_time)
|
||||
. = TRUE
|
||||
|
||||
/datum/reagent/drug/methamphetamine/addiction_act_stage1(mob/living/M)
|
||||
M.Jitter(5)
|
||||
@@ -256,14 +248,6 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/methamphetamine/changeling
|
||||
name = "Changeling Adrenaline"
|
||||
addiction_threshold = 35
|
||||
overdose_threshold = 35
|
||||
jitter = FALSE
|
||||
brain_damage = FALSE
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/drug/bath_salts
|
||||
name = "Bath Salts"
|
||||
description = "Makes you impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic."
|
||||
|
||||
@@ -345,6 +345,8 @@
|
||||
victim.confused = max(M.confused, 3)
|
||||
victim.damageoverlaytemp = 60
|
||||
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 3, 15))
|
||||
victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray)
|
||||
addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS)
|
||||
return
|
||||
else if ( eyes_covered ) // Eye cover is better than mouth cover
|
||||
victim.blur_eyes(3)
|
||||
@@ -358,6 +360,8 @@
|
||||
victim.confused = max(M.confused, 6)
|
||||
victim.damageoverlaytemp = 75
|
||||
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 5, 25))
|
||||
victim.add_movespeed_modifier(/datum/movespeed_modifier/reagent/pepperspray)
|
||||
addtimer(CALLBACK(victim, /mob.proc/remove_movespeed_modifier, /datum/movespeed_modifier/reagent/pepperspray), 10 SECONDS)
|
||||
victim.update_damage_hud()
|
||||
|
||||
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -706,21 +706,42 @@
|
||||
addiction_threshold = 30
|
||||
pH = 12
|
||||
|
||||
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M)
|
||||
M.AdjustAllImmobility(-20, FALSE)
|
||||
M.AdjustUnconscious(-20, FALSE)
|
||||
M.adjustStaminaLoss(-4.5*REM, FALSE)
|
||||
M.Jitter(10)
|
||||
if(prob(50))
|
||||
M.confused = max(M.confused, 1)
|
||||
/datum/reagent/medicine/ephedrine/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine)
|
||||
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
|
||||
/datum/reagent/medicine/ephedrine/on_mob_end_metabolize(mob/living/L)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/ephedrine)
|
||||
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
|
||||
// if(DT_PROB(10 * (1-creation_purity), delta_time) && iscarbon(M))
|
||||
// var/obj/item/I = M.get_active_held_item()
|
||||
// if(I && M.dropItemToGround(I))
|
||||
// to_chat(M, span_notice("Your hands spaz out and you drop what you were holding!"))
|
||||
// M.Jitter(10)
|
||||
|
||||
M.AdjustAllImmobility(-20 * REM * delta_time)
|
||||
M.adjustStaminaLoss(-1 * REM * delta_time, FALSE)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M)
|
||||
if(prob(33))
|
||||
M.adjustToxLoss(0.5*REM, 0)
|
||||
/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M, delta_time, times_fired)
|
||||
if(DT_PROB(1, delta_time) && iscarbon(M))
|
||||
var/datum/disease/D = new /datum/disease/heart_failure
|
||||
M.ForceContractDisease(D)
|
||||
to_chat(M, span_userdanger("You're pretty sure you just felt your heart stop for a second there.."))
|
||||
M.playsound_local(M, 'sound/effects/singlebeat.ogg', 100, 0)
|
||||
|
||||
if(DT_PROB(3.5, delta_time))
|
||||
to_chat(M, span_notice("[pick("Your head pounds.", "You feel a tight pain in your chest.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]"))
|
||||
|
||||
if(DT_PROB(18, delta_time))
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.losebreath++
|
||||
. = 1
|
||||
. = TRUE
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/medicine/ephedrine/addiction_act_stage1(mob/living/M)
|
||||
@@ -981,7 +1002,7 @@
|
||||
M.grab_ghost()
|
||||
M.emote("gasp")
|
||||
log_combat(M, M, "revived", src)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
@@ -1415,37 +1436,42 @@
|
||||
/datum/reagent/medicine/changelingadrenaline
|
||||
name = "Changeling Adrenaline"
|
||||
description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed."
|
||||
color = "#918e53"
|
||||
color = "#C1151D"
|
||||
overdose_threshold = 30
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob)
|
||||
M.AdjustUnconscious(-20, 0)
|
||||
M.AdjustAllImmobility(-20, 0)
|
||||
M.AdjustSleeping(-20, 0)
|
||||
M.adjustStaminaLoss(-30, 0)
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired)
|
||||
..()
|
||||
metabolizer.AdjustAllImmobility(-20 * REM * delta_time)
|
||||
metabolizer.adjustStaminaLoss(-10 * REM * delta_time, 0)
|
||||
metabolizer.Jitter(10 * REM * delta_time)
|
||||
metabolizer.Dizzy(10 * REM * delta_time)
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/M as mob)
|
||||
M.adjustToxLoss(5, 0) //let's make this mildly more toxic because of the stamina buff
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
|
||||
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
L.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/L)
|
||||
..()
|
||||
REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
|
||||
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
L.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
|
||||
L.Dizzy(0)
|
||||
L.Jitter(0)
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/metabolizer, delta_time, times_fired)
|
||||
metabolizer.adjustToxLoss(1 * REM * delta_time, 0)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/medicine/changelinghaste
|
||||
name = "Changeling Haste"
|
||||
description = "Drastically increases movement speed, but deals toxin damage."
|
||||
color = "#669153"
|
||||
metabolization_rate = 1
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
color = "#AE151D"
|
||||
metabolization_rate = 2.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -1455,11 +1481,12 @@
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(2, 0)
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/metabolizer, delta_time, times_fired)
|
||||
metabolizer.adjustToxLoss(2 * REM * delta_time, 0)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/reagent/medicine/corazone
|
||||
// Heart attack code will not do damage if corazone is present
|
||||
// because it's SPACE MAGIC ASPIRIN
|
||||
|
||||
@@ -704,16 +704,20 @@
|
||||
/datum/status_effect/stabilized/sepia
|
||||
id = "stabilizedsepia"
|
||||
colour = "sepia"
|
||||
var/mod = 0
|
||||
var/list/possible = list(
|
||||
-0.5,
|
||||
-0.25,
|
||||
0,
|
||||
0.5,
|
||||
1
|
||||
)
|
||||
|
||||
/datum/status_effect/stabilized/sepia/New(list/arguments)
|
||||
. = ..()
|
||||
possible = typelist(NAMEOF(src, possible), possible)
|
||||
|
||||
/datum/status_effect/stabilized/sepia/tick()
|
||||
if(prob(50) && mod > -1)
|
||||
mod--
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1)
|
||||
else if(mod < 1)
|
||||
mod++
|
||||
// yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = safepick(possible))
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/sepia/on_remove()
|
||||
@@ -934,6 +938,7 @@
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_apply()
|
||||
ADD_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime")
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/tick()
|
||||
@@ -945,6 +950,7 @@
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_FREESPRINT, "stabilized_slime")
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/slime/light_pink)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/adamantine
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
for(var/obj/item/organ/O in target.internal_organs)//zap those buggers back to life!
|
||||
if(O.organ_flags & ORGAN_FAILING)
|
||||
O.applyOrganDamage(-5)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
needs_processing = .
|
||||
|
||||
//Return TRUE to get whatever mob this is in to update health.
|
||||
/obj/item/bodypart/proc/on_life()
|
||||
/obj/item/bodypart/proc/on_life(seconds, times_fired)
|
||||
if(stam_heal_tick && stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
|
||||
if(heal_damage(brute = 0, burn = 0, stamina = (stam_heal_tick * (disabled ? 2 : 1)), only_robotic = FALSE, only_organic = FALSE, updating_health = FALSE))
|
||||
. |= BODYPART_LIFE_UPDATE_HEALTH
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
if(target.revive())
|
||||
target.visible_message("...[target]'s posibrain flickers to life once again!")
|
||||
target.emote("ping")
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/cachedmoveCalc = 1
|
||||
food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5)
|
||||
|
||||
/obj/item/organ/liver/on_life()
|
||||
/obj/item/organ/liver/on_life(seconds, times_fired)
|
||||
. = ..()
|
||||
if(!. || !owner)//can't process reagents with a failing liver
|
||||
return
|
||||
@@ -40,7 +40,7 @@
|
||||
damage += (thisamount*toxLethality)
|
||||
|
||||
//metabolize reagents
|
||||
owner.reagents.metabolize(owner, can_overdose=TRUE)
|
||||
owner.reagents.metabolize(owner, seconds, times_fired, can_overdose=TRUE)
|
||||
|
||||
if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
|
||||
to_chat(owner, "<span class='warning'>You feel a dull pain in your abdomen.</span>")
|
||||
|
||||
@@ -92,18 +92,18 @@
|
||||
on_death() //Kinda hate doing it like this, but I really don't want to call process directly.
|
||||
|
||||
//Sources; life.dm process_organs
|
||||
/obj/item/organ/proc/on_death() //Runs when outside AND inside.
|
||||
/obj/item/organ/proc/on_death(seconds, times_fired) //Runs when outside AND inside.
|
||||
decay()
|
||||
|
||||
//Applys the slow damage over time decay
|
||||
/obj/item/organ/proc/decay()
|
||||
/obj/item/organ/proc/decay(seconds, times_fired)
|
||||
if(!can_decay())
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
is_cold()
|
||||
if(organ_flags & ORGAN_FROZEN)
|
||||
return
|
||||
applyOrganDamage(maxHealth * decay_factor)
|
||||
applyOrganDamage(maxHealth * decay_factor * (seconds * 0.5))
|
||||
|
||||
/obj/item/organ/proc/can_decay()
|
||||
if(CHECK_BITFIELD(organ_flags, ORGAN_NO_SPOIL | ORGAN_SYNTHETIC | ORGAN_FAILING))
|
||||
@@ -151,7 +151,7 @@
|
||||
organ_flags &= ~ORGAN_FROZEN
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing or synthetic
|
||||
/obj/item/organ/proc/on_life(seconds, times_fired) //repair organ damage if the organ is not failing or synthetic
|
||||
if(organ_flags & ORGAN_FAILING || !owner)
|
||||
return FALSE
|
||||
if(organ_flags & ORGAN_SYNTHETIC_EMP) //Synthetic organ has been emped, is now failing.
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
#define COOLDOWN_STUN 1200
|
||||
#define COOLDOWN_KNOCKDOWN 600
|
||||
#define COOLDOWN_DAMAGE 600
|
||||
#define COOLDOWN_MEME 300
|
||||
#define COOLDOWN_NONE 100
|
||||
#define COOLDOWN_STUN 300
|
||||
#define COOLDOWN_KNOCKDOWN 300
|
||||
#define COOLDOWN_DAMAGE 300
|
||||
#define COOLDOWN_MEME 150
|
||||
#define COOLDOWN_NONE 50
|
||||
|
||||
/// anything above this requires adminbus, to prevent a cultist from stacking chaplain + cult + specific listener = 8x, which is enough to instantly kill someone with damage.
|
||||
#define VOG_MAX_STANDARD_POWER 3
|
||||
/// max damage we can do in one "blast" to a listener
|
||||
#define VOG_MAX_BURST_DAMAGE 40
|
||||
/// max healing we can do in one "blast" to a listener
|
||||
#define VOG_MAX_BURST_HEAL 40
|
||||
|
||||
/obj/item/organ/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel
|
||||
name = "vocal cords"
|
||||
@@ -130,13 +137,11 @@
|
||||
return 0 //no cooldown
|
||||
|
||||
var/log_message = uppertext(message)
|
||||
if(!span_list || !span_list.len)
|
||||
if(iscultist(user))
|
||||
span_list = list("narsiesmall")
|
||||
else if (is_servant_of_ratvar(user))
|
||||
span_list = list("ratvar")
|
||||
else
|
||||
span_list = list()
|
||||
if(iscultist(user))
|
||||
span_list = list("narsiesmall")
|
||||
else if (is_servant_of_ratvar(user))
|
||||
span_list = list("ratvar")
|
||||
LAZYINITLIST(span_list)
|
||||
|
||||
user.say(message, spans = span_list, sanitize = FALSE)
|
||||
|
||||
@@ -156,39 +161,24 @@
|
||||
cooldown = COOLDOWN_NONE
|
||||
return cooldown
|
||||
|
||||
var/power_multiplier = base_multiplier
|
||||
|
||||
if(user.mind)
|
||||
//Chaplains are very good at speaking with the voice of god
|
||||
if(user.mind.assigned_role == "Chaplain")
|
||||
power_multiplier *= 2
|
||||
//Command staff has authority
|
||||
if(user.mind.assigned_role in GLOB.command_positions)
|
||||
power_multiplier *= 1.4
|
||||
//Why are you speaking
|
||||
if(user.mind.assigned_role == "Mime")
|
||||
power_multiplier *= 0.5
|
||||
|
||||
//Cultists are closer to their gods and are more powerful, but they'll give themselves away
|
||||
if(iscultist(user))
|
||||
power_multiplier *= 2
|
||||
else if (is_servant_of_ratvar(user))
|
||||
power_multiplier *= 2
|
||||
|
||||
//Try to check if the speaker specified a name or a job to focus on
|
||||
var/list/specific_listeners = list()
|
||||
var/found_string = null
|
||||
var/devil_target = FALSE
|
||||
|
||||
//Get the proper job titles
|
||||
message = get_full_job_name(message)
|
||||
|
||||
// limitation: this only checks at the start of the message.
|
||||
// if we wanted to check anywhere we'd have to make the user use delimiters to specify who they're talking to,
|
||||
// as otherwise it'd be far too computationally and logically expensive to find out who we want.
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
var/datum/antagonist/devil/devilinfo = is_devil(L)
|
||||
if(devilinfo && findtext(message, devilinfo.truename))
|
||||
var/start = findtext(message, devilinfo.truename)
|
||||
listeners = list(L) //Devil names are unique.
|
||||
power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up
|
||||
devil_target = TRUE //if you're a devil and god himself addressed you, you fucked up
|
||||
//Cut out the name so it doesn't trigger commands
|
||||
message = copytext(message, 1, start) + copytext(message, start + length(devilinfo.truename))
|
||||
break
|
||||
@@ -207,10 +197,14 @@
|
||||
//Cut out the job so it doesn't trigger commands
|
||||
found_string = L.mind.assigned_role
|
||||
|
||||
var/power_multiplier = get_vog_multiplier(user, base_multiplier, specific_listeners)
|
||||
var/adminbus = power_multiplier > VOG_MAX_STANDARD_POWER // an admin is being a dunce, bypass hard scaling limits on this message
|
||||
if(devil_target)
|
||||
power_multiplier = max(power_multiplier, 5)
|
||||
|
||||
if(specific_listeners.len)
|
||||
listeners = specific_listeners
|
||||
power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on
|
||||
message = copytext(message, length(found_string) + 1)
|
||||
listeners = specific_listeners.Copy()
|
||||
|
||||
var/static/regex/stun_words = regex("stop|wait|stand still|hold on|halt")
|
||||
var/static/regex/knockdown_words = regex("drop|fall|trip|knockdown")
|
||||
@@ -264,7 +258,7 @@
|
||||
cooldown = COOLDOWN_STUN
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.Stagger(60 * power_multiplier)
|
||||
L.Stagger(40 * power_multiplier)
|
||||
|
||||
//KNOCKDOWN
|
||||
else if(findtext(message, knockdown_words))
|
||||
@@ -272,6 +266,7 @@
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.DefaultCombatKnockdown()
|
||||
L.Stagger(10 * power_multiplier)
|
||||
|
||||
//VOMIT
|
||||
else if((findtext(message, vomit_words)))
|
||||
@@ -285,13 +280,13 @@
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
if(user.mind && (user.mind.assigned_role == "Curator" || user.mind.assigned_role == "Mime"))
|
||||
power_multiplier *= 3
|
||||
C.silent += (10 * power_multiplier)
|
||||
C.silent += (5 * power_multiplier)
|
||||
|
||||
//HALLUCINATE
|
||||
else if((findtext(message, hallucinate_words)))
|
||||
cooldown = COOLDOWN_MEME
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
|
||||
new /datum/hallucination/delusion(C, TRUE, null, 150 * power_multiplier, 0)
|
||||
|
||||
//WAKE UP
|
||||
else if((findtext(message, wakeup_words)))
|
||||
@@ -305,14 +300,14 @@
|
||||
cooldown = COOLDOWN_DAMAGE
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.heal_overall_damage(10 * power_multiplier, 10 * power_multiplier, 0, FALSE, FALSE)
|
||||
L.heal_overall_damage(min(17.5 * power_multiplier, adminbus? INFINITY : VOG_MAX_BURST_HEAL), min(17.5 * power_multiplier, VOG_MAX_BURST_HEAL), 0, FALSE, FALSE)
|
||||
|
||||
//BRUTE DAMAGE
|
||||
else if((findtext(message, hurt_words)))
|
||||
cooldown = COOLDOWN_DAMAGE
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.apply_damage(15 * power_multiplier, def_zone = BODY_ZONE_CHEST, wound_bonus=CANT_WOUND)
|
||||
L.apply_damage(min(20 * power_multiplier, adminbus? INFINITY : VOG_MAX_BURST_DAMAGE), def_zone = BODY_ZONE_CHEST, wound_bonus = CANT_WOUND)
|
||||
|
||||
//BLEED
|
||||
else if((findtext(message, bleed_words)))
|
||||
@@ -334,14 +329,14 @@
|
||||
cooldown = COOLDOWN_DAMAGE
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.adjust_bodytemperature(50 * power_multiplier)
|
||||
L.adjust_bodytemperature(75 * power_multiplier)
|
||||
|
||||
//COLD
|
||||
else if((findtext(message, cold_words)))
|
||||
cooldown = COOLDOWN_DAMAGE
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
L.adjust_bodytemperature(-50 * power_multiplier)
|
||||
L.adjust_bodytemperature(-75 * power_multiplier)
|
||||
|
||||
//REPULSE
|
||||
else if((findtext(message, repulse_words)))
|
||||
@@ -596,6 +591,34 @@
|
||||
|
||||
return cooldown
|
||||
|
||||
/proc/get_vog_multiplier(mob/living/carbon/user, base_multiplier = 1, list/specific_listeners = list())
|
||||
if(base_multiplier >= VOG_MAX_STANDARD_POWER)
|
||||
return base_multiplier // an admin bussed you and they probably didn't realize you were a chaplain/cultist.
|
||||
|
||||
var/special_check = get_vog_special(user)
|
||||
if(!special_check)
|
||||
return 0
|
||||
|
||||
. = min(base_multiplier * special_check, VOG_MAX_STANDARD_POWER) // anything above should require conscious admin fuckery, as things are balanced around 3 multiplier tops (see: damage being 15*3)
|
||||
if(!specific_listeners.len)
|
||||
return
|
||||
. = min(. * (1 + (1 / specific_listeners.len)), VOG_MAX_STANDARD_POWER)
|
||||
|
||||
/// get special role multiplier for voice of god. No double dipping.
|
||||
/proc/get_vog_special(mob/living/carbon/user)
|
||||
if(iscultist(user) || is_servant_of_ratvar(user))
|
||||
return 2 // servant of god
|
||||
if(user.mind)
|
||||
// servant of god
|
||||
if(user.mind.assigned_role == "Chaplain")
|
||||
return 2
|
||||
// shut up you broke your vow
|
||||
if(user.mind.assigned_role == "Mime")
|
||||
return 0.5
|
||||
if(user.mind.assigned_role in GLOB.command_positions)
|
||||
return 1.4 // heads are great at speaking with authority
|
||||
return 1
|
||||
|
||||
//////////////////////////////////////
|
||||
///////ENTHRAL VELVET CHORDS//////////
|
||||
//////////////////////////////////////
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/datum/unit_test/metabolization/proc/test_reagent(mob/living/carbon/C, reagent_type)
|
||||
C.reagents.add_reagent(reagent_type, 10)
|
||||
C.reagents.metabolize(C, can_overdose = TRUE)
|
||||
C.reagents.metabolize(C, SSMOBS_DT, 1, can_overdose = TRUE)
|
||||
C.reagents.clear_reagents()
|
||||
|
||||
/datum/unit_test/metabolization/Destroy()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/obj/vehicle/ridden/atv/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 1
|
||||
D.vehicle_move_delay = CONFIG_GET(number/movedelay/run_delay)
|
||||
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
## Custom antag reputation values
|
||||
## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
|
||||
## e.g.
|
||||
## ANTAG_REP Captain 10
|
||||
## ANTAG_REP Assistant 0
|
||||
+29
-532
@@ -1,18 +1,7 @@
|
||||
# You can use the "$include" directive to split your configs however you want
|
||||
|
||||
$include game_options.txt
|
||||
$include dbconfig.txt
|
||||
$include comms.txt
|
||||
$include antag_rep.txt
|
||||
$include resources.txt
|
||||
# Cit-specific imports
|
||||
$include donator_groupings.txt
|
||||
$include dynamic_config.txt
|
||||
$include plushies/defines.txt
|
||||
$include job_threats.txt
|
||||
$include policy.txt
|
||||
$include persistence.txt
|
||||
$include respawns.txt
|
||||
# MAKE SURE ENTRIES ARE SORTED IN THE SAME FASHION THEY ARE IN THE .dm
|
||||
# if you don't do this i will find you and put lemons on your eyes.
|
||||
|
||||
# You can use the @ character at the beginning of a config option to lock it from being edited in-game
|
||||
# Example usage:
|
||||
@@ -22,523 +11,31 @@ $include respawns.txt
|
||||
# Which explicitly disables LOG_TWITTER, as well as locking it.
|
||||
# There are various options which are hard-locked for security reasons.
|
||||
|
||||
## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice.
|
||||
# SERVERNAME tgstation
|
||||
|
||||
## Server tagline: This will appear right below the server's title.
|
||||
# SERVERTAGLINE A generic TG-based server
|
||||
|
||||
## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters.
|
||||
# SERVERSQLNAME tgstation
|
||||
|
||||
## Station name: The name of the station as it is referred to in-game. If commented out, the game will generate a random name instead.
|
||||
STATIONNAME Space Station 13
|
||||
|
||||
## Put on byond hub: Uncomment this to put your server on the byond hub.
|
||||
#HUB
|
||||
|
||||
## Lobby time: This is the amount of time between rounds that players have to setup their characters and be ready.
|
||||
LOBBY_COUNTDOWN 120
|
||||
|
||||
## Round End Time: This is the amount of time after the round ends that players have to murder death kill each other.
|
||||
ROUND_END_COUNTDOWN 90
|
||||
|
||||
## Comment this out if you want to use the SQL based admin system, the legacy system uses admins.txt.
|
||||
## You need to set up your database to use the SQL based system.
|
||||
## This flag is automatically enabled if SQL_ENABLED isn't
|
||||
ADMIN_LEGACY_SYSTEM
|
||||
|
||||
##Uncomment this to stop any admins loaded by the legacy system from having their rank edited by the permissions panel
|
||||
#PROTECT_LEGACY_ADMINS
|
||||
|
||||
##Uncomment this to stop any ranks loaded by the legacy system from having their flags edited by the permissions panel
|
||||
#PROTECT_LEGACY_RANKS
|
||||
|
||||
##Uncomment this to have admin ranks only loaded from the legacy admin_ranks.txt
|
||||
##If enabled, each time admins are loaded ranks the database will be updated with the current ranks and their flags
|
||||
#LOAD_LEGACY_RANKS_ONLY
|
||||
|
||||
## Comment this out if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
|
||||
BAN_LEGACY_SYSTEM
|
||||
|
||||
## Comment this out to stop locally connected clients from being given the almost full access !localhost! admin rank
|
||||
ENABLE_LOCALHOST_RANK
|
||||
|
||||
## Comment this out if you want to use the SQL based mentor system, the legacy system uses mentors.txt.
|
||||
## You need to set up your database to use the SQL based system.
|
||||
## This flag is automatically enabled if SQL_ENABLED isn't
|
||||
MENTOR_LEGACY_SYSTEM
|
||||
|
||||
#Mentors only see ckeys by default. Uncomment to have them only see mob name
|
||||
#MENTORS_MOBNAME_ONLY
|
||||
|
||||
## Uncomment this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing
|
||||
## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.
|
||||
## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.
|
||||
## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means
|
||||
## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
|
||||
#USE_AGE_RESTRICTION_FOR_JOBS
|
||||
|
||||
## Uncomment this to have the job system use the player's account creation date, rather than the when they first joined the server for job timers.
|
||||
#USE_ACCOUNT_AGE_FOR_JOBS
|
||||
|
||||
## Unhash this to track player playtime in the database. Requires database to be enabled.
|
||||
#USE_EXP_TRACKING
|
||||
## Unhash this to enable playtime requirements for head jobs.
|
||||
#USE_EXP_RESTRICTIONS_HEADS
|
||||
## Unhash this to override head jobs' playtime requirements with this number of hours.
|
||||
## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes.
|
||||
#USE_EXP_RESTRICTIONS_HEADS_HOURS 3
|
||||
## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime.
|
||||
#USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT
|
||||
## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist.
|
||||
#USE_EXP_RESTRICTIONS_OTHER
|
||||
## Allows admins to bypass job playtime requirements.
|
||||
#USE_EXP_RESTRICTIONS_ADMIN_BYPASS
|
||||
|
||||
## log OOC channel
|
||||
LOG_OOC
|
||||
|
||||
## log client Say
|
||||
LOG_SAY
|
||||
|
||||
## log admin actions
|
||||
LOG_ADMIN
|
||||
|
||||
## log admin chat
|
||||
LOG_ADMINCHAT
|
||||
|
||||
## log client access (logon/logoff)
|
||||
LOG_ACCESS
|
||||
|
||||
## log game actions (start of round, results, etc.)
|
||||
LOG_GAME
|
||||
|
||||
## log player votes
|
||||
LOG_VOTE
|
||||
|
||||
## log player crafting
|
||||
LOG_CRAFT
|
||||
|
||||
## log client Whisper
|
||||
LOG_WHISPER
|
||||
|
||||
## log emotes
|
||||
LOG_EMOTE
|
||||
|
||||
## log attack messages
|
||||
LOG_ATTACK
|
||||
|
||||
## log pda messages
|
||||
LOG_PDA
|
||||
|
||||
## log telecomms messages
|
||||
LOG_TELECOMMS
|
||||
|
||||
## log prayers
|
||||
LOG_PRAYER
|
||||
|
||||
## log lawchanges
|
||||
LOG_LAW
|
||||
|
||||
## log crew manifest to seperate file
|
||||
LOG_MANIFEST
|
||||
|
||||
## log job divide debugging information
|
||||
#LOG_JOB_DEBUG
|
||||
|
||||
## log all world.Topic() calls
|
||||
# LOG_WORLD_TOPIC
|
||||
|
||||
## enables use of the proc twitterize() that lets you take a large list of strings and turn it into a JSON file of tweet sized strings.
|
||||
## As an example of how this could be """useful""" look towards Poly (https://twitter.com/Poly_the_Parrot)
|
||||
# LOG_TWITTER
|
||||
|
||||
## Enable logging pictures
|
||||
# LOG_PICTURES
|
||||
|
||||
## log virus and actions
|
||||
LOG_VIRUS
|
||||
|
||||
##Log camera pictures - Must have picture logging enabled
|
||||
PICTURE_LOGGING_CAMERA
|
||||
|
||||
## period of time in seconds for players to be considered inactive
|
||||
# INACTIVITY_PERIOD 300
|
||||
|
||||
## period of time in seconds for players to be considered afk and kickable
|
||||
# AFK_PERIOD 600
|
||||
|
||||
## disconnect players who are considered afk
|
||||
# KICK_INACTIVE
|
||||
|
||||
## Comment this out to stop admins being able to choose their personal ooccolor
|
||||
ALLOW_ADMIN_OOCCOLOR
|
||||
|
||||
## Job slot open/close by identification consoles delay in seconds
|
||||
ID_CONSOLE_JOBSLOT_DELAY 30
|
||||
|
||||
## allow players to initiate a restart vote
|
||||
#ALLOW_VOTE_RESTART
|
||||
|
||||
## allow players to initate a mode-change start
|
||||
#ALLOW_VOTE_MODE
|
||||
|
||||
## min delay (deciseconds) between voting sessions (default 10 minutes)
|
||||
VOTE_DELAY 6000
|
||||
|
||||
## time period (deciseconds) which voting session will last (default 1 minute)
|
||||
VOTE_PERIOD 600
|
||||
|
||||
## autovote initial delay (deciseconds) before first automatic transfer vote call (default 120 minutes)
|
||||
## Set to 0 to disable the subsystem altogether.
|
||||
VOTE_AUTOTRANSFER_INITIAL 72000
|
||||
|
||||
## autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)
|
||||
VOTE_AUTOTRANSFER_INTERVAL 18000
|
||||
|
||||
## autovote maximum votes until automatic transfer call. (default 4)
|
||||
## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
|
||||
## Set to -1 to disable the maximum votes cap.
|
||||
VOTE_AUTOTRANSFER_MAXIMUM 4
|
||||
|
||||
## prevents dead players from voting or starting votes
|
||||
# NO_DEAD_VOTE
|
||||
|
||||
## players' votes default to "No vote" (otherwise, default to "No change")
|
||||
# DEFAULT_NO_VOTE
|
||||
|
||||
## disables calling del(src) on newmobs if they logout before spawnin in
|
||||
# DONT_DEL_NEWMOB
|
||||
|
||||
## set a hosted by name for unix platforms
|
||||
HOSTEDBY Yournamehere
|
||||
|
||||
## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
|
||||
## Set to 1 to jobban them from those positions, set to 0 to allow them.
|
||||
# GUEST_JOBBAN
|
||||
|
||||
## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting)
|
||||
GUEST_BAN
|
||||
|
||||
## Comment this out to disable checking for the cid randomizer dll. (disabled if database isn't enabled or connected)
|
||||
CHECK_RANDOMIZER
|
||||
|
||||
## IPINTEL:
|
||||
## This allows you to detect likely proxies by checking ips against getipintel.net
|
||||
## Rating to warn at: (0.9 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning
|
||||
#IPINTEL_RATING_BAD 0.9
|
||||
## Contact email, (required to use the service, leaving blank or default disables IPINTEL)
|
||||
#IPINTEL_EMAIL ch@nge.me
|
||||
## How long to save good matches (ipintel rate limits to 15 per minute and 500 per day. so this shouldn't be too low, getipintel.net suggests 6 hours, time is in hours) (Your ip will get banned if you go over 500 a day too many times)
|
||||
#IPINTEL_SAVE_GOOD 12
|
||||
## How long to save bad matches (these numbers can change as ips change hands, best not to save these for too long in case somebody gets a new ip used by a spammer/proxy before.)
|
||||
#IPINTEL_SAVE_BAD 3
|
||||
## Domain name to query (leave commented out for the default, only needed if you pay getipintel.net for more querys)
|
||||
#IPINTEL_DOMAIN check.getipintel.net
|
||||
|
||||
## Uncomment to allow web client connections
|
||||
#ALLOW_WEBCLIENT
|
||||
|
||||
## Uncomment to restrict web client connections to byond members
|
||||
## This makes for a nice pay gate to cut down on ban evading, as the webclient's cid system isn't that great
|
||||
## byond membership starts at $10 for 3 months, so to use the webclient to evade, they would have sink 10 bucks in each evade.
|
||||
#WEBCLIENT_ONLY_BYOND_MEMBERS
|
||||
|
||||
## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server
|
||||
#USEWHITELIST
|
||||
|
||||
## set a server location for world reboot. Don't include the byond://, just give the address and port.
|
||||
## Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted.
|
||||
# SERVER ss13.example.com:2506
|
||||
|
||||
## forum address
|
||||
# FORUMURL https://citadel-station.net/forum/
|
||||
|
||||
## Wiki address
|
||||
# WIKIURL https://katlin.dog/citadel-wiki
|
||||
|
||||
## Rules address
|
||||
# RULESURL https://katlin.dog/citadel-rules/main
|
||||
|
||||
## Github address
|
||||
# GITHUBURL https://github.com/Citadel-Station-13/Citadel-Station-13
|
||||
|
||||
## Round specific stats address
|
||||
## Link to round specific parsed logs; IE statbus. It is appended with the RoundID automatically by ticker/Reboot()
|
||||
## This will take priority over the game logs address during reboot.
|
||||
## Example: https://atlantaned.space/statbus/round.php?round=
|
||||
# ROUNDSTATSURL http://citadel-station.net/slimbus/
|
||||
|
||||
## Game Logs address
|
||||
## Incase you don't have a fancy parsing system, but still want players to be able to find where you keep your server's logs.
|
||||
## Example: https://tgstation13.org/parsed-logs/basil/data/logs/
|
||||
# GAMELOGURL
|
||||
|
||||
## Github repo id
|
||||
##This can be found by going to https://api.github.com/users/<user name here>/repos
|
||||
##Or https://api.github.com/orgs/<org name here>/repos if the repo owner is an organization
|
||||
# GITHUBREPOID 62485194
|
||||
|
||||
## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
|
||||
# BANAPPEALS https://citadel-station.net/forum/viewforum.php?f=8&sid=a0ce5331d5594ef6d49661609c6f4ff9
|
||||
|
||||
## System command that invokes youtube-dl, used by Play Internet Sound.
|
||||
## You can install youtube-dl with
|
||||
## "pip install youtube-dl" if you have pip installed
|
||||
## from https://github.com/rg3/youtube-dl/releases
|
||||
## or your package manager
|
||||
## The default value assumes youtube-dl is in your system PATH
|
||||
# INVOKE_YOUTUBEDL youtube-dl
|
||||
|
||||
## In-game features
|
||||
##Toggle for having jobs load up from the .txt
|
||||
# LOAD_JOBS_FROM_TXT
|
||||
|
||||
## Uncomment this to forbid admins from possessing the singularity.
|
||||
#FORBID_SINGULO_POSSESSION
|
||||
|
||||
## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM.
|
||||
## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)
|
||||
#POPUP_ADMIN_PM
|
||||
|
||||
## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR
|
||||
ALLOW_HOLIDAYS
|
||||
|
||||
## Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin.
|
||||
#SHOW_IRC_NAME
|
||||
|
||||
## Defines the ticklimit for subsystem initialization (In percents of a byond tick). Lower makes world start smoother. Higher makes it faster.
|
||||
##This is currently a testing optimized setting. A good value for production would be 98.
|
||||
TICK_LIMIT_MC_INIT 500
|
||||
|
||||
##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second).
|
||||
## This also controls the client network update rate, as well as the default client fps
|
||||
TICKLAG 0.5
|
||||
|
||||
##Can also be set as per-second value, the following value is identical to the above.
|
||||
#FPS 20
|
||||
|
||||
## Comment this out to disable automuting
|
||||
#AUTOMUTE_ON
|
||||
|
||||
## Uncomment this to let players see their own notes (they can still be set by admins only)
|
||||
#SEE_OWN_NOTES
|
||||
|
||||
### Comment these two out to prevent notes fading out over time for admins.
|
||||
## Notes older then this will start fading out.
|
||||
NOTE_FRESH_DAYS 91.31055
|
||||
## Notes older then this will be completely faded out.
|
||||
NOTE_STALE_DAYS 365.2422
|
||||
|
||||
##Note: all population caps can be used with each other if desired.
|
||||
|
||||
## Uncomment for 'soft' population caps, players will be warned while joining if the living crew exceeds the listed number.
|
||||
#SOFT_POPCAP 100
|
||||
|
||||
## Message for soft cap
|
||||
SOFT_POPCAP_MESSAGE Be warned that the server is currently serving a high number of users, consider using alternative game servers.
|
||||
|
||||
## Uncomment for 'hard' population caps, players will not be allowed to spawn if the living crew exceeds the listed number, though they may still observe or wait for the living crew to decrease in size.
|
||||
#HARD_POPCAP 150
|
||||
|
||||
## Message for hard cap
|
||||
HARD_POPCAP_MESSAGE The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers.
|
||||
|
||||
## Uncomment for 'extreme' population caps, players will not be allowed to join the server if living crew exceeds the listed number.
|
||||
#EXTREME_POPCAP 200
|
||||
|
||||
## Message for extreme cap
|
||||
EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, find alternative servers.
|
||||
|
||||
## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never)
|
||||
## Requres database
|
||||
NOTIFY_NEW_PLAYER_AGE 0
|
||||
|
||||
## Notify admins when a player connects if their byond account was created in the last X days
|
||||
## Requires database
|
||||
NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1
|
||||
|
||||
## Notify the irc channel when a new player makes their first connection
|
||||
## Requres database
|
||||
#IRC_FIRST_CONNECTION_ALERT
|
||||
|
||||
## Deny all new connections by ckeys we haven't seen before (exempts admins and only denies the connection if the database is enabled and connected)
|
||||
## Requires database
|
||||
#PANIC_BUNKER
|
||||
|
||||
## If a player connects during a bunker with less then or this amount of living time (Minutes), we deny the connection
|
||||
#PANIC_BUNKER_LIVING 90
|
||||
|
||||
## The message the Panic Bunker gives when someone is rejected by it
|
||||
## %minutes% is replaced with PANIC_BUNKER_LIVING on runtime, remove it if you don't want this
|
||||
#PANIC_BUNKER_MESSAGE Sorry, but the server is currently not accepting connections from players with less than %minutes% minutes of living time.
|
||||
|
||||
## If panic bunker is on and a player is rejected (see above), attempt to send them to this connected server (see below) instead.
|
||||
## You probably want this to be the same as CROSS_SERVER_ADDRESS
|
||||
#PANIC_SERVER_ADDRESS byond://address:port
|
||||
|
||||
##Name of the place to send people rejected by the bunker
|
||||
#PANIC_SERVER_NAME [Put the name here]
|
||||
|
||||
##Automated age verification, comment this out to not ask new users if they are 18+
|
||||
#AGE_VERIFICATION
|
||||
|
||||
## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
|
||||
#AGGRESSIVE_CHANGELOG
|
||||
|
||||
## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes
|
||||
AUTOCONVERT_NOTES
|
||||
|
||||
## Comment this out to stop admin messages sent anytime an admin disconnects from a round in play, you can edit the messages in admin.dm
|
||||
ANNOUNCE_ADMIN_LOGOUT
|
||||
|
||||
## Uncomment to have an admin message sent anytime an admin connects to a round in play, you can edit the messages in admin.dm
|
||||
#ANNOUNCE_ADMIN_LOGIN
|
||||
|
||||
## Map rotation
|
||||
## You should edit maps.txt to match your configuration when you enable this.
|
||||
MAPROTATION
|
||||
|
||||
## TG-style map rotation
|
||||
## By default, Citadel uses a more traditional method of map voting, where at the end of a round, players are given a full upfront vote.
|
||||
## This PR will disable that, and will make the server use TG's map rotation instead.
|
||||
#TGSTYLE_MAPROTATION
|
||||
|
||||
## Map voting
|
||||
## Allows players to vote for their preffered map
|
||||
## When it's set to zero, the map will be randomly picked each round
|
||||
ALLOW_MAP_VOTING 1
|
||||
|
||||
## Map voting type
|
||||
## Determines what kind of vote the map vote is
|
||||
## Options are:
|
||||
## PLURALITY (default, only vote for one option)
|
||||
## APPROVAL (can vote for as many as you want), I
|
||||
## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
|
||||
## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
|
||||
MAP_VOTE_TYPE APPROVAL
|
||||
|
||||
## Map rotate chance delta
|
||||
## This is the chance of map rotation factored to the round length.
|
||||
## A value of 1 would mean the map rotation chance is the round length in minutes (hour long round == 60% rotation chance)
|
||||
## A value of 0.5 would mean the map rotation chance is half of the round length in minutes (hour long round == 30% rotation chance)
|
||||
#MAPROTATIONCHANCEDELTA 0.75
|
||||
|
||||
## AUTOADMIN
|
||||
## The default admin rank
|
||||
AUTOADMIN_RANK Game Master
|
||||
|
||||
## Uncomment to automatically give that admin rank to all players
|
||||
#AUTOADMIN
|
||||
|
||||
## CLIENT VERSION CONTROL
|
||||
## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
|
||||
## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower.
|
||||
## These messages will be followed by one stating the clients current version and the required version for clarity.
|
||||
## If CLIENT_WARN_POPUP is uncommented a popup window with the message will be displayed instead
|
||||
#CLIENT_WARN_VERSION 511
|
||||
#CLIENT_WARN_POPUP
|
||||
#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update.
|
||||
CLIENT_ERROR_VERSION 511
|
||||
CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade.
|
||||
## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit.
|
||||
CLIENT_ERROR_BUILD 1421
|
||||
|
||||
## TOPIC RATE LIMITING
|
||||
## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute.
|
||||
## Admins are exempt from these limits.
|
||||
## Hitting the minute limit notifies admins.
|
||||
## Set to 0 or comment out to disable.
|
||||
SECOND_TOPIC_LIMIT 10
|
||||
|
||||
MINUTE_TOPIC_LIMIT 100
|
||||
|
||||
|
||||
## CLICK RATE LIMITING
|
||||
## Same as above, but applies to clicking on objects in the game window.
|
||||
## This should be a higher then the interface limit to allow for the spam clickly nature of most battles.
|
||||
## Admins are exempt from these limits.
|
||||
## Hitting the minute limit notifies admins.
|
||||
## Set to 0 to disable.
|
||||
SECOND_CLICK_LIMIT 15
|
||||
|
||||
MINUTE_CLICK_LIMIT 400
|
||||
|
||||
##Error handling related options
|
||||
## The "cooldown" time for each occurence of a unique error
|
||||
#ERROR_COOLDOWN 600
|
||||
## How many occurences before the next will silence them
|
||||
#ERROR_LIMIT 90
|
||||
## How long a unique error will be silenced for
|
||||
#ERROR_SILENCE_TIME 6000
|
||||
##How long to wait between messaging admins about occurences of a unique error
|
||||
#ERROR_MSG_DELAY 50
|
||||
|
||||
## Chat Announce Options
|
||||
## Various messages to be sent to game chats
|
||||
## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4
|
||||
## If using TGS4, the string option can be set as a chat channel tag to limit the message to channels of that tag type (case-sensitive)
|
||||
## i.e. CHAT_ANNOUNCE_NEW_GAME chat_channel_tag
|
||||
|
||||
## Send a message with the station name starting a new game
|
||||
#CHAT_ANNOUNCE_NEW_GAME
|
||||
|
||||
## Allow admin hrefs that don't use the new token system, will eventually be removed
|
||||
DEBUG_ADMIN_HREFS
|
||||
|
||||
###Master Controller High Pop Mode###
|
||||
|
||||
##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc)
|
||||
##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc)
|
||||
## Setting this to 0 will prevent the Master Controller from ticking
|
||||
BASE_MC_TICK_RATE 1
|
||||
|
||||
##High population MC tick rate
|
||||
## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2
|
||||
## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like
|
||||
## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%.
|
||||
## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5)
|
||||
HIGH_POP_MC_TICK_RATE 1.1
|
||||
|
||||
##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count)
|
||||
HIGH_POP_MC_MODE_AMOUNT 65
|
||||
|
||||
##Disengage high pop mode if player count drops below this
|
||||
DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
|
||||
|
||||
## Uncomment to prevent the world from sleeping while no players are connected after initializations
|
||||
#RESUME_AFTER_INITIALIZATIONS
|
||||
|
||||
## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools.
|
||||
#ROUNDS_UNTIL_HARD_RESTART 10
|
||||
|
||||
## Number of days for an individual panic bunker passthrough entry to be wiped. Note that they're also wiped as soon as a player is in the database.
|
||||
#MAX_BUNKER_DAYS 7
|
||||
|
||||
##Default screen resolution, in tiles.
|
||||
## By default, this is 15x15, which gets simplified to 7 by BYOND, as it is a 1:1 screen ratio.
|
||||
## For reference, Goonstation uses a resolution of 21x15 for it's widescreen mode.
|
||||
## Do note that changing this value will affect the title screen. The title screen will have to be updated manually if this is changed.
|
||||
DEFAULT_VIEW 21x15
|
||||
|
||||
### FAIL2TOPIC:
|
||||
### Automated IP bans for world/Topic() spammers
|
||||
### NOTE FOR WINDOWS HOSTS: This requires you to be running dreamdaemon as an administrator for it to work at all. TGS3 handles this automatically, and honestly there's no reason not to be using TGS3 if you're hosting on Windows.
|
||||
### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing.
|
||||
## Enabled
|
||||
#FAIL2TOPIC_ENABLED
|
||||
## Minimum wait time in deciseconds between valid requests
|
||||
FAIL2TOPIC_RATE_LIMIT 10
|
||||
## Number of requests after breaching rate limit that triggers a ban
|
||||
FAIL2TOPIC_MAX_FAILS 5
|
||||
## Firewall rule name used on physical server
|
||||
## FOR LINUX HOSTS: This is used as the chain name. The iptables chain doesn't get created or hooked up to INPUT automatically, so you'll have to get that set up yourself. Recommended name: BYOND
|
||||
FAIL2TOPIC_RULE_NAME _dd_fail2topic
|
||||
|
||||
## Enable automatic profiling - Byond 513.1506 and newer only.
|
||||
#AUTO_PROFILE
|
||||
|
||||
## Uncomment to enable global ban DB using the provided URL. The API should expect to receive a ckey at the end of the URL.
|
||||
## More API details can be found here: https://centcom.melonmesa.com
|
||||
CENTCOM_BAN_DB https://centcom.melonmesa.com/ban/search
|
||||
$include entries/admin.txt
|
||||
$include entries/alert.txt
|
||||
$include entries/antag_rep.txt
|
||||
$include entries/comms.txt
|
||||
$include entries/connections.txt
|
||||
$include entries/dbconfig.txt
|
||||
$include entries/debris.txt
|
||||
$include entries/donator.txt
|
||||
$include entries/dynamic.txt
|
||||
$include entries/fetish_content.txt
|
||||
$include entries/gamemodes.txt
|
||||
$include entries/general.txt
|
||||
$include entries/jexp.txt
|
||||
$include entries/logging.txt
|
||||
$include entries/movespeed.txt
|
||||
$include entries/persistence.txt
|
||||
$include entries/policy.txt
|
||||
$include entries/resources.txt
|
||||
$include entries/respawns.txt
|
||||
$include entries/security.txt
|
||||
$include entries/server.txt
|
||||
$include entries/stamina_combat.txt
|
||||
$include entries/threat.txt
|
||||
$include entries/urls.txt
|
||||
$include entries/vote.txt
|
||||
|
||||
$include plushies/defines.txt
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#this is a bad system but I'm lazy so it piggybacks off config loader system.
|
||||
#Specify group followed by ckey for each ckey.
|
||||
|
||||
#TIER_1_DONATORS test_ckey
|
||||
|
||||
#TIER_2_DONATORS test_ckey
|
||||
|
||||
#TIER_3_DONATORS test_ckey
|
||||
@@ -0,0 +1,79 @@
|
||||
## Comment this out if you want to use the SQL based admin system, the legacy system uses admins.txt.
|
||||
## You need to set up your database to use the SQL based system.
|
||||
## This flag is automatically enabled if SQL_ENABLED isn't
|
||||
ADMIN_LEGACY_SYSTEM
|
||||
|
||||
##Uncomment this to stop any admins loaded by the legacy system from having their rank edited by the permissions panel
|
||||
#PROTECT_LEGACY_ADMINS
|
||||
|
||||
##Uncomment this to stop any ranks loaded by the legacy system from having their flags edited by the permissions panel
|
||||
#PROTECT_LEGACY_RANKS
|
||||
|
||||
##Uncomment this to have admin ranks only loaded from the legacy admin_ranks.txt
|
||||
##If enabled, each time admins are loaded ranks the database will be updated with the current ranks and their flags
|
||||
#LOAD_LEGACY_RANKS_ONLY
|
||||
|
||||
## Comment this out if you want to use the SQL based banning system. The legacy systems use the files in the data folder. You need to set up your database to use the SQL based system.
|
||||
BAN_LEGACY_SYSTEM
|
||||
|
||||
## Comment this out to stop locally connected clients from being given the almost full access !localhost! admin rank
|
||||
ENABLE_LOCALHOST_RANK
|
||||
|
||||
## Comment this out if you want to use the SQL based mentor system, the legacy system uses mentors.txt.
|
||||
## You need to set up your database to use the SQL based system.
|
||||
## This flag is automatically enabled if SQL_ENABLED isn't
|
||||
MENTOR_LEGACY_SYSTEM
|
||||
|
||||
#Mentors only see ckeys by default. Uncomment to have them only see mob name
|
||||
#MENTORS_MOBNAME_ONLY
|
||||
|
||||
## Uncomment this to forbid admins from possessing the singularity.
|
||||
#FORBID_SINGULO_POSSESSION
|
||||
|
||||
## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM.
|
||||
## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off)
|
||||
#POPUP_ADMIN_PM
|
||||
|
||||
## Uncomment this to let players see their own notes (they can still be set by admins only)
|
||||
#SEE_OWN_NOTES
|
||||
|
||||
### Comment these two out to prevent notes fading out over time for admins.
|
||||
## Notes older then this will start fading out.
|
||||
NOTE_FRESH_DAYS 91.31055
|
||||
## Notes older then this will be completely faded out.
|
||||
NOTE_STALE_DAYS 365.2422
|
||||
|
||||
## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes
|
||||
AUTOCONVERT_NOTES
|
||||
|
||||
## Comment this out to stop admin messages sent anytime an admin disconnects from a round in play, you can edit the messages in admin.dm
|
||||
ANNOUNCE_ADMIN_LOGOUT
|
||||
|
||||
## Uncomment to have an admin message sent anytime an admin connects to a round in play, you can edit the messages in admin.dm
|
||||
#ANNOUNCE_ADMIN_LOGIN
|
||||
|
||||
## More API details can be found here: https://centcom.melonmesa.com
|
||||
CENTCOM_BAN_DB https://centcom.melonmesa.com/ban/search
|
||||
|
||||
## AUTOADMIN
|
||||
## The default admin rank
|
||||
AUTOADMIN_RANK Game Master
|
||||
|
||||
## Uncomment to automatically give that admin rank to all players
|
||||
#AUTOADMIN
|
||||
|
||||
## Comment this out to stop admins being able to choose their personal ooccolor
|
||||
ALLOW_ADMIN_OOCCOLOR
|
||||
|
||||
## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
|
||||
## Set to 1 to jobban them from those positions, set to 0 to allow them.
|
||||
# GUEST_JOBBAN
|
||||
|
||||
## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting)
|
||||
GUEST_BAN
|
||||
|
||||
## Comment this out to disable automuting
|
||||
#AUTOMUTE_ON
|
||||
|
||||
## Allow admin hrefs that don't use the new token system, will eventually be removed
|
||||
DEBUG_ADMIN_HREFS
|
||||
@@ -0,0 +1,13 @@
|
||||
## ALERT LEVELS ###
|
||||
ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
|
||||
ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
|
||||
ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
|
||||
ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
|
||||
ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
|
||||
ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
|
||||
ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
|
||||
ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
|
||||
|
||||
## Determines the minimum alert level for the security cyborg model to be chosen
|
||||
## 0: Green, 1:Blue, 2:Amber, 3:Red, 4:Delta
|
||||
MINIMUM_SECBORG_ALERT 3
|
||||
@@ -0,0 +1,19 @@
|
||||
## disclaimer: this is a confusing file. reading and understanding antag rep code is recommended for future headmins/server leads.
|
||||
|
||||
## Use the antagonist reputation system
|
||||
# ANTAG_REP
|
||||
|
||||
## Maximum antag roll ticketts someone can have
|
||||
# ANTAG_REP_MAXIMUM 200
|
||||
|
||||
## "Free" tickets someone gets on roll
|
||||
# DEFAULT_ANTAG_TICKETS 100
|
||||
|
||||
## Maximum **STORED** tickets used ontop of default per roll
|
||||
# MAX_TICKETS_PER_ROLL 100
|
||||
|
||||
## Custom antag reputation values
|
||||
## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
|
||||
## e.g.
|
||||
## ANTAG_REP Captain 10
|
||||
## ANTAG_REP Assistant 0
|
||||
@@ -7,9 +7,12 @@
|
||||
#CROSS_SERVER ServerName byond:\\address:port
|
||||
|
||||
## Name that the server calls itself in communications
|
||||
#CROSS_COMMS_NAME
|
||||
# CROSS_COMMS_NAME Citadel Main
|
||||
|
||||
## Network-name used for cross-server broadcasts made from communication consoles.
|
||||
## Servers that do not match this network-name will have their messages discarded.
|
||||
## Leaving this commented will allow all messages through, regardless of network.
|
||||
#CROSS_COMMS_NETWORK default_network
|
||||
|
||||
## CITADEL CONFIG: List of cross server URLs, same as CROSS_SERVER, to send bunker override messages for
|
||||
## Format is the same as CROSS_SERVER.
|
||||
@@ -0,0 +1,93 @@
|
||||
## Deny all new connections by ckeys we haven't seen before (exempts admins and only denies the connection if the database is enabled and connected)
|
||||
## Requires database
|
||||
#PANIC_BUNKER
|
||||
|
||||
## If a player connects during a bunker with less then or this amount of living time (Minutes), we deny the connection
|
||||
#PANIC_BUNKER_LIVING 90
|
||||
|
||||
## The message the Panic Bunker gives when someone is rejected by it
|
||||
## %minutes% is replaced with PANIC_BUNKER_LIVING on runtime, remove it if you don't want this
|
||||
#PANIC_BUNKER_MESSAGE Sorry, but the server is currently not accepting connections from players with less than %minutes% minutes of living time.
|
||||
|
||||
## If panic bunker is on and a player is rejected (see above), attempt to send them to this connected server (see below) instead.
|
||||
## You probably want this to be the same as CROSS_SERVER_ADDRESS
|
||||
#PANIC_SERVER_ADDRESS byond://address:port
|
||||
|
||||
##Name of the place to send people rejected by the bunker
|
||||
#PANIC_SERVER_NAME [Put the name here]
|
||||
|
||||
## Number of days for an individual panic bunker passthrough entry to be wiped. Note that they're also wiped as soon as a player is in the database.
|
||||
#MAX_BUNKER_DAYS 7
|
||||
|
||||
## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never)
|
||||
## Requres database
|
||||
NOTIFY_NEW_PLAYER_AGE 0
|
||||
|
||||
## Notify admins when a player connects if their byond account was created in the last X days
|
||||
## Requires database
|
||||
NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1
|
||||
|
||||
##Automated age verification, comment this out to not ask new users if they are 18+
|
||||
#AGE_VERIFICATION
|
||||
|
||||
## Notify the irc channel when a new player makes their first connection
|
||||
## Requres database
|
||||
#IRC_FIRST_CONNECTION_ALERT
|
||||
|
||||
## Comment this out to disable checking for the cid randomizer dll. (disabled if database isn't enabled or connected)
|
||||
CHECK_RANDOMIZER
|
||||
|
||||
## IPINTEL:
|
||||
## This allows you to detect likely proxies by checking ips against getipintel.net
|
||||
## Rating to warn at: (0.9 is good, 1 is 100% likely to be a spammer/proxy, 0.8 is 80%, etc) anything equal to or higher then this number triggers an admin warning
|
||||
#IPINTEL_RATING_BAD 0.9
|
||||
## Contact email, (required to use the service, leaving blank or default disables IPINTEL)
|
||||
#IPINTEL_EMAIL ch@nge.me
|
||||
## How long to save good matches (ipintel rate limits to 15 per minute and 500 per day. so this shouldn't be too low, getipintel.net suggests 6 hours, time is in hours) (Your ip will get banned if you go over 500 a day too many times)
|
||||
#IPINTEL_SAVE_GOOD 12
|
||||
## How long to save bad matches (these numbers can change as ips change hands, best not to save these for too long in case somebody gets a new ip used by a spammer/proxy before.)
|
||||
#IPINTEL_SAVE_BAD 3
|
||||
## Domain name to query (leave commented out for the default, only needed if you pay getipintel.net for more querys)
|
||||
#IPINTEL_DOMAIN check.getipintel.net
|
||||
|
||||
## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
|
||||
#AGGRESSIVE_CHANGELOG
|
||||
|
||||
## Uncomment to allow web client connections
|
||||
#ALLOW_WEBCLIENT
|
||||
|
||||
## Uncomment to restrict web client connections to byond members
|
||||
## This makes for a nice pay gate to cut down on ban evading, as the webclient's cid system isn't that great
|
||||
## byond membership starts at $10 for 3 months, so to use the webclient to evade, they would have sink 10 bucks in each evade.
|
||||
#WEBCLIENT_ONLY_BYOND_MEMBERS
|
||||
|
||||
## CLIENT VERSION CONTROL
|
||||
## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
|
||||
## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower.
|
||||
## These messages will be followed by one stating the clients current version and the required version for clarity.
|
||||
## If CLIENT_WARN_POPUP is uncommented a popup window with the message will be displayed instead
|
||||
#CLIENT_WARN_VERSION 511
|
||||
#CLIENT_WARN_POPUP
|
||||
#CLIENT_WARN_MESSAGE Byond released 511 as the stable release. You can set the framerate your client runs at, which makes the game feel very different and cool. Shortly after its release we will end up using 511 client features and you will be forced to update.
|
||||
CLIENT_ERROR_VERSION 511
|
||||
CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade.
|
||||
## The minimum build needed for joining the server, if using 512, a good minimum build would be 1421 as that disables the Middle Mouse Button exploit.
|
||||
CLIENT_ERROR_BUILD 1421
|
||||
|
||||
## Uncomment for 'soft' population caps, players will be warned while joining if the living crew exceeds the listed number.
|
||||
#SOFT_POPCAP 100
|
||||
|
||||
## Message for soft cap
|
||||
SOFT_POPCAP_MESSAGE Be warned that the server is currently serving a high number of users, consider using alternative game servers.
|
||||
|
||||
## Uncomment for 'hard' population caps, players will not be allowed to spawn if the living crew exceeds the listed number, though they may still observe or wait for the living crew to decrease in size.
|
||||
#HARD_POPCAP 150
|
||||
|
||||
## Message for hard cap
|
||||
HARD_POPCAP_MESSAGE The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers.
|
||||
|
||||
## Uncomment for 'extreme' population caps, players will not be allowed to join the server if living crew exceeds the listed number.
|
||||
#EXTREME_POPCAP 200
|
||||
|
||||
## Message for extreme cap
|
||||
EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, find alternative servers.
|
||||
@@ -43,3 +43,6 @@ BSQL_THREAD_LIMIT 50
|
||||
|
||||
## Uncomment to enable verbose BSQL communication logs
|
||||
#BSQL_DEBUG
|
||||
|
||||
## Time to wait before considering a query as lingering too long
|
||||
@QUERY_DEBUG_LOG_TIMEOUT 70
|
||||
@@ -0,0 +1,8 @@
|
||||
## Default turf threshold to get dirt
|
||||
TURF_DIRT_THRESHOLD 100
|
||||
|
||||
## Default alpha of dirt on spawn
|
||||
DIRT_ALPHA_STARTING 127
|
||||
|
||||
## Multiplier for how dirty walking over a turf makes it
|
||||
TURF_DIRTY_MULTIPLIER 1
|
||||
@@ -0,0 +1,11 @@
|
||||
## Citadel donator system
|
||||
## this is a bad system but I'm lazy so it piggybacks off config loader system.
|
||||
## File isn't properly documented because the donator system desperately needs a rewrite and I can't be arsed to right now.
|
||||
|
||||
#Specify group followed by ckey for each ckey.
|
||||
|
||||
#TIER_1_DONATORS test_ckey
|
||||
|
||||
#TIER_2_DONATORS test_ckey
|
||||
|
||||
#TIER_3_DONATORS test_ckey
|
||||
@@ -307,3 +307,12 @@ DYNAMIC_ASSASSINATE_COST 2
|
||||
DYNAMIC_WAROPS_REQUIREMENT 60
|
||||
|
||||
DYNAMIC_WAROPS_COST 10
|
||||
|
||||
## Storyteller min players
|
||||
# STORYTELLER_MIN_PLAYERS CHAOTIC 35
|
||||
|
||||
## Storyteller minimum chaos
|
||||
# STORYTELLER_MIN_CHAOS CHAOTIC 75
|
||||
|
||||
## Storyteller maximum chaos
|
||||
# STORYTELLER_MAX_CHAOS CHAOTIC 250
|
||||
@@ -0,0 +1,33 @@
|
||||
## Breast cups selectable from the character creation menu. Keep em lowercase.
|
||||
BREASTS_CUPS_PREFS a
|
||||
BREASTS_CUPS_PREFS b
|
||||
BREASTS_CUPS_PREFS c
|
||||
BREASTS_CUPS_PREFS d
|
||||
BREASTS_CUPS_PREFS e
|
||||
BREASTS_CUPS_PREFS f
|
||||
BREASTS_CUPS_PREFS g
|
||||
BREASTS_CUPS_PREFS h
|
||||
|
||||
## Minimum and maximum limits for penis length from the character creation menu.
|
||||
PENIS_MIN_INCHES_PREFS 1
|
||||
PENIS_MAX_INCHES_PREFS 24
|
||||
|
||||
## Body size configs, the feature will be disabled if both min and max have the same value.
|
||||
BODY_SIZE_MIN 0.9
|
||||
BODY_SIZE_MAX 1.25
|
||||
|
||||
## Allowed visibility toggles
|
||||
|
||||
# SAFE_VISIBILITY_TOGGLES Always visible
|
||||
SAFE_VISIBILITY_TOGGLES Hidden by clothes
|
||||
SAFE_VISIBILITY_TOGGLES Hidden by underwear
|
||||
SAFE_VISIBILITY_TOGGLES Always hidden
|
||||
|
||||
## Pun-Pun movement slowdown given to characters with a body size smaller than this value,
|
||||
## to compensate for their smaller hitbox.
|
||||
## To disable, just make sure the value is lower than 'body_size_min'
|
||||
THRESHOLD_BODY_SIZE_PENALTY 1
|
||||
|
||||
## Multiplier used in the smaller strides slowdown calculation.
|
||||
## Doesn't apply to floating or crawling mobs.
|
||||
BODY_SIZE_SLOWDOWN_MULTIPLIER 0
|
||||
@@ -0,0 +1,178 @@
|
||||
## Comment to disable weighting modes by how chaotic recent mode rolls were.
|
||||
WEIGH_BY_RECENT_CHAOS
|
||||
|
||||
## The weight adjustment will be proportional to this power relative to the "ideal" weight range.
|
||||
## e.g. if we have a weight range of 0-5, and an exponent of 1, 6 will be weighted 1/2, 7 1/3 etc.
|
||||
## if exponent is 2, it'll be 1/4, 1/9 etc.
|
||||
CHAOS_EXPONENT 1
|
||||
|
||||
## Percent weight reductions for three of the most recent modes
|
||||
|
||||
REPEATED_MODE_ADJUST 45 30 10
|
||||
|
||||
## Probablities for game modes chosen in 'secret' and 'random' modes.
|
||||
## Default probablity is 1, increase to make that mode more likely to be picked.
|
||||
## Set to 0 to disable that mode.
|
||||
|
||||
PROBABILITY TRAITOR 5
|
||||
PROBABILITY TRAITORBRO 2
|
||||
PROBABILITY TRAITORCHAN 4
|
||||
PROBABILITY INTERNAL_AFFAIRS 3
|
||||
PROBABILITY NUCLEAR 2
|
||||
PROBABILITY REVOLUTION 2
|
||||
PROBABILITY CULT 2
|
||||
PROBABILITY CHANGELING 2
|
||||
PROBABILITY WIZARD 4
|
||||
PROBABILITY MONKEY 0
|
||||
PROBABILITY METEOR 0
|
||||
PROBABILITY EXTENDED 0
|
||||
PROBABILITY SECRET_EXTENDED 0
|
||||
PROBABILITY DEVIL 0
|
||||
PROBABILITY DEVIL_AGENTS 0
|
||||
PROBABILITY CLOWNOPS 0
|
||||
PROBABILITY BLOODSUCKER 0
|
||||
|
||||
## You probably want to keep sandbox off by default for secret and random.
|
||||
PROBABILITY SANDBOX 0
|
||||
|
||||
## Toggles for continuous modes.
|
||||
## Modes that aren't continuous will end the instant all antagonists are dead.
|
||||
|
||||
CONTINUOUS TRAITOR
|
||||
CONTINUOUS TRAITORBRO
|
||||
CONTINUOUS TRAITORCHAN
|
||||
CONTINUOUS INTERNAL_AFFAIRS
|
||||
#CONTINUOUS NUCLEAR
|
||||
#CONTINUOUS REVOLUTION
|
||||
CONTINUOUS CULT
|
||||
CONTINUOUS CLOCKWORK_CULT
|
||||
CONTINUOUS CHANGELING
|
||||
CONTINUOUS WIZARD
|
||||
#CONTINUOUS MONKEY
|
||||
CONTINUOUS BLOODSUCKER
|
||||
CONTINUOUS HERESY
|
||||
|
||||
##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
|
||||
|
||||
CONTINUOUS METEOR
|
||||
CONTINUOUS EXTENDED
|
||||
CONTINUOUS SECRET_EXTENDED
|
||||
|
||||
## Toggles for allowing midround antagonists (aka mulligan antagonists).
|
||||
## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created.
|
||||
|
||||
MIDROUND_ANTAG TRAITOR
|
||||
#MIDROUND_ANTAG TRAITORBRO
|
||||
MIDROUND_ANTAG TRAITORCHAN
|
||||
MIDROUND_ANTAG INTERNAL_AFFAIRS
|
||||
#MIDROUND_ANTAG NUCLEAR
|
||||
#MIDROUND_ANTAG REVOLUTION
|
||||
MIDROUND_ANTAG CULT
|
||||
MIDROUND_ANTAG CLOCKWORK_CULT
|
||||
MIDROUND_ANTAG CHANGELING
|
||||
MIDROUND_ANTAG WIZARD
|
||||
#MIDROUND_ANTAG MONKEY
|
||||
|
||||
## Toggles for whether this mode should force antags even if not enough players have it enabled.
|
||||
## If it's off, it just won't roll as many antags.
|
||||
#FORCE_ANTAG_COUNT TRAITOR
|
||||
#FORCE_ANTAG_COUNT TRAITORBRO
|
||||
#FORCE_ANTAG_COUNT TRAITORCHAN
|
||||
#FORCE_ANTAG_COUNT INTERNAL_AFFAIRS
|
||||
FORCE_ANTAG_COUNT NUCLEAR
|
||||
FORCE_ANTAG_COUNT REVOLUTION
|
||||
FORCE_ANTAG_COUNT CULT
|
||||
FORCE_ANTAG_COUNT CLOCKWORK_CULT
|
||||
#FORCE_ANTAG_COUNT CHANGELING
|
||||
#FORCE_ANTAG_COUNT WIZARD
|
||||
#FORCE_ANTAG_COUNT MONKEY
|
||||
|
||||
## A config for how much each game mode's chaos level is.
|
||||
## All of them have reasonable defaults, but this can be used to adjust them.
|
||||
## 0-9, where 0 is lowest chaos (should only be extended) and 9 is highest (wizard? nukies?)
|
||||
#CHAOS_LEVEL EXTENDED 0
|
||||
|
||||
## Uncomment these for overrides of the minimum / maximum number of players in a round type.
|
||||
## If you set any of these occasionally check to see if you still need them as the modes
|
||||
## will still be actively rebalanced around the SUGGESTED populations, not your overrides.
|
||||
## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to
|
||||
## VERY low numbers (< 5) can lead to errors if the roundtypes were not designed for that.
|
||||
|
||||
#MIN_POP TRAITOR 0
|
||||
#MAX_POP TRAITOR -1
|
||||
|
||||
#MIN_POP TRAITORBRO 0
|
||||
#MAX_POP TRAITORBRO -1
|
||||
|
||||
#MIN_POP TRAITORCHAN 15
|
||||
#MAX_POP TRAITORCHAN -1
|
||||
|
||||
#MIN_POP DOUBLE_AGENTS 25
|
||||
#MAX_POP DOUBLE_AGENTS -1
|
||||
|
||||
#MIN_POP NUCLEAR 0
|
||||
#MAX_POP NUCLEAR -1
|
||||
|
||||
#MIN_POP REVOLUTION 20
|
||||
#MAX_POP REVOLUTION -1
|
||||
|
||||
#MIN_POP CULT 24
|
||||
#MAX_POP CULT -1
|
||||
|
||||
#MIN_POP CLOCKWORK_CULT 24
|
||||
#MAX_POP CLOCKWORK_CULT -1
|
||||
|
||||
#MIN_POP CHANGELING 15
|
||||
#MAX_POP CHANGELING -1
|
||||
|
||||
#MIN_POP WIZARD 20
|
||||
#MAX_POP WIZARD -1
|
||||
|
||||
#MIN_POP MONKEY 20
|
||||
#MAX_POP MONKEY -1
|
||||
|
||||
#MIN_POP METEOR 0
|
||||
#MAX_POP METEOR -1
|
||||
|
||||
#MIN_POP DEVIL 0
|
||||
#MAX_POP DEVIL -1
|
||||
|
||||
#MIN_POP DEVIL_AGENTS 25
|
||||
#MAX_POP DEVIL_AGENTS -1
|
||||
|
||||
## Setting at least one mode to be playable at 0/1 players is required.
|
||||
#MIN_POP EXTENDED 0
|
||||
#MAX_POP EXTENDED -1
|
||||
|
||||
## Variables calculate how number of antagonists will scale to population.
|
||||
## Used as (Antagonists = Population / Coeff)
|
||||
## Set to 0 to disable scaling and use default numbers instead.
|
||||
TRAITOR_SCALING_COEFF 6
|
||||
## per brother TEAM
|
||||
BROTHER_SCALING_COEFF 12
|
||||
CHANGELING_SCALING_COEFF 6
|
||||
## heretics
|
||||
ECULT_SCALING_COEFF 5
|
||||
## per abductor TEAM
|
||||
ABDUCTOR_SCALING_COEFF 15
|
||||
|
||||
## Variables calculate how number of open security officer positions will scale to population.
|
||||
## Used as (Officers = Population / Coeff)
|
||||
## Set to 0 to disable scaling and use default numbers instead.
|
||||
SECURITY_SCALING_COEFF 8
|
||||
|
||||
## The number of objectives traitors get.
|
||||
## Not including escaping/hijacking.
|
||||
TRAITOR_OBJECTIVES_AMOUNT 2
|
||||
BROTHER_OBJECTIVES_AMOUNT 2
|
||||
|
||||
## Uncomment to prohibit jobs that start with loyalty
|
||||
## implants from being most antagonists.
|
||||
#PROTECT_ROLES_FROM_ANTAGONIST
|
||||
|
||||
## Uncomment to prohibit assistants from becoming most antagonists.
|
||||
#PROTECT_ASSISTANT_FROM_ANTAGONIST
|
||||
|
||||
|
||||
## If late-joining players have a chance to become a traitor/changeling
|
||||
ALLOW_LATEJOIN_ANTAGONISTS
|
||||
@@ -1,3 +1,51 @@
|
||||
## Lobby time: This is the amount of time between rounds that players have to setup their characters and be ready.
|
||||
LOBBY_COUNTDOWN 120
|
||||
|
||||
## Round End Time: This is the amount of time after the round ends that players have to murder death kill each other.
|
||||
ROUND_END_COUNTDOWN 90
|
||||
|
||||
## period of time in seconds for players to be considered inactive
|
||||
# INACTIVITY_PERIOD 300
|
||||
|
||||
## period of time in seconds for players to be considered afk and kickable
|
||||
# AFK_PERIOD 600
|
||||
|
||||
## disconnect players who are considered afk
|
||||
# KICK_INACTIVE
|
||||
|
||||
## Job slot open/close by identification consoles delay in seconds
|
||||
ID_CONSOLE_JOBSLOT_DELAY 30
|
||||
|
||||
|
||||
## disables calling del(src) on newmobs if they logout before spawnin in
|
||||
# DONT_DEL_NEWMOB
|
||||
|
||||
## In-game features
|
||||
##Toggle for having jobs load up from the .txt
|
||||
# LOAD_JOBS_FROM_TXT
|
||||
|
||||
|
||||
## Uncomment to allow special 'Easter-egg' events on special holidays such as seasonal holidays and stuff like 'Talk Like a Pirate Day' :3 YAARRR
|
||||
ALLOW_HOLIDAYS
|
||||
|
||||
## Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin.
|
||||
#SHOW_IRC_NAME
|
||||
|
||||
## Chat Announce Options
|
||||
## Various messages to be sent to game chats
|
||||
## Uncommenting these will enable them, by default they will be broadcast to Game chat channels on TGS3 or non-admin channels on TGS4
|
||||
## If using TGS4, the string option can be set as a chat channel tag to limit the message to channels of that tag type (case-sensitive)
|
||||
## i.e. CHAT_ANNOUNCE_NEW_GAME chat_channel_tag
|
||||
|
||||
## Send a message with the station name starting a new game
|
||||
#CHAT_ANNOUNCE_NEW_GAME
|
||||
|
||||
##Default screen resolution, in tiles.
|
||||
## By default, this is 15x15, which gets simplified to 7 by BYOND, as it is a 1:1 screen ratio.
|
||||
## For reference, Goonstation uses a resolution of 21x15 for it's widescreen mode.
|
||||
## Do note that changing this value will affect the title screen. The title screen will have to be updated manually if this is changed.
|
||||
DEFAULT_VIEW 21x15
|
||||
|
||||
## HEALTH ###
|
||||
|
||||
##Damage multiplier, effects both weapons and healing on all mobs. For example, 1.25 would result in 25% higher damage.
|
||||
@@ -22,30 +70,6 @@ OOC_DURING_ROUND
|
||||
## Comment this out if you want to disable emojis
|
||||
EMOJIS
|
||||
|
||||
## MOB MOVEMENT ###
|
||||
|
||||
## We suggest editing these variables ingame to find a good speed for your server.
|
||||
## To do this you must be a high level admin. Open the 'debug' tab ingame.
|
||||
## Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name.
|
||||
|
||||
## These values get directly added to values and totals ingame.
|
||||
## To speed things up make the number negative, to slow things down, make the number positive.
|
||||
|
||||
## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
|
||||
RUN_DELAY 1
|
||||
WALK_DELAY 4
|
||||
|
||||
## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE!
|
||||
## Entries completely override all subtypes. Later entries have precedence over earlier entries.
|
||||
## This means if you put /mob 0 on the last entry, it will null out all changes, while if you put /mob as the first entry and
|
||||
## /mob/living/carbon/human on the last entry, the last entry will override the first.
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/human 1
|
||||
##MULTIPLICATIVE_MOVESPEED /mob/living/silicon/robot 0
|
||||
##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/monkey 0
|
||||
##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien 0
|
||||
##MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal/slime 0
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
|
||||
|
||||
|
||||
## NAMES ###
|
||||
## If uncommented this adds a random surname to a player's name if they only specify one name.
|
||||
@@ -54,205 +78,18 @@ MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
|
||||
## If uncommented, this forces all players to use random names !and appearances!.
|
||||
#FORCE_RANDOM_NAMES
|
||||
|
||||
|
||||
## ALERT LEVELS ###
|
||||
ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
|
||||
ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
|
||||
ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
|
||||
ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
|
||||
ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
|
||||
ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
|
||||
ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
|
||||
ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
|
||||
|
||||
|
||||
|
||||
## GAME MODES ###
|
||||
|
||||
## Uncomment to not send a roundstart intercept report. Gamemodes may override this.
|
||||
#NO_INTERCEPT_REPORT
|
||||
|
||||
## Comment to disable weighting modes by how chaotic recent mode rolls were.
|
||||
WEIGH_BY_RECENT_CHAOS
|
||||
|
||||
## The weight adjustment will be proportional to this power relative to the "ideal" weight range.
|
||||
## e.g. if we have a weight range of 0-5, and an exponent of 1, 6 will be weighted 1/2, 7 1/3 etc.
|
||||
## if exponent is 2, it'll be 1/4, 1/9 etc.
|
||||
CHAOS_EXPONENT 1
|
||||
|
||||
## Probablities for game modes chosen in 'secret' and 'random' modes.
|
||||
## Default probablity is 1, increase to make that mode more likely to be picked.
|
||||
## Set to 0 to disable that mode.
|
||||
|
||||
PROBABILITY TRAITOR 5
|
||||
PROBABILITY TRAITORBRO 2
|
||||
PROBABILITY TRAITORCHAN 4
|
||||
PROBABILITY INTERNAL_AFFAIRS 3
|
||||
PROBABILITY NUCLEAR 2
|
||||
PROBABILITY REVOLUTION 2
|
||||
PROBABILITY CULT 2
|
||||
PROBABILITY CHANGELING 2
|
||||
PROBABILITY WIZARD 4
|
||||
PROBABILITY MONKEY 0
|
||||
PROBABILITY METEOR 0
|
||||
PROBABILITY EXTENDED 0
|
||||
PROBABILITY SECRET_EXTENDED 0
|
||||
PROBABILITY DEVIL 0
|
||||
PROBABILITY DEVIL_AGENTS 0
|
||||
PROBABILITY CLOWNOPS 0
|
||||
PROBABILITY BLOODSUCKER 0
|
||||
|
||||
## You probably want to keep sandbox off by default for secret and random.
|
||||
PROBABILITY SANDBOX 0
|
||||
|
||||
## Percent weight reductions for three of the most recent modes
|
||||
|
||||
REPEATED_MODE_ADJUST 45 30 10
|
||||
|
||||
## Toggles for continuous modes.
|
||||
## Modes that aren't continuous will end the instant all antagonists are dead.
|
||||
|
||||
CONTINUOUS TRAITOR
|
||||
CONTINUOUS TRAITORBRO
|
||||
CONTINUOUS TRAITORCHAN
|
||||
CONTINUOUS INTERNAL_AFFAIRS
|
||||
#CONTINUOUS NUCLEAR
|
||||
#CONTINUOUS REVOLUTION
|
||||
CONTINUOUS CULT
|
||||
CONTINUOUS CLOCKWORK_CULT
|
||||
CONTINUOUS CHANGELING
|
||||
CONTINUOUS WIZARD
|
||||
#CONTINUOUS MONKEY
|
||||
CONTINUOUS BLOODSUCKER
|
||||
CONTINUOUS HERESY
|
||||
|
||||
##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
|
||||
|
||||
CONTINUOUS METEOR
|
||||
CONTINUOUS EXTENDED
|
||||
CONTINUOUS SECRET_EXTENDED
|
||||
|
||||
|
||||
## Toggles for allowing midround antagonists (aka mulligan antagonists).
|
||||
## In modes that are continuous, if all antagonists should die then a new set of antagonists will be created.
|
||||
|
||||
MIDROUND_ANTAG TRAITOR
|
||||
#MIDROUND_ANTAG TRAITORBRO
|
||||
MIDROUND_ANTAG TRAITORCHAN
|
||||
MIDROUND_ANTAG INTERNAL_AFFAIRS
|
||||
#MIDROUND_ANTAG NUCLEAR
|
||||
#MIDROUND_ANTAG REVOLUTION
|
||||
MIDROUND_ANTAG CULT
|
||||
MIDROUND_ANTAG CLOCKWORK_CULT
|
||||
MIDROUND_ANTAG CHANGELING
|
||||
MIDROUND_ANTAG WIZARD
|
||||
#MIDROUND_ANTAG MONKEY
|
||||
|
||||
## Toggles for whether this mode should force antags even if not enough players have it enabled.
|
||||
## If it's off, it just won't roll as many antags.
|
||||
#FORCE_ANTAG_COUNT TRAITOR
|
||||
#FORCE_ANTAG_COUNT TRAITORBRO
|
||||
#FORCE_ANTAG_COUNT TRAITORCHAN
|
||||
#FORCE_ANTAG_COUNT INTERNAL_AFFAIRS
|
||||
FORCE_ANTAG_COUNT NUCLEAR
|
||||
FORCE_ANTAG_COUNT REVOLUTION
|
||||
FORCE_ANTAG_COUNT CULT
|
||||
FORCE_ANTAG_COUNT CLOCKWORK_CULT
|
||||
#FORCE_ANTAG_COUNT CHANGELING
|
||||
#FORCE_ANTAG_COUNT WIZARD
|
||||
#FORCE_ANTAG_COUNT MONKEY
|
||||
|
||||
## A config for how much each game mode's chaos level is.
|
||||
## All of them have reasonable defaults, but this can be used to adjust them.
|
||||
## 0-9, where 0 is lowest chaos (should only be extended) and 9 is highest (wizard? nukies?)
|
||||
#CHAOS_LEVEL EXTENDED 0
|
||||
|
||||
## Uncomment these for overrides of the minimum / maximum number of players in a round type.
|
||||
## If you set any of these occasionally check to see if you still need them as the modes
|
||||
## will still be actively rebalanced around the SUGGESTED populations, not your overrides.
|
||||
## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to
|
||||
## VERY low numbers (< 5) can lead to errors if the roundtypes were not designed for that.
|
||||
|
||||
#MIN_POP TRAITOR 0
|
||||
#MAX_POP TRAITOR -1
|
||||
|
||||
#MIN_POP TRAITORBRO 0
|
||||
#MAX_POP TRAITORBRO -1
|
||||
|
||||
#MIN_POP TRAITORCHAN 15
|
||||
#MAX_POP TRAITORCHAN -1
|
||||
|
||||
#MIN_POP DOUBLE_AGENTS 25
|
||||
#MAX_POP DOUBLE_AGENTS -1
|
||||
|
||||
#MIN_POP NUCLEAR 0
|
||||
#MAX_POP NUCLEAR -1
|
||||
|
||||
#MIN_POP REVOLUTION 20
|
||||
#MAX_POP REVOLUTION -1
|
||||
|
||||
#MIN_POP CULT 24
|
||||
#MAX_POP CULT -1
|
||||
|
||||
#MIN_POP CLOCKWORK_CULT 24
|
||||
#MAX_POP CLOCKWORK_CULT -1
|
||||
|
||||
#MIN_POP CHANGELING 15
|
||||
#MAX_POP CHANGELING -1
|
||||
|
||||
#MIN_POP WIZARD 20
|
||||
#MAX_POP WIZARD -1
|
||||
|
||||
#MIN_POP MONKEY 20
|
||||
#MAX_POP MONKEY -1
|
||||
|
||||
#MIN_POP METEOR 0
|
||||
#MAX_POP METEOR -1
|
||||
|
||||
#MIN_POP DEVIL 0
|
||||
#MAX_POP DEVIL -1
|
||||
|
||||
#MIN_POP DEVIL_AGENTS 25
|
||||
#MAX_POP DEVIL_AGENTS -1
|
||||
|
||||
## Setting at least one mode to be playable at 0/1 players is required.
|
||||
#MIN_POP EXTENDED 0
|
||||
#MAX_POP EXTENDED -1
|
||||
|
||||
## If non-human species are barred from joining as a head of staff
|
||||
#ENFORCE_HUMAN_AUTHORITY
|
||||
|
||||
|
||||
## The amount of time it takes for the emergency shuttle to be called, from round start.
|
||||
SHUTTLE_REFUEL_DELAY 12000
|
||||
|
||||
## Variables calculate how number of antagonists will scale to population.
|
||||
## Used as (Antagonists = Population / Coeff)
|
||||
## Set to 0 to disable scaling and use default numbers instead.
|
||||
TRAITOR_SCALING_COEFF 6
|
||||
BROTHER_SCALING_COEFF 6
|
||||
CHANGELING_SCALING_COEFF 6
|
||||
|
||||
## Variables calculate how number of open security officer positions will scale to population.
|
||||
## Used as (Officers = Population / Coeff)
|
||||
## Set to 0 to disable scaling and use default numbers instead.
|
||||
SECURITY_SCALING_COEFF 8
|
||||
|
||||
## The number of objectives traitors get.
|
||||
## Not including escaping/hijacking.
|
||||
TRAITOR_OBJECTIVES_AMOUNT 2
|
||||
BROTHER_OBJECTIVES_AMOUNT 2
|
||||
|
||||
## Uncomment to prohibit jobs that start with loyalty
|
||||
## implants from being most antagonists.
|
||||
#PROTECT_ROLES_FROM_ANTAGONIST
|
||||
|
||||
## Uncomment to prohibit assistants from becoming most antagonists.
|
||||
#PROTECT_ASSISTANT_FROM_ANTAGONIST
|
||||
|
||||
## If non-human species are barred from joining as a head of staff
|
||||
#ENFORCE_HUMAN_AUTHORITY
|
||||
|
||||
## If late-joining players have a chance to become a traitor/changeling
|
||||
ALLOW_LATEJOIN_ANTAGONISTS
|
||||
|
||||
## Comment this out to disable the antagonist reputation system. This system rewards players who participate in the game instead of greytiding by giving them slightly higher odds to
|
||||
## roll antagonist in subsequent rounds until they get it.
|
||||
@@ -303,9 +140,6 @@ ALLOW_AI_MULTICAM
|
||||
## Uncomment to prevent the security cyborg module from being chosen
|
||||
#DISABLE_SECBORG
|
||||
|
||||
## Determines the minimum alert level for the security cyborg model to be chosen
|
||||
## 0: Green, 1:Blue, 2:Amber, 3:Red, 4:Delta
|
||||
MINIMUM_SECBORG_ALERT 3
|
||||
|
||||
## Peacekeeper Borg ###
|
||||
## Uncomment to prevent the peacekeeper cyborg module from being chosen
|
||||
@@ -643,39 +477,10 @@ BOX_RANDOM_ENGINE Box Empty,0
|
||||
BOX_RANDOM_ENGINE Box Antimatter,1
|
||||
BOX_RANDOM_ENGINE Box P.A.C.M.A.N,1
|
||||
|
||||
## Whether or not there's a mode tier list vote after the secret/extended vote.
|
||||
MODETIER_VOTING
|
||||
|
||||
## Number of modes dropped by the modetier vote during mode selection, after vote.
|
||||
DROPPED_MODES 3
|
||||
|
||||
## Whether the suicide verb is allowed.
|
||||
# SUICIDE_ALLOWED
|
||||
|
||||
## Breast cups selectable from the character creation menu. Keep em lowercase.
|
||||
BREASTS_CUPS_PREFS a
|
||||
BREASTS_CUPS_PREFS b
|
||||
BREASTS_CUPS_PREFS c
|
||||
BREASTS_CUPS_PREFS d
|
||||
BREASTS_CUPS_PREFS e
|
||||
|
||||
## Minimum and maximum limits for penis length from the character creation menu.
|
||||
PENIS_MIN_INCHES_PREFS 1
|
||||
PENIS_MAX_INCHES_PREFS 20
|
||||
|
||||
## Body size configs, the feature will be disabled if both min and max have the same value.
|
||||
BODY_SIZE_MIN 0.9
|
||||
BODY_SIZE_MAX 1.25
|
||||
|
||||
## Pun-Pun movement slowdown given to characters with a body size smaller than this value,
|
||||
## to compensate for their smaller hitbox.
|
||||
## To disable, just make sure the value is lower than 'body_size_min'
|
||||
THRESHOLD_BODY_SIZE_PENALTY 1
|
||||
|
||||
## Multiplier used in the smaller strides slowdown calculation.
|
||||
## Doesn't apply to floating or crawling mobs.
|
||||
BODY_SIZE_SLOWDOWN_MULTIPLIER 0
|
||||
|
||||
## Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
|
||||
ALLOW_CUSTOM_SKINTONES
|
||||
|
||||
@@ -683,11 +488,6 @@ ALLOW_CUSTOM_SKINTONES
|
||||
## Camera mobs, AIs, ghosts and some other are of course exempt from this. This also doesn't influence simplemob AI, for the best.
|
||||
#USE_FIELD_OF_VISION
|
||||
|
||||
## Default turf threshold to get dirt
|
||||
TURF_DIRT_THRESHOLD 100
|
||||
|
||||
## Default alpha of dirt on spawn
|
||||
DIRT_ALPHA_STARTING 127
|
||||
|
||||
## Allows pAI custom holoforms
|
||||
PAI_CUSTOM_HOLOFORMS
|
||||
@@ -0,0 +1,23 @@
|
||||
## Uncomment this entry to have certain jobs require your account to be at least a certain number of days old to select. You can configure the exact age requirement for different jobs by editing
|
||||
## the minimal_player_age variable in the files in folder /code/game/jobs/job/.. for the job you want to edit. Set minimal_player_age to 0 to disable age requirement for that job.
|
||||
## REQUIRES the database set up to work. Keep it hashed if you don't have a database set up.
|
||||
## NOTE: If you have just set-up the database keep this DISABLED, as player age is determined from the first time they connect to the server with the database up. If you just set it up, it means
|
||||
## you have noone older than 0 days, since noone has been logged yet. Only turn this on once you have had the database up for 30 days.
|
||||
#USE_AGE_RESTRICTION_FOR_JOBS
|
||||
|
||||
## Uncomment this to have the job system use the player's account creation date, rather than the when they first joined the server for job timers.
|
||||
#USE_ACCOUNT_AGE_FOR_JOBS
|
||||
|
||||
## Unhash this to track player playtime in the database. Requires database to be enabled.
|
||||
#USE_EXP_TRACKING
|
||||
## Unhash this to enable playtime requirements for head jobs.
|
||||
#USE_EXP_RESTRICTIONS_HEADS
|
||||
## Unhash this to override head jobs' playtime requirements with this number of hours.
|
||||
## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes.
|
||||
#USE_EXP_RESTRICTIONS_HEADS_HOURS 3
|
||||
## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime.
|
||||
#USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT
|
||||
## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist.
|
||||
#USE_EXP_RESTRICTIONS_OTHER
|
||||
## Allows admins to bypass job playtime requirements.
|
||||
#USE_EXP_RESTRICTIONS_ADMIN_BYPASS
|
||||
@@ -0,0 +1,85 @@
|
||||
## log OOC channel
|
||||
LOG_OOC
|
||||
|
||||
## log client Say
|
||||
LOG_SAY
|
||||
|
||||
## log admin actions
|
||||
@LOG_ADMIN
|
||||
|
||||
## log admin chat
|
||||
@LOG_ADMINCHAT
|
||||
|
||||
## log client access (logon/logoff)
|
||||
LOG_ACCESS
|
||||
|
||||
## log game actions (start of round, results, etc.)
|
||||
LOG_GAME
|
||||
|
||||
## log player votes
|
||||
LOG_VOTE
|
||||
|
||||
## log player crafting
|
||||
LOG_CRAFT
|
||||
|
||||
## log client Whisper
|
||||
LOG_WHISPER
|
||||
|
||||
## log emotes
|
||||
LOG_EMOTE
|
||||
|
||||
## log attack messages
|
||||
LOG_ATTACK
|
||||
|
||||
## log pda messages
|
||||
LOG_PDA
|
||||
|
||||
## log telecomms messages
|
||||
LOG_TELECOMMS
|
||||
|
||||
## log prayers
|
||||
LOG_PRAYER
|
||||
|
||||
## log lawchanges
|
||||
LOG_LAW
|
||||
|
||||
## log crew manifest to seperate file
|
||||
LOG_MANIFEST
|
||||
|
||||
## log job divide debugging information
|
||||
LOG_JOB_DEBUG
|
||||
|
||||
## Log shuttle related actions
|
||||
LOG_SHUTTLE
|
||||
|
||||
## log all world.Topic() calls
|
||||
LOG_WORLD_TOPIC
|
||||
|
||||
## enables use of the proc twitterize() that lets you take a large list of strings and turn it into a JSON file of tweet sized strings.
|
||||
## As an example of how this could be """useful""" look towards Poly (https://twitter.com/Poly_the_Parrot)
|
||||
# LOG_TWITTER
|
||||
|
||||
## Enable logging pictures
|
||||
LOG_PICTURES
|
||||
|
||||
## Log camera pictures
|
||||
PICTURE_LOGGING_CAMERA
|
||||
|
||||
## log virus and actions
|
||||
LOG_VIRUS
|
||||
|
||||
## Log all raw hrefs of tgui, rather than letting tgui logging handle it. KEEP THIS OFF UNLESS YOU KNOW WHAT YOU ARE DOING.
|
||||
# EMERGENCY_TGUI_LOGGING
|
||||
|
||||
## Cooldown time for each occurance of a unique runtime in deciseconds
|
||||
ERROR_COOLDOWN 600
|
||||
|
||||
## Max runtimes of one type before silencing
|
||||
ERROR_LIMIT 50
|
||||
|
||||
## How long an unique runtime will be silenced for when reaching limit in deciseconds
|
||||
ERROR_SILENCE_TIME 6000
|
||||
|
||||
How long to wait between messaging admins about an unique runtime
|
||||
ERROR_MSG_DELAY 50
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
## MOB MOVEMENT ###
|
||||
|
||||
## We suggest editing these variables ingame to find a good speed for your server.
|
||||
## To do this you must be a high level admin. Open the 'debug' tab ingame.
|
||||
## Select "Debug Controller" and then, in the popup, select "Configuration". These variables should have the same name.
|
||||
|
||||
## These values get directly added to values and totals ingame.
|
||||
## To speed things up make the number negative, to slow things down, make the number positive.
|
||||
|
||||
## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
|
||||
RUN_DELAY 1.5
|
||||
WALK_DELAY 4
|
||||
|
||||
## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE!
|
||||
## Entries completely override all subtypes. Later entries have precedence over earlier entries.
|
||||
## This means if you put /mob 0 on the last entry, it will null out all changes, while if you put /mob as the first entry and
|
||||
## /mob/living/carbon/human on the last entry, the last entry will override the first.
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien -1
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/sentinel -0.75
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/drone -0.5
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/royal/praetorian 0
|
||||
MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien/humanoid/royal/queen 2
|
||||
|
||||
## The above, only when a mob is FLOATING
|
||||
MULTIPLICATIVE_MOVESPEED_FLOATING /mob/living/carbon -0.5
|
||||
MULTIPLICATIVE_MOVESPEED_FLOATING /mob/living 0
|
||||
|
||||
## Whether or not sprint is enabled
|
||||
SPRINT_ENABLED 0
|
||||
|
||||
## When sprint is off, how much does getting staggered slow you
|
||||
SPRINTLESS_STAGGER_SLOWDOWN 0.5
|
||||
|
||||
## When sprint is off, how much does getting shoved off balance slow you
|
||||
SPRINTLESS_OFF_BALANCE_SLOWDOWN 0.85
|
||||
|
||||
## Melee stagger power multiplier
|
||||
MELEE_STAGGER_FACTOR 1
|
||||
|
||||
## Sprint speed increase
|
||||
SPRINT_SPEED_INCREASE 1
|
||||
|
||||
## Max tiles/second increase from sprint
|
||||
SPRINT_MAX_TILES_INCREASE 5
|
||||
|
||||
## Absolute max speed sprint can make someone go (tiles/second)
|
||||
SPRINT_ABSOLUTE_MAX_TILES 13
|
||||
|
||||
## Max sprint buffer
|
||||
SPRINT_BUFFER_MAX 24
|
||||
|
||||
## Stamina/tile when bufer empty
|
||||
SPRINT_STAMINA_COST 1.4
|
||||
|
||||
## Buffer regen/decisecond - 0.4 = 4/second
|
||||
SPRINT_BUFFER_REGEN_PER_DS 0.4
|
||||
@@ -0,0 +1,24 @@
|
||||
## Policy configuration
|
||||
## Current valid keys are:
|
||||
## ON_CLONE - displayed after a successful cloning operation to the cloned person
|
||||
## ON_DEFIB_INTACT - displayed after defibbing before memory loss time threshold
|
||||
## ON_DEFIB_LATE - displayed after defibbing post memory loss time threshold
|
||||
## SDGF - displayed on SDGF clone spawning
|
||||
## SDGF_GOOD - displayed on SDGF clone spawning, if the clone is loyal
|
||||
## SDGF_BAD - displayed on SDGF clone spawning, if the clone is not loyal
|
||||
## PAI - displayed on PAI personality being loaded
|
||||
## EXAMPLE:
|
||||
## POLICY ON_CLONE insert text here <span class='notice'>span classes are fully supported</span>
|
||||
|
||||
POLICY ON_CLONE <span class='warning'>Your thoughts are hazy as the cloning algorithms reboot your consciousness. Unfortunately for you, the imperfect nature of the process has left out your more recent, less entrenched memories.</span><br><span class='userdanger'>You only remember vague details of your death, without clear recollection of who or what is specifically responsible for your demise.</span><br><span class='red'>(If you were murdered, you do not remember the exact name or appearance of your killer, only vague details of how they killed you rather than the exact murder weapon. (ex: drank something and blanked out, felt an impact in the back and bled out)<br>If you died to environmental hazards like ash storms or spacing, this is not as applicable -- <b>however, keep in mind that if someone set you up to die to that, like being tossed forcefully into space, that the previous clause of not remembering killer name in a murder applies!</b></span>
|
||||
|
||||
POLICY ON_DEFIB_LATE <span class='warning'>Your mind barely responds as first as you are forcefully returned to the world of the living after all too long in a state of decay. While medicine may restore your brain functions, you can't seem to remember your latest memories...</span><br><span class='userdanger'>You only remember vague details of your death, without clear recollection of who or what is specifically responsible for your demise.</span><br><span class='red'>(If you were murdered, you do not remember the exact name or appearance of your killer, only vague details of how they killed you rather than the exact murder weapon. (ex: drank something and blanked out, felt an impact in the back and bled out)<br>If you died to environmental hazards like ash storms or spacing, this is not as applicable -- <b>however, keep in mind that if someone set you up to die to that, like being tossed forcefully into space, that the previous clause of not remembering killer name in a murder applies!</b></span>
|
||||
|
||||
POLICY ON_DEFIB_INTACT <span class='notice'>You barely miss a beat as you gasp, awakening from the slumber of the deceased. The rapid resuscitation has saved you from the worst effects of brain damage.</span><br><span class='boldnotice'>You recall all information leading up to your death and exact details on method of death and killer if applicable, as long as you were conscious to witness such.</span>
|
||||
|
||||
POLICY PAI <span class='big warning'>If you are given an ERP-related directive without OOC consent, ahelp immediately.</span>w
|
||||
|
||||
## Misc entries for above
|
||||
|
||||
## Defib time limit for "cloning memory disorder" memory loss in seconds
|
||||
DEFIB_CMD_TIME_LIMIT 300
|
||||
@@ -2,7 +2,7 @@
|
||||
RESPAWNS_ENABLED
|
||||
|
||||
## Minutes delay before allowing respawns, either from death or observing. Not an integer.
|
||||
RESPAWN_DELAY 15.0
|
||||
RESPAWN_DELAY 10.0
|
||||
|
||||
## Minutes delay before allowing respawns, if the user cryo'd. Not an integer.
|
||||
RESPAWN_DELAY_CRYO 5.0
|
||||
@@ -16,8 +16,8 @@ ALLOW_NON_ASSISTANT_RESPAWN
|
||||
## Allow respawning as the same character
|
||||
# ALLOW_SAME_CHARACTER_RESPAWN
|
||||
|
||||
## Observing is considered a respawn for the purposes of role lockouts. Defaults to disabled. When disabled, only RESPAWNING rather than returning from observe locks you out.
|
||||
# RESPAWN_PENALTY_INCLUDES_OBSERVE
|
||||
## Observing is considered a respawn for the purposes of role lockouts. Defaults to disabled. When disabled, only RESPAWNING rather than returning from observer locks you out.
|
||||
RESPAWN_PENALTY_INCLUDES_OBSERVE
|
||||
|
||||
## Time in minutes from round start before respawn is enabled
|
||||
RESPAWN_MINIMUM_DELAY_ROUNDSTART 30.0
|
||||
@@ -0,0 +1,38 @@
|
||||
### FAIL2TOPIC:
|
||||
### Automated IP bans for world/Topic() spammers
|
||||
### NOTE FOR WINDOWS HOSTS: This requires you to be running dreamdaemon as an administrator for it to work at all. TGS3 handles this automatically, and honestly there's no reason not to be using TGS3 if you're hosting on Windows.
|
||||
### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing.
|
||||
## Enabled
|
||||
#FAIL2TOPIC_ENABLED
|
||||
## Minimum wait time in deciseconds between valid requests
|
||||
FAIL2TOPIC_RATE_LIMIT 10
|
||||
## Number of requests after breaching rate limit that triggers a ban
|
||||
FAIL2TOPIC_MAX_FAILS 5
|
||||
## Firewall rule name used on physical server
|
||||
## FOR LINUX HOSTS: This is used as the chain name. The iptables chain doesn't get created or hooked up to INPUT automatically, so you'll have to get that set up yourself. Recommended name: BYOND
|
||||
@FAIL2TOPIC_RULE_NAME _dd_fail2topic
|
||||
|
||||
## Topic max size before it's rejected, using BYOND length()
|
||||
TOPIC_MAX_SIZE 8192
|
||||
|
||||
## Fail2topic rate limit whitelist. Using any external IPs is not recommended.
|
||||
# TOPIC_RATE_LIMIT_WHITELIST 127.0.0.1:1337
|
||||
|
||||
## TOPIC RATE LIMITING
|
||||
## This allows you to limit how many topic calls (clicking on an interface window) the client can do in any given game second and/or game minute.
|
||||
## Admins are exempt from these limits.
|
||||
## Hitting the minute limit notifies admins.
|
||||
## Set to 0 or comment out to disable.
|
||||
SECOND_TOPIC_LIMIT 10
|
||||
|
||||
MINUTE_TOPIC_LIMIT 100
|
||||
|
||||
## CLICK RATE LIMITING
|
||||
## Same as above, but applies to clicking on objects in the game window.
|
||||
## This should be a higher then the interface limit to allow for the spam clickly nature of most battles.
|
||||
## Admins are exempt from these limits.
|
||||
## Hitting the minute limit notifies admins.
|
||||
## Set to 0 to disable.
|
||||
SECOND_CLICK_LIMIT 15
|
||||
|
||||
MINUTE_CLICK_LIMIT 400
|
||||
@@ -0,0 +1,68 @@
|
||||
## Enable automatic profiling - Byond 513.1506 and newer only.
|
||||
#AUTO_PROFILE
|
||||
|
||||
## Server name: This appears at the top of the screen in-game and in the BYOND hub. Uncomment and replace 'tgstation' with the name of your choice.
|
||||
# SERVERNAME tgstation
|
||||
|
||||
## Server tagline: This will appear right below the server's title.
|
||||
# SERVERTAGLINE A generic TG-based server
|
||||
|
||||
## Server SQL name: This is the name used to identify the server to the SQL DB, distinct from SERVERNAME as it must be at most 32 characters.
|
||||
# SERVERSQLNAME tgstation
|
||||
|
||||
## Station name: The name of the station as it is referred to in-game. If commented out, the game will generate a random name instead.
|
||||
STATIONNAME Space Station 13
|
||||
|
||||
## Put on byond hub: Uncomment this to put your server on the byond hub.
|
||||
#HUB
|
||||
|
||||
## Defines the ticklimit for subsystem initialization (In percents of a byond tick). Lower makes world start smoother. Higher makes it faster.
|
||||
##This is currently a testing optimized setting. A good value for production would be 98.
|
||||
TICK_LIMIT_MC_INIT 500
|
||||
|
||||
##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second).
|
||||
## This also controls the client network update rate, as well as the default client fps
|
||||
TICKLAG 0.5
|
||||
|
||||
##Can also be set as per-second value, the following value is identical to the above.
|
||||
#FPS 20
|
||||
|
||||
## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server
|
||||
#USEWHITELIST
|
||||
|
||||
## set a hosted by name for unix platforms
|
||||
HOSTEDBY Yournamehere
|
||||
|
||||
## System command that invokes youtube-dl, used by Play Internet Sound.
|
||||
## You can install youtube-dl with
|
||||
## "pip install youtube-dl" if you have pip installed
|
||||
## from https://github.com/rg3/youtube-dl/releases
|
||||
## or your package manager
|
||||
## The default value assumes youtube-dl is in your system PATH
|
||||
# INVOKE_YOUTUBEDL youtube-dl
|
||||
|
||||
###Master Controller High Pop Mode###
|
||||
|
||||
##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc)
|
||||
##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc)
|
||||
## Setting this to 0 will prevent the Master Controller from ticking
|
||||
BASE_MC_TICK_RATE 1
|
||||
|
||||
##High population MC tick rate
|
||||
## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2
|
||||
## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like
|
||||
## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%.
|
||||
## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5)
|
||||
HIGH_POP_MC_TICK_RATE 1.1
|
||||
|
||||
##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count)
|
||||
HIGH_POP_MC_MODE_AMOUNT 65
|
||||
|
||||
##Disengage high pop mode if player count drops below this
|
||||
DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
|
||||
|
||||
## Uncomment to prevent the world from sleeping while no players are connected after initializations
|
||||
#RESUME_AFTER_INITIALIZATIONS
|
||||
|
||||
## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools.
|
||||
#ROUNDS_UNTIL_HARD_RESTART 10
|
||||
@@ -0,0 +1,28 @@
|
||||
## haha these keys are going to collide with other stuff for sure someday
|
||||
|
||||
## OUT_OF_COMBAT_TIMER, PERCENT_REGENERATION_OUT_OF_COMBAT disabled - combat mode has been yanked from the codebase and made a UI toggle.
|
||||
|
||||
## Maximum stamina buffer
|
||||
BUFFER_MAX 25
|
||||
|
||||
## Seconds until out of combat regen kicks in
|
||||
# OUT_OF_COMBAT_TIMER 15
|
||||
|
||||
## Base regen per second
|
||||
BASE_REGENERATION 3.5
|
||||
|
||||
## Regenerate this % of total buffer when out of combat
|
||||
# PERCENT_REGENERATION_OUT_OF_COMBAT
|
||||
|
||||
## Seconds after an action for which regeneration is penalized
|
||||
POST_ACTION_PENALTY_DELAY 5
|
||||
|
||||
## Factor to multiply by for penalizing post action regen
|
||||
POST_ACTION_PENALTY_FACTOR 0.25
|
||||
|
||||
## Factor to multiply by for stamina usage past buffer into health
|
||||
OVERDRAW_PENALTY_FACTOR 1.5
|
||||
|
||||
## Completely disable stamina combat by giving people infinite buffers.
|
||||
## Has serious balance implications.
|
||||
# DISABLE_STAMBUFFER
|
||||
@@ -6,4 +6,4 @@
|
||||
|
||||
## Custom antag threat values, see above
|
||||
## e.g.
|
||||
## ANTAG_THREAT Traitor 5
|
||||
## ANTAG_THREAT Traitor 5
|
||||
@@ -0,0 +1,37 @@
|
||||
## set a server location for world reboot. Don't include the byond://, just give the address and port.
|
||||
## Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted.
|
||||
# SERVER ss13.example.com:2506
|
||||
|
||||
## forum address
|
||||
# FORUMURL https://citadel-station.net/forum/
|
||||
|
||||
## Wiki address
|
||||
# WIKIURL https://citadel-station.net/wikimain/index.php
|
||||
|
||||
## Wiki address of upstream
|
||||
WIKIURLTG http://www.tgstation13.org/wiki
|
||||
|
||||
## Rules address
|
||||
# RULESURL https://citadel-station.net/wikimain/index.php?title=Rules_-_Main
|
||||
|
||||
## Github address
|
||||
# GITHUBURL https://github.com/Citadel-Station-13/Citadel-Station-13
|
||||
|
||||
## Round specific stats address
|
||||
## Link to round specific parsed logs; IE statbus. It is appended with the RoundID automatically by ticker/Reboot()
|
||||
## This will take priority over the game logs address during reboot.
|
||||
## Example: https://atlantaned.space/statbus/round.php?round=
|
||||
# ROUNDSTATSURL http://citadel-station.net/slimbus/
|
||||
|
||||
## Game Logs address
|
||||
## Incase you don't have a fancy parsing system, but still want players to be able to find where you keep your server's logs.
|
||||
## Example: https://tgstation13.org/parsed-logs/basil/data/logs/
|
||||
# GAMELOGURL
|
||||
|
||||
## Github repo id
|
||||
##This can be found by going to https://api.github.com/users/<user name here>/repos
|
||||
##Or https://api.github.com/orgs/<org name here>/repos if the repo owner is an organization
|
||||
# GITHUBREPOID 62485194
|
||||
|
||||
## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
|
||||
# BANAPPEALS https://citadel-station.net/forum/viewforum.php?f=8&sid=a0ce5331d5594ef6d49661609c6f4ff9
|
||||
@@ -0,0 +1,67 @@
|
||||
## allow players to initiate a restart vote
|
||||
#ALLOW_VOTE_RESTART
|
||||
|
||||
## allow players to initate a mode-change start
|
||||
#ALLOW_VOTE_MODE
|
||||
|
||||
## min delay (deciseconds) between voting sessions (default 10 minutes)
|
||||
VOTE_DELAY 6000
|
||||
|
||||
## time period (deciseconds) which voting session will last (default 1 minute)
|
||||
VOTE_PERIOD 600
|
||||
|
||||
## autovote initial delay (deciseconds) before first automatic transfer vote call (default 120 minutes)
|
||||
## Set to 0 to disable the subsystem altogether.
|
||||
VOTE_AUTOTRANSFER_INITIAL 72000
|
||||
|
||||
## autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes)
|
||||
VOTE_AUTOTRANSFER_INTERVAL 18000
|
||||
|
||||
## autovote maximum votes until automatic transfer call. (default 4)
|
||||
## Set to 0 to force automatic crew transfer after the 'vote_autotransfer_initial' elapsed.
|
||||
## Set to -1 to disable the maximum votes cap.
|
||||
VOTE_AUTOTRANSFER_MAXIMUM 4
|
||||
|
||||
## prevents dead players from voting or starting votes
|
||||
# NO_DEAD_VOTE
|
||||
|
||||
## players' votes default to "No vote" (otherwise, default to "No change")
|
||||
# DEFAULT_NO_VOTE
|
||||
|
||||
## Map rotation
|
||||
## You should edit maps.txt to match your configuration when you enable this.
|
||||
MAPROTATION
|
||||
|
||||
## TG-style map rotation
|
||||
## By default, Citadel uses a more traditional method of map voting, where at the end of a round, players are given a full upfront vote.
|
||||
## This PR will disable that, and will make the server use TG's map rotation instead.
|
||||
#TGSTYLE_MAPROTATION
|
||||
|
||||
## Map voting
|
||||
## Allows players to vote for their preffered map
|
||||
## When it's set to zero, the map will be randomly picked each round
|
||||
ALLOW_MAP_VOTING 1
|
||||
|
||||
## Map voting type
|
||||
## Determines what kind of vote the map vote is
|
||||
## Options are:
|
||||
## PLURALITY (default, only vote for one option)
|
||||
## APPROVAL (can vote for as many as you want), I
|
||||
## IRV (vote by ranked choice, winner determined by instant runoff algorithm)
|
||||
## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm)
|
||||
MAP_VOTE_TYPE APPROVAL
|
||||
|
||||
## Map rotate chance delta
|
||||
## This is the chance of map rotation factored to the round length.
|
||||
## A value of 1 would mean the map rotation chance is the round length in minutes (hour long round == 60% rotation chance)
|
||||
## A value of 0.5 would mean the map rotation chance is half of the round length in minutes (hour long round == 30% rotation chance)
|
||||
#MAPROTATIONCHANCEDELTA 0.75
|
||||
|
||||
## Whether or not there's a mode tier list vote after the secret/extended vote.
|
||||
MODETIER_VOTING
|
||||
|
||||
## Number of modes dropped by the modetier vote during mode selection, after vote.
|
||||
DROPPED_MODES 3
|
||||
|
||||
## Whether or not you must be readied up to vote gamemode
|
||||
#MUST_BE_READIED_TO_VOTE_GAMEMODE
|
||||
@@ -1,16 +0,0 @@
|
||||
## Policy configuration
|
||||
## Current valid keys are:
|
||||
## ON_CLONE - displayed after a successful cloning operation to the cloned person
|
||||
## ON_DEFIB_INTACT - displayed after defibbing before memory loss time threshold
|
||||
## ON_DEFIB_LATE - displayed after defibbing post memory loss time threshold
|
||||
## SDGF - displayed on SDGF clone spawning
|
||||
## SDGF_GOOD - displayed on SDGF clone spawning, if the clone is loyal
|
||||
## SDGF_BAD - displayed on SDGF clone spawning, if the clone is not loyal
|
||||
## PAI - displayed on PAI personality being loaded
|
||||
## EXAMPLE:
|
||||
## POLICYCONFIG ON_CLONE insert text here <span class='notice'>span classes are fully supported</span>
|
||||
|
||||
## Misc entries for above
|
||||
|
||||
## Defib time limit for "cloning memory disorder" memory loss in seconds
|
||||
# DEFIB_CMD_TIME_LIMIT 300
|
||||
@@ -109,7 +109,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
ZI.Insert(SM)
|
||||
log_reagent("FERMICHEM: [M] ckey: [M.key]'s zombie_infection has been transferred to their clone")
|
||||
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/policy = policies[POLICYCONFIG_SDGF]
|
||||
if(policy)
|
||||
to_chat(SM,policy)
|
||||
@@ -127,7 +127,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
else
|
||||
to_chat(SM, "<span class='userdanger'>While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original.</span>")
|
||||
log_reagent("FERMICHEM: [SM] ckey: [SM.key]'s is not bound by [M] ckey [M.key]'s will, and is free to determine their own goals, while respecting and acting as their origin.")
|
||||
|
||||
|
||||
to_chat(SM, "<span class='warning'>You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with your original, a perfect clone of your origin.</span>")
|
||||
SM.client?.change_view(CONFIG_GET(string/default_view))
|
||||
to_chat(M, "<span class='warning'>You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, a mass splits from you, and find yourself face to face with yourself.</span>")
|
||||
|
||||
+15
-2
@@ -109,6 +109,7 @@
|
||||
#include "code\__DEFINES\sight.dm"
|
||||
#include "code\__DEFINES\sound.dm"
|
||||
#include "code\__DEFINES\spaceman_dmm.dm"
|
||||
#include "code\__DEFINES\spans.dm"
|
||||
#include "code\__DEFINES\species.dm"
|
||||
#include "code\__DEFINES\stat.dm"
|
||||
#include "code\__DEFINES\stat_tracking.dm"
|
||||
@@ -291,20 +292,32 @@
|
||||
#include "code\controllers\subsystem.dm"
|
||||
#include "code\controllers\configuration\config_entry.dm"
|
||||
#include "code\controllers\configuration\configuration.dm"
|
||||
#include "code\controllers\configuration\entries\admin.dm"
|
||||
#include "code\controllers\configuration\entries\alert.dm"
|
||||
#include "code\controllers\configuration\entries\antag_rep.dm"
|
||||
#include "code\controllers\configuration\entries\comms.dm"
|
||||
#include "code\controllers\configuration\entries\connections.dm"
|
||||
#include "code\controllers\configuration\entries\dbconfig.dm"
|
||||
#include "code\controllers\configuration\entries\debris.dm"
|
||||
#include "code\controllers\configuration\entries\donator.dm"
|
||||
#include "code\controllers\configuration\entries\dynamic.dm"
|
||||
#include "code\controllers\configuration\entries\fail2topic.dm"
|
||||
#include "code\controllers\configuration\entries\game_options.dm"
|
||||
#include "code\controllers\configuration\entries\fetish_content.dm"
|
||||
#include "code\controllers\configuration\entries\gamemodes.dm"
|
||||
#include "code\controllers\configuration\entries\general.dm"
|
||||
#include "code\controllers\configuration\entries\jexp.dm"
|
||||
#include "code\controllers\configuration\entries\logging.dm"
|
||||
#include "code\controllers\configuration\entries\movespeed.dm"
|
||||
#include "code\controllers\configuration\entries\persistence.dm"
|
||||
#include "code\controllers\configuration\entries\plushies.dm"
|
||||
#include "code\controllers\configuration\entries\policy.dm"
|
||||
#include "code\controllers\configuration\entries\resources.dm"
|
||||
#include "code\controllers\configuration\entries\respawns.dm"
|
||||
#include "code\controllers\configuration\entries\security.dm"
|
||||
#include "code\controllers\configuration\entries\server.dm"
|
||||
#include "code\controllers\configuration\entries\stamina_combat.dm"
|
||||
#include "code\controllers\configuration\entries\threat.dm"
|
||||
#include "code\controllers\configuration\entries\urls.dm"
|
||||
#include "code\controllers\configuration\entries\vote.dm"
|
||||
#include "code\controllers\subsystem\achievements.dm"
|
||||
#include "code\controllers\subsystem\activity.dm"
|
||||
#include "code\controllers\subsystem\adjacent_air.dm"
|
||||
|
||||
Reference in New Issue
Block a user