Merge pull request #14902 from silicons/combat_patches_1

misc patches, fixes, some small refactors
This commit is contained in:
Lin
2021-07-22 00:53:03 -07:00
committed by GitHub
89 changed files with 2510 additions and 2076 deletions
+114
View File
@@ -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>")
+6
View File
@@ -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
+275 -383
View File
@@ -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(..())
@@ -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
+1 -1
View File
@@ -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
+17
View File
@@ -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.
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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]
+1 -1
View File
@@ -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)
+11 -7
View File
@@ -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
+11 -11
View File
@@ -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
+45 -9
View File
@@ -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
+9 -6
View File
@@ -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)
+92 -64
View File
@@ -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
+1 -1
View File
@@ -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]
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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]
+2 -2
View File
@@ -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.
+64 -41
View File
@@ -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//////////
//////////////////////////////////////
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
-5
View File
@@ -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
View File
@@ -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
-8
View File
@@ -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
+79
View File
@@ -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
+13
View File
@@ -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
+19
View File
@@ -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.
+93
View File
@@ -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
+8
View File
@@ -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
+11
View File
@@ -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
+33
View File
@@ -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
+178
View File
@@ -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
+23
View File
@@ -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
+85
View File
@@ -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
+56
View File
@@ -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
+24
View File
@@ -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
+38
View File
@@ -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
+68
View File
@@ -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
+28
View File
@@ -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
+37
View File
@@ -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
+67
View File
@@ -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
View File
-16
View File
@@ -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
View File
@@ -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"