mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-30 08:38:13 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into flan
This commit is contained in:
@@ -357,6 +357,17 @@
|
||||
corpseid = 1
|
||||
corpseidjob = "Sif Defense Force Patrolman"
|
||||
|
||||
/obj/effect/landmark/corpse/sifcop
|
||||
name = "SGPD Officer"
|
||||
corpseuniform = /obj/item/clothing/under/sifcop
|
||||
corpsebelt = /obj/item/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/riot/sifcop
|
||||
corpsegloves = /obj/item/clothing/gloves/duty
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseid = 1
|
||||
corpseidjob = "SifGuard Police Division Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
@@ -372,7 +383,7 @@
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpsebelt = /obj/item/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/hedberg
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpseid = 1
|
||||
|
||||
@@ -77,3 +77,32 @@
|
||||
|
||||
// Runechat messages
|
||||
var/list/seen_messages
|
||||
|
||||
///////////
|
||||
// INPUT //
|
||||
///////////
|
||||
|
||||
/// Bitfield of modifier keys (Shift, Ctrl, Alt) held currently.
|
||||
var/mod_keys_held = 0
|
||||
/// Bitfield of movement keys (WASD/Cursor Keys) held currently.
|
||||
var/move_keys_held = 0
|
||||
|
||||
/// These next two vars are to apply movement for keypresses and releases made while move delayed.
|
||||
/// Because discarding that input makes the game less responsive.
|
||||
|
||||
/// Bitfield of movement dirs that were pressed down *this* cycle (even if not currently held).
|
||||
/// Note that only dirs that actually are first pressed down during this cycle are included, if it was still held from last cycle it won't be in here.
|
||||
/// On next move, add this dir to the move that would otherwise be done
|
||||
var/next_move_dir_add
|
||||
|
||||
/// Bitfield of movement dirs that were released *this* cycle (even if currently held).
|
||||
/// Note that only dirs that were already held at the start of this cycle are included, if it pressed then released it won't be in here.
|
||||
/// On next move, subtract this dir from the move that would otherwise be done
|
||||
var/next_move_dir_sub
|
||||
|
||||
#ifdef CARDINAL_INPUT_ONLY
|
||||
|
||||
/// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode.
|
||||
var/last_move_dir_pressed = NONE
|
||||
|
||||
#endif
|
||||
@@ -161,9 +161,12 @@
|
||||
webbingtype["webbing, brown"] = /obj/item/clothing/accessory/storage/brown_vest
|
||||
webbingtype["webbing, black"] = /obj/item/clothing/accessory/storage/black_vest
|
||||
webbingtype["webbing, white"] = /obj/item/clothing/accessory/storage/white_vest
|
||||
webbingtype["webbing, simple"] = /obj/item/clothing/accessory/storage/webbing
|
||||
gear_tweaks += new/datum/gear_tweak/path(webbingtype)
|
||||
|
||||
/datum/gear/accessory/webbing_simple
|
||||
display_name = "webbing, simple"
|
||||
path = /obj/item/clothing/accessory/storage/webbing
|
||||
|
||||
/datum/gear/accessory/drop_pouches
|
||||
display_name = "drop pouches selection (Engineering, Security, Medical)"
|
||||
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
glassestype["glasses, thin frame"] = /obj/item/clothing/glasses/thin
|
||||
gear_tweaks += new/datum/gear_tweak/path(glassestype)
|
||||
|
||||
/datum/gear/eyes/glasses/monocle
|
||||
/datum/gear/eyes/monocle
|
||||
display_name = "monocle"
|
||||
path = /obj/item/clothing/glasses/monocle
|
||||
|
||||
@@ -130,12 +130,11 @@
|
||||
display_name = "optical material scanners, prescription (Mining)"
|
||||
path = /obj/item/clothing/glasses/material/prescription
|
||||
|
||||
|
||||
/datum/gear/eyes/glasses/fakesun
|
||||
/datum/gear/eyes/fakesun
|
||||
display_name = "sunglasses, stylish"
|
||||
path = /obj/item/clothing/glasses/fakesunglasses
|
||||
|
||||
/datum/gear/eyes/glasses/fakeaviator
|
||||
/datum/gear/eyes/fakeaviator
|
||||
display_name = "sunglasses, stylish aviators"
|
||||
path = /obj/item/clothing/glasses/fakesunglasses/aviator
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
path = /obj/item/clothing/gloves/sterile/nitrile
|
||||
cost = 2
|
||||
/datum/gear/gloves/evening
|
||||
display_name = "gloves, evening"
|
||||
display_name = "gloves, evening (colorable)"
|
||||
path = /obj/item/clothing/gloves/evening
|
||||
cost = 1
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
cost = 1
|
||||
|
||||
/datum/gear/gloves/fingerless
|
||||
display_name = "gloves, fingerless"
|
||||
display_name = "gloves, fingerless (colorable)"
|
||||
path = /obj/item/clothing/gloves/fingerless
|
||||
cost = 1
|
||||
|
||||
|
||||
@@ -81,20 +81,20 @@
|
||||
caps[initial(cap_type.name)] = cap_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(caps))
|
||||
|
||||
/datum/gear/head/cap/flat
|
||||
/datum/gear/head/cap_flat
|
||||
display_name = "cap, flat brown"
|
||||
path = /obj/item/clothing/head/flatcap
|
||||
|
||||
/datum/gear/head/cap/med
|
||||
/datum/gear/head/cap_med
|
||||
display_name = "cap, medical (Medical)"
|
||||
path = /obj/item/clothing/head/soft/med
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Search and Rescue")
|
||||
|
||||
/datum/gear/head/cap/white
|
||||
/datum/gear/head/cap_colorable
|
||||
display_name = "cap (colorable)"
|
||||
path = /obj/item/clothing/head/soft/mime
|
||||
|
||||
/datum/gear/head/cap/white/New()
|
||||
/datum/gear/head/cap_colorable/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -298,11 +298,11 @@
|
||||
welding_helmets[initial(welding_helmet_type.name)] = welding_helmet_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(welding_helmets))
|
||||
|
||||
/datum/gear/head/beret/solgov
|
||||
/datum/gear/head/beret_gov
|
||||
display_name = "beret, government selection"
|
||||
path = /obj/item/clothing/head/beret/solgov
|
||||
|
||||
/datum/gear/head/beret/solgov/New()
|
||||
/datum/gear/head/beret_gov/New()
|
||||
..()
|
||||
var/list/sols = list()
|
||||
for(var/sol_style in typesof(/obj/item/clothing/head/beret/solgov))
|
||||
@@ -368,3 +368,32 @@
|
||||
/datum/gear/head/plaguedoctor2
|
||||
display_name = "hat, golden plague doctor"
|
||||
path = /obj/item/clothing/head/plaguedoctorhat/gold
|
||||
|
||||
/datum/gear/head/nonla
|
||||
display_name = "non la"
|
||||
path = /obj/item/clothing/head/nonla
|
||||
|
||||
/datum/gear/head/buckethat
|
||||
display_name = "hat, bucket"
|
||||
path = /obj/item/clothing/head/buckethat
|
||||
|
||||
/datum/gear/head/buckethat/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/redcoat
|
||||
display_name = "hat, tricorne"
|
||||
path =/obj/item/clothing/head/redcoat
|
||||
|
||||
/datum/gear/head/tanker
|
||||
display_name = "tanker cap selection"
|
||||
path = /obj/item/clothing/head/hardhat
|
||||
cost = 2
|
||||
|
||||
/datum/gear/head/tanker/New()
|
||||
..()
|
||||
var/list/tankercaps = list()
|
||||
for(var/tankercap in typesof(/obj/item/clothing/head/helmet/tank))
|
||||
var/obj/item/clothing/head/helmet/tank/cap_type = tankercap
|
||||
tankercaps[initial(cap_type.name)] = cap_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tankercaps))
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
/datum/gear/shoes/workboots/toeless
|
||||
display_name = "workboots, toe-less"
|
||||
path = /obj/item/clothing/shoes/boots/workboots/toeless
|
||||
cost = 2
|
||||
|
||||
/datum/gear/shoes/colored
|
||||
display_name = "shoes, colored selection"
|
||||
@@ -73,7 +72,7 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
|
||||
|
||||
/datum/gear/shoes/flipflops
|
||||
display_name = "flip flops"
|
||||
display_name = "flip flops (colorable)"
|
||||
path = /obj/item/clothing/shoes/flipflop
|
||||
|
||||
/datum/gear/shoes/flipflops/New()
|
||||
@@ -81,7 +80,7 @@
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/shoes/athletic
|
||||
display_name = "shoes, athletic"
|
||||
display_name = "shoes, athletic (colorable)"
|
||||
path = /obj/item/clothing/shoes/athletic
|
||||
|
||||
/datum/gear/shoes/athletic/New()
|
||||
@@ -89,7 +88,7 @@
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/shoes/skater
|
||||
display_name = "shoes, skater"
|
||||
display_name = "shoes, skater (colorable)"
|
||||
path = /obj/item/clothing/shoes/skater
|
||||
|
||||
/datum/gear/shoes/skater/New()
|
||||
@@ -135,7 +134,7 @@
|
||||
path = /obj/item/clothing/shoes/dress/white
|
||||
|
||||
/datum/gear/shoes/heels
|
||||
display_name = "high heels"
|
||||
display_name = "high heels (colorable)"
|
||||
path = /obj/item/clothing/shoes/heels
|
||||
|
||||
/datum/gear/shoes/heels/New()
|
||||
@@ -146,11 +145,11 @@
|
||||
display_name = "bunny slippers"
|
||||
path = /obj/item/clothing/shoes/slippers
|
||||
|
||||
/datum/gear/shoes/boots/winter
|
||||
/datum/gear/shoes/winter_boots
|
||||
display_name = "boots, winter selection"
|
||||
path = /obj/item/clothing/shoes/boots/winter
|
||||
|
||||
/datum/gear/shoes/boots/winter/New()
|
||||
/datum/gear/shoes/winter_boots/New()
|
||||
..()
|
||||
var/boottype = list()
|
||||
boottype["winter boots, atmospherics"] = /obj/item/clothing/shoes/boots/winter/atmos
|
||||
|
||||
@@ -151,21 +151,21 @@
|
||||
labcoattype["labcoat, yellow"] = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
|
||||
gear_tweaks += new/datum/gear_tweak/path(labcoattype)
|
||||
|
||||
/datum/gear/suit/labcoat/rd
|
||||
/datum/gear/suit/labcoat_rd
|
||||
display_name = "labcoat, research director (RD)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/rd
|
||||
allowed_roles = list("Research Director")
|
||||
|
||||
/datum/gear/suit/labcoat/emt
|
||||
/datum/gear/suit/labcoat_emt
|
||||
display_name = "labcoat, EMT (Medical)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
|
||||
/datum/gear/suit/miscellaneous/labcoat
|
||||
/datum/gear/suit/plague_coat
|
||||
display_name = "plague doctor's coat"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor
|
||||
|
||||
/datum/gear/suit/roles/surgical_apron
|
||||
/datum/gear/suit/surgical_apron
|
||||
display_name = "apron, surgical"
|
||||
path = /obj/item/clothing/suit/surgicalapron
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer")
|
||||
@@ -187,11 +187,11 @@
|
||||
ponchos[initial(poncho.name)] = poncho
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos))
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak
|
||||
/datum/gear/suit/cloak
|
||||
display_name = "cloak, departmental selection"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/New()
|
||||
/datum/gear/suit/cloak/New()
|
||||
..()
|
||||
var/list/cloaks = list()
|
||||
for(var/cloak_style in (typesof(/obj/item/clothing/accessory/poncho/roles/cloak)))
|
||||
@@ -199,7 +199,7 @@
|
||||
cloaks[initial(cloak.name)] = cloak
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/custom //A colorable cloak
|
||||
/datum/gear/suit/cloak_custom //A colorable cloak
|
||||
display_name = "cloak (colorable)"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom
|
||||
|
||||
@@ -302,19 +302,19 @@
|
||||
denim_jackets[initial(denim_jacket.name)] = denim_jacket
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(denim_jackets))
|
||||
|
||||
/datum/gear/suit/miscellaneous/kimono
|
||||
/datum/gear/suit/kimono
|
||||
display_name = "kimono"
|
||||
path = /obj/item/clothing/suit/kimono
|
||||
|
||||
/datum/gear/suit/miscellaneous/kimono/New()
|
||||
/datum/gear/suit/kimono/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/miscellaneous/dep_jacket
|
||||
/datum/gear/suit/dep_jacket
|
||||
display_name = "jacket, departmental selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/dep_jacket/New()
|
||||
/datum/gear/suit/dep_jacket/New()
|
||||
..()
|
||||
var/jackettype = list()
|
||||
jackettype["department jacket, engineering"] = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket
|
||||
@@ -324,11 +324,11 @@
|
||||
jackettype["department jacket, supply"] = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket
|
||||
gear_tweaks += new/datum/gear_tweak/path(jackettype)
|
||||
|
||||
/datum/gear/suit/miscellaneous/light_jacket
|
||||
/datum/gear/suit/light_jacket
|
||||
display_name = "jacket, light selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/light_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/light_jacket/New()
|
||||
/datum/gear/suit/light_jacket/New()
|
||||
..()
|
||||
var/list/jacket = list(
|
||||
"grey light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket,
|
||||
@@ -336,20 +336,20 @@
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(jacket)
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat
|
||||
display_name = "peacoat"
|
||||
/datum/gear/suit/peacoat
|
||||
display_name = "peacoat (colorable)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/peacoat
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat/New()
|
||||
/datum/gear/suit/peacoat/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/miscellaneous/kamishimo
|
||||
/datum/gear/suit/kamishimo
|
||||
display_name = "kamishimo"
|
||||
path = /obj/item/clothing/suit/kamishimo
|
||||
|
||||
/datum/gear/suit/insulted
|
||||
display_name = "insulted jacket selection"
|
||||
/datum/gear/suit/insulated
|
||||
display_name = "jacket, insulated selection"
|
||||
path = /obj/item/clothing/suit/storage/insulated
|
||||
cost = 2
|
||||
|
||||
@@ -361,10 +361,10 @@
|
||||
insulated_jackets[initial(insulated_jacket.name)] = insulated_jacket
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(insulated_jackets))
|
||||
|
||||
/datum/gear/suit/miscellaneous/cardigan
|
||||
display_name = "cardigan"
|
||||
/datum/gear/suit/cardigan
|
||||
display_name = "cardigan (colorable)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/cardigan
|
||||
|
||||
/datum/gear/suit/miscellaneous/cardigan/New()
|
||||
/datum/gear/suit/cardigan/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -61,6 +61,14 @@
|
||||
jumpclothes[initial(jumps.name)] = jumps
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
|
||||
|
||||
/datum/gear/uniform/colorable_jumpsuit
|
||||
display_name = "jumpsuit, colorable"
|
||||
path = /obj/item/clothing/under/colorable
|
||||
|
||||
/datum/gear/uniform/colorable_jumpsuit/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/uniform/qipao
|
||||
display_name = "qipao"
|
||||
path = /obj/item/clothing/under/qipao
|
||||
@@ -134,21 +142,6 @@
|
||||
skirttype["skirt, quartermaster"] = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
gear_tweaks += new/datum/gear_tweak/path(skirttype)
|
||||
|
||||
/datum/gear/uniform/job_skirt/warden
|
||||
display_name = "skirt, warden"
|
||||
path = /obj/item/clothing/under/rank/warden/skirt
|
||||
allowed_roles = list("Head of Security", "Warden")
|
||||
|
||||
/datum/gear/uniform/job_skirt/security
|
||||
display_name = "skirt, security"
|
||||
path = /obj/item/clothing/under/rank/security/skirt
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/job_skirt/head_of_security
|
||||
display_name = "skirt, hos"
|
||||
path = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/job_turtle
|
||||
display_name = "turtleneck, departmental selection"
|
||||
path = /obj/item/clothing/under/rank/scientist/turtleneck
|
||||
@@ -182,11 +175,11 @@
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/suit/lawyer
|
||||
/datum/gear/uniform/suit_lawyer
|
||||
display_name = "suit, one-piece selection"
|
||||
path = /obj/item/clothing/under/lawyer
|
||||
|
||||
/datum/gear/uniform/suit/lawyer/New()
|
||||
/datum/gear/uniform/suit_lawyer/New()
|
||||
..()
|
||||
var/list/lsuits = list()
|
||||
for(var/lsuit in typesof(/obj/item/clothing/under/lawyer, /obj/item/clothing/under/sl_suit, /obj/item/clothing/under/gentlesuit))
|
||||
@@ -194,11 +187,11 @@
|
||||
lsuits[initial(lsuit_type.name)] = lsuit_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lsuits))
|
||||
|
||||
/datum/gear/uniform/suit/suit_jacket
|
||||
/datum/gear/uniform/suit_jacket
|
||||
display_name = "suit, modular selection"
|
||||
path = /obj/item/clothing/under/suit_jacket
|
||||
|
||||
/datum/gear/uniform/suit/suit_jacket/New()
|
||||
/datum/gear/uniform/suit_jacket/New()
|
||||
..()
|
||||
var/list/msuits = list()
|
||||
for(var/msuit in typesof(/obj/item/clothing/under/suit_jacket))
|
||||
@@ -206,22 +199,22 @@
|
||||
msuits[initial(msuit_type.name)] = msuit_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(msuits))
|
||||
|
||||
/datum/gear/uniform/suit/detectiveblack
|
||||
/datum/gear/uniform/detectiveblack
|
||||
display_name = "suit, detective black (Detective)"
|
||||
path = /obj/item/clothing/under/det/black_alt
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/uniform/suit/detectiveskirt
|
||||
/datum/gear/uniform/detectiveskirt
|
||||
display_name = "suit, detective skirt (Detective)"
|
||||
path = /obj/item/clothing/under/det/skirt
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/uniform/suit/iaskirt
|
||||
/datum/gear/uniform/iaskirt
|
||||
display_name = "suit, Internal Affairs skirt (Internal Affairs)"
|
||||
path = /obj/item/clothing/under/rank/internalaffairs/skirt
|
||||
allowed_roles = list("Internal Affairs Agent")
|
||||
|
||||
/datum/gear/uniform/suit/bartenderskirt
|
||||
/datum/gear/uniform/bartenderskirt
|
||||
display_name = "suit, bartender skirt (Bartender)"
|
||||
path = /obj/item/clothing/under/rank/bartender/skirt
|
||||
allowed_roles = list("Bartender")
|
||||
@@ -278,6 +271,7 @@
|
||||
secunitype["officer uniform, corporate"] = /obj/item/clothing/under/rank/security/corp
|
||||
secunitype["officer uniform, navy"] = /obj/item/clothing/under/rank/security/navyblue
|
||||
secunitype["officer uniform, hedberg-hammarstrom"] = /obj/item/clothing/under/hedberg
|
||||
secunitype["officer uniform, red skirt"] = /obj/item/clothing/under/rank/security/skirt
|
||||
secunitype["detective uniform, corporate"] = /obj/item/clothing/under/det/corporate
|
||||
gear_tweaks += new/datum/gear_tweak/path(secunitype)
|
||||
|
||||
@@ -291,6 +285,7 @@
|
||||
var/warunitype = list()
|
||||
warunitype["warden uniform, corporate"] = /obj/item/clothing/under/rank/warden/corp
|
||||
warunitype["warden uniform, navy"] = /obj/item/clothing/under/rank/warden/navyblue
|
||||
warunitype["warden uniform, red skirt"] = /obj/item/clothing/under/rank/warden/skirt
|
||||
gear_tweaks += new/datum/gear_tweak/path(warunitype)
|
||||
|
||||
/datum/gear/uniform/uniform_hos
|
||||
@@ -303,6 +298,7 @@
|
||||
var/hosunitype = list()
|
||||
hosunitype["HoS uniform, corporate"] = /obj/item/clothing/under/rank/head_of_security/corp
|
||||
hosunitype["HoS uniform, navy"] = /obj/item/clothing/under/rank/head_of_security/navyblue
|
||||
hosunitype["HoS Uniform, red skirt"] = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
gear_tweaks += new/datum/gear_tweak/path(hosunitype)
|
||||
|
||||
/datum/gear/uniform/uniform_hop
|
||||
@@ -381,6 +377,11 @@
|
||||
utils[initial(util_type.name)] = util_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(utils))
|
||||
|
||||
/datum/gear/uniform/utility/medical
|
||||
display_name = "utility, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/utility
|
||||
allowed_roles = list("Chief Medical Officer", "Paramedic", "Medical Doctor", "Psychiatrist", "Search and Rescue", "Chemist")
|
||||
|
||||
/datum/gear/uniform/sweater
|
||||
display_name = "sweater, grey"
|
||||
path = /obj/item/clothing/under/rank/psych/turtleneck/sweater
|
||||
@@ -405,6 +406,9 @@
|
||||
display_name = "outfit, frontier"
|
||||
path = /obj/item/clothing/under/frontier
|
||||
|
||||
/datum/gear/uniform/retro_outdoors
|
||||
display_name = "outfit, retro outdoors"
|
||||
path = /obj/item/clothing/under/retro_outdoors
|
||||
/datum/gear/uniform/yogapants
|
||||
display_name = "pants, yoga (colorable)"
|
||||
path = /obj/item/clothing/under/pants/yogapants
|
||||
@@ -530,7 +534,7 @@
|
||||
path = /obj/item/clothing/under/dress/revealingdress
|
||||
|
||||
/datum/gear/uniform/rippedpunk
|
||||
display_name = "jeans, ripped punk"
|
||||
display_name = "outfit, ripped punk"
|
||||
path = /obj/item/clothing/under/rippedpunk
|
||||
|
||||
/datum/gear/uniform/gothic
|
||||
@@ -557,6 +561,10 @@
|
||||
display_name = "outfit, cyberpunk strapped harness"
|
||||
path = /obj/item/clothing/under/cyberpunkharness
|
||||
|
||||
/datum/gear/uniform/cyberpunkpants
|
||||
display_name = "cyberpunk split-side ensemble"
|
||||
path = /obj/item/clothing/under/cyberpunkpants
|
||||
|
||||
/datum/gear/uniform/whitegown
|
||||
display_name = "white gown"
|
||||
path = /obj/item/clothing/under/wedding/whitegown
|
||||
@@ -608,3 +616,8 @@
|
||||
/datum/gear/uniform/vampire
|
||||
display_name = "pants, high-waisted trousers"
|
||||
path = /obj/item/clothing/under/hightrousers
|
||||
|
||||
/datum/gear/uniform/chaplain_stripe
|
||||
display_name = "jumpsuit, chaplain striped"
|
||||
path = /obj/item/clothing/under/rank/chaplain/alt
|
||||
allowed_roles = list("Chaplain")
|
||||
|
||||
@@ -162,15 +162,13 @@
|
||||
cohesionsuits[initial(cohesion_type.name)] = cohesion_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cohesionsuits))
|
||||
|
||||
/datum/gear/uniform/dept
|
||||
/datum/gear/uniform/teshundercoat
|
||||
display_name = "Teshari undercoat selection"
|
||||
path = /obj/item/clothing/under/teshari/undercoat/jobs/hop
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/dept/undercoat
|
||||
display_name = "Teshari undercoat selection"
|
||||
path = /obj/item/clothing/under/teshari/undercoat/jobs/hop
|
||||
|
||||
/datum/gear/uniform/dept/undercoat/New()
|
||||
/datum/gear/uniform/teshundercoat/New()
|
||||
..()
|
||||
var/list/teshundercoats = list()
|
||||
for(var/teshundercoat_style in typesof(/obj/item/clothing/under/teshari/undercoat/jobs))
|
||||
@@ -178,12 +176,12 @@
|
||||
teshundercoats[initial(teshundercoat.name)] = teshundercoat
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(teshundercoats))
|
||||
|
||||
/datum/gear/suit/dept/cloak
|
||||
/datum/gear/suit/teshcloak
|
||||
display_name = "Teshari cloak selection, jobs"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/dept/cloak/New()
|
||||
/datum/gear/suit/teshcloak/New()
|
||||
..()
|
||||
var/list/teshcloaks = list()
|
||||
for(var/teshcloak_style in typesof(/obj/item/clothing/suit/storage/teshari/cloak/jobs, /obj/item/clothing/suit/storage/teshari/beltcloak/jobs))
|
||||
|
||||
@@ -71,12 +71,18 @@
|
||||
/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]up"
|
||||
to_chat(user, "You raise the visor on the riot helmet.")
|
||||
to_chat(user, "You raise the visor on the [src].")
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
to_chat(user, "You lower the visor on the riot helmet.")
|
||||
to_chat(user, "You lower the visor on the [src].")
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
|
||||
/obj/item/clothing/head/helmet/riot/sifcop
|
||||
name = "\improper SifGuard police helmet"
|
||||
desc = "A visored helmet printed with the livery of the SifGuard Police Division."
|
||||
icon_state = "sifcop_helmet"
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/laserproof
|
||||
name = "ablative helmet"
|
||||
desc = "It's a helmet specifically designed to protect against energy projectiles."
|
||||
@@ -136,6 +142,44 @@
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/head/helmet/heavy
|
||||
name = "heavy combat helmet"
|
||||
desc = "A heavily armoured helmet with built-in faceplate, built to withstand the rigours of modern combat."
|
||||
description_fluff = "Though a darling of Proxima Centuari Risk Control operatives, this type of high-grade enclosed combat helmet has two key drawbacks: 1. A somewhat limited field of view, which is often compensated for with cybernetics, and 2. It costs more than most mercenaries make in a year."
|
||||
icon_state = "heavy_combat"
|
||||
armor = list(melee = 70, bullet = 80, laser = 60, energy = 25, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/head/helmet/heavy/knight
|
||||
desc = "An enclosed, heavily armoured ablative helmet modeled after a medieval greathelm."
|
||||
description_fluff = "The early 23rd century saw a surge in popularity for faux-medieval combat fashions, which was soon abandoned due to practical concerns and a growing desire for unified corporate security brand identities."
|
||||
flags_inv = HIDEEARS|HIDEEYES|BLOCKHEADHAIR
|
||||
icon_state = "knight_grey"
|
||||
armor = list(melee = 80, bullet = 50, laser = 40, energy = 20, bomb = 30, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/newkyoto
|
||||
name = "\improper New Kyotan combat helmet"
|
||||
desc = "An armoured helmet. Pride of New Kyoto lawmen, dread of foreign spies."
|
||||
description_fluff = "Authentic examples of New Kyotan security gear are rare due to the independent nation's strict export restrictions. Fortunately, ubiquitous replicas are often equally effective."
|
||||
icon_state = "nkyoto"
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 20, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/head/helmet/tank
|
||||
name = "black tanker cap"
|
||||
desc = "A padded skullcup for those prone to bumping their heads against hard surfaces."
|
||||
icon_state = "tank"
|
||||
color = "#5f5f5f"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/tank/olive
|
||||
name = "olive tanker cap"
|
||||
color = "#727c58"
|
||||
|
||||
/obj/item/clothing/head/helmet/tank/tan
|
||||
name = "tan tanker cap"
|
||||
color = "#ae9f79"
|
||||
|
||||
/obj/item/clothing/head/helmet/alien
|
||||
name = "alien helmet"
|
||||
desc = "It's quite larger than your head, but it might still protect it."
|
||||
@@ -175,7 +219,6 @@
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
|
||||
)
|
||||
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
siemens_coefficient = 0.7
|
||||
@@ -224,3 +267,4 @@
|
||||
name = "emergency response team medical helmet"
|
||||
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "erthelmet_med"
|
||||
|
||||
|
||||
@@ -109,10 +109,10 @@
|
||||
desc = "Columbian Pure."
|
||||
|
||||
/obj/item/clothing/head/redcoat
|
||||
name = "redcoat's hat"
|
||||
name = "tricorne hat"
|
||||
icon_state = "redcoat"
|
||||
item_state_slots = list(slot_r_hand_str = "pirate", slot_l_hand_str = "pirate")
|
||||
desc = "<i>'I guess it's a redhead.'</i>"
|
||||
desc = "Stand and deliver!"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/mailman
|
||||
@@ -463,6 +463,21 @@
|
||||
flags_inv = HIDEEYES
|
||||
body_parts_covered = HEAD|EYES
|
||||
|
||||
/obj/item/clothing/head/nonla
|
||||
name = "non la"
|
||||
desc = "A conical straw hat, used by those in tropical climates to protect the head from sweltering suns and heavy rains."
|
||||
icon_state = "nonla"
|
||||
item_state = "nonla"
|
||||
|
||||
/obj/item/clothing/head/buckethat
|
||||
name = "bucket hat"
|
||||
desc = "A hat with an all-around visor. Only slightly better than wearing an actual bucket."
|
||||
icon_state = "buckethat"
|
||||
icon_state = "buckethat"
|
||||
sprite_sheets = list(
|
||||
SPECIES_TAJARAN = 'icons/mob/species/tajaran/helmet.dmi'
|
||||
)
|
||||
|
||||
//Corporate Berets
|
||||
|
||||
/obj/item/clothing/head/beret/corp/saare
|
||||
|
||||
@@ -147,8 +147,10 @@
|
||||
/obj/item/clothing/head/ushanka
|
||||
name = "ushanka"
|
||||
desc = "Perfect for those cold winter nights."
|
||||
icon_state = "ushankadown"
|
||||
icon_state = "ushanka"
|
||||
flags_inv = HIDEEARS
|
||||
body_parts_covered = HEAD
|
||||
cold_protection = HEAD
|
||||
|
||||
/obj/item/clothing/head/ushanka/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
@@ -159,17 +161,17 @@
|
||||
to_chat(user, "You lower the ear flaps on the ushanka.")
|
||||
|
||||
/obj/item/clothing/head/ushanka/black
|
||||
icon_state = "blkushankadown"
|
||||
icon_state = "blkushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/soviet
|
||||
name = "soviet ushanka"
|
||||
desc = "Perfect for winter in Siberia, da?"
|
||||
icon_state = "sovushankadown"
|
||||
icon_state = "sovushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/hedberg
|
||||
name = "\improper Hedberg-Hammarstrom fur hat"
|
||||
desc = "An Hedberg-Hammarstrom private security ushanka."
|
||||
icon_state = "hedbergushankadown"
|
||||
icon_state = "hedbergushanka"
|
||||
|
||||
/*
|
||||
* Pumpkin head
|
||||
@@ -319,4 +321,4 @@
|
||||
w_class = 2
|
||||
body_parts_covered = HEAD
|
||||
attack_verb = list("warned", "cautioned", "smashed")
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
@@ -265,6 +265,11 @@
|
||||
desc = "An Sif Defense Force beret carrying insignia of the Anti-Piracy taskforce. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_patrol"
|
||||
|
||||
/obj/item/clothing/head/beret/solgov/sifguard/sifcop
|
||||
name = "\improper SifGuard Police Division beret"
|
||||
desc = "An Sif Defense Force beret carrying insignia of the civilian law enforcement division (SGPD). Standard issue."
|
||||
icon_state = "beret_sifcop"
|
||||
|
||||
/*
|
||||
* Fleet (Berets)
|
||||
*/
|
||||
@@ -325,22 +330,22 @@
|
||||
/obj/item/clothing/head/ushanka/solgov
|
||||
name = "\improper SifGuard fur hat"
|
||||
desc = "An Sif Defense Force synthfur-lined hat for operating in cold environments."
|
||||
icon_state = "sifguardushankadown"
|
||||
icon_state = "sifguardushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/solgov/fleet
|
||||
name = "fleet fur hat"
|
||||
desc = "An SCG Fleet synthfur-lined hat for operating in cold environments."
|
||||
icon_state = "flushankadown"
|
||||
icon_state = "flushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/solgov/marine
|
||||
name = "marine fur hat"
|
||||
desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
|
||||
icon_state = "mar1ushankadown"
|
||||
icon_state = "mar1ushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/solgov/marine/green
|
||||
name = "green marine fur hat"
|
||||
desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
|
||||
icon_state = "mar2ushankadown"
|
||||
icon_state = "mar2ushanka"
|
||||
|
||||
/*
|
||||
* Almachi
|
||||
@@ -389,4 +394,4 @@
|
||||
desc = "An SCG Fleet beret carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_navy_fifth"
|
||||
*
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -86,4 +86,4 @@
|
||||
/obj/item/clothing/suit/space/vox/medic
|
||||
name = "alien armour"
|
||||
icon_state = "vox-medic"
|
||||
desc = "An almost organic looking nonhuman pressure suit."
|
||||
desc = "An almost organic looking nonhuman pressure suit."
|
||||
|
||||
@@ -102,3 +102,17 @@
|
||||
icon_state = "syndicate-orange"
|
||||
desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile."
|
||||
slowdown = 2
|
||||
|
||||
//civilian recreational spacesuit
|
||||
|
||||
/obj/item/clothing/head/helmet/space/sports
|
||||
name = "performance sports space helmet"
|
||||
icon_state = "sports_void"
|
||||
desc = "A sleek space helmet for the civilian extra-vehicular extreme sports market. Please replace after any impact!"
|
||||
|
||||
/obj/item/clothing/suit/space/sports
|
||||
name = "performance sports spacesuit"
|
||||
desc = "A high-dexterity spacesuit for the civilian extra-vehicular extreme sports market, for when zero-g sports in controlled environments are just too tame."
|
||||
description_fluff = "Ward-Takahashi zero-gravity performance sportswear does not require an EVA certification to purchase, though user manuals do list it as 'recommended' on condition of a 2550 lawsuit."
|
||||
icon_state = "sports_void"
|
||||
slowdown = 0
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
//Officer Crewsuit (GOLD, X)
|
||||
//The best of the bunch - at the time, this would have been almost cutting edge
|
||||
//Now it's good, but it's badly outclassed by the hot shit that the TSCs and such can get
|
||||
//Now it's good, but it's badly outclassed by the hot shit that the TSCs and such can get
|
||||
/obj/item/clothing/head/helmet/space/void/refurb/officer
|
||||
name = "vintage officer's voidsuit helmet"
|
||||
desc = "A refurbished early contact era voidsuit helmet of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. The visor has a bad habit of fogging up and collecting condensation, but it beats sucking hard vacuum. This variant appears to be an officer's, and has the best protection of all the old models."
|
||||
@@ -214,7 +214,7 @@
|
||||
/obj/item/gps,
|
||||
/obj/item/radio/beacon,
|
||||
)
|
||||
|
||||
|
||||
//Scientist Crewsuit (PURPLE, O)
|
||||
//Baseline values are slightly worse than the gray crewsuit, but it has significantly better Energy protection and is the only other suit with 100% rad immunity besides the engi suit
|
||||
/obj/item/clothing/head/helmet/space/void/refurb/research
|
||||
|
||||
@@ -43,4 +43,4 @@
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs,/obj/item/material/twohanded/fireaxe,/obj/item/flamethrower)
|
||||
siemens_coefficient = 0.7
|
||||
breach_threshold = 18 //Super Extra Thicc
|
||||
slowdown = 1
|
||||
slowdown = 1
|
||||
@@ -0,0 +1,104 @@
|
||||
//Misc voidsuits
|
||||
|
||||
//Boarding ops.
|
||||
/obj/item/clothing/head/helmet/space/void/boarding_ops
|
||||
name = "boarding operations voidsuit helmet"
|
||||
desc = "A first generation armoured voidsuit helmet designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment."
|
||||
icon_state = "light_ops"
|
||||
armor = list(melee = 30, bullet = 35, laser = 35, energy = 5, bomb = 30, bio = 100, rad = 50)
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/boarding_ops/mk2
|
||||
desc = "A second generation armoured voidsuit helmet designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment. This one has improved visibility at the cost of some plating."
|
||||
icon_state = "light_ops_mk2"
|
||||
armor = list(melee = 20, bullet = 30, laser = 40, energy = 5, bomb = 30, bio = 100, rad = 50)
|
||||
|
||||
/obj/item/clothing/suit/space/void/boarding_ops
|
||||
name = "boarding operations voidsuit"
|
||||
desc = "A moderately armoured voidsuit designed for variable-gravity boarding operations where heavier combat suits would leave the user vulnerable once within a pressurized environment."
|
||||
description_fluff = "Originally an Aether Atmospherics design intended for hazardous environment EVA, these lightweight armoured suits were adapted for combat use and for easy re-fabrication, making them a hit with pirates of both varieties."
|
||||
icon_state = "light_ops"
|
||||
armor = list(melee = 30, bullet = 35, laser = 35, energy = 5, bomb = 30, bio = 100, rad = 50)
|
||||
breach_threshold = 14 //These are kinda thicc
|
||||
resilience = 0.15 //Armored
|
||||
siemens_coefficient = 0.8
|
||||
allowed = list(/obj/item/gun,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/tank,
|
||||
/obj/item/suit_cooling_unit,
|
||||
/obj/item/melee,
|
||||
/obj/item/grenade,
|
||||
/obj/item/flash,
|
||||
/obj/item/gps,
|
||||
/obj/item/radio/beacon,
|
||||
/obj/item/handcuffs,
|
||||
/obj/item/hailer,
|
||||
/obj/item/holowarrant,
|
||||
/obj/item/megaphone,
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/cell
|
||||
)
|
||||
|
||||
//Tajaran Pearlshield Coalition Spacesuit
|
||||
/obj/item/clothing/head/helmet/space/void/pearlshield
|
||||
name = "Pearlshield Coalition space helmet"
|
||||
desc = "A rugged, utilitarian space helmet designed for the Pearlshield Coalition military by PCA."
|
||||
description_fluff = "Pearlshield Consolidated Armories is a collaborative organization of Tajaran arms manufacturers tasked with producing equipment for the intergovernmental Pearlshield Coalition, the Tajaran representative body on the galactic stage."
|
||||
icon_state = "pearlshield_void"
|
||||
armor = list(melee = 30, bullet = 40, laser = 40, energy = 20, bomb = 30, bio = 100, rad = 50)
|
||||
species_restricted = list(SPECIES_TAJ)
|
||||
|
||||
/obj/item/clothing/suit/space/void/pearlshield
|
||||
name = "Pearlshield Coalition voidsuit"
|
||||
desc = "A rugged, utilitarian spacesuit designed for the Pearlshield Coalition military by PCA."
|
||||
description_fluff = "Pearlshield Consolidated Armories is a collaborative organization of Tajaran arms manufacturers tasked with producing equipment for the intergovernmental Pearlshield Coalition, the Tajaran representative body on the galactic stage."
|
||||
icon_state = "pearlshield_void"
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 50, bomb = 50, bio = 100, rad = 50)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
|
||||
species_restricted = list(SPECIES_TAJ)
|
||||
|
||||
//SCG Fleet Voidsuit(s)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/scg
|
||||
name = "Fleet voidsuit helmet"
|
||||
desc = "A standard issue SCG Marine armoured voidsuit helmet for use in hazardous environment combat scenarios."
|
||||
icon_state = "scg_void"
|
||||
armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 70)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/scg/heavy
|
||||
name = "heavy Fleet voidsuit helmet"
|
||||
desc = "A heavier version of the standard issue SCG Marine armoured voidsuit helmet for use in hazardous environment combat scenarios."
|
||||
icon_state = "scg_voidcombat"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 70)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/space/void/scg
|
||||
name = "Fleet voidsuit"
|
||||
desc = "A standard issue SCG Marine armoured voidsuit for use in hazardous environment combat scenarios."
|
||||
icon_state = "scg_void"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
armor = list(melee = 50, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 70)
|
||||
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
|
||||
siemens_coefficient = 0.6
|
||||
breach_threshold = 16 //Extra Thicc
|
||||
resilience = 0.05 //Military Armor
|
||||
|
||||
//Misc Armoured Space helmets
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/grayson
|
||||
name = "heavy mining helmet"
|
||||
desc = "An older model heavy-duty atmosphere-controlled mining helmet."
|
||||
description_fluff = "This armoured mining helmet was one of Grayson's best selling models before the advent rigsuit technology, and due to its relatively simple construction the design has remained in use for well over a century and is often adapted to function with the latest suits."
|
||||
icon_state = "grayson_helm"
|
||||
armor = list(melee = 60, bullet = 20, laser = 25, energy = 15, bomb = 55, bio = 100, rad = 50)
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/hedberg
|
||||
name = "Hedberg-Hammarstrom combat helmet"
|
||||
desc = "A heavily armoured helmet with built-in faceplate, built to withstand the rigours of modern combat and equipped for space use."
|
||||
description_fluff = "The Hedberg-Hammarstrom company has operated Vir's military forces privately since 2566, but retains many of its unique armour designs exclusively for use in the private sector."
|
||||
icon_state = "hedberg_helmet"
|
||||
armor = list(melee = 70, bullet = 80, laser = 60, energy = 25, bomb = 40, bio = 100, rad = 0)
|
||||
siemens_coefficient = 0.8
|
||||
no_cycle = TRUE
|
||||
@@ -1,39 +1,47 @@
|
||||
/obj/item/clothing/under/color
|
||||
name = "purple jumpsuit"
|
||||
desc = "The latest in utilitarian fashion."
|
||||
icon_state = "purple"
|
||||
rolled_sleeves = 0
|
||||
rolled_down = 0
|
||||
|
||||
/obj/item/clothing/under/color/black
|
||||
name = "black jumpsuit"
|
||||
icon_state = "black"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/blackf
|
||||
name = "feminine black jumpsuit"
|
||||
name = "short black jumpsuit"
|
||||
desc = "It's very smart and in a ladies size!"
|
||||
icon_state = "black"
|
||||
icon_state = "blackf"
|
||||
worn_state = "blackf"
|
||||
rolled_sleeves = -1
|
||||
rolled_down = -1
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/color/blackjumpskirt
|
||||
name = "black jumpskirt"
|
||||
desc = "A slimming black jumpskirt."
|
||||
icon_state = "blackjumpskirt"
|
||||
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
|
||||
rolled_sleeves = -1
|
||||
rolled_down = -1
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/color/blue
|
||||
name = "blue jumpsuit"
|
||||
icon_state = "blue"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/green
|
||||
name = "green jumpsuit"
|
||||
icon_state = "green"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/grey
|
||||
name = "grey jumpsuit"
|
||||
icon_state = "grey"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/orange
|
||||
name = "orange jumpsuit"
|
||||
icon_state = "orange"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/prison
|
||||
name = "prison jumpsuit"
|
||||
@@ -45,22 +53,18 @@
|
||||
/obj/item/clothing/under/color/pink
|
||||
name = "pink jumpsuit"
|
||||
icon_state = "pink"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/red
|
||||
name = "red jumpsuit"
|
||||
icon_state = "red"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/white
|
||||
name = "white jumpsuit"
|
||||
icon_state = "white"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/yellow
|
||||
name = "yellow jumpsuit"
|
||||
icon_state = "yellow"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/psyche
|
||||
name = "psychedelic jumpsuit"
|
||||
@@ -69,75 +73,48 @@
|
||||
|
||||
/obj/item/clothing/under/color/lightblue
|
||||
name = "lightblue jumpsuit"
|
||||
desc = "A light blue jumpsuit."
|
||||
icon_state = "lightblue"
|
||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/aqua
|
||||
name = "aqua jumpsuit"
|
||||
desc = "An aqua jumpsuit."
|
||||
icon_state = "aqua"
|
||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color
|
||||
name = "purple jumpsuit"
|
||||
desc = "The latest in space fashion."
|
||||
icon_state = "purple"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/lightpurple
|
||||
name = "lightpurple jumpsuit"
|
||||
desc = "A light purple jumpsuit."
|
||||
icon_state = "lightpurple"
|
||||
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/lightgreen
|
||||
name = "lightgreen jumpsuit"
|
||||
desc = "A light green jumpsuit."
|
||||
icon_state = "lightgreen"
|
||||
item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/lightbrown
|
||||
name = "lightbrown jumpsuit"
|
||||
desc = "A light brown jumpsuit."
|
||||
icon_state = "lightbrown"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/brown
|
||||
name = "brown jumpsuit"
|
||||
desc = "A brown jumpsuit."
|
||||
icon_state = "brown"
|
||||
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/yellowgreen
|
||||
name = "yellowgreen jumpsuit"
|
||||
desc = "A... yellow green jumpsuit?"
|
||||
icon_state = "yellowgreen"
|
||||
item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/darkblue
|
||||
name = "darkblue jumpsuit"
|
||||
desc = "A dark blue jumpsuit."
|
||||
icon_state = "darkblue"
|
||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/lightred
|
||||
name = "lightred jumpsuit"
|
||||
desc = "A light red jumpsuit."
|
||||
icon_state = "lightred"
|
||||
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/darkred
|
||||
name = "darkred jumpsuit"
|
||||
desc = "A dark red jumpsuit."
|
||||
icon_state = "darkred"
|
||||
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
||||
|
||||
/obj/item/clothing/under/colorable
|
||||
name = "plain jumpsuit"
|
||||
desc = "The latest in utilitarian fashion."
|
||||
icon_state = "colorable"
|
||||
rolled_sleeves = 0
|
||||
rolled_down = 0
|
||||
|
||||
@@ -56,12 +56,18 @@
|
||||
icon_state = "cargojf"
|
||||
|
||||
/obj/item/clothing/under/rank/chaplain
|
||||
desc = "It's a black jumpsuit, often worn by religious folk."
|
||||
desc = "It's a black jumpsuit, often worn by guidance staff."
|
||||
name = "chaplain's jumpsuit"
|
||||
icon_state = "chaplain"
|
||||
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/chaplain/alt
|
||||
name = "chaplain's striped jumpsuit"
|
||||
icon_state = "chaplain_alt"
|
||||
rolled_sleeves = -1
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/rank/chef
|
||||
desc = "It's an apron which is given only to the most <b>hardcore</b> chefs in space."
|
||||
name = "chef's uniform"
|
||||
@@ -116,15 +122,18 @@
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/lawyer
|
||||
name = "baby blue suit"
|
||||
desc = "Slick threads."
|
||||
name = "lawyer suit"
|
||||
icon_state = "ress_suit"
|
||||
item_state_slots = list(slot_r_hand_str = "lightblue", slot_l_hand_str = "lightblue")
|
||||
|
||||
/obj/item/clothing/under/lawyer/black
|
||||
name = "black lawyer suit"
|
||||
name = "tacky black lawyer suit"
|
||||
icon_state = "lawyer_black"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
|
||||
|
||||
/obj/item/clothing/under/lawyer/black/skirt
|
||||
name = "black lawyer skirt"
|
||||
name = "tacky black lawyer skirt"
|
||||
icon_state = "lawyer_black_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
|
||||
|
||||
@@ -137,32 +146,36 @@
|
||||
name = "black modern suit"
|
||||
icon_state = "modern_suit_m"
|
||||
index = 1
|
||||
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
|
||||
|
||||
/obj/item/clothing/under/lawyer/modern/skirt
|
||||
name = "black modern skirt"
|
||||
icon_state = "modern_suit_f"
|
||||
index = 1
|
||||
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
|
||||
|
||||
/obj/item/clothing/under/lawyer/trimskirt
|
||||
name = "blue-trim skirt"
|
||||
icon_state = "trim_skirtsuit"
|
||||
index = 1
|
||||
|
||||
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
|
||||
/obj/item/clothing/under/lawyer/red
|
||||
name = "red lawyer suit"
|
||||
name = "tacky red suit"
|
||||
icon_state = "lawyer_red"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
|
||||
|
||||
/obj/item/clothing/under/lawyer/red/skirt
|
||||
name = "red lawyer skirt"
|
||||
name = "tacky red skirt"
|
||||
icon_state = "lawyer_red_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue
|
||||
name = "blue lawyer suit"
|
||||
name = "tacky blue suit"
|
||||
icon_state = "lawyer_blue"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue/skirt
|
||||
name = "blue lawyer skirt"
|
||||
name = "tacky blue skirt"
|
||||
icon_state = "lawyer_blue_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
|
||||
|
||||
@@ -170,12 +183,13 @@
|
||||
name = "blue suit"
|
||||
desc = "A classy suit."
|
||||
icon_state = "bluesuit"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
|
||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||
starting_accessories = list(/obj/item/clothing/accessory/tie/red)
|
||||
|
||||
/obj/item/clothing/under/lawyer/bluesuit/skirt
|
||||
name = "blue skirt suit"
|
||||
icon_state = "bluesuit_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "blue", slot_l_hand_str = "blue")
|
||||
|
||||
/obj/item/clothing/under/lawyer/purpsuit
|
||||
name = "purple suit"
|
||||
@@ -185,6 +199,7 @@
|
||||
/obj/item/clothing/under/lawyer/purpsuit/skirt
|
||||
name = "purple skirt suit"
|
||||
icon_state = "lawyer_purp_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
|
||||
|
||||
/obj/item/clothing/under/lawyer/oldman
|
||||
name = "Old Man's Suit"
|
||||
@@ -192,18 +207,64 @@
|
||||
icon_state = "oldman"
|
||||
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
|
||||
|
||||
/obj/item/clothing/under/lawyer/librarian
|
||||
name = "sensible suit"
|
||||
desc = "It's very... sensible."
|
||||
icon_state = "red_suit"
|
||||
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
|
||||
|
||||
/obj/item/clothing/under/lawyer/retro_tan
|
||||
name = "retro tan suit"
|
||||
desc = "Just one more thing."
|
||||
icon_state = "liaison_regular"
|
||||
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/retro_white
|
||||
name = "retro white suit"
|
||||
desc = "Snappy!"
|
||||
icon_state = "liaison_formal"
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/retro_waistcoat
|
||||
name = "retro waistcoat"
|
||||
desc = "The spectre of CEOs past."
|
||||
icon_state = "manager_uniform"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/retro_suspenders
|
||||
name = "retro suspenders"
|
||||
desc = "The spectre of CEOs past."
|
||||
icon_state = "liaison_suspenders"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/retro_clerk
|
||||
name = "retro clerk's suit"
|
||||
desc = "The spectre of toadies past."
|
||||
icon_state = "trainee_uniform"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/powersuit_black
|
||||
name = "black and gold powersuit"
|
||||
desc = "Resonates corporate energy."
|
||||
icon_state = "director_uniform"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/lawyer/powersuit_grey
|
||||
name = "grey powersuit"
|
||||
desc = "Resonates corporate energy."
|
||||
icon_state = "stowaway_uniform"
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/oldwoman
|
||||
name = "Old Woman's Attire"
|
||||
desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt."
|
||||
icon_state = "oldwoman"
|
||||
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
|
||||
|
||||
/obj/item/clothing/under/librarian
|
||||
name = "sensible suit"
|
||||
desc = "It's very... sensible."
|
||||
icon_state = "red_suit"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
|
||||
|
||||
/obj/item/clothing/under/mime
|
||||
name = "mime's outfit"
|
||||
desc = "It's not very colourful."
|
||||
|
||||
@@ -114,6 +114,10 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/medical/utility
|
||||
name = "medical utility jumpsuit"
|
||||
desc = "A hard-wearing version of the standard medical uniform, made with the same bioresistant lining. Designed for long term medical postings."
|
||||
icon_state = "medical_util"
|
||||
/obj/item/clothing/under/rank/medical/turtleneck
|
||||
name = "medical turtleneck"
|
||||
desc = "It's a stylish turtleneck made of bioresistant fiber. Look good, save lives- what more could you want?"
|
||||
|
||||
@@ -926,6 +926,12 @@ Uniforms and such
|
||||
icon_state = "cyberhell"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/cyberpunkpants
|
||||
name = "cyberpunk split-side ensemble"
|
||||
desc = "Cyberpunk styled split-side pants and matching top. Just in time for the dystopian future."
|
||||
icon_state = "hart_jumpsuit"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/blackngold
|
||||
name = "black and gold gown"
|
||||
desc = "A black and gold gown. You get the impression this is typically worn for religious purposes."
|
||||
@@ -1190,7 +1196,7 @@ Uniforms and such
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/sifcop
|
||||
name = "\improper SifGuard law enforcement uniform"
|
||||
name = "\improper SifGuard Police Division uniform"
|
||||
desc = "A sturdy law enforcement uniform typical of Vir's civilian law enforcement officers."
|
||||
icon_state = "sifcop"
|
||||
worn_state = "sifcop"
|
||||
@@ -1211,6 +1217,12 @@ Uniforms and such
|
||||
icon_state = "retro_sweater"
|
||||
worn_state = "retro_sweater"
|
||||
|
||||
/obj/item/clothing/under/retro_outdoors
|
||||
name = "retro outsdoorwear"
|
||||
desc = "A puffer vest over utility pants, for when you're really rustic and want everybody to know it."
|
||||
icon_state = "liaison_outing"
|
||||
index = 1
|
||||
|
||||
/obj/item/clothing/under/hightrousers
|
||||
name = "high-waisted trousers"
|
||||
desc = "A waistline this high is just made for ripping bodices, swashing buckles, or - just occasionally - sucking blood."
|
||||
@@ -1307,4 +1319,4 @@ Uniforms and such
|
||||
unicolor = "orange"
|
||||
|
||||
/obj/item/clothing/under/ranger/yellow
|
||||
unicolor = "yellow"
|
||||
unicolor = "yellow"
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat
|
||||
name = "Undercoat"
|
||||
desc = "A Teshari traditional garb, with a modern twist! Made of micro and nanofibres to make it light and billowy, perfect for going fast and stylishly!"
|
||||
desc = "Teshari traditional garb, with a modern twist! Made of nanofibres to make it light and billowy, perfect for going fast and stylishly!"
|
||||
icon = 'icons/mob/species/teshari/teshari_uniform.dmi'
|
||||
icon_override = 'icons/mob/species/teshari/teshari_uniform.dmi'
|
||||
icon_state = "tesh_uniform_bo"
|
||||
@@ -263,126 +263,126 @@
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/cap
|
||||
name = "facility director undercoat"
|
||||
desc = "A traditional Teshari garb made for the Facility Director"
|
||||
desc = "Traditional-style Teshari garb made for a Facility Director"
|
||||
icon_state = "tesh_uniform_cap"
|
||||
item_state = "tesh_uniform_cap"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/hop
|
||||
name = "head of personnel undercoat"
|
||||
desc = "A traditional Teshari garb made for the Head of Personnel"
|
||||
desc = "Traditional-style Teshari garb made for a Head of Personnel"
|
||||
icon_state = "tesh_uniform_hop"
|
||||
item_state = "tesh_uniform_hop"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/ce
|
||||
name = "cheif engineer undercoat"
|
||||
desc = "A traditional Teshari garb made for the Chief Engineer"
|
||||
name = "chief engineer undercoat"
|
||||
desc = "Traditional-style Teshari garb made for a Chief Engineer"
|
||||
icon_state = "tesh_uniform_ce"
|
||||
item_state = "tesh_uniform_ce"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/hos
|
||||
name = "head of security undercoat"
|
||||
desc = "A traditional Teshari garb made for the Head of Security"
|
||||
desc = "Traditional-style Teshari garb made for a Head of Security"
|
||||
icon_state = "tesh_uniform_hos"
|
||||
item_state = "tesh_uniform_hos"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/rd
|
||||
name = "research director undercoat"
|
||||
desc = "A traditional Teshari garb made for the Research Director"
|
||||
desc = "Traditional-style Teshari garb made for a Research Director"
|
||||
icon_state = "tesh_uniform_rd"
|
||||
item_state = "tesh_uniform_rd"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/engineer
|
||||
name = "engineering undercoat"
|
||||
desc = "A traditional Teshari garb made for the Engineering department"
|
||||
desc = "Traditional-style Teshari garb made for the Engineering department"
|
||||
icon_state = "tesh_uniform_engie"
|
||||
item_state = "tesh_uniform_engie"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/atmos
|
||||
name = "atmospherics undercoat"
|
||||
desc = "A traditional Teshari garb made for the Atmospheric Technician"
|
||||
desc = "Traditional-style Teshari garb made for an Atmospheric Technician"
|
||||
icon_state = "tesh_uniform_atmos"
|
||||
item_state = "tesh_uniform_atmos"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/cmo
|
||||
name = "chief medical officer undercoat"
|
||||
desc = "A traditional Teshari garb made for the Cheif Medical Officer"
|
||||
desc = "Traditional-style Teshari garb made for a Chief Medical Officer"
|
||||
icon_state = "tesh_uniform_cmo"
|
||||
item_state = "tesh_uniform_cmo"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/qm
|
||||
name = "quartermaster undercoat"
|
||||
desc = "A traditional Teshari garb made for the Quartermaster"
|
||||
desc = "Traditional-style Teshari garb made for a Quartermaster"
|
||||
icon_state = "tesh_uniform_qm"
|
||||
item_state = "tesh_uniform_qm"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/cargo
|
||||
name = "cargo undercoat"
|
||||
desc = "A traditional Teshari garb made for the Cargo department"
|
||||
desc = "Traditional-style Teshari garb made for the Cargo department"
|
||||
icon_state = "tesh_uniform_car"
|
||||
item_state = "tesh_uniform_car"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/mining
|
||||
name = "mining undercoat"
|
||||
desc = "A traditional Teshari garb made for Mining"
|
||||
desc = "Traditional-style Teshari garb made for Mining"
|
||||
icon_state = "tesh_uniform_mine"
|
||||
item_state = "tesh_uniform_mine"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/medical
|
||||
name = "medical undercoat"
|
||||
desc = "A traditional Teshari garb made for the Medical department"
|
||||
desc = "Traditional-style Teshari garb made for the Medical department"
|
||||
icon_state = "tesh_uniform_doc"
|
||||
item_state = "tesh_uniform_doc"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/chemistry
|
||||
name = "chemist undercoat"
|
||||
desc = "A traditional Teshari garb made for the Chemist"
|
||||
desc = "Traditional-style Teshari garb made for a Chemist"
|
||||
icon_state = "tesh_uniform_chem"
|
||||
item_state = "tesh_uniform_chem"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/viro
|
||||
name = "virologist undercoat"
|
||||
desc = "A traditional Teshari garb made for the Virologist"
|
||||
desc = "Traditional-style Teshari garb made for a Virologist"
|
||||
icon_state = "tesh_uniform_viro"
|
||||
item_state = "tesh_uniform_viro"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/psych
|
||||
name = "psychiatrist undercoat"
|
||||
desc = "A traditional Teshari garb made for the Psychiatrist"
|
||||
desc = "Traditional-style Teshari garb made for a Psychiatrist"
|
||||
icon_state = "tesh_uniform_psych"
|
||||
item_state = "tesh_uniform_psych"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/para
|
||||
name = "paramedic undercoat"
|
||||
desc = "A traditional Teshari garb made for the Paramedic"
|
||||
desc = "Traditional-style Teshari garb made for a Paramedic"
|
||||
icon_state = "tesh_uniform_para"
|
||||
item_state = "tesh_uniform_para"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/sci
|
||||
name = "scientist undercoat"
|
||||
desc = "A traditional Teshari garb made for the Science department"
|
||||
desc = "Traditional-style Teshari garb made for the Science department"
|
||||
icon_state = "tesh_uniform_sci"
|
||||
item_state = "tesh_uniform_sci"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/robo
|
||||
name = "roboticist undercoat"
|
||||
desc = "A traditional Teshari garb made for the Roboticist"
|
||||
desc = "Traditional-style Teshari garb made for the Roboticist"
|
||||
icon_state = "tesh_uniform_robo"
|
||||
item_state = "tesh_uniform_robo"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/sec
|
||||
name = "security undercoat"
|
||||
desc = "A traditional Teshari garb made for the Security department"
|
||||
desc = "Traditional-style Teshari garb made for the Security department"
|
||||
icon_state = "tesh_uniform_sec"
|
||||
item_state = "tesh_uniform_sec"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/service
|
||||
name = "service undercoat"
|
||||
desc = "A traditional Teshari garb made for the Service department"
|
||||
desc = "Traditional-style Teshari garb made for the Service department"
|
||||
icon_state = "tesh_uniform_serv"
|
||||
item_state = "tesh_uniform_serv"
|
||||
|
||||
/obj/item/clothing/under/teshari/undercoat/jobs/iaa
|
||||
name = "internal affairs undercoat"
|
||||
desc = "A traditional Teshari garb made for the Internal Affairs Agent"
|
||||
desc = "Traditional-style Teshari garb made for an Internal Affairs Agent"
|
||||
icon_state = "tesh_uniform_iaa"
|
||||
item_state = "tesh_uniform_iaa"
|
||||
|
||||
@@ -812,12 +812,10 @@
|
||||
product = new has_item_product(get_turf(user))
|
||||
else
|
||||
product = new /obj/item/reagent_containers/food/snacks/grown(get_turf(user),name)
|
||||
if(get_trait(TRAIT_PRODUCT_COLOUR))
|
||||
if(!istype(product, /mob))
|
||||
product.color = get_trait(TRAIT_PRODUCT_COLOUR)
|
||||
if(istype(product,/obj/item/reagent_containers/food))
|
||||
var/obj/item/reagent_containers/food/food = product
|
||||
food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR)
|
||||
if (get_trait(TRAIT_PRODUCT_COLOUR))
|
||||
if (istype(product,/obj/item/reagent_containers/food))
|
||||
var/obj/item/reagent_containers/food/food = product
|
||||
food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR)
|
||||
|
||||
if(mysterious)
|
||||
product.name += "?"
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
// You might be wondering why this isn't client level. If focus is null, we don't want you to move.
|
||||
// Only way to do that is to tie the behavior into the focus's keyLoop().
|
||||
|
||||
// THE TRADITIONAL STYLE FROM /TG (modified)
|
||||
|
||||
/atom/movable/keyLoop(client/user)
|
||||
var/must_call_move = FALSE
|
||||
var/movement_dir = MOVEMENT_KEYS_TO_DIR(user.move_keys_held)
|
||||
if(user.next_move_dir_add)
|
||||
must_call_move = TRUE // So that next_move_dir_add gets cleared if its time.
|
||||
movement_dir |= user.next_move_dir_add
|
||||
if(user.next_move_dir_sub)
|
||||
DEBUG_INPUT("[(user.next_move_dir_sub & movement_dir) ? "Actually" : "Want to"] subtract [dirs2text(user.next_move_dir_sub)] from [dirs2text(movement_dir)]")
|
||||
must_call_move = TRUE // So that next_move_dir_sub gets cleared if its time.
|
||||
movement_dir &= ~user.next_move_dir_sub
|
||||
|
||||
// Sanity checks in case you hold left and right and up to make sure you only go up
|
||||
if((movement_dir & (NORTH|SOUTH)) == (NORTH|SOUTH))
|
||||
movement_dir &= ~(NORTH|SOUTH)
|
||||
if((movement_dir & (EAST|WEST)) == (EAST|WEST))
|
||||
movement_dir &= ~(EAST|WEST)
|
||||
|
||||
#ifdef CARDINAL_INPUT_ONLY
|
||||
if(movement_dir & user.last_move_dir_pressed)
|
||||
movement_dir = user.last_move_dir_pressed
|
||||
else if (movement_dir == NORTHEAST || movement_dir == NORTHWEST)
|
||||
DEBUG_INPUT("overriding to NORTH: movement_dir=[dirs2text(movement_dir)] last=[dirs2text(user.last_move_dir_pressed)]")
|
||||
movement_dir = NORTH
|
||||
else if (movement_dir == SOUTHEAST || movement_dir == SOUTHWEST)
|
||||
DEBUG_INPUT("overriding to SOUTH: movement_dir=[dirs2text(movement_dir)] last=[dirs2text(user.last_move_dir_pressed)]")
|
||||
movement_dir = SOUTH
|
||||
#endif
|
||||
|
||||
// Compensate for client camera spinning (client.dir) so our movement still makes sense I guess.
|
||||
if(movement_dir) // Only compensate if non-zero, as byond will auto-fill dir otherwise
|
||||
movement_dir = turn(movement_dir, -dir2angle(user.dir))
|
||||
|
||||
// Move, but only if we actually are planing to move, or we need to clear the next move vars
|
||||
if(movement_dir || must_call_move)
|
||||
user.Move(get_step(src, movement_dir), movement_dir)
|
||||
@@ -0,0 +1,77 @@
|
||||
// TODO - Optimize this into numerics if this ends up working out
|
||||
var/global/list/MOVE_KEY_MAPPINGS = list(
|
||||
"North" = NORTH_KEY,
|
||||
"South" = SOUTH_KEY,
|
||||
"East" = EAST_KEY,
|
||||
"West" = WEST_KEY,
|
||||
"W" = W_KEY,
|
||||
"A" = A_KEY,
|
||||
"S" = S_KEY,
|
||||
"D" = D_KEY,
|
||||
"Shift" = SHIFT_KEY,
|
||||
"Ctrl" = CTRL_KEY,
|
||||
"Alt" = ALT_KEY,
|
||||
)
|
||||
|
||||
// These verbs are called for all movemen key press and release events
|
||||
/client/verb/moveKeyDown(movekeyName as text)
|
||||
set instant = TRUE
|
||||
set hidden = TRUE
|
||||
// set name = ".movekeydown"
|
||||
set name = "KeyDown"
|
||||
|
||||
// Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf)
|
||||
var/movekey = MOVE_KEY_MAPPINGS[movekeyName]
|
||||
|
||||
// Validate input. Must be one (and only one) of the key codes)
|
||||
if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1)))
|
||||
log_debug("Client [ckey] sent an illegal movement key down: [movekeyName] ([movekey])")
|
||||
return
|
||||
|
||||
// Record that we are now holding the key!
|
||||
move_keys_held |= (movekey & 0x0FF)
|
||||
mod_keys_held |= (movekey & 0xF00)
|
||||
|
||||
// If we were NOT holding at the start of this move cycle and pressed it, remember that.
|
||||
var/movement = MOVEMENT_KEYS_TO_DIR(movekey)
|
||||
if(movement && !(next_move_dir_sub & movement) && !(mod_keys_held & CTRL_KEY)) // TODO-LESHANA - Possibly not holding Alt either
|
||||
DEBUG_INPUT("Saving [dirs2text(movement)] into next_move_dir_ADD")
|
||||
next_move_dir_add |= movement
|
||||
|
||||
#ifdef CARDINAL_INPUT_ONLY
|
||||
if(movement)
|
||||
DEBUG_INPUT("set last=[dirs2text(movement)]")
|
||||
last_move_dir_pressed = movement
|
||||
#endif
|
||||
|
||||
mob.focus?.key_down(movekey, src)
|
||||
|
||||
/client/verb/moveKeyUp(movekeyName as text)
|
||||
set instant = TRUE
|
||||
set hidden = TRUE
|
||||
// set name = ".movekeyup"
|
||||
set name = "KeyUp"
|
||||
|
||||
// Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf)
|
||||
var/movekey = MOVE_KEY_MAPPINGS[movekeyName]
|
||||
|
||||
// Validate input. Must be one (and only one) of the key codes)
|
||||
if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1)))
|
||||
log_debug("Client [ckey] sent an illegal movement key up: [movekeyName] ([movekey])")
|
||||
return
|
||||
|
||||
// Clear bit indicating we were holding the key
|
||||
move_keys_held &= ~movekey
|
||||
mod_keys_held &= ~movekey
|
||||
|
||||
// If we were holding at the start of this move cycle and now relased it, remember that.
|
||||
var/movement = MOVEMENT_KEYS_TO_DIR(movekey)
|
||||
if(movement && !(next_move_dir_add & movement))
|
||||
DEBUG_INPUT("Saving [dirs2text(movement)] into next_move_dir_SUB")
|
||||
next_move_dir_sub |= movement
|
||||
|
||||
mob.focus?.key_up(movekey, src)
|
||||
|
||||
// Called every game tick
|
||||
/client/keyLoop()
|
||||
mob.focus?.keyLoop(src)
|
||||
@@ -0,0 +1,42 @@
|
||||
# In-code keypress handling system
|
||||
|
||||
This whole system is heavily based off of forum_account's keyboard library.
|
||||
Thanks to forum_account for saving the day, the library can be found
|
||||
[here](https://secure.byond.com/developer/Forum_account/Keyboard)!
|
||||
|
||||
.dmf macros have some very serious shortcomings. For example, they do not allow reusing parts
|
||||
of one macro in another, so giving cyborgs their own shortcuts to swap active module couldn't
|
||||
inherit the movement that all mobs should have anyways. The webclient only supports one macro,
|
||||
so having more than one was problematic. Additionally each keybind has to call an actual
|
||||
verb, which meant a lot of hidden verbs that just call one other proc. Also our existing
|
||||
macro was really bad and tied unrelated behavior into `Northeast()`, `Southeast()`, `Northwest()`,
|
||||
and `Southwest()`.
|
||||
|
||||
The basic premise of this system is to not screw with .dmf macro setup at all and handle
|
||||
pressing those keys in the code instead. We have every key call `client.keyDown()`
|
||||
or `client.keyUp()` with the pressed key as an argument. Certain keys get processed
|
||||
directly by the client because they should be doable at any time, then we call
|
||||
`keyDown()` or `keyUp()` on the client's holder and the client's mob's focus.
|
||||
By default `mob.focus` is the mob itself, but you can set it to any datum to give control of a
|
||||
client's keypresses to another object. This would be a good way to handle a menu or driving
|
||||
a mech. You can also set it to null to disregard input from a certain user.
|
||||
|
||||
Movement is handled by having each client call `client.keyLoop()` every game tick.
|
||||
As above, this calls holder and `focus.keyLoop()`. `atom/movable/keyLoop()` handles movement
|
||||
Try to keep the calculations in this proc light. It runs every tick for every client after all!
|
||||
|
||||
You can also tell which keys are being held down now. Each client a list of keys pressed called
|
||||
`keys_held`. Each entry is a key as a text string associated with the world.time when it was
|
||||
pressed.
|
||||
|
||||
No client-set keybindings at this time, but it shouldn't be too hard if someone wants.
|
||||
|
||||
Notes about certain keys:
|
||||
|
||||
* `Tab` has client-sided behavior but acts normally
|
||||
* `T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away.
|
||||
* `\` needs to be escaped in the dmf so any usage is `\\`
|
||||
|
||||
You cannot `TICK_CHECK` or check `world.tick_usage` inside of procs called by key down and up
|
||||
events. They happen outside of a byond tick and have no meaning there. Key looping
|
||||
works correctly since it's part of a subsystem, not direct input.
|
||||
@@ -0,0 +1,49 @@
|
||||
// Set a client's focus to an object and override these procs on that object to let it handle keypresses
|
||||
|
||||
/// Called when a key is pressed down initially
|
||||
/datum/proc/key_down(key, client/user)
|
||||
return
|
||||
|
||||
/// Called when a key is released
|
||||
/datum/proc/key_up(key, client/user)
|
||||
return
|
||||
|
||||
/// Called once every server tick
|
||||
/datum/proc/keyLoop(client/user)
|
||||
set waitfor = FALSE
|
||||
return
|
||||
|
||||
/// Set mob's focus. TODO: Decide if required.
|
||||
/mob/proc/set_focus(datum/new_focus)
|
||||
if(focus == new_focus)
|
||||
return
|
||||
focus = new_focus
|
||||
|
||||
/// Turns a keys bitfield into text showing all bits set
|
||||
/proc/keys2text(keys)
|
||||
if(!keys)
|
||||
return ""
|
||||
var/list/out = list()
|
||||
if(keys & NORTH_KEY)
|
||||
out += "NORTH"
|
||||
if(keys & SOUTH_KEY)
|
||||
out += "SOUTH"
|
||||
if(keys & EAST_KEY)
|
||||
out += "EAST"
|
||||
if(keys & WEST_KEY)
|
||||
out += "WEST"
|
||||
if(keys & W_KEY)
|
||||
out += "W"
|
||||
if(keys & A_KEY)
|
||||
out += "A"
|
||||
if(keys & S_KEY)
|
||||
out += "S"
|
||||
if(keys & D_KEY)
|
||||
out += "D"
|
||||
if(keys & CTRL_KEY)
|
||||
out += "CTRL"
|
||||
if(keys & SHIFT_KEY)
|
||||
out += "SHIFT"
|
||||
if(keys & ALT_KEY)
|
||||
out += "ALT"
|
||||
return out.Join(" ")
|
||||
@@ -249,11 +249,17 @@
|
||||
++frustration
|
||||
return
|
||||
|
||||
/mob/living/bot/proc/handleFrustrated(var/targ)
|
||||
obstacle = targ ? target_path[1] : patrol_path[1]
|
||||
|
||||
/mob/living/bot/proc/handleFrustrated(has_target)
|
||||
obstacle = null
|
||||
if (has_target)
|
||||
if (length(target_path))
|
||||
obstacle = target_path[1]
|
||||
else if (length(patrol_path))
|
||||
obstacle = patrol_path[1]
|
||||
target_path = list()
|
||||
patrol_path = list()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/bot/proc/lookForTargets()
|
||||
return
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
flick("mulebot-emagged", src)
|
||||
update_icons()
|
||||
|
||||
/mob/living/bot/mulebot/handleFrustrated()
|
||||
/mob/living/bot/mulebot/handleFrustrated(has_target)
|
||||
custom_emote(2, "makes a sighing buzz.")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
..()
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/mob/living
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
|
||||
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE
|
||||
|
||||
//Health and life related vars
|
||||
var/maxHealth = 100 //Maximum health that should be possible. Avoid adjusting this if you can, and instead use modifiers datums.
|
||||
var/health = 100 //A mob's health
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
/mob/CanPass(atom/movable/mover, turf/target)
|
||||
if(ismob(mover))
|
||||
var/mob/moving_mob = mover
|
||||
@@ -147,7 +149,15 @@ default behaviour is:
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
step(AM, t)
|
||||
var/turf/T = AM.loc
|
||||
var/turf/T2 = get_step(AM,t)
|
||||
if(!T2) // Map edge
|
||||
now_pushing = 0
|
||||
return
|
||||
var/move_time = movement_delay(loc, t) * SQRT_TWO
|
||||
move_time = DS2NEARESTTICK(move_time)
|
||||
if(AM.Move(T2, t, move_time))
|
||||
Move(T, t, move_time)
|
||||
|
||||
if(ishuman(AM) && AM:grabbed_by)
|
||||
for(var/obj/item/grab/G in AM:grabbed_by)
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
else
|
||||
living_mob_list += src
|
||||
lastarea = get_area(src)
|
||||
set_focus(src) // Key Handling
|
||||
update_transform() // Some mobs may start bigger or smaller than normal.
|
||||
return ..()
|
||||
|
||||
@@ -691,6 +692,7 @@
|
||||
|
||||
/mob/proc/facedir(var/ndir)
|
||||
if(!canface() || (client && (client.moving || !checkMoveCooldown())))
|
||||
DEBUG_INPUT("Denying Facedir for [src] (moving=[client?.moving])")
|
||||
return 0
|
||||
set_dir(ndir)
|
||||
if(buckled && buckled.buckle_movable)
|
||||
@@ -1192,4 +1194,4 @@
|
||||
/mob/proc/handle_reagent_transfer(var/datum/reagents/holder, var/amount = 1, var/chem_type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0)
|
||||
var/datum/reagents/R = new /datum/reagents(amount)
|
||||
. = holder.trans_to_holder(R, amount, multiplier, copy)
|
||||
R.touch_mob(src)
|
||||
R.touch_mob(src)
|
||||
@@ -223,3 +223,4 @@
|
||||
var/registered_z
|
||||
|
||||
var/in_enclosed_vehicle = 0 //For mechs and fighters ambiance. Can be used in other cases.
|
||||
var/datum/focus //What receives our keyboard inputs. src by default
|
||||
@@ -137,25 +137,36 @@
|
||||
// Used many times below, faster reference.
|
||||
var/atom/loc = my_mob.loc
|
||||
|
||||
// We're controlling an object which is SOMEHOW DIFFERENT FROM AN EYE??
|
||||
// We're controlling an object which is when admins possess an object.
|
||||
if(my_mob.control_object)
|
||||
Move_object(direct)
|
||||
|
||||
// Ghosty mob movement
|
||||
if(my_mob.incorporeal_move && isobserver(my_mob))
|
||||
Process_Incorpmove(direct)
|
||||
DEBUG_INPUT("--------")
|
||||
next_move_dir_add = 0 // This one I *think* exists so you can tap move and it will move even if delay isn't quite up.
|
||||
next_move_dir_sub = 0 // I'm not really sure why next_move_dir_sub even exists.
|
||||
return
|
||||
|
||||
// We're in the middle of another move we've already decided to do
|
||||
if(moving)
|
||||
log_debug("Client [src] attempted to move while moving=[moving]")
|
||||
return 0
|
||||
|
||||
// We're still cooling down from the last move
|
||||
if(!my_mob.checkMoveCooldown())
|
||||
return
|
||||
DEBUG_INPUT("--------")
|
||||
next_move_dir_add = 0 // This one I *think* exists so you can tap move and it will move even if delay isn't quite up.
|
||||
next_move_dir_sub = 0 // I'm not really sure why next_move_dir_sub even exists.
|
||||
|
||||
if(!n || !direct)
|
||||
return
|
||||
|
||||
// If dead and we try to move in our mob, it leaves our body
|
||||
if(my_mob.stat == DEAD && isliving(my_mob) && !my_mob.forbid_seeing_deadchat)
|
||||
my_mob.setMoveCooldown(my_mob.movement_delay(n, direct))
|
||||
my_mob.ghostize()
|
||||
return
|
||||
|
||||
@@ -284,6 +295,10 @@
|
||||
else
|
||||
. = my_mob.SelfMove(n, direct, total_delay)
|
||||
|
||||
// If we ended up moving diagonally, increase delay.
|
||||
if((direct & (direct - 1)) && mob.loc == n)
|
||||
my_mob.setMoveCooldown(total_delay * 2)
|
||||
|
||||
// If we have a grab
|
||||
var/list/grablist = my_mob.ret_grab()
|
||||
if(LAZYLEN(grablist))
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
if(throwing)
|
||||
return
|
||||
|
||||
if(can_fall())
|
||||
if(can_fall() && can_fall_to(below))
|
||||
// We spawn here to let the current move operation complete before we start falling. fall() is normally called from
|
||||
// Entered() which is part of Move(), by spawn()ing we let that complete. But we want to preserve if we were in client movement
|
||||
// or normal movement so other move behavior can continue.
|
||||
@@ -278,6 +278,17 @@
|
||||
/obj/structure/catwalk/CheckFall(var/atom/movable/falling_atom)
|
||||
return falling_atom.fall_impact(src)
|
||||
|
||||
/atom/movable/proc/can_fall_to(turf/landing)
|
||||
// Check if there is anything in our turf we are standing on to prevent falling.
|
||||
for(var/obj/O in loc)
|
||||
if(!O.CanFallThru(src, landing))
|
||||
return FALSE
|
||||
// See if something in turf below prevents us from falling into it.
|
||||
for(var/atom/A in landing)
|
||||
if(!A.CanPass(src, src.loc, 1, 0))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/lattice/CanFallThru(atom/movable/mover as mob|obj, turf/target as turf)
|
||||
if(target.z >= z)
|
||||
return TRUE // We don't block sideways or upward movement.
|
||||
@@ -298,15 +309,6 @@
|
||||
/atom/movable/proc/handle_fall(var/turf/landing)
|
||||
var/turf/oldloc = loc
|
||||
|
||||
// Check if there is anything in our turf we are standing on to prevent falling.
|
||||
for(var/obj/O in loc)
|
||||
if(!O.CanFallThru(src, landing))
|
||||
return FALSE
|
||||
// See if something in turf below prevents us from falling into it.
|
||||
for(var/atom/A in landing)
|
||||
if(!A.CanPass(src, src.loc, 1, 0))
|
||||
return FALSE
|
||||
|
||||
// Now lets move there!
|
||||
if(!Move(landing))
|
||||
return 1
|
||||
|
||||
@@ -445,6 +445,25 @@ var/global/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
parts = list(BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
|
||||
modular_bodyparts = MODULAR_BODYPART_PROSTHETIC
|
||||
|
||||
/datum/robolimb/wooden/teshari
|
||||
company = "Morgan Trading Co - Teshari"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi'
|
||||
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co")
|
||||
suggested_species = SPECIES_TESHARI
|
||||
|
||||
/datum/robolimb/wooden/sif
|
||||
company = "Morgan Trading Co - Sif wood"
|
||||
desc = "A simplistic, metal-banded, wood-panelled prosthetic. This one is covered in Sivian wood!"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi'
|
||||
|
||||
/datum/robolimb/wooden/sif/teshari
|
||||
company = "Morgan Trading Co - Sif wood - Teshari"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi'
|
||||
species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT)
|
||||
species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co")
|
||||
suggested_species = SPECIES_TESHARI
|
||||
|
||||
/obj/item/disk/limb
|
||||
name = "Limb Blueprints"
|
||||
desc = "A disk containing the blueprints for prosthetics."
|
||||
|
||||
@@ -244,6 +244,7 @@
|
||||
/obj/item/crossbowframe
|
||||
name = "crossbow frame"
|
||||
desc = "A half-finished crossbow."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "crossbowframe0"
|
||||
item_state = "crossbow-solid"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user