master files standards cleanup (#13693)

* master files code formatting standards

* replace spaces with tabs IN MASTER FILES and add spaces after comments
This commit is contained in:
Tom
2022-05-23 11:39:14 +01:00
committed by GitHub
parent 9d4b4e8816
commit acba80306c
83 changed files with 535 additions and 535 deletions
@@ -1,4 +1,4 @@
//LOOC Module
// LOOC Module
GLOBAL_VAR_INIT(looc_allowed, TRUE)
/datum/config_entry/number/rockplanet_budget
@@ -1,6 +1,6 @@
GLOBAL_LIST_INIT(common_loot, list( //common: basic items
list( //Tiles
GLOBAL_LIST_INIT(common_loot, list( // common: basic items
list( // Tiles
/obj/item/stack/sheet/bronze/thirty,
/obj/item/stack/tile/carpet/black/fifty = 25,
/obj/item/stack/tile/carpet/blue/fifty = 25,
@@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/stack/tile/fakepit/loaded = 10,
/obj/item/stack/tile/fakespace/loaded = 10
) = 50,
list( //Cash money
list( // Cash money
/obj/item/stack/spacecash/c1 = 256,
/obj/item/stack/spacecash/c10 = 128,
/obj/item/stack/spacecash/c20 = 64,
@@ -30,7 +30,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/stack/spacecash/c1000 = 2,
/obj/item/stack/spacecash/c10000 = 1
) = 200,
list( //Construction Material
list( // Construction Material
/obj/item/stack/ore/glass = 25,
/obj/item/stack/ore/iron = 25,
/obj/item/stack/package_wrap = 25,
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/stack/sheet/sandblock/five = 25,
/obj/item/stack/sheet/sandblock/twenty = 25,
) = 100,
list( //Hides and fluff stuff
list( // Hides and fluff stuff
/obj/item/stack/sheet/animalhide/cat = 25,
/obj/item/stack/sheet/animalhide/corgi = 25,
/obj/item/stack/sheet/animalhide/generic = 50,
@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/stack/sheet/xenochitin = 10,
/obj/item/stack/sheet/sinew = 10
) = 50,
list( //Medical stuff
list( // Medical stuff
/obj/item/stock_parts/cell/lead = 25,
/obj/item/healthanalyzer = 25,
/obj/item/healthanalyzer/wound = 50,
@@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/storage/medkit/toxin = 25,
/obj/item/lead_pipe = 25,
) = 100,
list( //Tools you'd get in tool storage and elsewhere
list( // Tools you'd get in tool storage and elsewhere
/obj/item/screwdriver = 100,
/obj/item/analyzer = 75,
/obj/item/assembly/health = 25,
@@ -140,7 +140,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/wirecutters = 100,
/obj/item/wrench = 100
) = 200,
list( //Stuff you'd get elsewhere but they're not that good
list( // Stuff you'd get elsewhere but they're not that good
/obj/item/binoculars = 50,
/obj/item/bodybag = 200,
/obj/item/clothing/gloves/radio = 25,
@@ -177,7 +177,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/watertank/atmos = 5,
/obj/item/watertank/janitor = 5
) = 75,
list( //FAKE insuls.
list( // FAKE insuls.
/obj/item/clothing/gloves/color/fyellow = 100,
/obj/item/clothing/gloves/color/fyellow/old = 10,
/obj/item/clothing/gloves/color/red = 50,
@@ -185,7 +185,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/clothing/gloves/fingerless = 75,
/obj/item/clothing/gloves/tackler/offbrand = 100,
) = 300,
list( //Toys, cosmetics, and vanity items.
list( // Toys, cosmetics, and vanity items.
/obj/item/bikehorn/rubberducky/plasticducky = 25,
/obj/item/cardpack/resin = 25,
/obj/item/cardpack/series_one = 25,
@@ -280,7 +280,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/toy/xmas_cracker = 5,
/obj/item/training_toolbox = 5
) = 100,
list( //Instruments
list( // Instruments
/obj/item/instrument/accordion = 1,
/obj/item/instrument/banjo = 1,
/obj/item/instrument/bikehorn = 1,
@@ -296,7 +296,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/instrument/trumpet = 1,
/obj/item/instrument/violin = 1
) = 50,
list( //Unimportant clothing
list( // Unimportant clothing
/obj/item/clothing/accessory/clown_enjoyer_pin = 25,
/obj/item/clothing/accessory/mime_fan_pin = 25,
/obj/item/clothing/accessory/lawyers_badge = 5,
@@ -345,7 +345,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/clothing/under/shorts/polychromic/pantsu = 100,
/obj/item/clothing/suit/hooded/wintercoat/polychromic = 100
) = 100,
list( //Stuff you'd find in maint but like not really
list( // Stuff you'd find in maint but like not really
/obj/item/food/meat/slab/human = 1,
/obj/item/food/meat/slab/human/mutant/ethereal = 1,
/obj/item/food/meat/slab/human/mutant/fly = 1,
@@ -1,5 +1,5 @@
GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items
GLOBAL_LIST_INIT(oddity_loot, list(// oddity: strange or crazy items
/obj/item/abductor/silencer = 25,
/obj/item/abductor/gizmo = 25,
/obj/item/abductor_machine_beacon/chem_dispenser = 25,
@@ -1,5 +1,5 @@
GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto chemistry items
GLOBAL_LIST_INIT(trash_loot, list(// junk: useless, very easy to get, or ghetto chemistry items
list(// literal trash
/obj/item/broken_bottle = 50,
/obj/item/cigbutt = 50,
@@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/trash/tray = 25,
/obj/item/trash/waffles = 25
) = 100,
list(//not so literal trash
list(// not so literal trash
/obj/item/c_tube = 25,
/obj/item/candle = 50,
/obj/item/stack/pipe_cleaner_coil/random = 5,
@@ -87,7 +87,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/toner = 25,
/obj/item/wirerod = 100
) = 75,
list( //Common maint stuff. Stuff for the greytide.
list( // Common maint stuff. Stuff for the greytide.
/obj/item/airlock_painter = 25,
/obj/item/airlock_painter/decal = 25,
/obj/item/book/manual/random = 200,
@@ -218,7 +218,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/weaponcrafting/receiver = 50,
/obj/item/weaponcrafting/stock = 50
) = 300,
list( //Random meh items
list( // Random meh items
/obj/item/bouquet/poppy = 10,
/obj/item/bouquet/sunflower = 10,
/obj/item/bouquet = 10,
@@ -267,7 +267,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/storage/secure/briefcase = 50,
/obj/item/food/grown/random = 300
) = 100,
list( //Trash but I don't want to make so much of it.
list( // Trash but I don't want to make so much of it.
/obj/item/kirbyplants/random = 200,
/obj/item/flashlight/lamp = 200,
/obj/item/food/sausage/american = 50,
@@ -308,7 +308,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/storage/fancy/rollingpapers = 50,
/obj/item/wheelchair = 25
) = 50,
list( //Circuits
list( // Circuits
/obj/item/electronics/airalarm = 100,
/obj/item/electronics/airlock = 100,
/obj/item/electronics/apc = 100,
@@ -316,7 +316,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/electronics/firelock = 25,
/obj/item/electronics/tracker = 25
) = 50,
list( //Smoking
list( // Smoking
/obj/item/storage/fancy/cigarettes = 100,
/obj/item/storage/fancy/cigarettes/cigars = 50,
/obj/item/storage/fancy/cigarettes/cigars/cohiba = 25,
@@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c
/obj/item/storage/fancy/cigarettes/cigpack_xeno = 5,
/obj/item/storage/fancy/cigarettes/dromedaryco = 25
) = 10,
list( //Stock parts
list( // Stock parts
/obj/item/stock_parts/capacitor = 100,
/obj/item/stock_parts/capacitor/adv = 50,
/obj/item/stock_parts/cell = 100,
@@ -1,6 +1,6 @@
GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
list( //Skillchips
GLOBAL_LIST_INIT(uncommon_loot, list(// uncommon: useful items
list( // Skillchips
/obj/item/skillchip/basketweaving = 50,
/obj/item/skillchip/bonsai = 100,
/obj/item/skillchip/disk_verifier = 1,
@@ -10,7 +10,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/skillchip/useless_adapter = 25,
/obj/item/skillchip/wine_taster = 50
) = 50,
list( //Collectable hats!
list( // Collectable hats!
/obj/item/clothing/head/collectable/beret = 1,
/obj/item/clothing/head/collectable/captain = 1,
/obj/item/clothing/head/collectable/chef = 1,
@@ -32,14 +32,14 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/clothing/head/collectable/wizard = 1,
/obj/item/clothing/head/collectable/xenom = 1,
) = 50,
list( //Cartridges
list( // Cartridges
/obj/item/computer_hardware/hard_drive/portable/command/captain = 1,
/obj/item/computer_hardware/hard_drive/portable/command/cmo = 1,
/obj/item/computer_hardware/hard_drive/portable/command/rd = 1,
/obj/item/computer_hardware/hard_drive/portable/command/ce = 1,
/obj/item/computer_hardware/hard_drive/portable/command/hos = 1,
) = 50,
list( //Bot assemblies
list( // Bot assemblies
/obj/item/bot_assembly/cleanbot = 1,
/obj/item/bot_assembly/ed209 = 1,
/obj/item/bot_assembly/firebot = 1,
@@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/bot_assembly/medbot = 1,
/obj/item/bot_assembly/secbot = 1
) = 50,
list( //Surgery stuff
list( // Surgery stuff
/obj/item/bonesetter = 1,
/obj/item/cautery = 1,
/obj/item/circular_saw = 1,
@@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/surgical_processor = 1,
/obj/item/surgicaldrill = 1
) = 50,
list( //Very useful tools and equipment
list( // Very useful tools and equipment
/obj/item/anomaly_neutralizer = 5,
/obj/item/assembly/flash = 50,
/obj/item/clothing/glasses/material = 100,
@@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/toy/cards/deck/syndicate = 5,
/obj/item/wormhole_jaunter = 5
) = 200,
list( //Ammo
list( // Ammo
/obj/item/ammo_casing/shotgun/beanbag = 50,
/obj/item/ammo_casing/shotgun/buckshot = 50,
/obj/item/ammo_casing/shotgun/improvised = 200,
@@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/taster = 25,
/obj/item/disk/holodisk/woospider = 25
) = 50,
list( //Meme-level injectors
list( // Meme-level injectors
/obj/item/dnainjector/chavmut = 1,
/obj/item/dnainjector/clumsymut = 1,
/obj/item/dnainjector/dwarf = 1,
@@ -214,7 +214,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/dnainjector/wackymut = 1
) = 50,
list( //Strong as fuck injectors
list( // Strong as fuck injectors
/obj/item/dnainjector/timed/hulk = 1,
/obj/item/dnainjector/insulated = 1,
/obj/item/dnainjector/olfaction = 1,
@@ -222,13 +222,13 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/dnainjector/thermal = 1,
/obj/item/dnainjector/void = 1
) = 25,
list( //INSULS!
list( // INSULS!
/obj/item/clothing/gloves/color/yellow = 100,
/obj/item/clothing/gloves/combat = 10,
/obj/item/clothing/gloves/color/red/insulated = 50,
/obj/item/clothing/gloves/tackler/combat/insulated = 5,
) = 25,
list( //Fake objects meant to trick players into thinking they're other items.
list( // Fake objects meant to trick players into thinking they're other items.
/obj/item/fakeartefact = 100,
/obj/item/card/emagfake = 25,
/obj/item/cardboard_cutout = 25,
@@ -255,14 +255,14 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/storage/belt/holster = 25,
/obj/item/storage/box/fakesyndiesuit = 25
) = 100,
list( //Improvised weapons and tools that are weapons.
list( // Improvised weapons and tools that are weapons.
/obj/item/gun/ballistic/revolver/rifle/improvised = 100,
/obj/item/gun/ballistic/rifle/boltaction/pipegun = 100,
/obj/item/scythe = 25,
/obj/item/throwing_star = 5,
/obj/item/throwing_star/stamina = 5
) = 5,
list( //Chameleon gear
list( // Chameleon gear
/obj/item/clothing/glasses/chameleon = 1,
/obj/item/clothing/glasses/chameleon/broken = 1,
/obj/item/clothing/gloves/chameleon = 1,
@@ -290,18 +290,18 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/storage/belt/holster/chameleon = 1,
/obj/item/storage/belt/holster/chameleon/broken = 1
) = 5,
list( //Department analyzers
list( // Department analyzers
/obj/item/clothing/glasses/hud/diagnostic = 1,
/obj/item/clothing/glasses/hud/health = 1,
/obj/item/clothing/glasses/hud/security = 1,
/obj/item/clothing/glasses/night = 1
) = 75,
list( //Potion seller, give me your strongest potions
list( // Potion seller, give me your strongest potions
/obj/item/eldritch_potion/crucible_soul = 1,
/obj/item/eldritch_potion/duskndawn = 1,
/obj/item/eldritch_potion/wounded = 1
) = 1,
list( //Modsuits
list( // Modsuits
/obj/item/mod/construction/broken_core = 1,
/obj/effect/spawner/random/mod/maint = 3,
) = 25
@@ -1,4 +1,4 @@
//Loot pool used by default maintenance loot spawners
// Loot pool used by default maintenance loot spawners
GLOBAL_LIST_INIT(maintenance_loot, list(
GLOB.trash_loot = MAINT_TRASH_WEIGHT,
GLOB.common_loot = MAINT_COMMON_WEIGHT,
@@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
GLOB.oddity_loot = MAINT_ODD_WEIGHT,
))
GLOBAL_LIST_INIT(ratking_trash, list(//Garbage: used by the regal rat mob when spawning garbage.
GLOBAL_LIST_INIT(ratking_trash, list(// Garbage: used by the regal rat mob when spawning garbage.
/obj/item/cigbutt,
/obj/item/trash/cheesie,
/obj/item/trash/candy,
@@ -18,7 +18,7 @@ GLOBAL_LIST_INIT(ratking_trash, list(//Garbage: used by the regal rat mob when s
/obj/item/trash/syndi_cakes
))
GLOBAL_LIST_INIT(ratking_coins, list(//Coins: Used by the regal rat mob when spawning coins.
GLOBAL_LIST_INIT(ratking_coins, list(// Coins: Used by the regal rat mob when spawning coins.
/obj/item/coin/iron,
/obj/item/coin/silver,
/obj/item/coin/plastic,
@@ -1,4 +1,4 @@
//Lets cyborgs drag pulled objects
// Lets cyborgs drag pulled objects
/atom/proc/attack_robot(mob/user)
if((isturf(src) || istype(src, /obj/structure/table) || istype(src, /obj/machinery/conveyor)) && get_dist(user, src) <= 1)
user.Move_Pulled(src)
@@ -2,7 +2,7 @@
config_entry_value = "You remember nothing after you've blacked out and you do not remember who or what events killed you, however, you can have faint recollection of what led up to it."
/datum/config_entry/string/wikiurlskyrat
config_entry_value = "https://skyrat13.tk/wiki/index.php"
config_entry_value = "https:// skyrat13.tk/wiki/index.php"
/datum/config_entry/flag/russian_text_formation
@@ -24,11 +24,11 @@
// Name of our server, ooc.
/datum/config_entry/string/cross_server_name
//DISCORD GAME ALERT CONFIGS
//Role id to ping
// DISCORD GAME ALERT CONFIGS
// Role id to ping
/datum/config_entry/string/game_alert_role_id
//Reaction roles channel
// Reaction roles channel
/datum/config_entry/string/role_assign_channel_id
// To turn off SSDecay based on a config. You're welcome.
@@ -5,11 +5,11 @@
var/client/clicker
var/mob/living/shooter
var/atom/target
var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/turf/target_loc // For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/autofire_stat = AUTOFIRE_STAT_IDLE
var/mouse_parameters
var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots.
var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
var/autofire_shot_delay = 0.3 SECONDS // Time between individual shots.
var/mouse_status = AUTOFIRE_MOUSEUP // This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
COOLDOWN_DECLARE(next_shot_cd)
@@ -48,9 +48,9 @@
/datum/component/automatic_fire/proc/wake_up(datum/source, mob/user, slot)
SIGNAL_HANDLER
if(autofire_stat & (AUTOFIRE_STAT_ALERT))
return //We've updated the firemode. No need for more.
return // We've updated the firemode. No need for more.
if(autofire_stat & AUTOFIRE_STAT_FIRING)
stop_autofiring() //Let's stop shooting to avoid issues.
stop_autofiring() // Let's stop shooting to avoid issues.
return
var/obj/item/gun/parent_gun = parent
@@ -89,7 +89,7 @@
if(!QDELETED(clicker))
UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG))
mouse_status = AUTOFIRE_MOUSEUP //In regards to the component there's no click anymore to care about.
mouse_status = AUTOFIRE_MOUSEUP // In regards to the component there's no click anymore to care about.
clicker = null
RegisterSignal(shooter, COMSIG_MOB_LOGIN, .proc/on_client_login)
if(!QDELETED(shooter))
@@ -108,7 +108,7 @@
/datum/component/automatic_fire/proc/on_mouse_down(client/source, atom/_target, turf/location, control, params)
SIGNAL_HANDLER
var/list/modifiers = params2list(params) //If they're shift+clicking, for example, let's not have them accidentally shoot.
var/list/modifiers = params2list(params) // If they're shift+clicking, for example, let's not have them accidentally shoot.
if(LAZYACCESS(modifiers, SHIFT_CLICK))
return
@@ -122,14 +122,14 @@
return
if(source.mob.throw_mode)
return
if(!isturf(source.mob.loc)) //No firing inside lockers and stuff.
if(!isturf(source.mob.loc)) // No firing inside lockers and stuff.
return
if(get_dist(source.mob, _target) < 2) //Adjacent clicking.
if(get_dist(source.mob, _target) < 2) // Adjacent clicking.
return
if(isnull(location) || istype(_target, /atom/movable/screen)) //Clicking on a screen object.
if(_target.plane != CLICKCATCHER_PLANE) //The clickcatcher is a special case. We want the click to trigger then, under it.
return //If we click and drag on our worn backpack, for example, we want it to open instead.
if(isnull(location) || istype(_target, /atom/movable/screen)) // Clicking on a screen object.
if(_target.plane != CLICKCATCHER_PLANE) // The clickcatcher is a special case. We want the click to trigger then, under it.
return // If we click and drag on our worn backpack, for example, we want it to open instead.
_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)
params = list2params(modifiers)
if(!_target)
@@ -138,12 +138,12 @@
if(SEND_SIGNAL(src, COMSIG_AUTOFIRE_ONMOUSEDOWN, source, _target, location, control, params) & COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS)
return
source.click_intercept_time = world.time //From this point onwards Click() will no longer be triggered.
source.click_intercept_time = world.time // From this point onwards Click() will no longer be triggered.
if(autofire_stat & (AUTOFIRE_STAT_IDLE))
CRASH("on_mouse_down() called with [autofire_stat] autofire_stat")
if(autofire_stat & AUTOFIRE_STAT_FIRING)
stop_autofiring() //This can happen if we click and hold and then alt+tab, printscreen or other such action. MouseUp won't be called then and it will keep autofiring.
stop_autofiring() // This can happen if we click and hold and then alt+tab, printscreen or other such action. MouseUp won't be called then and it will keep autofiring.
target = _target
target_loc = get_turf(target)
@@ -151,17 +151,17 @@
start_autofiring()
//Dakka-dakka
// Dakka-dakka
/datum/component/automatic_fire/proc/start_autofiring()
if(autofire_stat == AUTOFIRE_STAT_FIRING)
return //Already pew-pewing.
return // Already pew-pewing.
autofire_stat = AUTOFIRE_STAT_FIRING
clicker.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi'
clicker.mouse_pointer_icon = clicker.mouse_override_icon
if(mouse_status == AUTOFIRE_MOUSEUP) //See mouse_status definition for the reason for this.
if(mouse_status == AUTOFIRE_MOUSEUP) // See mouse_status definition for the reason for this.
RegisterSignal(clicker, COMSIG_CLIENT_MOUSEUP, .proc/on_mouse_up)
mouse_status = AUTOFIRE_MOUSEDOWN
@@ -169,14 +169,14 @@
if(isgun(parent))
var/obj/item/gun/shoota = parent
if(!shoota.on_autofire_start(shooter)) //This is needed because the minigun has a do_after before firing and signals are async.
if(!shoota.on_autofire_start(shooter)) // This is needed because the minigun has a do_after before firing and signals are async.
stop_autofiring()
return
if(autofire_stat != AUTOFIRE_STAT_FIRING)
return //Things may have changed while on_autofire_start() was being processed, due to do_after's sleep.
return // Things may have changed while on_autofire_start() was being processed, due to do_after's sleep.
if(!process_shot()) //First shot is processed instantly.
return //If it fails, such as when the gun is empty, then there's no need to schedule a second shot.
if(!process_shot()) // First shot is processed instantly.
return // If it fails, such as when the gun is empty, then there's no need to schedule a second shot.
START_PROCESSING(SSprojectiles, src)
RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG, .proc/on_mouse_drag)
@@ -210,16 +210,16 @@
/datum/component/automatic_fire/proc/on_mouse_drag(client/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params)
SIGNAL_HANDLER
if(isnull(over_location)) //This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example.
if(isnull(over_location)) // This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example.
var/list/modifiers = params2list(params)
var/new_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source)
params = list2params(modifiers)
mouse_parameters = params
if(!new_target)
if(QDELETED(target)) //No new target acquired, and old one was deleted, get us out of here.
if(QDELETED(target)) // No new target acquired, and old one was deleted, get us out of here.
stop_autofiring()
CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]. Old target was incidentally QDELETED.")
target = get_turf(target) //If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target.
target = get_turf(target) // If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target.
target_loc = target
CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]")
target = new_target
@@ -233,13 +233,13 @@
/datum/component/automatic_fire/proc/process_shot()
if(autofire_stat != AUTOFIRE_STAT_FIRING)
return
if(QDELETED(target) || get_turf(target) != target_loc) //Target moved or got destroyed since we last aimed.
target = target_loc //So we keep firing on the emptied tile until we move our mouse and find a new target.
if(QDELETED(target) || get_turf(target) != target_loc) // Target moved or got destroyed since we last aimed.
target = target_loc // So we keep firing on the emptied tile until we move our mouse and find a new target.
if(get_dist(shooter, target) <= 0)
target = get_step(shooter, shooter.dir) //Shoot in the direction faced if the mouse is on the same tile as we are.
target = get_step(shooter, shooter.dir) // Shoot in the direction faced if the mouse is on the same tile as we are.
target_loc = target
else if(!in_view_range(shooter, target))
stop_autofiring() //Elvis has left the building.
stop_autofiring() // Elvis has left the building.
return FALSE
shooter.face_atom(target)
COOLDOWN_START(src, next_shot_cd, autofire_shot_delay)
@@ -3,9 +3,9 @@
/// Modular ERT datums ///
////////////////////////////
/datum/ert/asset_protection
roles = list(/datum/antagonist/ert/asset_protection)
leader_role = /datum/antagonist/ert/asset_protection/leader
rename_team = "Asset Protection Team"
code = "Red"
mission = "Protect Nanotrasen's assets, crew are assets."
polldesc = "a Nanotrasen asset protection team"
roles = list(/datum/antagonist/ert/asset_protection)
leader_role = /datum/antagonist/ert/asset_protection/leader
rename_team = "Asset Protection Team"
code = "Red"
mission = "Protect Nanotrasen's assets, crew are assets."
polldesc = "a Nanotrasen asset protection team"
@@ -1,4 +1,4 @@
//MODULAR ID TRIM ACCESS OVERRIDES GO HERE!!
// MODULAR ID TRIM ACCESS OVERRIDES GO HERE!!
/datum/id_trim/job/head_of_security
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
@@ -12,7 +12,7 @@
assignment = "SolFed Liasion"
sechud_icon_state = SECHUD_SOLFED_LIASON
/datum/id_trim/space_police //Overrides the normal /tg/ ERTSEC Icon, these guys aren't NT!
/datum/id_trim/space_police // Overrides the normal /tg/ ERTSEC Icon, these guys aren't NT!
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
trim_state = "trim_spacepolice"
sechud_icon_state = SECHUD_SPACE_POLICE
@@ -1,4 +1,4 @@
///SYNDICATE ID TRIMS
/// SYNDICATE ID TRIMS
/datum/id_trim/syndicom/skyrat
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
@@ -12,7 +12,7 @@
trim_state = "trim_syndicateshipcaptain"
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
///DS-2
/// DS-2
/datum/id_trim/syndicom/skyrat/assault
assignment = "DS-2 Operative"
@@ -64,7 +64,7 @@
trim_state = "trim_stationadmiral"
access = list(ACCESS_ENGINE_EQUIP, ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
///Interdyne
/// Interdyne
/datum/id_trim/syndicom/skyrat/interdyne
assignment = "Interdyne Operative"
@@ -79,12 +79,12 @@
trim_state = "trim_deckofficer"
access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
///Misc
/// Misc
/datum/id_trim/syndicom/skyrat/misc
assignment = "Nuclear Tech Support" //Hello? Yes? Nanotrasen? This is Gorlex, uhh. There seems to be an issue.. is your self-destruct running?
assignment = "Nuclear Tech Support" // Hello? Yes? Nanotrasen? This is Gorlex, uhh. There seems to be an issue.. is your self-destruct running?
/datum/id_trim/syndicom/skyrat/misc/corporateliasion //Syndicate HoP
/datum/id_trim/syndicom/skyrat/misc/corporateliasion // Syndicate HoP
assignment = "Corporate Liaison"
trim_state = "trim_corporateliaison"
@@ -112,11 +112,11 @@
assignment = "Sanitation Technician"
trim_state = "trim_sanitationtechnician"
/datum/id_trim/syndicom/skyrat/misc/deckcrewman //Finally, an excuse to emag the supply console.
/datum/id_trim/syndicom/skyrat/misc/deckcrewman // Finally, an excuse to emag the supply console.
assignment = "Deck Crewman"
trim_state = "trim_deckcrewman"
///No Custom Icon
/// No Custom Icon
/datum/id_trim/syndicom/skyratnoicon/roboticstechnician
assignment = "Robotics Technician"
trim_state = "trim_roboticist"
@@ -5,20 +5,20 @@
/datum/martial_art/cqc/plus/on_projectile_hit(mob/living/hit_mob, obj/projectile/fired_projectile, def_zone)
. = ..()
if(hit_mob.incapacitated(FALSE, TRUE)) //NO STUN
if(hit_mob.incapacitated(FALSE, TRUE)) // NO STUN
return BULLET_ACT_HIT
if(!(hit_mob.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE
if(!(hit_mob.mobility_flags & MOBILITY_USE)) // NO UNABLE TO USE
return BULLET_ACT_HIT
var/datum/dna/dna = hit_mob.has_dna()
if(dna?.check_mutation(/datum/mutation/human/hulk)) //NO HULK
if(dna?.check_mutation(/datum/mutation/human/hulk)) // NO HULK
return BULLET_ACT_HIT
if(!isturf(hit_mob.loc)) //NO MOTHERFLIPPIN MECHS!
if(!isturf(hit_mob.loc)) // NO MOTHERFLIPPIN MECHS!
return BULLET_ACT_HIT
if(hit_mob.throw_mode)
hit_mob.visible_message(span_danger("[hit_mob] effortlessly swats the projectile aside! They can block bullets with their bare hands!"), span_userdanger("You deflect the projectile!"))
playsound(get_turf(hit_mob), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE)
fired_projectile.firer = hit_mob
fired_projectile.set_angle(rand(0, 360))//SHING
fired_projectile.set_angle(rand(0, 360))// SHING
return BULLET_ACT_FORCE_PIERCE
return BULLET_ACT_HIT
@@ -3,7 +3,7 @@
desc = "The chromatophores in your skin adjust to your surroundings, as long as you stay still."
clothes_req = FALSE
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
action_icon_state = "ninja_cloak" //SKYRAT EDIT END
action_icon_state = "ninja_cloak" // SKYRAT EDIT END
/obj/effect/proc_holder/spell/self/chameleon_skin_activate/cast(list/targets, mob/user = usr)
. = ..()
@@ -1,7 +1,7 @@
/datum/quirk/equipping/nerve_staple
name = "Nerve Stapled"
desc = "You're a pacifist. Not because you want to be, but because of the device stapled into your eye."
value = -10 //pacifism = -8, losing eye slots = -2
value = -10 // pacifism = -8, losing eye slots = -2
gain_text = span_danger("You suddenly can't raise a hand to hurt others!")
lose_text = span_notice("You think you can defend yourself again.")
medical_record_text = "Patient is nerve stapled and is unable to harm others."
@@ -16,19 +16,19 @@
continue
var/item = new item_path(carbon_holder.loc)
var/success = FALSE
//Checking for nodrop and seeing if there's an empty slot
// Checking for nodrop and seeing if there's an empty slot
for (var/slot as anything in all_items[item_path])
success = force_equip_item(carbon_holder, item, slot, check_item = FALSE)
if (success)
break
//Checking for nodrop
// Checking for nodrop
for (var/slot as anything in all_items[item_path])
success = force_equip_item(carbon_holder, item, slot)
if (success)
break
if ((item_path in forced_items) && !success)
//Checking for nodrop failed, shove it into the first available slot, even if it has nodrop
// Checking for nodrop failed, shove it into the first available slot, even if it has nodrop
for (var/slot as anything in all_items[item_path])
success = force_equip_item(carbon_holder, item, slot, FALSE)
if (success)
@@ -43,7 +43,7 @@
if (check_nodrop && HAS_TRAIT(item_in_slot, TRAIT_NODROP))
return FALSE
target.dropItemToGround(item_in_slot, force = TRUE)
return target.equip_to_slot_if_possible(item, slot, disable_warning = TRUE) //this should never not work tbh
return target.equip_to_slot_if_possible(item, slot, disable_warning = TRUE) // this should never not work tbh
/datum/quirk/equipping/proc/on_equip_item(obj/item/equipped, success)
return
@@ -1,4 +1,4 @@
//SKYRAT GOOD TRAITS
// SKYRAT GOOD TRAITS
/datum/quirk/hard_soles
name = "Hardened Soles"
@@ -20,7 +20,7 @@
medical_record_text = "Patient demonstrates a high brain plasticity in regards to language learning."
icon = "globe"
//AdditionalEmotes *turf quirks
// AdditionalEmotes *turf quirks
/datum/quirk/water_aspect
name = "Water aspect (Emotes)"
desc = "(Aquatic innate) Underwater societies are home to you, space ain't much different. (Say *turf to cast)"
@@ -1,4 +1,4 @@
//SKYRAT NEGATIVE TRAITS
// SKYRAT NEGATIVE TRAITS
/datum/quirk/alexithymia
name = "Alexithymia"
@@ -79,7 +79,7 @@
/datum/quirk/mute
name = "Mute"
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
value = -2 //HALP MAINTS
value = -2 // HALP MAINTS
gain_text = span_danger("You find yourself unable to speak!")
lose_text = span_notice("You feel a growing strength in your vocal chords.")
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
@@ -1,6 +1,6 @@
#define TRAIT_HYDRA_HEADS "hydrahead" //We still dont have a centralised trait file
#define TRAIT_HYDRA_HEADS "hydrahead" // We still dont have a centralised trait file
//SKYRAT NEUTRAL TRAITS
// SKYRAT NEUTRAL TRAITS
/datum/quirk/excitable
name = "Excitable!"
desc = "Head patting makes your tail wag! You're very excitable! WAG WAG."
@@ -31,7 +31,7 @@
mob_trait = TRAIT_DNR
icon = "skull-crossbones"
//uncontrollable laughter
// uncontrollable laughter
/datum/quirk/item_quirk/joker
name = "Pseudobulbar Affect"
desc = "At random intervals, you suffer uncontrollable bursts of laughter."
@@ -1,4 +1,4 @@
//A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof)
// A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof)
/datum/game_mode/dynamic/proc/send_trait_report()
. = "<b><i>Central Command Status Summary</i></b><hr>"
@@ -8,7 +8,7 @@
if(ruleset.weight <= 0 || ruleset.cost <= 0)
continue
min_threat = min(ruleset.cost, min_threat)
var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time
var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) // if both shown and real threat are below any ruleset, its extended time
generate_station_goals(greenshift)
if(!GLOB.station_goals.len)
@@ -23,6 +23,6 @@
. += "<hr>This concludes your shift-start evaluation. Have a secure shift!<hr>\
<p style=\"color: grey; text-align: justify;\">This label certifies an Intern has reviewed the above before sending. This document is the property of Nanotrasen Corporation.</p>"
print_command_report(., "Central Command Status Summary", announce=FALSE)
print_command_report(., "Central Command Status Summary", announce = FALSE)
priority_announce("Hello, crew of [station_name()]. Our intern has finished their shift-start divergency and goals evaluation, which has been sent to your communications console. Have a secure shift!", "Divergency Report", SSstation.announcer.get_rand_report_sound())
@@ -1,5 +1,5 @@
/obj/item
///How much power would this item use?
/// How much power would this item use?
var/power_use_amount = POWER_CELL_USE_NORMAL
@@ -24,7 +24,7 @@
/obj/machinery/plumbing/tank = 20,
/obj/machinery/plumbing/buffer = 10,
/obj/machinery/plumbing/layer_manifold = 5,
//Above are the most common machinery which is shown on the first cycle. Keep new additions below THIS line, unless they're probably gonna be needed alot
// Above are the most common machinery which is shown on the first cycle. Keep new additions below THIS line, unless they're probably gonna be needed alot
/obj/machinery/plumbing/acclimator = 10,
/obj/machinery/plumbing/bottler = 50,
/obj/machinery/plumbing/disposer = 10,
@@ -1,4 +1,4 @@
//GENERIC ID CARDS//
// GENERIC ID CARDS//
/obj/item/card/id/advanced/silver/generic
name = "generic silver identification card"
icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
@@ -11,19 +11,19 @@
icon_state = "card_goldgen"
assigned_icon_state = "assigned_gold"
//POLYCHROMIC ID CARDS//
// POLYCHROMIC ID CARDS//
/obj/item/card/id/advanced/polychromic
name = "polychromic identification card"
desc = "A failed prototype for customizable ID cards, it looks.. strange." //Read: I'm too lazy to implement this properly
desc = "A failed prototype for customizable ID cards, it looks.. strange." // Read: I'm too lazy to implement this properly
icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
icon_state = "card_polychromic"
assigned_icon_state = null //Built into the sprite itself.
assigned_icon_state = null // Built into the sprite itself.
/obj/item/card/id/advanced/polychromic/ComponentInitialize()
. = ..()
AddElement(/datum/element/polychromic, list("#666666", "#CCBBAA", "#0000FF"))
//SOLFED//
// SOLFED//
/obj/item/card/id/advanced/solfed
name = "solfed identification card"
icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
@@ -12,7 +12,7 @@
/obj/item/hhmirror/fullmagic
name = "full handheld magic mirror"
desc = "A handheld mirror that allows you to change your... self?" //Later, maybe add a charge to the description.
desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description.
icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirrormagic"
var/list/races_blacklist = list(SPECIES_SKELETON, "agent", "angel", SPECIES_ZOMBIE, "clockwork golem servant", SPECIES_MUSHROOM, "memezombie")
@@ -86,7 +86,7 @@
human_user.update_mutations_overlay() // no hulk lizard
if("gender")
if(!(human_user.gender in list("male", "female"))) //blame the patriarchy
if(!(human_user.gender in list("male", "female"))) // blame the patriarchy
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
@@ -105,13 +105,13 @@
return
human_user.dna.update_ui_block(DNA_GENDER_BLOCK)
human_user.update_body()
human_user.update_mutations_overlay() //(hulk male/female)
human_user.update_mutations_overlay() // (hulk male/female)
if("hair")
var/hairchoice = tgui_alert(human_user, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(hairchoice == "Style") //So you just want to use a mirror then?
if(hairchoice == "Style") // So you just want to use a mirror then?
..()
else
var/new_hair_color = input(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) as color|null
@@ -138,7 +138,7 @@
/obj/item/hhmirror/wracemagic
name = "raceless handheld magic mirror"
desc = "A handheld mirror that allows you to change your... self?" //Later, maybe add a charge to the description.
desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description.
icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirrormagic"
var/charges = 4
@@ -170,7 +170,7 @@
human_user.mind.name = newname
if("gender")
if(!(human_user.gender in list("male", "female"))) //blame the patriarchy
if(!(human_user.gender in list("male", "female"))) // blame the patriarchy
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
@@ -189,13 +189,13 @@
return
human_user.dna.update_ui_block(DNA_GENDER_BLOCK)
human_user.update_body()
human_user.update_mutations_overlay() //(hulk male/female)
human_user.update_mutations_overlay() // (hulk male/female)
if("hair")
var/hairchoice = tgui_alert(human_user, "Hair style or hair color?", "Change Hair", list("Style", "Color"))
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(hairchoice == "Style") //So you just want to use a mirror then?
if(hairchoice == "Style") // So you just want to use a mirror then?
..()
else
var/new_hair_color = input(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) as color|null
@@ -53,7 +53,7 @@
icon_state = "cultrobes"
inhand_icon_state = "cultrobes"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80, WOUND = 20) //Chaplain Riot armor
armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80, WOUND = 20) // Chaplain Riot armor
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
hoodtype = /obj/item/clothing/head/hooded/cultlain_hood
@@ -64,7 +64,7 @@
body_parts_covered = HEAD
flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS
flags_cover = HEADCOVERSEYES
armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80) //Chaplain Riot Helmet
armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 80, ACID = 80) // Chaplain Riot Helmet
/obj/item/storage/box/holy/narsian
name = "ancient kit"
@@ -138,7 +138,7 @@
attack_verb_continuous = list("whipped", "repented", "lashed", "flagellated")
slot_flags = ITEM_SLOT_BELT
var/praying = FALSE
var/deity_name = "Coderbus" //This is the default, hopefully won't actually appear if the religion subsystem is running properly
var/deity_name = "Coderbus" // This is the default, hopefully won't actually appear if the religion subsystem is running properly
/obj/item/nullrod/rosary/Initialize()
.=..()
@@ -1,4 +1,4 @@
#define OXY_CANDLE_RELEASE_TEMP T20C + 10 //30 celsius, it's hot. Will be even hotter with hotspot expose
#define OXY_CANDLE_RELEASE_TEMP T20C + 10 // 30 celsius, it's hot. Will be even hotter with hotspot expose
/obj/item/oxygen_candle
name = "oxygen candle"
@@ -6,7 +6,7 @@
icon = 'modular_skyrat/master_files/icons/obj/oxygen_candle.dmi'
icon_state = "oxycandle"
w_class = WEIGHT_CLASS_SMALL
light_color = LIGHT_COLOR_LAVA //Very warm chemical burn
light_color = LIGHT_COLOR_LAVA // Very warm chemical burn
var/pulled = FALSE
var/processing = FALSE
var/processes_left = 40
@@ -2,4 +2,4 @@
desc = "This one is rus-.. no, painted to look rusty.. it's a display piece, still carries a fair edge though."
force = 18
armour_penetration = 7
block_chance = 10 //It's a display piece, not a riot shield.
block_chance = 10 // It's a display piece, not a riot shield.
@@ -1,4 +1,4 @@
//Most of these are just additions to allow certain cargo packs to exist. More will be on the way on additional PR's
// Most of these are just additions to allow certain cargo packs to exist. More will be on the way on additional PR's
/obj/item/storage/box/techshell
name = "box of unloaded techshell"
@@ -1,4 +1,4 @@
//Lets cyborgs move dragged objects onto tables
// Lets cyborgs move dragged objects onto tables
/obj/structure/table/attack_robot(mob/user, list/modifiers)
if(!in_range(src, user))
return
@@ -34,8 +34,8 @@
)
/obj/structure/trash_pile/proc/do_search(mob/user)
if(contents.len) //There's something hidden
var/atom/hidden_atom = contents[contents.len] //Get the most recent hidden thing
if(contents.len) // There's something hidden
var/atom/hidden_atom = contents[contents.len] // Get the most recent hidden thing
if(istype(hidden_atom, /mob/living))
var/mob/living/hidden_mob = hidden_atom
balloon_alert(user, "someone is inside!")
@@ -45,28 +45,28 @@
balloon_alert(user, "found something!")
hidden_item.forceMove(src.loc)
else
//You already searched this one bruh
// You already searched this one bruh
if(user.ckey in searchedby)
balloon_alert(user, "already searched!")
//You found an item!
// You found an item!
else
produce_alpha_item()
balloon_alert(user, "found something!")
searchedby += user.ckey
/obj/structure/trash_pile/attack_hand(mob/user)
//Human mob
// Human mob
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
human_user.visible_message("[user] searches through \the [src].", span_notice("You search through \the [src]."))
//Do the searching
// Do the searching
if(do_after(user, rand(4 SECONDS, 6 SECONDS), target = src))
if(src.loc) //Let's check if the pile still exists
if(src.loc) // Let's check if the pile still exists
do_search(user)
else
return ..()
//Random lists
// Random lists
/obj/structure/trash_pile/proc/produce_alpha_item()
var/lootspawn = pick_weight(GLOB.maintenance_loot)
while(islist(lootspawn))
@@ -99,11 +99,11 @@
user.visible_message(span_warning("[user] starts diving into [src]."), \
span_notice("You start diving into [src]..."))
var/adjusted_dive_time = hide_person_time
if(HAS_TRAIT(user, TRAIT_RESTRAINED)) //hiding takes twice as long when restrained.
if(HAS_TRAIT(user, TRAIT_RESTRAINED)) // hiding takes twice as long when restrained.
adjusted_dive_time *= 2
if(do_mob(user, user, adjusted_dive_time))
if(src.loc) //Checking if structure has been destroyed
if(src.loc) // Checking if structure has been destroyed
if(do_dive(user))
user.forceMove(src)
@@ -9,7 +9,7 @@
'modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg',
'modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg',
)
if(SFX_BULLET_IMPACT_METAL) //This is the one that will be used most, it is extensive.
if(SFX_BULLET_IMPACT_METAL) // This is the one that will be used most, it is extensive.
soundin = pick(
'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg',
'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg',
@@ -7,14 +7,14 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE)
toggle_dchat()
log_admin("[key_name(usr)] toggled dead chat.")
message_admins("[key_name_admin(usr)] toggled dead chat.")
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle DCHAT", "[GLOB.dchat_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle DCHAT", "[GLOB.dchat_allowed ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/proc/toggle_dchat(toggle = null)
if(toggle != null) //if we're specifically en/disabling dead chat
if(toggle != null) // if we're specifically en/disabling dead chat
if(toggle != GLOB.dchat_allowed)
GLOB.dchat_allowed = toggle
else
return
else //otherwise just toggle it
else // otherwise just toggle it
GLOB.dchat_allowed = !GLOB.dchat_allowed
to_chat(world, span_oocplain("<B>The dead chat channel has been globally [GLOB.dchat_allowed ? "enabled" : "disabled"].</B>"))
@@ -30,16 +30,16 @@
view_exploitables = TRUE
/datum/antagonist/pirate
view_exploitables = TRUE //pirates are flexible antags, not strictly bound by their objective. i could see this working
view_exploitables = TRUE // pirates are flexible antags, not strictly bound by their objective. i could see this working
/datum/antagonist/rev/head
view_exploitables = TRUE //heads only. while all revs having exploitables would be fine, i feel this would complement the "leaders leading the masses" stuff rev naturally makes
view_exploitables = TRUE // heads only. while all revs having exploitables would be fine, i feel this would complement the "leaders leading the masses" stuff rev naturally makes
/*/datum/antagonist/cortical_borer //come back to borer when its not as new
/*/datum/antagonist/cortical_borer // come back to borer when its not as new
view_exploitables = TRUE */
/datum/antagonist/cult //cult is adminbus only... im not sure about this but im doing it anyway
/datum/antagonist/cult // cult is adminbus only... im not sure about this but im doing it anyway
view_exploitables = TRUE
/*/datum/antagonist/abductor //maybe?
/*/datum/antagonist/abductor // maybe?
view_exploitables = TRUE */
@@ -1,5 +1,5 @@
////
// This is a modular hook on the kill_pet.dm, the `possible_heads` variable needs to be upkept according to the upstream file, or they will not occur.
// This is a modular hook on the kill_pet.dm, the `possible_heads` variable needs to be upkept according to the upstream file, or they will not occur.
/datum/traitor_objective/kill_pet
possible_heads = list(
JOB_HEAD_OF_PERSONNEL = list(
@@ -20,7 +20,7 @@
////
// Objective overwrites
// Objective overwrites
/datum/traitor_objective/kill_pet/generate_objective(datum/mind/generating_for, list/possible_duplicates)
. = ..()
// Dust Poppy the safety inspector
@@ -52,15 +52,15 @@
succeed_signals = list(COMSIG_ATOM_EMAG_ACT))
////
// Objective item (for emagging E-N)
// Objective item (for emagging E-N)
/obj/item/card/emag/one_shot
name = "cryptographic sequencer"
special_desc_requirement = EXAMINE_CHECK_JOB
special_desc_jobs = list(JOB_DETECTIVE, JOB_HEAD_OF_SECURITY)
special_desc = "Upon inspection you can instantly tell this is a real cryptographic sequencer commonly traded in bulk for cheap at countless blackmarkets. They are known for their unreliability and breaking after just one use from their shoddy construction."
///How many uses does it have left?
/// How many uses does it have left?
var/charges = 1
///Who summoned this?
/// Who summoned this?
var/caller
/obj/item/card/emag/one_shot/examine(mob/user)
@@ -83,7 +83,7 @@
////
// Handle the UI button, this is currently just generated by a modular objective
// Handle the UI button, this is currently just generated by a modular objective
/datum/traitor_objective/kill_pet/generate_ui_buttons(mob/user)
var/list/buttons = list()
if(istype(target_pet, /mob/living/simple_animal/pet/dog/corgi/borgi)) // Target has to be E-N
@@ -4,7 +4,7 @@
/datum/traitor_objective/smuggle = 1,
)
///smuggle! bring a traitor item from its arrival area to the cargo shuttle, where the objective completes on selling the item
/// smuggle! bring a traitor item from its arrival area to the cargo shuttle, where the objective completes on selling the item
/datum/traitor_objective/smuggle
name = "Smuggle %CONTRABAND% from %AREA% off the station via cargo shuttle"
description = "Go to a designated area, pick up syndicate contraband, and get it off the station via the cargo shuttle. \
@@ -14,23 +14,23 @@
progression_reward = list(5 MINUTES, 9 MINUTES)
telecrystal_reward = list(0, 1)
///area type the objective owner must be in to recieve the contraband
/// area type the objective owner must be in to recieve the contraband
var/area/smuggle_spawn_type
///the contraband that must be exported on the shuttle
/// the contraband that must be exported on the shuttle
var/obj/item/contraband
///type of contraband to spawn
/// type of contraband to spawn
var/obj/item/contraband_type
/// possible objective items. Mapped by item type = penalty cost for failing
var/list/possible_contrabands = list(
/obj/item/pen/edagger/prototype = 2,
/obj/item/gun/syringe/syndicate/prototype = 4,
/obj/item/reagent_containers/glass/bottle/ritual_wine = 6, //poison kit price
/obj/item/reagent_containers/glass/bottle/ritual_wine = 6, // poison kit price
)
/datum/traitor_objective/smuggle/is_duplicate(datum/traitor_objective/smuggle/objective_to_compare)
if(objective_to_compare.contraband_type == contraband_type)
return TRUE
//it's too similar if its from the same area
// it's too similar if its from the same area
if(objective_to_compare.smuggle_spawn_type == smuggle_spawn_type)
return TRUE
return FALSE
@@ -66,14 +66,14 @@
penalty = telecrystal_penalty)
/datum/traitor_objective/smuggle/generate_objective(datum/mind/generating_for, list/possible_duplicates)
//anyone working cargo should not get almost free objectives by having direct access to the cargo shuttle
// anyone working cargo should not get almost free objectives by having direct access to the cargo shuttle
if(generating_for.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_CARGO)
return FALSE
//choose starting area to recieve contraband
// choose starting area to recieve contraband
var/list/possible_areas = GLOB.the_station_areas.Copy()
for(var/area/possible_area as anything in possible_areas)
//remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
// remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
if(istype(possible_area, /area/station/cargo) || istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security))
possible_areas -= possible_area
for(var/datum/traitor_objective/smuggle/smuggle_objective as anything in possible_duplicates)
@@ -86,7 +86,7 @@
if(!length(possible_areas))
return FALSE
smuggle_spawn_type = pick(possible_areas)
//choose contraband type to spawn when reaching starting area
// choose contraband type to spawn when reaching starting area
contraband_type = pick(possible_contrabands)
telecrystal_penalty = possible_contrabands[contraband_type]
replace_in_name("%CONTRABAND%", initial(contraband_type.name))
@@ -33,7 +33,7 @@
var/datum/species/pref_species
//BACKGROUND STUFF
// BACKGROUND STUFF
var/general_record = ""
var/security_record = ""
var/medical_record = ""
@@ -41,21 +41,21 @@
var/background_info = ""
var/exploitable_info = ""
///Whether the user wants to see body size being shown in the preview
/// Whether the user wants to see body size being shown in the preview
var/show_body_size = FALSE
///Alternative job titles stored in preferences. Assoc list, ie. alt_job_titles["Scientist"] = "Cytologist"
/// Alternative job titles stored in preferences. Assoc list, ie. alt_job_titles["Scientist"] = "Cytologist"
var/list/alt_job_titles = list()
//Determines if the player has undergone TGUI preferences migration, if so, this will prevent constant loading.
// Determines if the player has undergone TGUI preferences migration, if so, this will prevent constant loading.
var/tgui_prefs_migration = TRUE
///A photo of the character, visible on close examine
/// A photo of the character, visible on close examine
var/headshot = ""
/datum/preferences/proc/species_updated(species_type)
all_quirks = list()
//Reset cultural stuff
// Reset cultural stuff
try_get_common_language()
save_character()
@@ -119,7 +119,7 @@
return FALSE
return TRUE
//Whenever we switch a species, we'll try to get common if we can to not confuse anyone
// Whenever we switch a species, we'll try to get common if we can to not confuse anyone
/datum/preferences/proc/try_get_common_language()
var/list/langs = get_available_languages()
if(langs[/datum/language/common])
@@ -129,19 +129,19 @@
/datum/preferences/proc/validate_species_parts()
var/list/target_bodyparts = pref_species.default_mutant_bodyparts.Copy()
//Remove all "extra" accessories
// Remove all "extra" accessories
for(var/key in mutant_bodyparts)
if(!GLOB.sprite_accessories[key]) //That accessory no longer exists, remove it
if(!GLOB.sprite_accessories[key]) // That accessory no longer exists, remove it
mutant_bodyparts -= key
continue
if(!pref_species.default_mutant_bodyparts[key])
mutant_bodyparts -= key
continue
if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) //The individual accessory no longer exists
if(!GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]]) // The individual accessory no longer exists
mutant_bodyparts[key][MUTANT_INDEX_NAME] = pref_species.default_mutant_bodyparts[key]
validate_color_keys_for_part(key) //Validate the color count of each accessory that wasnt removed
validate_color_keys_for_part(key) // Validate the color count of each accessory that wasnt removed
//Add any missing accessories
// Add any missing accessories
for(var/key in target_bodyparts)
if(!mutant_bodyparts[key])
var/datum/sprite_accessory/SA
@@ -166,7 +166,7 @@
mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species)
/datum/preferences/proc/CanBuyAugment(datum/augment_item/target_aug, datum/augment_item/current_aug)
//Check biotypes
// Check biotypes
if(!(pref_species.inherent_biotypes & target_aug.allowed_biotypes))
return
var/quirk_points = GetQuirkBalance()
@@ -17,7 +17,7 @@
return !(NO_UNDERWEAR in species.species_traits)
/datum/preference/choiced/undershirt/init_possible_values()
return generate_values_for_underwear(GLOB.undershirt_list, list("human_chest_m", "human_r_arm", "human_l_arm", "human_r_leg", "human_l_leg", "human_r_hand", "human_l_hand"), COLOR_ALMOST_BLACK,10)
return generate_values_for_underwear(GLOB.undershirt_list, list("human_chest_m", "human_r_arm", "human_l_arm", "human_r_leg", "human_l_leg", "human_r_hand", "human_l_hand"), COLOR_ALMOST_BLACK, 10)
/datum/preference/choiced/undershirt/compile_constant_data()
var/list/data = ..()
@@ -1,5 +1,5 @@
#define LENGTH_LONGEST_LINK 29 //set to the length to the char length of the longest link
#define LENGTH_LONGEST_EXTENSION 4 //set to the length of the longest file extension
#define LENGTH_LONGEST_LINK 29 // set to the length to the char length of the longest link
#define LENGTH_LONGEST_EXTENSION 4 // set to the length of the longest file extension
/datum/preference/text/headshot
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
@@ -7,19 +7,19 @@
savefile_key = "headshot"
/// Assoc list of ckeys and their link, used to cut down on chat spam
var/list/stored_link = list()
var/static/link_regex = regex("^https://i.gyazo.com|https://media.discordapp.net|https://cdn.discordapp.com|https://media.discordapp.net$") //Do not touch the damn duplicates.
var/static/end_regex = regex("^.jpg|.jpg|.png|.jpeg|.jpeg$") //Regex is terrible, don't touch the duplicate extensions
var/static/link_regex = regex("^https:// i.gyazo.com|https:// media.discordapp.net|https:// cdn.discordapp.com|https:// media.discordapp.net$") // Do not touch the damn duplicates.
var/static/end_regex = regex("^.jpg|.jpg|.png|.jpeg|.jpeg$") // Regex is terrible, don't touch the duplicate extensions
/datum/preference/text/headshot/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
target?.dna.features["headshot"] = preferences?.headshot
/datum/preference/text/headshot/is_valid(value)
if(!length(value)) //Just to get blank ones out of the way
if(!length(value)) // Just to get blank ones out of the way
usr?.client?.prefs?.headshot = null
return TRUE
if(!findtext(value, "https://", 1, 9))
to_chat(usr, span_warning("You need \"https://\" in the link!"))
if(!findtext(value, "https:// ", 1, 9))
to_chat(usr, span_warning("You need \"https:// \" in the link!"))
return
if(!findtext(value, end_regex, abs(LENGTH_LONGEST_EXTENSION - length(value)), length(value)))
to_chat(usr, span_warning("You need either \".png\", \".jpg\", or \".jpeg\" in the link!"))
@@ -39,7 +39,7 @@
return TRUE
/datum/preference/text/headshot/is_accessible(datum/preferences/preferences)
if(isnull(usr)) //Joining at roundstart
if(isnull(usr)) // Joining at roundstart
return ..()
if(!is_veteran_player(usr?.client) && !GLOB.donator_list[usr?.ckey] && !is_admin(usr?.client))
return FALSE
@@ -36,7 +36,7 @@
)
var/list/name_to_language
/datum/preference_middleware/languages/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences) //SKYRAT EDIT CHANGE
/datum/preference_middleware/languages/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences) // SKYRAT EDIT CHANGE
target.language_holder.understood_languages.Cut()
target.language_holder.spoken_languages.Cut()
target.language_holder.omnitongue = TRUE // a crappy hack but it works
@@ -82,7 +82,7 @@
var/datum/language/language = GLOB.language_datum_instances[language_name]
if(language.secret)
continue
if(species.always_customizable && !(language.type in species.learnable_languages)) //For the ghostrole species. We don't want ashwalkers speaking beachtongue now.
if(species.always_customizable && !(language.type in species.learnable_languages)) // For the ghostrole species. We don't want ashwalkers speaking beachtongue now.
continue
if(preferences.languages[language.type])
selected_languages += list(list(
@@ -10,7 +10,7 @@
/datum/preference/toggle/allow_emissives
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "allow_emissives_toggle" //no 'e' so it goes right after allow_mismatched_parts, not before
savefile_key = "allow_emissives_toggle" // no 'e' so it goes right after allow_mismatched_parts, not before
default_value = FALSE
/datum/preference/toggle/allow_emissives/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences)
@@ -1,15 +1,15 @@
/// Legs
/datum/preference/choiced/digitigrade_legs
savefile_key = "digitigrade_legs"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
relevant_mutant_bodypart = "legs"
savefile_key = "digitigrade_legs"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
relevant_mutant_bodypart = "legs"
/datum/preference/choiced/digitigrade_legs/init_possible_values()
return assoc_to_keys(GLOB.sprite_accessories["legs"])
return assoc_to_keys(GLOB.sprite_accessories["legs"])
/datum/preference/choiced/digitigrade_legs/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["legs"] = value
target.dna.features["legs"] = value
/datum/preference/choiced/digitigrade_legs/is_accessible(datum/preferences/preferences)
var/passed_initial_check = ..(preferences)
@@ -1,4 +1,4 @@
//THIS FILE HAS BEEN EDITED BY SKYRAT EDIT
// THIS FILE HAS BEEN EDITED BY SKYRAT EDIT
/datum/preference/color/underwear_color
savefile_key = "underwear_color"
@@ -16,7 +16,7 @@
var/datum/species/species = new species_type
return !(NO_UNDERWEAR in species.species_traits)
//SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks
// SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks
/datum/preference/color/undershirt_color
savefile_key = "undershirt_color"
savefile_identifier = PREFERENCE_CHARACTER
@@ -48,4 +48,4 @@
var/species_type = preferences.read_preference(/datum/preference/choiced/species)
var/datum/species/species = new species_type
return !(NO_UNDERWEAR in species.species_traits)
//SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks
// SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks
@@ -30,13 +30,13 @@
READ_FILE(save["augment_limb_styles"] , augment_limb_styles)
augments = SANITIZE_LIST(augments)
//validating augments
// validating augments
for(var/aug_slot in augments)
var/datum/augment_item/aug = GLOB.augment_items[augments[aug_slot]]
if(!aug)
augments -= aug_slot
augment_limb_styles = SANITIZE_LIST(augment_limb_styles)
//validating limb styles
// validating limb styles
for(var/key in augment_limb_styles)
if(!GLOB.robotic_styles_list[augment_limb_styles[key]])
augment_limb_styles -= key
@@ -49,13 +49,13 @@
READ_FILE(save["mismatched_customization"], mismatched_customization)
READ_FILE(save["allow_advanced_colors"], allow_advanced_colors)
//SKYRAT EDIT REMOVAL BEGIN -- RECORDS REJUVINATION
// SKYRAT EDIT REMOVAL BEGIN -- RECORDS REJUVINATION
/* READ_FILE(save["general_record"], general_record)
READ_FILE(save["security_record"], security_record)
READ_FILE(save["medical_record"], medical_record)
READ_FILE(save["background_info"], background_info)
READ_FILE(save["exploitable_info"], exploitable_info) */
//SKYRAT EDIT REMOVAL END
// SKYRAT EDIT REMOVAL END
READ_FILE(save["alt_job_titles"], alt_job_titles)
@@ -81,7 +81,7 @@
READ_FILE(save["headshot"], headshot)
if(needs_update >= 0)
update_character_skyrat(needs_update, save) //needs_update == savefile_version if we need an update (positive integer)
update_character_skyrat(needs_update, save) // needs_update == savefile_version if we need an update (positive integer)
/// Brings a savefile up to date with modular preferences. Called if savefile_needs_update_skyrat() returned a value higher than 0
/datum/preferences/proc/update_character_skyrat(current_version, savefile/save)
@@ -128,13 +128,13 @@
WRITE_FILE(save["mismatched_customization"], mismatched_customization)
WRITE_FILE(save["allow_advanced_colors"], allow_advanced_colors)
//SKYRAT EDIT REMOVAL BEGIN -- RECORDS REJUVINATION
// SKYRAT EDIT REMOVAL BEGIN -- RECORDS REJUVINATION
/* WRITE_FILE(save["general_record"] , general_record)
WRITE_FILE(save["security_record"] , security_record)
WRITE_FILE(save["medical_record"] , medical_record)
WRITE_FILE(save["background_info"] , background_info)
WRITE_FILE(save["exploitable_info"] , exploitable_info) */
//SKYRAT EDIT REMOVAL END
// SKYRAT EDIT REMOVAL END
WRITE_FILE(save["alt_job_titles"], alt_job_titles)
WRITE_FILE(save["languages"] , languages)
WRITE_FILE(save["headshot"], headshot)
@@ -1,6 +1,6 @@
//This is the file for edge case clothing items that are not properly defined.
// This is the file for edge case clothing items that are not properly defined.
//HEAD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// HEAD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/obj/item/clothing/head/hardhat/atmos
supports_variations_flags = CLOTHING_SNOUTED_VARIATION | CLOTHING_SNOUTED_VOX_VARIATION
@@ -9,30 +9,30 @@
/obj/item/clothing/head/wig
flags_inv = HIDEHAIR | SHOWSPRITEEARS
//EARS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// EARS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//EYES>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// EYES>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//MASK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// MASK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/obj/item/clothing/mask/gas/atmos
supports_variations_flags = CLOTHING_SNOUTED_VARIATION | CLOTHING_SNOUTED_VOX_VARIATION
/obj/item/clothing/mask/gas/atmos/captain
supports_variations_flags = CLOTHING_SNOUTED_VARIATION | CLOTHING_SNOUTED_VOX_VARIATION
/obj/item/clothing/mask/luchador //No longer has HIDESNOUT, has SHOWSPRITEEARS
/obj/item/clothing/mask/luchador // No longer has HIDESNOUT, has SHOWSPRITEEARS
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|SHOWSPRITEEARS
/obj/item/clothing/mask/gas/explorer //HIDESNOUT is in visor toggle now
/obj/item/clothing/mask/gas/explorer // HIDESNOUT is in visor toggle now
visor_flags_inv = HIDEFACIALHAIR|HIDESNOUT
/obj/item/clothing/mask/balaclava //Now has SHOWSPRITEEARS
/obj/item/clothing/mask/balaclava // Now has SHOWSPRITEEARS
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|SHOWSPRITEEARS
//UNDER>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// UNDER>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//SUIT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// SUIT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/obj/item/clothing/suit/fire
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
//FEET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// FEET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -1,8 +1,8 @@
//Mutant variants needs to be a property of all items, because all items can be equipped, despite the mob code only expecting clothing items (ugh)
// Mutant variants needs to be a property of all items, because all items can be equipped, despite the mob code only expecting clothing items (ugh)
/obj/item
///Icon file for mob worn overlays, if the user is digi.
/// Icon file for mob worn overlays, if the user is digi.
var/icon/worn_icon_digi
///The config type to use for greyscaled worn sprites for digitigrade characters. Both this and greyscale_colors must be assigned to work.
/// The config type to use for greyscaled worn sprites for digitigrade characters. Both this and greyscale_colors must be assigned to work.
var/greyscale_config_worn_digi
/// Icon file for mob worn overlays, if the user is a vox.
var/icon/worn_icon_vox
@@ -1,5 +1,5 @@
/obj/item/clothing/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:(
return
if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:(
return
return ..()
return ..()
@@ -7,13 +7,13 @@
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
/obj/item/clothing/head/helmet/gladiator
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
/obj/item/clothing/head/chefhat
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
/obj/item/clothing/head/hos/beret
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
/obj/item/clothing/head/soft/paramedic
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
@@ -5,9 +5,9 @@
inhand_icon_state = "monkeymind"
strip_delay = 100
armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 0, FIRE = 50, ACID = 50, WOUND = 0)
var/mob/living/carbon/human/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
var/polling = FALSE///if the helmet is currently polling for targets (special code for removal)
var/light_colors = 1 ///which icon state color this is (red, blue, yellow)
var/mob/living/carbon/human/magnification = null /// if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
var/polling = FALSE/// if the helmet is currently polling for targets (special code for removal)
var/light_colors = 1 /// which icon state color this is (red, blue, yellow)
/obj/item/clothing/head/helmet/monkey_sentience/Initialize()
. = ..()
@@ -31,18 +31,18 @@
. = ..()
if(slot != ITEM_SLOT_HEAD)
return
if(istype(user, /mob/living/carbon/human/dummy)) //Prevents ghosts from being polled when the helmet is put on a dummy.
if(istype(user, /mob/living/carbon/human/dummy)) // Prevents ghosts from being polled when the helmet is put on a dummy.
return
if(!ismonkey(user) || user.ckey)
var/mob/living/something = user
to_chat(something, span_boldnotice("You feel a stabbing pain in the back of your head for a moment."))
something.apply_damage(5, BRUTE, BODY_ZONE_HEAD, FALSE, FALSE, FALSE) //notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet)
something.apply_damage(5, BRUTE, BODY_ZONE_HEAD, FALSE, FALSE, FALSE) // notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return
if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE))
say("ERROR: Central Command has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.")
return
magnification = user //this polls ghosts
magnification = user // this polls ghosts
visible_message(span_warning("[src] powers up!"))
playsound(src, 'sound/machines/ping.ogg', 30, TRUE)
RegisterSignal(magnification, COMSIG_SPECIES_LOSS, .proc/make_fall_off)
@@ -69,7 +69,7 @@
if(policy)
to_chat(magnification, policy)
icon_state = "[icon_state]up"
REMOVE_TRAIT(magnification, TRAIT_PRIMITIVE, SPECIES_TRAIT) //Monkeys with sentience should be able to use less primitive tools.
REMOVE_TRAIT(magnification, TRAIT_PRIMITIVE, SPECIES_TRAIT) // Monkeys with sentience should be able to use less primitive tools.
/obj/item/clothing/head/helmet/monkey_sentience/Destroy()
if(magnification)
@@ -78,25 +78,25 @@
return ..()
/obj/item/clothing/head/helmet/monkey_sentience/proc/disconnect()
if(!magnification) //not put on a viable head
if(!magnification) // not put on a viable head
return
//either used up correctly or taken off before polling finished (punish this by having a chance to gib the monkey?)
// either used up correctly or taken off before polling finished (punish this by having a chance to gib the monkey?)
UnregisterSignal(magnification, COMSIG_SPECIES_LOSS)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
ADD_TRAIT(magnification, TRAIT_PRIMITIVE, SPECIES_TRAIT) //We removed it, now that they're back to being dumb, add the trait again.
if(!polling)//put on a viable head, but taken off after polling finished.
ADD_TRAIT(magnification, TRAIT_PRIMITIVE, SPECIES_TRAIT) // We removed it, now that they're back to being dumb, add the trait again.
if(!polling)// put on a viable head, but taken off after polling finished.
if(magnification.client)
to_chat(magnification, span_userdanger("You feel your flicker of sentience ripped away from you, as everything becomes dim..."))
magnification.ghostize(FALSE)
if(prob(10))
switch(rand(1, 4))
if(1) //blood rage
if(1) // blood rage
magnification.ai_controller.blackboard[BB_MONKEY_AGGRESSIVE] = TRUE
if(2) //brain death
if(2) // brain death
magnification.apply_damage(500, BRAIN, BODY_ZONE_HEAD, FALSE, FALSE, FALSE)
if(3) //primal gene (gorilla)
if(3) // primal gene (gorilla)
magnification.gorillize()
if(4) //genetic mass susceptibility (gib)
if(4) // genetic mass susceptibility (gib)
magnification.gib()
magnification = null
@@ -1,6 +1,6 @@
//////////////////////////////
//SKYRAT MODULAR OUTFITS FILE
//PUT ANY NEW ERT OUTFITS HERE
// SKYRAT MODULAR OUTFITS FILE
// PUT ANY NEW ERT OUTFITS HERE
//////////////////////////////
/datum/outfit/centcom/asset_protection
@@ -15,7 +15,7 @@
l_pocket = /obj/item/flashlight
r_pocket = /obj/item/tank/internals/emergency_oxygen/double
belt = /obj/item/storage/belt/security/full
l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin //if this is still bulky make it not bulky and storable on belt/back/bag/exosuit
l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin // if this is still bulky make it not bulky and storable on belt/back/bag/exosuit
id = /obj/item/card/id/advanced/centcom/ert
ears = /obj/item/radio/headset/headset_cent/alt
@@ -24,7 +24,7 @@
backpack_contents = list(/obj/item/storage/box/survival/engineer = 1,\
/obj/item/storage/medkit/regular = 1,\
/obj/item/storage/box/handcuffs = 1,\
/obj/item/crowbar/power = 1, //this is their "all access" pass lmao
/obj/item/crowbar/power = 1, // this is their "all access" pass lmao
)
/datum/outfit/centcom/asset_protection/post_equip(mob/living/carbon/human/person, visualsOnly = FALSE)
@@ -1,3 +1,3 @@
/obj/item/clothing/shoes/workboots/mining
icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' //To keep the old version before #8911
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' //To keep the old version before #8911
icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' // To keep the old version before #8911
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' // To keep the old version before #8911
@@ -1,5 +1,5 @@
/obj/item/clothing/under/rank/cargo
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi' //Anything that was in the cargo.dmi, should be in the cargo_digi.dmi
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi
/obj/item/clothing/under/rank/cargo/tech/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi'
@@ -9,7 +9,7 @@
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi'
//Add a /obj/item/clothing/under/rank/cargo/miner/skyrat if you add miner uniforms
// Add a /obj/item/clothing/under/rank/cargo/miner/skyrat if you add miner uniforms
////////////////////////////////////////
////////////// CARGO TECH //////////////
@@ -22,7 +22,7 @@
can_adjust = FALSE
/obj/item/clothing/under/rank/cargo/tech/skyrat/utility/syndicate
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) //Same stats as the tactical turtleneck.
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) // Same stats as the tactical turtleneck.
has_sensor = NO_SENSORS
/obj/item/clothing/under/rank/cargo/tech/skyrat/long
@@ -42,7 +42,7 @@
desc = "A snug turtleneck sweater worn by the Supply department.."
icon_state = "turtleneck_cargo"
can_adjust = FALSE
/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt
name = "supply skirtleneck"
desc = "A snug turtleneck sweater worn by Supply, this time with a skirt attached!"
@@ -75,7 +75,7 @@
desc = "A snug turtleneck sweater worn by the Quartermaster, characterized by the expensive-looking pair of suit pants."
icon_state = "turtleneck_qm"
can_adjust = FALSE
/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt
name = "quartermaster's skirtleneck"
desc = "A snug turtleneck sweater worn by the Quartermaster, as shown by the elegant double-lining of its silk skirt."
@@ -87,7 +87,7 @@
desc = "A dark suit with a classic cargo vest. For the ultimate master of all things paper."
icon_state = "qmsynd"
has_sensor = NO_SENSORS
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40)
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40)
can_adjust = FALSE
/obj/item/clothing/under/rank/cargo/qm/skyrat/formal
@@ -1,11 +1,11 @@
/obj/item/clothing/under/rank/engineering
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi' //Anything that was in the engineering.dmi, should be in the engineering_digi.dmi
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi
/obj/item/clothing/under/rank/engineering/engineer/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi'
//Add a /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat or /obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat if you add uniforms for either
// Add a /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat or /obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat if you add uniforms for either
//////////////////////////////////////
////////////// ENGINEER //////////////
@@ -15,10 +15,10 @@
desc = "A utility uniform worn by Engineering personnel."
icon_state = "util_eng"
can_adjust = FALSE
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 60, ACID = 20) //Same stats as default engineering jumpsuit
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 60, ACID = 20) // Same stats as default engineering jumpsuit
/obj/item/clothing/under/rank/engineering/engineer/skyrat/utility/syndicate
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) //Same stats as the tactical turtleneck.
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) // Same stats as the tactical turtleneck.
has_sensor = NO_SENSORS
/obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem
@@ -35,4 +35,4 @@
desc = "An EMT jumpsuit used for first responders in situations involving gas and/or chemical hazards. The label reads, \"Not designed for prolonged exposure\"."
icon_state = "hazard_white"
inhand_icon_state = "suit-white"
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, FIRE = 10, ACID = 50) //Worse stats than the proper chem-hazard uniform
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, FIRE = 10, ACID = 50) // Worse stats than the proper chem-hazard uniform
@@ -1,5 +1,5 @@
/obj/item/clothing/under/rank/medical
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi' //Anything that was in the medical.dmi, should be in the medical_digi.dmi
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi
/obj/item/clothing/under/rank/medical/doctor/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
@@ -12,14 +12,14 @@
/obj/item/clothing/under/rank/medical/scrubs/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
icon_state = "scrubswhite" //Because for some reason TG's scrubs dont have an icon on their basetype
desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub." //Just an easter-egg
icon_state = "scrubswhite" // Because for some reason TG's scrubs dont have an icon on their basetype
desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub." // Just an easter-egg
/obj/item/clothing/under/rank/medical/paramedic/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
//Add a 'medical/chief_medical_officer/skyrat' or 'medical/virologist/skyrat' if you make CMO or Virologist uniforms
// Add a 'medical/chief_medical_officer/skyrat' or 'medical/virologist/skyrat' if you make CMO or Virologist uniforms
/obj/item/clothing/under/rank/medical/doctor/skyrat/utility
name = "medical utility uniform"
@@ -27,7 +27,7 @@
icon_state = "util_med"
/obj/item/clothing/under/rank/medical/doctor/skyrat/utility/syndicate
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) //Same stats as the tactical turtleneck.
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) // Same stats as the tactical turtleneck.
has_sensor = NO_SENSORS
/obj/item/clothing/under/rank/medical/chemist/skyrat/formal
@@ -1,5 +1,5 @@
/obj/item/clothing/under/rank/rnd
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi' //Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
/obj/item/clothing/under/rank/rnd/scientist/skyrat
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
@@ -13,7 +13,7 @@
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
//Add a 'rnd/geneticist/skyrat' if you make Geneticist uniforms
// Add a 'rnd/geneticist/skyrat' if you make Geneticist uniforms
///////////////////////////////////////
////////////// SCIENTIST //////////////
@@ -26,7 +26,7 @@
/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate
desc = "A utility uniform worn by Science staff."
armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) //Same stats as the tactical turtleneck.
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 40) // Same stats as the tactical turtleneck.
has_sensor = NO_SENSORS
/obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience
@@ -55,7 +55,7 @@
can_adjust = TRUE
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt //I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit
/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit
name = "research director's jumpskirt"
icon_state = "director_jumpskirt"
body_parts_covered = CHEST|GROIN|ARMS
@@ -66,7 +66,7 @@
///////////////////////////////////////
////////////// OVERRIDES //////////////
//Remind Orion to look over these when TG finishes their science resprites
// Remind Orion to look over these when TG finishes their science resprites
/obj/item/clothing/under/rank/rnd/scientist
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
@@ -47,7 +47,7 @@
fakeable = FALSE
/datum/round_event/spacevine/start()
//list of all the empty floor turfs in the hallway areas
// list of all the empty floor turfs in the hallway areas
var/list/turfs = list()
var/obj/structure/spacevine/vine = new()
@@ -59,11 +59,11 @@
qdel(vine)
//Pick a turf to spawn at if we can
// Pick a turf to spawn at if we can
if(length(turfs))
var/turf/floor = pick(turfs)
//spawn a controller at turf with randomized stats and a single random mutation
new /datum/spacevine_controller(floor, list(pick(subtypesof(/datum/spacevine_mutation))), rand(10,100), rand(1,6), src)
// spawn a controller at turf with randomized stats and a single random mutation
new /datum/spacevine_controller(floor, list(pick(subtypesof(/datum/spacevine_mutation))), rand(10, 100), rand(1, 6), src)
for(var/spawn_venus in 1 to 2)
new /mob/living/simple_animal/hostile/venus_human_trap(floor)
@@ -200,7 +200,7 @@
// Hurts mobs when interacting with a mob - either on spread or buckle
/datum/spacevine_mutation/aggressive_spread //very OP, but im out of other ideas currently
/datum/spacevine_mutation/aggressive_spread // very OP, but im out of other ideas currently
name = "Agressive spreading"
hue = "#316b2f"
severity = SEVERITY_MAJOR
@@ -218,24 +218,24 @@
/// Hurts mobs. To be used when a vine with aggressive spread mutation spreads into the mob's tile or buckles them.
/datum/spacevine_mutation/aggressive_spread/aggrospread_act(obj/structure/spacevine/attacking_vine, mob/living/hit_mob)
var/mob/living/carbon/hit_carbon = hit_mob //If the mob is carbon then it now also exists as hit_carbon, and not just hit_mob.
if(!istype(hit_carbon)) //Living but not a carbon? Maybe a silicon? Can't be wounded so have a big chunk of simple bruteloss with no special effects. They can be entangled.
var/mob/living/carbon/hit_carbon = hit_mob // If the mob is carbon then it now also exists as hit_carbon, and not just hit_mob.
if(!istype(hit_carbon)) // Living but not a carbon? Maybe a silicon? Can't be wounded so have a big chunk of simple bruteloss with no special effects. They can be entangled.
hit_mob.adjustBruteLoss(75)
playsound(hit_mob, 'sound/weapons/whip.ogg', 50, TRUE, -1)
hit_mob.visible_message(span_danger("[hit_mob] is brutally threshed by [attacking_vine]!"), span_userdanger("You are brutally threshed by [attacking_vine]!"))
log_combat(attacking_vine, hit_mob, "aggressively spread into") //You aren't being attacked by the vines. You just happen to stand in their way.
log_combat(attacking_vine, hit_mob, "aggressively spread into") // You aren't being attacked by the vines. You just happen to stand in their way.
return
//If hit_mob IS a carbon subtype (hit_carbon) we move on to pick a more complex damage proc, with damage zones, wounds and armor mitigation.
var/obj/item/bodypart/limb = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD, BODY_ZONE_CHEST) //Picks a random bodypart. Does not runtime even if it's missing.
var/armor = hit_carbon.run_armor_check(limb, MELEE, null, null) //armor = the armor value of that randomly chosen bodypart. Nulls to not print a message, because it would still print on pierce.
var/datum/spacevine_mutation/thorns/has_thorns = locate() in attacking_vine.mutations //Searches for the thorns mutation in the "mutations"-list inside obj/structure/spacevine, and defines T if it finds it.
if(has_thorns && (prob(40))) //If we found the thorns mutation there is now a chance to get stung instead of lashed or smashed.
hit_carbon.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20, 10), sharpness = SHARP_POINTY) //This one gets a bit lower damage because it ignores armor.
hit_carbon.Stun(1 SECONDS) //Stopped in place for a moment.
// If hit_mob IS a carbon subtype (hit_carbon) we move on to pick a more complex damage proc, with damage zones, wounds and armor mitigation.
var/obj/item/bodypart/limb = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD, BODY_ZONE_CHEST) // Picks a random bodypart. Does not runtime even if it's missing.
var/armor = hit_carbon.run_armor_check(limb, MELEE, null, null) // armor = the armor value of that randomly chosen bodypart. Nulls to not print a message, because it would still print on pierce.
var/datum/spacevine_mutation/thorns/has_thorns = locate() in attacking_vine.mutations // Searches for the thorns mutation in the "mutations"-list inside obj/structure/spacevine, and defines T if it finds it.
if(has_thorns && (prob(40))) // If we found the thorns mutation there is now a chance to get stung instead of lashed or smashed.
hit_carbon.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20, 10), sharpness = SHARP_POINTY) // This one gets a bit lower damage because it ignores armor.
hit_carbon.Stun(1 SECONDS) // Stopped in place for a moment.
playsound(hit_mob, 'sound/weapons/pierce.ogg', 50, TRUE, -1)
hit_mob.visible_message(span_danger("[hit_mob] is nailed by a sharp thorn!"), span_userdanger("You are nailed by a sharp thorn!"))
log_combat(attacking_vine, hit_mob, "aggressively pierced") //"Aggressively" for easy ctrl+F'ing in the attack logs.
log_combat(attacking_vine, hit_mob, "aggressively pierced") // "Aggressively" for easy ctrl+F'ing in the attack logs.
else
if(prob(80))
hit_carbon.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20, 10), sharpness = SHARP_EDGED)
@@ -540,14 +540,14 @@
living_eater.adjustFireLoss(-5)
living_eater.adjustToxLoss(-5)
//Allows the vine to walk 1 tile away from turfs
// Allows the vine to walk 1 tile away from turfs
/datum/spacevine_mutation/space_walking
name = "Space walking"
hue = "#0a1330"
severity = SEVERITY_MAJOR
quality = NEGATIVE
//Will prevent the vine from opening doors
// Will prevent the vine from opening doors
/datum/spacevine_mutation/domesticated
name = "Domesticated"
hue = "#a9adb1"
@@ -558,7 +558,7 @@
vine_object.layer = TURF_LAYER
vine_object.plane = FLOOR_PLANE
//Spawns kudzu flooring on spacetiles
// Spawns kudzu flooring on spacetiles
/datum/spacevine_mutation/breach_fixing
name = "Breach fixing"
hue = "#43a1ff"
@@ -576,7 +576,7 @@
space_turf.ChangeTurf(/turf/open/floor/plating/kudzu)
space_turf.color = hue
//Hitting/crossing has a chance to infect you with a disease
// Hitting/crossing has a chance to infect you with a disease
/datum/spacevine_mutation/disease_carrying
name = "Disease carrying"
hue = "#dcf597"
@@ -613,7 +613,7 @@
else
return ..()
//Turns CO2 into oxygen
// Turns CO2 into oxygen
/datum/spacevine_mutation/carbon_recycling
name = "Carbon recycling"
hue = "#008a50"
@@ -643,7 +643,7 @@
anchored = TRUE
density = FALSE
layer = SPACEVINE_LAYER
mouse_opacity = MOUSE_OPACITY_OPAQUE //Clicking anywhere on the turf is good enough
mouse_opacity = MOUSE_OPACITY_OPAQUE // Clicking anywhere on the turf is good enough
pass_flags = PASSTABLE | PASSGRILLE
max_integrity = 50
/// The amount of energy it has to grow/spread
@@ -715,7 +715,7 @@
damage_dealt *= 4
for(var/datum/spacevine_mutation/vine_mutation in mutations)
damage_dealt = vine_mutation.on_hit(src, user, weapon, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
damage_dealt = vine_mutation.on_hit(src, user, weapon, damage_dealt) // on_hit now takes override damage as arg and returns new value for other mutations to permutate further
take_damage(damage_dealt, weapon.damtype, MELEE, 1)
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
@@ -760,7 +760,7 @@
var/list/obj/structure/spacevine/vines
/// The queue relating to what is to be grown next
var/list/growth_queue
///List of currently processed vines, on this level to prevent runtime tomfoolery
/// List of currently processed vines, on this level to prevent runtime tomfoolery
var/list/obj/structure/spacevine/queue_end
/// How quickly it spreads
var/spread_multiplier = 5
@@ -783,8 +783,8 @@
init_subtypes(/datum/spacevine_mutation/, vine_mutations_list)
if(potency != null)
mutativeness = potency / 10
if(production != null && production <= 10) //Prevents runtime in case production is set to 11.
spread_cap *= (11 - production) / 5 //Best production speed of 1 doubles spread_cap to 60 while worst speed of 10 lowers it to 6. Even distribution.
if(production != null && production <= 10) // Prevents runtime in case production is set to 11.
spread_cap *= (11 - production) / 5 // Best production speed of 1 doubles spread_cap to 60 while worst speed of 10 lowers it to 6. Even distribution.
spread_multiplier /= (11 - production) / 5
/datum/spacevine_controller/vv_get_dropdown()
@@ -797,8 +797,8 @@
if(tgui_alert(usr, "Are you sure you want to delete this spacevine cluster?", "Delete Vines", list("Yes", "No")) == "Yes")
DeleteVines()
/datum/spacevine_controller/proc/DeleteVines() //this is kill
QDEL_LIST(vines) //this will also qdel us
/datum/spacevine_controller/proc/DeleteVines() // this is kill
QDEL_LIST(vines) // this will also qdel us
/datum/spacevine_controller/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -837,13 +837,13 @@
var/obj/item/seeds/kudzu/kudzu_seed = new(destroyed_vine.loc)
kudzu_seed.mutations |= destroyed_vine.mutations
kudzu_seed.set_potency(mutativeness * 10)
kudzu_seed.set_production(11 - (spread_cap / initial(spread_cap)) * 5) //Reverts spread_cap formula so resulting seed gets original production stat or equivalent back.
kudzu_seed.set_production(11 - (spread_cap / initial(spread_cap)) * 5) // Reverts spread_cap formula so resulting seed gets original production stat or equivalent back.
qdel(src)
/datum/spacevine_controller/process(delta_time)
var/vine_count = length(vines)
if(!vine_count)
qdel(src) //space vines exterminated. Remove the controller
qdel(src) // space vines exterminated. Remove the controller
return
var/spread_max = round(clamp(delta_time * 0.5 * vine_count / spread_multiplier, 1, spread_cap))
@@ -856,9 +856,9 @@
for(var/datum/spacevine_mutation/mutation in current_vine.mutations)
mutation.process_mutation(current_vine)
if(current_vine.energy >= 2) //If tile is fully grown
if(current_vine.energy >= 2) // If tile is fully grown
current_vine.entangle_mob()
else if(DT_PROB(10, delta_time)) //If tile isn't fully grown
else if(DT_PROB(10, delta_time)) // If tile isn't fully grown
current_vine.grow()
current_vine.spread()
@@ -867,8 +867,8 @@
if(amount_processed >= spread_max)
break
//We can only do so much work per process, but we still want to process everything at some point
//So we shift the queue a bit
// We can only do so much work per process, but we still want to process everything at some point
// So we shift the queue a bit
growth_queue += queue_end
queue_end = list()
@@ -890,14 +890,14 @@
for(var/mob/living/entangled_mob in src.loc)
entangle(entangled_mob)
if(has_buckled_mobs())
break //only capture one mob at a time
break // only capture one mob at a time
/obj/structure/spacevine/proc/entangle(mob/living/entangled_mob)
if(!entangled_mob || isvineimmune(entangled_mob))
return
for(var/datum/spacevine_mutation/vine_mutation in mutations)
vine_mutation.on_buckle(src, entangled_mob)
if((entangled_mob.stat != DEAD) && (entangled_mob.buckled != src) && ishuman(entangled_mob)) //not dead or captured
if((entangled_mob.stat != DEAD) && (entangled_mob.buckled != src) && ishuman(entangled_mob)) // not dead or captured
to_chat(entangled_mob, span_danger("The vines [pick("wind", "tangle", "tighten")] around you!"))
buckle_mob(entangled_mob, 1)
@@ -907,13 +907,13 @@
var/turf/stepturf = get_step(src, direction)
if(!stepturf)
return
//Domesticated removes its ability to open doors
// Domesticated removes its ability to open doors
var/datum/spacevine_mutation/domesticated/domesticated = locate() in mutations
if(!domesticated)
for(var/obj/machinery/door/target_door in stepturf.contents)
if(prob(50))
target_door.open()
//Space walking allows it to spread into space under conditions
// Space walking allows it to spread into space under conditions
var/datum/spacevine_mutation/space_walking/space_mutation = locate() in mutations
if(!isspaceturf(stepturf) && stepturf.Enter(src))
spread_two(stepturf, direction)
@@ -924,20 +924,20 @@
spread_two(stepturf, direction)
/obj/structure/spacevine/proc/spread_two(turf/target_turf, target_dir)
//Locates any vine on target turf. Calls that vine "spot_taken".
// Locates any vine on target turf. Calls that vine "spot_taken".
var/obj/structure/spacevine/spot_taken = locate() in target_turf
//Locates the vine eating trait in our own seed and calls it eating_mutation.
// Locates the vine eating trait in our own seed and calls it eating_mutation.
var/datum/spacevine_mutation/vine_eating/eating_mutation = locate() in mutations
//Proceed if there isn't a vine on the target turf, OR we have vine eater AND target vine is from our seed and doesn't. Vines from other seeds are eaten regardless.
// Proceed if there isn't a vine on the target turf, OR we have vine eater AND target vine is from our seed and doesn't. Vines from other seeds are eaten regardless.
if(!spot_taken || (eating_mutation && (spot_taken && !spot_taken.mutations.Find(eating_mutation))))
if(!master)
return
for(var/datum/spacevine_mutation/vine_mutation in mutations)
vine_mutation.on_spread(src, target_turf) //Only do the on_spread proc if it actually spreads.
target_turf = get_step(src, target_dir) //in case turf changes, to make sure no runtimes happen
var/obj/structure/spacevine/spawning_vine = master.spawn_spacevine_piece(target_turf, src) //Let's do a cool little animate
vine_mutation.on_spread(src, target_turf) // Only do the on_spread proc if it actually spreads.
target_turf = get_step(src, target_dir) // in case turf changes, to make sure no runtimes happen
var/obj/structure/spacevine/spawning_vine = master.spawn_spacevine_piece(target_turf, src) // Let's do a cool little animate
if(NSCOMPONENT(target_dir))
spawning_vine.pixel_y = target_dir == NORTH ? -32 : 32
animate(spawning_vine, pixel_y = 0, time = 1 SECONDS)
@@ -953,12 +953,12 @@
qdel(src)
/obj/structure/spacevine/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD //if you're cold you're safe
return exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD // if you're cold you're safe
/obj/structure/spacevine/atmos_expose(datum/gas_mixture/air, exposed_temperature)
var/volume = air.return_volume()
for(var/datum/spacevine_mutation/vine_mutation in mutations)
if(vine_mutation.process_temperature(src, exposed_temperature, volume)) //If it's ever true we're safe
if(vine_mutation.process_temperature(src, exposed_temperature, volume)) // If it's ever true we're safe
return
qdel(src)
@@ -1,4 +1,4 @@
/datum/language_holder/machine //SYNTHETIC LIZARD & CO LANGUAGE
/datum/language_holder/machine // SYNTHETIC LIZARD & CO LANGUAGE
understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM),
/datum/language/machine = list(LANGUAGE_ATOM))
spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM),
@@ -1,12 +1,12 @@
/****************Explorer's Suit and Mask****************/
/obj/item/clothing/suit/hooded/explorer
icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' //To keep the old version.
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' //To keep the old version.
icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' // To keep the old version.
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi' // To keep the old version.
icon_state = "explorer"
inhand_icon_state = "explorer"
/obj/item/clothing/head/hooded/explorer
icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' //To keep the old version before #8911
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' //To keep the old version before #8911
icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' // To keep the old version before #8911
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi' // To keep the old version before #8911
icon_state = "explorer"
@@ -8,7 +8,7 @@
switch(preview_pref)
if(PREVIEW_PREF_JOB)
mannequin.underwear_visibility = NONE
if(preview_job) //SKYRAT EDIT CHANGE
if(preview_job) // SKYRAT EDIT CHANGE
// Silicons only need a very basic preview since there is no customization for them.
if (istype(preview_job, /datum/job/ai))
return image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH)
@@ -3,12 +3,12 @@
return ..()
// Cat-people always land on their feet
if(isfelinid(src) || istajaran(src))
//Check to make sure legs are working
// Check to make sure legs are working
var/obj/item/bodypart/left_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/right_leg = get_bodypart(BODY_ZONE_R_LEG)
if(left_leg || right_leg || !left_leg.bodypart_disabled || !right_leg.bodypart_disabled)
Stun(0.5 SECONDS) // You can't move and you can't use items
//Nailed it!
// Nailed it!
visible_message(span_notice("[src] lands elegantly on [p_their()] feet!"),
span_warning("You fall [levels > 1 ? "[levels] levels" : "one level"] into [target_turf], perfecting the landing!"))
return
@@ -3,7 +3,7 @@
var/t_He = p_they(TRUE)
var/t_his = p_their(TRUE)
var/t_is = p_are()
//This checks to see if the body is revivable
// This checks to see if the body is revivable
if(!HAS_TRAIT(src, TRAIT_DNR) && (key || !getorgan(/obj/item/organ/brain) || ghost?.can_reenter_corpse))
return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life...")
else
@@ -1,5 +1,5 @@
////
// Typing indicator icon change
// Typing indicator icon change
/mob/living/silicon/robot/set_typing_indicator(state, emote)
var/static/mutable_appearance/type_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/typing_indicator.dmi', "borg0", CHAT_INDICATOR_LAYER)
var/static/mutable_appearance/emote_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/emote_indicator.dmi', "borg0", CHAT_INDICATOR_LAYER)
@@ -7,7 +7,7 @@
if(typing_indicator)
//Tallborg stuff
// Tallborg stuff
if((!robot_resting) && model && model.model_features && (R_TRAIT_TALL in model.model_features))
type_indicator.pixel_y = 16
emote_indicator.pixel_y = 16
@@ -21,7 +21,7 @@
////
// Smoke particle effect for heavy-duty cyborgs
// Smoke particle effect for heavy-duty cyborgs
/datum/component/robot_smoke
/datum/component/robot_smoke/RegisterWithParent()
@@ -119,7 +119,7 @@
////
// Modular solution for alternative tipping visuals
// Modular solution for alternative tipping visuals
/datum/component/tippable/set_tipped_status(mob/living/tipped_mob, new_status = FALSE)
var/mob/living/silicon/robot/robot = tipped_mob
@@ -129,7 +129,7 @@
ADD_TRAIT(tipped_mob, TRAIT_IMMOBILIZED, TIPPED_OVER)
if(R_TRAIT_UNIQUETIP in robot.model.model_features)
robot.icon_state = "[robot.model.cyborg_base_icon]-tipped"
robot.cut_overlays() //Cut eye-lights
robot.cut_overlays() // Cut eye-lights
return
tipped_mob.transform = turn(tipped_mob.transform, 180)
@@ -138,7 +138,7 @@
REMOVE_TRAIT(tipped_mob, TRAIT_IMMOBILIZED, TIPPED_OVER)
if(R_TRAIT_UNIQUETIP in robot.model.model_features)
robot.icon_state = "[robot.model.cyborg_base_icon]"
robot.regenerate_icons() //Return eye-lights
robot.regenerate_icons() // Return eye-lights
return
tipped_mob.transform = turn(tipped_mob.transform, -180)
@@ -8,8 +8,8 @@
icon_dead = "bananaspider_peel"
health = 1
maxHealth = 1
turns_per_move = 5 //this isn't player speed =|
speed = 2 //this is player speed
turns_per_move = 5 // this isn't player speed =|
speed = 2 // this is player speed
loot = list(/obj/item/reagent_containers/food/snacks/deadbanana_spider)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 270
@@ -24,7 +24,7 @@
verb_exclaim = "chitters loudly"
verb_yell = "chitters loudly"
var/squish_chance = 50
var/projectile_density = TRUE //griffons get shot
var/projectile_density = TRUE // griffons get shot
del_on_death = TRUE
/mob/living/simple_animal/banana_spider/ComponentInitialize()
@@ -50,7 +50,7 @@
name = "badnana spider"
desc = "WHY WOULD GOD ALLOW THIS?!"
icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
icon_state = "badnanaspider" //created by Coldstorm on the Skyrat Discord
icon_state = "badnanaspider" // created by Coldstorm on the Skyrat Discord
icon_living = "badnanaspider"
icon_dead = "badnanaspider_d"
maxHealth = 40
@@ -47,7 +47,7 @@
regenerate_icons()
/mob/living/simple_animal/pet/bumbles/bee_friendly()
return TRUE //treaty signed at the Beeneeva convention
return TRUE // treaty signed at the Beeneeva convention
/mob/living/simple_animal/pet/bumbles/Life(delta_time = SSMOBS_DT, times_fired)
if(buckled || client || !DT_PROB(0.5, delta_time))
@@ -14,7 +14,7 @@
gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/pet/dog/markus/treat_message(message)
return client ? pick(speak) : message //markus only talks business
return client ? pick(speak) : message // markus only talks business
/datum/chemical_reaction/mark_reaction
results = list(/datum/reagent/liquidgibs = 15)
@@ -37,7 +37,7 @@
/mob/living/simple_animal/pet/dog/corgi/borgi
name = "E-N"
real_name = "E-N" //Intended to hold the name without altering it.
real_name = "E-N" // Intended to hold the name without altering it.
gender = NEUTER
desc = "It's a borgi."
icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
@@ -72,11 +72,11 @@
var/image/cone = lighting_object.cone
cone.transform = cone.transform.Translate(0, -8)
//Defense protocol
// Defense protocol
RegisterSignal(src, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand)
RegisterSignal(src, COMSIG_PARENT_ATTACKBY, .proc/on_attackby)
RegisterSignal(src, COMSIG_ATOM_HITBY, .proc/on_hitby)
//For traitor objectives
// For traitor objectives
RegisterSignal(src, COMSIG_ATOM_EMAG_ACT, .proc/on_emag_act)
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_attack_hand(datum/source, mob/living/target)
@@ -157,7 +157,7 @@
/mob/living/simple_animal/pet/dog/corgi/borgi/Life(seconds, times_fired)
..()
//spark for no reason
// spark for no reason
if(prob(5))
do_sparks(3, 1, src)
@@ -52,7 +52,7 @@
var/datum/component/overlay_lighting/lighting_object = src.GetComponent(/datum/component/overlay_lighting)
var/image/cone = lighting_object.cone
cone.transform = cone.transform.Translate(0, -16) //adjust the little headlamp
cone.transform = cone.transform.Translate(0, -16) // adjust the little headlamp
/mob/living/simple_animal/pet/poppy/death()
lose_area_sensitivity(INNATE_TRAIT)
@@ -1,4 +1,4 @@
//Syndicate
// Syndicate
/mob/living/simple_animal/hostile/syndicate/civilian/scientist
icon_state = "syndiscientist"
icon_living = "syndiscientist"
@@ -54,7 +54,7 @@
name = "Syndicate Stormtrooper Fox"
desc = "An anthromorphic fox member of the Syndicate."
//Cult
// Cult
/mob/living/simple_animal/hostile/cult
name = "Blood Cultist"
desc = "A follower of the Blood Mother."
@@ -220,7 +220,7 @@
projectiletype = /obj/projectile/magic/arcane_barrage
projectilesound = 'sound/weapons/barragespellhit.ogg'
//Looters
// Looters
/mob/living/simple_animal/hostile/looter
name = "Looter"
desc = "One of the many random looters or bandits of the frontiers. This one is carrying a pipe."
@@ -317,7 +317,7 @@
loot = list(/obj/effect/spawner/random/maintenance/five)
projectiletype = /obj/projectile/beam/laser
//Damaged Borgs
// Damaged Borgs
/mob/living/simple_animal/hostile/evilborg
name = "Malfunctioning Cyborg"
@@ -443,7 +443,7 @@
name = "Corrupt Hound"
desc = "A canine-borg, hacked or malfunctioning. This one is large, imposing, and can pack a big punch."
icon = 'modular_skyrat/master_files/icons/mob/newmobs64x32.dmi'
icon_state = "evilbotelite" //ported from VORE
icon_state = "evilbotelite" // ported from VORE
icon_living = "evilbotelite"
health = 130
maxHealth = 130
@@ -484,7 +484,7 @@
attack_verb_simple = "punch"
attack_sound = 'sound/weapons/genhit2.ogg'
//Beasts
// Beasts
/mob/living/simple_animal/hostile/bigcrab
name = "giant crab"
@@ -777,74 +777,74 @@
gold_core_spawnable = HOSTILE_SPAWN
/mob/living/simple_animal/hostile/engorge
name = "Talon Demon"
desc = "A demonic creature that moves relatively fast, but doesn't do a lot of damage."
icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "engorgedemon"
icon_living = "engorgedemon"
icon_dead = "demondead"
mob_biotypes = MOB_SPIRIT
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/stack/sheet/runed_metal/ten = 1)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
emote_taunt = list("cackles manically")
taunt_chance = 30
speed = 0
maxHealth = 120
health = 120
harm_intent_damage = 8
obj_damage = 20
melee_damage_lower = 10
melee_damage_upper =10
attack_verb_continuous = "claws"
attack_verb_simple = "slice"
attack_sound = 'sound/weapons/bladeslice.ogg'
speak_emote = list("chitters")
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
faction = list("hostile")
pressure_resistance = 200
gold_core_spawnable = NO_SPAWN
name = "Talon Demon"
desc = "A demonic creature that moves relatively fast, but doesn't do a lot of damage."
icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "engorgedemon"
icon_living = "engorgedemon"
icon_dead = "demondead"
mob_biotypes = MOB_SPIRIT
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/stack/sheet/runed_metal/ten = 1)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
emote_taunt = list("cackles manically")
taunt_chance = 30
speed = 0
maxHealth = 120
health = 120
harm_intent_damage = 8
obj_damage = 20
melee_damage_lower = 10
melee_damage_upper =10
attack_verb_continuous = "claws"
attack_verb_simple = "slice"
attack_sound = 'sound/weapons/bladeslice.ogg'
speak_emote = list("chitters")
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
faction = list("hostile")
pressure_resistance = 200
gold_core_spawnable = NO_SPAWN
/mob/living/simple_animal/hostile/devourdem
name = "Devour Lord"
desc = "This creature is terror itself, a manifestation of the raw hunger and avarice of mortals."
icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "devourdemon"
icon_living = "devourdemon"
icon_dead = "demondead"
mob_biotypes = MOB_SPIRIT
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/stack/sheet/runed_metal/ten = 1)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
emote_taunt = list("lets out a low, but horrifying sound")
taunt_chance = 30
speed = 3
maxHealth = 250
health = 250
harm_intent_damage = 12
obj_damage = 40
melee_damage_lower = 25
melee_damage_upper =25
attack_verb_continuous = "slices"
attack_verb_simple = "slice"
attack_sound = 'sound/effects/wounds/crackandbleed.ogg'
speak_emote = list("hums ominously")
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
faction = list("hostile")
pressure_resistance = 200
gold_core_spawnable = NO_SPAWN
name = "Devour Lord"
desc = "This creature is terror itself, a manifestation of the raw hunger and avarice of mortals."
icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "devourdemon"
icon_living = "devourdemon"
icon_dead = "demondead"
mob_biotypes = MOB_SPIRIT
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/stack/sheet/runed_metal/ten = 1)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
emote_taunt = list("lets out a low, but horrifying sound")
taunt_chance = 30
speed = 3
maxHealth = 250
health = 250
harm_intent_damage = 12
obj_damage = 40
melee_damage_lower = 25
melee_damage_upper =25
attack_verb_continuous = "slices"
attack_verb_simple = "slice"
attack_sound = 'sound/effects/wounds/crackandbleed.ogg'
speak_emote = list("hums ominously")
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
faction = list("hostile")
pressure_resistance = 200
gold_core_spawnable = NO_SPAWN
// Vox Raiders
@@ -27,7 +27,7 @@
var/datum/outfit/zombie_outfit
if(zombie_job.outfit)
zombie_outfit = new zombie_job.outfit
//They have claws now.
// They have claws now.
zombie_outfit.r_hand = null
zombie_outfit.l_hand = null
@@ -1,4 +1,4 @@
//We're lowering the power of light fixtures for **mood lighting**
// We're lowering the power of light fixtures for **mood lighting**
/obj/machinery/light
bulb_colour = "#FFEEDD"
bulb_power = 0.75
@@ -85,7 +85,7 @@
burst_size = 5
spread = 25
can_suppress = FALSE
projectile_damage_multiplier = 0.35 //It's like 10.5 damage per bullet, it's close enough to 10 shots
projectile_damage_multiplier = 0.35 // It's like 10.5 damage per bullet, it's close enough to 10 shots
mag_display = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
@@ -169,7 +169,7 @@
/obj/item/gun/ballistic/automatic/tommygun/therealtommy
name = "Tommy gun"
desc = "The classic 'Chicago Typewriter'."
company_flag = null //This is the real deal, you hear?
company_flag = null // This is the real deal, you hear?
/obj/item/gun/ballistic/automatic/ar
name = "\improper NT-ARG 'Boarder'"
@@ -251,7 +251,7 @@
. = ..()
update_appearance()
//ATTACK HAND IGNORING PARENT RETURN VALUE
// ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user, list/modifiers)
if (loc != user)
..()
@@ -340,7 +340,7 @@
fire_delay = 2
can_suppress = FALSE
burst_size = 0
//actions_types = list() SKYRAT EDIT REMOVAL
// actions_types = list() SKYRAT EDIT REMOVAL
fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
fire_sound = 'sound/weapons/laser.ogg'
casing_ejector = FALSE
@@ -1,6 +1,6 @@
/obj/item/gun/ballistic/revolver/ocelot
name = "Colt Peacemaker revolver"
desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." //We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice.
desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." // We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice.
icon_state = "detective_panther"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder
@@ -5,7 +5,7 @@
/obj/item/gun
name = "gun"
desc = "It's a gun. It's pretty terrible, though."
icon = 'modular_skyrat/modules/fixing_missing_icons/ballistic.dmi' //skyrat edit
icon = 'modular_skyrat/modules/fixing_missing_icons/ballistic.dmi' // skyrat edit
icon_state = "detective"
inhand_icon_state = "gun"
worn_icon_state = "gun"
@@ -26,36 +26,36 @@
var/vary_fire_sound = TRUE
var/fire_sound_volume = 50
var/dry_fire_sound = 'sound/weapons/gun/general/dry_fire.ogg'
var/suppressed = null //whether or not a message is displayed when fired
var/suppressed = null // whether or not a message is displayed when fired
var/can_suppress = FALSE
var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
var/suppressed_volume = 60
var/can_unsuppress = TRUE
var/recoil = 0 //boom boom shake the room
var/recoil = 0 // boom boom shake the room
var/clumsy_check = TRUE
var/obj/item/ammo_casing/chambered = null
trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
var/sawn_desc = null //description change if weapon is sawn-off
trigger_guard = TRIGGER_GUARD_NORMAL // trigger guard on the weapon, hulks can't fire them with their big meaty fingers
var/sawn_desc = null // description change if weapon is sawn-off
var/sawn_off = FALSE
var/burst_size = 1 //how large a burst is
var/fire_delay = 0 //rate of fire for burst firing and semi auto
var/firing_burst = 0 //Prevent the weapon from firing again while already firing
var/semicd = 0 //cooldown handler
var/burst_size = 1 // how large a burst is
var/fire_delay = 0 // rate of fire for burst firing and semi auto
var/firing_burst = 0 // Prevent the weapon from firing again while already firing
var/semicd = 0 // cooldown handler
var/weapon_weight = WEAPON_LIGHT
var/dual_wield_spread = 24 //additional spread when dual wielding
var/dual_wield_spread = 24 // additional spread when dual wielding
/// Just 'slightly' snowflakey way to modify projectile damage for projectiles fired from this gun.
var/projectile_damage_multiplier = 1
var/spread = 0 //Spread induced by the gun itself.
var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
var/spread = 0 // Spread induced by the gun itself.
var/randomspread = 1 // Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns
var/obj/item/firing_pin/pin = /obj/item/firing_pin // standard firing pin for most guns
var/can_flashlight = FALSE //if a flashlight can be added or removed if it already has one.
var/can_flashlight = FALSE // if a flashlight can be added or removed if it already has one.
/// True if a gun dosen't need a pin, mostly used for abstract guns like tentacles and meathooks
var/pinless = FALSE
var/obj/item/flashlight/seclite/gun_light
@@ -63,32 +63,32 @@
var/gunlight_state = "flight"
var/gunlight_icon = 'icons/obj/guns/flashlights.dmi'
var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one.
var/can_bayonet = FALSE // if a bayonet can be added or removed if it already has one.
var/bayonet_state = "bayonet"
var/bayonet_icon = 'icons/obj/guns/bayonets.dmi'
var/obj/item/knife/bayonet
var/knife_x_offset = 0
var/knife_y_offset = 0
var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite
var/ammo_x_offset = 0 // used for positioning ammo count overlay on sprite
var/ammo_y_offset = 0
var/flight_x_offset = 0
var/flight_y_offset = 0
//Zooming
// Zooming
var/pb_knockback = 0
var/safety = FALSE ///Internal variable for keeping track whether the safety is on or off
var/has_gun_safety = FALSE ///Whether the gun actually has a gun safety
var/safety = FALSE /// Internal variable for keeping track whether the safety is on or off
var/has_gun_safety = FALSE /// Whether the gun actually has a gun safety
var/datum/action/item_action/toggle_safety/tsafety
var/datum/action/item_action/toggle_firemode/firemode_action
///Current fire selection, can choose between burst, single, and full auto.
/// Current fire selection, can choose between burst, single, and full auto.
var/fire_select = SELECT_SEMI_AUTOMATIC
var/fire_select_index = 1
///What modes does this weapon have? Put SELECT_FULLY_AUTOMATIC in here to enable fully automatic behaviours.
/// What modes does this weapon have? Put SELECT_FULLY_AUTOMATIC in here to enable fully automatic behaviours.
var/list/fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
///if i`1t has an icon for a selector switch indicating current firemode.
/// if i`1t has an icon for a selector switch indicating current firemode.
var/selector_switch_icon = FALSE
/// Bitflags for the company that produces the gun, do not give more than one company.
var/company_flag
@@ -138,13 +138,13 @@
AddComponent(/datum/component/automatic_fire, fire_delay)
/obj/item/gun/Destroy()
if(isobj(pin)) //Can still be the initial path, then we skip
if(isobj(pin)) // Can still be the initial path, then we skip
QDEL_NULL(pin)
if(gun_light)
QDEL_NULL(gun_light)
if(bayonet)
QDEL_NULL(bayonet)
if(chambered) //Not all guns are chambered (EMP'ed energy guns etc)
if(chambered) // Not all guns are chambered (EMP'ed energy guns etc)
QDEL_NULL(chambered)
if(isatom(suppressed))
QDEL_NULL(suppressed)
@@ -168,7 +168,7 @@
clear_suppressor()
. = ..()
///Clears var and updates icon. In the case of ballistic weapons, also updates the gun's weight.
/// Clears var and updates icon. In the case of ballistic weapons, also updates the gun's weight.
/obj/item/gun/proc/clear_suppressor()
if(!can_unsuppress)
return
@@ -186,14 +186,14 @@
if(gun_light)
. += "It has \a [gun_light] [can_flashlight ? "" : "permanently "]mounted on it."
if(can_flashlight) //if it has a light and this is false, the light is permanent.
if(can_flashlight) // if it has a light and this is false, the light is permanent.
. += span_info("[gun_light] looks like it can be <b>unscrewed</b> from [src].")
else if(can_flashlight)
. += "It has a mounting point for a <b>seclite</b>."
if(bayonet)
. += "It has \a [bayonet] [can_bayonet ? "" : "permanently "]affixed to it."
if(can_bayonet) //if it has a bayonet and this is false, the bayonet is permanent.
if(can_bayonet) // if it has a bayonet and this is false, the bayonet is permanent.
. += span_info("[bayonet] looks like it can be <b>unscrewed</b> from [src].")
if(can_bayonet)
. += "It has a <b>bayonet</b> lug on it."
@@ -231,7 +231,7 @@
balloon_alert(user, "only one firemode!")
return
fire_select_index = 1 + fire_select_index % max_mode //Magic math to cycle through this shit!
fire_select_index = 1 + fire_select_index % max_mode // Magic math to cycle through this shit!
fire_select = fire_select_modes[fire_select_index]
@@ -258,7 +258,7 @@
SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
return TRUE
//called after the gun has successfully fired its chambered ammo.
// called after the gun has successfully fired its chambered ammo.
/obj/item/gun/proc/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE)
handle_chamber(empty_chamber, from_firing, chamber_next_round)
SEND_SIGNAL(src, COMSIG_GUN_CHAMBER_PROCESSED)
@@ -267,8 +267,8 @@
return
//check if there's enough ammo/energy/whatever to shoot one time
//i.e if clicking would make it shoot
// check if there's enough ammo/energy/whatever to shoot one time
// i.e if clicking would make it shoot
/obj/item/gun/proc/can_shoot()
return TRUE
@@ -329,12 +329,12 @@
return
if(SEND_SIGNAL(src, COMSIG_GUN_TRY_FIRE, user, target, flag, params) & COMPONENT_CANCEL_GUN_FIRE)
return
if(flag) //It's adjacent, is the user, or is on the user's person
if(target in user.contents) //can't shoot stuff inside us.
if(flag) // It's adjacent, is the user, or is on the user's person
if(target in user.contents) // can't shoot stuff inside us.
return
if(!ismob(target) || user.combat_mode) //melee attack
if(!ismob(target) || user.combat_mode) // melee attack
return
if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected)
if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) // so we can't shoot ourselves (unless mouth selected)
return
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
@@ -343,7 +343,7 @@
if(target_wound.try_treating(src, user))
return // another coward cured!
if(istype(user))//Check if the user can use the gun, if the user isn't alive(turrets) assume it can.
if(istype(user))// Check if the user can use the gun, if the user isn't alive(turrets) assume it can.
var/mob/living/living_user = user
if(!can_trigger_gun(living_user))
return
@@ -352,18 +352,18 @@
handle_suicide(user, target, params)
return
if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot.
if(!can_shoot()) // Just because you can pull the trigger doesn't mean it can shoot.
shoot_with_empty_chamber(user)
return
if(check_botched(user))
return
var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) //returns non-disabled inactive hands
var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) // returns non-disabled inactive hands
if(weapon_weight == WEAPON_HEAVY && (user.get_inactive_held_item() || !other_hand))
balloon_alert(user, "need two hands!")
return
//DUAL (or more!) WIELDING
// DUAL (or more!) WIELDING
var/bonus_spread = 0
var/loop_counter = 0
if(ishuman(user) && user.combat_mode)
@@ -435,7 +435,7 @@
firing_burst = FALSE
return FALSE
if(!issilicon(user))
if(iteration > 1 && !(user.is_holding(src))) //for burst firing
if(iteration > 1 && !(user.is_holding(src))) // for burst firing
firing_burst = FALSE
return FALSE
if(chambered?.loaded_projectile)
@@ -445,7 +445,7 @@
return
if(randomspread)
sprd = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
else //Smart spread
else // Smart spread
sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread))
before_firing(target, user)
if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
@@ -453,7 +453,7 @@
firing_burst = FALSE
return FALSE
else
if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
if(get_dist(user, target) <= 1) // Making sure whether the target is in vicinity for the pointblank shot
shoot_live_shot(user, 1, target, message)
else
shoot_live_shot(user, 0, target, message)
@@ -479,12 +479,12 @@
if(semicd)
return
//Vary by at least this much
// Vary by at least this much
var/base_bonus_spread = 0
var/sprd = 0
var/randomized_gun_spread = 0
var/rand_spr = rand()
if(user && HAS_TRAIT(user, TRAIT_POOR_AIM)) //Nice job hotshot
if(user && HAS_TRAIT(user, TRAIT_POOR_AIM)) // Nice job hotshot
bonus_spread += 35
base_bonus_spread += 10
@@ -508,7 +508,7 @@
shoot_with_empty_chamber(user)
return
else
if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
if(get_dist(user, target) <= 1) // Making sure whether the target is in vicinity for the pointblank shot
shoot_live_shot(user, 1, target, message)
else
shoot_live_shot(user, 0, target, message)
@@ -532,7 +532,7 @@
semicd = FALSE
/obj/item/gun/attack(mob/target, mob/living/user)
if(user.combat_mode) //Flogging
if(user.combat_mode) // Flogging
if(bayonet)
target.attackby(bayonet, user)
return
@@ -565,7 +565,7 @@
alight.Grant(user)
else if(istype(attacking_item, /obj/item/knife))
var/obj/item/knife/attaching_knife = attacking_item
if(!can_bayonet || !attaching_knife.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
if(!can_bayonet || !attaching_knife.bayonet || bayonet) // ensure the gun has an attachment point available, and that the knife is compatible with it.
return ..()
if(!user.transferItemToLoc(attacking_item, src))
return
@@ -582,7 +582,7 @@
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if((can_flashlight && gun_light) && (can_bayonet && bayonet)) //give them a choice instead of removing both
if((can_flashlight && gun_light) && (can_bayonet && bayonet)) // give them a choice instead of removing both
var/list/possible_items = list(gun_light, bayonet)
var/obj/item/item_to_remove = tgui_input_list(user, "Attachment to remove", "Attachment Removal", sort_names(possible_items))
if(isnull(item_to_remove))
@@ -591,10 +591,10 @@
return
return remove_gun_attachment(user, tool, item_to_remove)
else if(gun_light && can_flashlight) //if it has a gun_light and can_flashlight is false, the flashlight is permanently attached.
else if(gun_light && can_flashlight) // if it has a gun_light and can_flashlight is false, the flashlight is permanently attached.
return remove_gun_attachment(user, tool, gun_light, "unscrewed")
else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed
else if(bayonet && can_bayonet) // if it has a bayonet, and the bayonet can be removed
return remove_gun_attachment(user, tool, bayonet, "unfix")
else if(pin && user.is_holding(src))
@@ -604,7 +604,7 @@
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
if(!pin) // check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is pried out of [src] by [user], destroying the pin in the process."),
span_warning("You pry [pin] out with [tool], destroying the pin in the process."), null, 3)
@@ -624,7 +624,7 @@
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, 5, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
if(!pin) // check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is spliced out of [src] by [user], melting part of the pin in the process."),
span_warning("You splice [pin] out of [src] with [tool], melting part of the pin in the process."), null, 3)
@@ -644,7 +644,7 @@
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
if(!pin) // check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay
return
user.visible_message(span_notice("[pin] is ripped out of [src] by [user], mangling the pin in the process."),
span_warning("You rip [pin] out of [src] with [tool], mangling the pin in the process."), null, 3)
@@ -743,8 +743,8 @@
. = ..()
if(gun_light)
var/mutable_appearance/flashlight_overlay
var/state = "[gunlight_state][gun_light.on? "_on":""]" //Generic state.
if(gun_light.icon_state in icon_states(gunlight_icon)) //Snowflake state?
var/state = "[gunlight_state][gun_light.on? "_on":""]" // Generic state.
if(gun_light.icon_state in icon_states(gunlight_icon)) // Snowflake state?
state = gun_light.icon_state
flashlight_overlay = mutable_appearance(gunlight_icon, state)
flashlight_overlay.pixel_x = flight_x_offset
@@ -754,7 +754,7 @@
if(bayonet)
var/mutable_appearance/knife_overlay
var/state = bayonet_state
if(bayonet.icon_state in icon_states(bayonet_icon)) //Snowflake state?
if(bayonet.icon_state in icon_states(bayonet_icon)) // Snowflake state?
state = bayonet.icon_state
knife_overlay = mutable_appearance(bayonet_icon, state)
knife_overlay.pixel_x = knife_x_offset
@@ -801,12 +801,12 @@
if(chambered.loaded_projectile.wound_bonus != CANT_WOUND)
chambered.loaded_projectile.wound_bonus -= 5
/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins
/obj/item/gun/proc/unlock() // used in summon guns and as a convience for admins
if(pin)
qdel(pin)
pin = new /obj/item/firing_pin
//Happens before the actual projectile creation
// Happens before the actual projectile creation
/obj/item/gun/proc/before_firing(atom/target, mob/user)
return
@@ -8,7 +8,7 @@
for(var/reagent_type in reagent_list)
vol_temp = reagent_list[reagent_type]
vol_counter += vol_temp
raw_reagent = reagent_type //Not initialized
raw_reagent = reagent_type // Not initialized
cached_color = initial(raw_reagent.color)
if(!mixcolor)
@@ -1,6 +1,6 @@
/datum/addiction/nicotine
name = "nicotine"
addiction_relief_treshold = 0.03 //This used to be 0.01.
addiction_relief_treshold = 0.03 // This used to be 0.01.
withdrawal_stage_messages = list("Feel like having a smoke...", "I really need a smoke now...", "I can't take it, I really need a smoke now!")
medium_withdrawal_moodlet = /datum/mood_event/nicotine_withdrawal_moderate
@@ -10,6 +10,6 @@
name = "meat product"
id = "meatp"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass= 125) //Monkey Cube is more efficient, but this is easier on the chef.
materials = list(/datum/material/biomass= 125) // Monkey Cube is more efficient, but this is easier on the chef.
build_path = /obj/item/food/meat/slab/meatproduct
category = list("initial", "Food")
@@ -3,7 +3,7 @@
id = "adv_vision"
display_name = "Combat Cybernetic Eyes"
description = "Military grade combat implants to improve vision."
prereq_ids = list("combat_cyber_implants","alien_bio")
prereq_ids = list("combat_cyber_implants", "alien_bio")
design_ids = list(
"ci-thermals",
"ci-xray",
@@ -9,7 +9,7 @@
var/sound_range = 20
//call the shuttle to destination target_dock
// call the shuttle to destination target_dock
/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/target_dock, forced = FALSE)
if(!check_dock(target_dock) && !forced)
testing("check_dock failed on request for [src]")
@@ -23,7 +23,7 @@
switch(mode)
if(SHUTTLE_CALL)
if(!can_be_called_in_transit) //SKYRAT EDIT ADDITION
if(!can_be_called_in_transit) // SKYRAT EDIT ADDITION
return
if(target_dock == destination)
if(timeLeft(1) < callTime * engine_coeff)
@@ -32,7 +32,7 @@
destination = target_dock
setTimer(callTime * engine_coeff)
if(SHUTTLE_RECALL)
if(!can_be_called_in_transit) //SKYRAT EDIT ADDITION
if(!can_be_called_in_transit) // SKYRAT EDIT ADDITION
return
if(target_dock == destination)
setTimer(callTime * engine_coeff - timeLeft(1))
@@ -44,10 +44,10 @@
destination = target_dock
mode = SHUTTLE_IGNITING
bolt_all_doors()
play_engine_sound(src, TRUE) //SKYRAT EDIT ADDITION
play_engine_sound(src, TRUE) // SKYRAT EDIT ADDITION
setTimer(ignitionTime)
/obj/docking_port/mobile/proc/bolt_all_doors() //Expensive procs :(
/obj/docking_port/mobile/proc/bolt_all_doors() // Expensive procs :(
var/list/turfs = return_ordered_turfs(x, y, z, dir)
for(var/i in 1 to turfs.len)
var/turf/checked_turf = turfs[i]
@@ -69,7 +69,7 @@
for(var/mob/hearing_mob in range(sound_range, distant_source))
if(hearing_mob?.client)
var/dist = get_dist(hearing_mob.loc, distant_source.loc)
var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) //Every tile decreases sound volume by 5
var/vol = clamp(50 - ((dist - 7) * 5), 10, 50) // Every tile decreases sound volume by 5
if(takeoff)
if(hearing_mob.client?.prefs?.toggles & SOUND_SHIP_AMBIENCE)
hearing_mob.playsound_local(distant_source, takeoff_sound, vol)
@@ -15,7 +15,7 @@
range = -1
include_user = TRUE
cooldown_min = 300 //37.5 deciseconds reduction per rank
cooldown_min = 300 // 37.5 deciseconds reduction per rank
action_icon_state = "spell_default"
/obj/effect/proc_holder/spell/targeted/stimpack/cast(mob/living/user)
@@ -24,5 +24,5 @@
user.SetKnockdown(0)
user.setStaminaLoss(0)
user.set_resting(FALSE)
user.reagents.add_reagent(/datum/reagent/medicine/stimulants, 3) //Ideally this comes out to a bit less than 30 seconds with tidi taken into account.
user.reagents.add_reagent(/datum/reagent/medicine/stimulants, 3) // Ideally this comes out to a bit less than 30 seconds with tidi taken into account.
return TRUE
@@ -21,7 +21,7 @@
if((!human_owner.shoes) || (human_owner.shoes.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)))
shoes_compatible = TRUE
if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible
if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) // If the uniform is hidden, it doesnt matter if its compatible
limb_id = "digitigrade"
else
limb_id = base_limb_id
@@ -25,7 +25,7 @@
icon_greyscale = 'modular_skyrat/master_files/icons/mob/species/ghoul_bodyparts.dmi'
limb_id = SPECIES_GHOUL
//LIMBS
// LIMBS
/obj/item/bodypart/r_arm/mutant/ghoul/drop_limb(special)
..() // Create Meat, Remove Limb
@@ -1,7 +1,7 @@
// Roundstartslimes!
/obj/item/bodypart/head/roundstartslime
limb_id = SPECIES_SLIMEPERSON //same icon state, no real reason to make a new define
limb_id = SPECIES_SLIMEPERSON // same icon state, no real reason to make a new define
is_dimorphic = TRUE
icon_greyscale = 'modular_skyrat/master_files/icons/mob/species/slime_parts_greyscale.dmi'
@@ -1,17 +1,17 @@
/////////////////////////////
//SKYRAT MODULAR UPLINK ITEMS
// SKYRAT MODULAR UPLINK ITEMS
/////////////////////////////
//Place any new uplink items in this file, and explain what they do
// Place any new uplink items in this file, and explain what they do
//BUNDLES
// BUNDLES
/* /datum/uplink_item/bundles_tc/spaceassassin
name = "Space Assassin Bundle"
desc = "A unique kit commonly used by military infiltrators and the like to get the drop on unsuspecting crew, perfect for the aspiring covert assassin and stealthy manipulator."
item = /obj/item/storage/box/syndie_kit/spaceassassin
cost = 30 //40 tc would have been better
*/ //To be balanced
//DANGEROUS
cost = 30 // 40 tc would have been better
*/ // To be balanced
// DANGEROUS
/datum/uplink_item/dangerous/aps_traitor
name = "Stechkin APS Machine Pistol"
desc = "An ancient Soviet machine pistol, refurbished for the modern age. Uses 9mm auto rounds in 15-round magazines and is compatible \
@@ -82,7 +82,7 @@
cost = 20
progression_minimum = 25 MINUTES
//STEALTHY WEAPONS
// STEALTHY WEAPONS
/datum/uplink_item/stealthy_weapons/cqc_traitor
name = "CQC Manual"
desc = "A manual that teaches a single user tactical Close-Quarters Combat before self-destructing."
@@ -108,7 +108,7 @@
surplus = 0
progression_minimum = 10 MINUTES
//STEALTHY TOOOLS
// STEALTHY TOOOLS
/datum/uplink_item/stealthy_tools/infiltratormask
name = "Voice-Muffling Balaclava"
desc = "A balaclava that muffles your voice, masking your identity. Also provides flash immunity!"
@@ -121,16 +121,16 @@
comes with all the fluff of the original, but with an upgraded microchip - allowing for the storage of all \
standard Nanotrasen access codes in one conveinent package. Now in glossy olive by default!"
item = /obj/item/card/id/advanced/chameleon/black
cost = 5 //Since this gives the possibility for All Access, this is a BIGBOY tool. Compared to oldbases' skeleton key, though, you still have to steal it somehow.
cost = 5 // Since this gives the possibility for All Access, this is a BIGBOY tool. Compared to oldbases' skeleton key, though, you still have to steal it somehow.
progression_minimum = 20 MINUTES
/datum/uplink_item/stealthy_tools/advanced_cham_headset
name = "Advanced Chameleon Headset" //Consider this a standin for the oldbase headset upgrader.
name = "Advanced Chameleon Headset" // Consider this a standin for the oldbase headset upgrader.
desc = "A premium model Chameleon Headset. All the features you love of the original, but now with flashbang \
protection, voice amplification, memory-foam, HD Sound Quality, and extra-wide spectrum dial. Usually reserved \
for high-ranking Cybersun officers, a few spares have been reserved for field agents."
item = /obj/item/radio/headset/chameleon/advanced
cost = 4 //Also a BIGBOY tool. Though inconvienent to wield, this allows the wearer to spy and interact with any one frequency they desire, even without the proper encryption key, along with flashbang protection and loudmode. Cannot breach syndiecomms by itself.
cost = 4 // Also a BIGBOY tool. Though inconvienent to wield, this allows the wearer to spy and interact with any one frequency they desire, even without the proper encryption key, along with flashbang protection and loudmode. Cannot breach syndiecomms by itself.
progression_minimum = 20 MINUTES
/datum/uplink_item/stealthy_tools/syndieshotglasses
@@ -139,7 +139,7 @@
guaranteed to knock someone on their ass with a hearty dose of bacchus blessing. Look for the Snake underneath \
to tell these are the real deal. Box of 7."
item = /obj/item/storage/box/syndieshotglasses
cost = 2 //These are taken nearly exactly from Goon, very fun tool.
cost = 2 // These are taken nearly exactly from Goon, very fun tool.
restricted_roles = list(JOB_BARTENDER)
/datum/uplink_item/stealthy_tools/announcement
@@ -152,7 +152,7 @@
restricted = TRUE
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
//EXPLOSIVES
// EXPLOSIVES
/datum/uplink_item/explosives/buzzkill_traitor
name = "Buzzkill Grenade Box"
desc = "A box with three grenades that release a swarm of angry bees upon activation. These bees indiscriminately attack friend or foe \
@@ -185,7 +185,7 @@
cost = 5
progression_minimum = 15 MINUTES
//DEVICE TOOLS
// DEVICE TOOLS
/datum/uplink_item/device_tools/syndie_jaws_of_life_traitor
name = "Syndicate Jaws of Life"
desc = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \
@@ -232,7 +232,7 @@
surplus = 90
progression_minimum = 20 MINUTES
//AMMO
// AMMO
/datum/uplink_item/ammo/pistolaps_traitor
name = "9mm Stechkin APS Magazine"
desc = "An additional 15-round 9mm magazine, compatible with the Stechkin APS machine pistol."
@@ -301,7 +301,7 @@
item = /obj/item/ammo_box/magazine/m12g/empty
purchasable_from = ALL
//SUITS
// SUITS
/datum/uplink_item/suits/standard_armor
name = "Standard Armor Vest"
@@ -325,7 +325,7 @@
item = /obj/item/mod/module/energy_shield
cost = 12
//HELMETS
// HELMETS
/datum/uplink_item/suits/swathelmet_traitor
name = "Syndicate Helmet"
desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern."
@@ -333,7 +333,7 @@
cost = 2
progression_minimum = 10 MINUTES
//IMPLANTS
// IMPLANTS
/datum/uplink_item/implants/antistun_traitor
name = "CNS Rebooter Implant"
desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon."
@@ -342,16 +342,16 @@
surplus = 0
progression_minimum = 15 MINUTES
//JOBS ONLY
/datum/uplink_item/role_restricted/cultkitsr //Ported from beestation
// JOBS ONLY
/datum/uplink_item/role_restricted/cultkitsr // Ported from beestation
name = "Cult Construct Kit"
desc = "Recovered from an abandoned Nar'sie cult lair, two construct shells and a stash of empty soulstones was found. These were purified to prevent occult contamination and have been put in a belt so they may be used as an accessible source of disposable minions. The construct shells have been packaged into two beacons for rapid and portable deployment."
item = /obj/item/storage/box/syndie_kit/cultkitsr
cost = 15 //If used correctly, You actually get several servants or just get fucked over because no ghosts want to be a shade.
cost = 15 // If used correctly, You actually get several servants or just get fucked over because no ghosts want to be a shade.
restricted_roles = list(JOB_CHAPLAIN)
progression_minimum = 20 MINUTES
//LOADOUTS
// LOADOUTS
/datum/uplink_item/bundles_tc/recon
name = "Reconnaisance bundle"
desc = "Get in and get out as quickly as you came with this unique kit of gear specialized in infiltration and observation."
@@ -385,7 +385,7 @@
desc = "Fight the power with this frontline combatant kit, featuring armor and armaments commonly utilized by assault operative teams."
item = /obj/item/storage/backpack/duffelbag/syndie/loadout/metaops
cost = 23
progression_minimum = 35 MINUTES //+10 minutes because of the bulldog
progression_minimum = 35 MINUTES // +10 minutes because of the bulldog
/datum/uplink_item/bundles_tc/bond
name = "Classic Spy bundle"
@@ -399,7 +399,7 @@
desc = "Wield unlimited power with this extremely effective combative kit, guaranteed to give the user efficient staying potential in any confrontation."
item = /obj/item/storage/backpack/duffelbag/syndie/loadout/darklord
cost = 20
progression_minimum = 30 MINUTES //+5 minutes for the desword
progression_minimum = 30 MINUTES // +5 minutes for the desword
/datum/uplink_item/bundles_tc/bee
name = "Buzzy bundle"
@@ -427,28 +427,28 @@
desc = "Love Donk Pockets? Want to shill Donk Co. Toys? This bundle is for you! Contains some DonkSoft guns, a vending machine, restocking units, and a box of Donk Pockets."
item = /obj/item/storage/backpack/duffelbag/syndie/loadout/donkshillkit
cost = 10
progression_minimum = 15 MINUTES //-10 because it's a weak bundle
progression_minimum = 15 MINUTES // -10 because it's a weak bundle
/datum/uplink_item/bundles_tc/downtownspecial
name = "Downtown Special bundle"
desc = "Ayyy fuggedaboudit! This bundle contains everything to be your own one man mafioso. Including an icon of the Virgin Mary for your own authentic mafia nickname. Gang members not included."
item = /obj/item/storage/backpack/duffelbag/syndie/loadout/downtownspecial
cost = 25
progression_minimum = 30 MINUTES //+5 for the thompson
progression_minimum = 30 MINUTES // +5 for the thompson
/datum/uplink_item/bundles_tc/ocelotfoxtrot
name = "Snake Eater bundle"
desc = "A kit themed around one certain gun spinning cat. Includes his famous colt special, and personalised ammo."
item = /obj/item/storage/box/syndie_kit/loadout/ocelotfoxtrot
cost = 15
progression_minimum = 30 MINUTES //+5 minutes for the .357 peacemaker
progression_minimum = 30 MINUTES // +5 minutes for the .357 peacemaker
/datum/uplink_item/bundles_tc/nt_impostor
name = "Corporate Deceit bundle"
desc = "Don the identities of the most powerful men and women in Nanotrasen, and pull strings from the shadows as you please with this specialized kit."
item = /obj/item/storage/box/syndie_kit/loadout/nt_impostor
cost = 20
progression_minimum = 30 MINUTES //+5 minutes for the .357
progression_minimum = 30 MINUTES // +5 minutes for the .357
/datum/uplink_item/bundles_tc/lasermanbundle
name = "Laserman bundle"
@@ -6,14 +6,14 @@
var/static/list/snow_typecache = typecacheof(list(/turf/open/misc/asteroid/snow/icemoon, /turf/open/floor/plating/snowed/smoothed/icemoon))
/obj/vehicle/ridden/atv/snowmobile/Moved()
. = ..()
if (QDELETED(src))
return
var/datum/component/riding/riding_component = LoadComponent(/datum/component/riding)
if(snow_typecache[loc.type])
riding_component.vehicle_move_delay = 1
else
riding_component.vehicle_move_delay = 2
. = ..()
if (QDELETED(src))
return
var/datum/component/riding/riding_component = LoadComponent(/datum/component/riding)
if(snow_typecache[loc.type])
riding_component.vehicle_move_delay = 1
else
riding_component.vehicle_move_delay = 2
/obj/vehicle/ridden/atv/snowmobile/snowcurity
name = "security snowmobile"