mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
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:
@@ -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)
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
+10
-10
@@ -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)
|
||||
|
||||
+6
-6
@@ -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 ..()
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
+15
-15
@@ -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)
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+72
-72
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
-1
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user