diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index d6e522e3a0..0f8e832d63 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -3730,6 +3730,13 @@
},
/turf/open/floor/plasteel,
/area/centcom/control)
+"jA" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/item/soap/syndie,
+/turf/open/floor/plasteel/freezer,
+/area/syndicate_mothership)
"jB" = (
/obj/structure/noticeboard{
dir = 8;
@@ -4215,6 +4222,14 @@
"ku" = (
/turf/closed/indestructible/fakeglass,
/area/syndicate_mothership)
+"kv" = (
+/obj/structure/mirror{
+ pixel_x = -28
+ },
+/obj/structure/table,
+/obj/item/reagent_containers/rag/towel/syndicate,
+/turf/open/floor/plasteel/freezer,
+/area/syndicate_mothership)
"kw" = (
/turf/open/floor/plasteel/yellowsiding,
/area/centcom/supply)
@@ -8414,10 +8429,6 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
-"tg" = (
-/obj/item/soap/syndie,
-/turf/open/floor/plasteel/freezer,
-/area/syndicate_mothership)
"tl" = (
/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plating,
@@ -17430,12 +17441,6 @@
},
/turf/open/floor/plasteel/white,
/area/centcom/holding)
-"Rl" = (
-/obj/structure/mirror{
- pixel_x = -28
- },
-/turf/open/floor/plasteel/freezer,
-/area/syndicate_mothership)
"Rm" = (
/obj/structure/chair/wood/wings{
dir = 3
@@ -37823,8 +37828,8 @@ nx
mA
Tz
ku
-tg
-Rl
+jA
+kv
uM
QV
wp
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index 2abe0db04e..b71b7b8efa 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -12,7 +12,7 @@
#define ui_boxcraft "EAST-4:22,SOUTH+1:6"
#define ui_boxarea "EAST-4:6,SOUTH+1:6"
#define ui_boxlang "EAST-5:22,SOUTH+1:6"
-#define ui_boxvore "EAST-4:22,SOUTH+1:6"
+#define ui_boxvore "EAST-5:22,SOUTH+1:6"
//Filters
#define CIT_FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, border=0, color="#04080F")
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 82ccd439ee..d09368d7b7 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -100,6 +100,11 @@ GLOBAL_LIST_INIT(security_depts_prefs, list(SEC_DEPT_RANDOM, SEC_DEPT_NONE, SEC_
#define DDUFFELBAG "Department Duffel Bag"
GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, GBACKPACK, GSATCHEL, GDUFFELBAG, LSATCHEL))
+//Suit/Skirt
+#define PREF_SUIT "Jumpsuit"
+#define PREF_SKIRT "Jumpskirt"
+GLOBAL_LIST_INIT(jumpsuitlist, list(PREF_SUIT, PREF_SKIRT))
+
//Uplink spawn loc
#define UPLINK_PDA "PDA"
#define UPLINK_RADIO "Radio"
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 4283d7f78f..cdf932e127 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -85,7 +85,7 @@
return 1
return 0
-/datum/martial_art/krav_maga/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.lying || D.IsKnockdown())
return 0
D.visible_message("[A] leg sweeps [D]!", \
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 7d150d890d..51fc6c54f6 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -130,7 +130,8 @@
L.update_arousal_hud() //Removes the old icon
/datum/mind/proc/store_memory(new_text)
- memory += "[new_text]
"
+ if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN)
+ memory += "[new_text]
"
/datum/mind/proc/wipe_memory()
memory = null
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index ba9b6fc225..f32772b600 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -163,15 +163,8 @@
H.hardset_dna(ui, se, H.real_name, null, mrace, features)
- if(efficiency > 2)
- var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations)
- H.dna.remove_mutation_group(unclean_mutations)
- if(efficiency > 5 && prob(20))
- H.randmutvg()
- if(efficiency < 3 && prob(50))
- var/mob/M = H.randmutb()
- if(ismob(M))
- H = M
+ if(prob(50 - efficiency*10)) //Chance to give a bad mutation.
+ H.randmutb() //100% bad mutation. Can be cured with mutadone.
H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment.
occupant = H
diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm
index fe69860f76..e90e05966c 100644
--- a/code/game/machinery/computer/arcade/minesweeper.dm
+++ b/code/game/machinery/computer/arcade/minesweeper.dm
@@ -250,11 +250,11 @@
itemname = "a syndicate bomb beacon"
new /obj/item/sbeacondrop/bomb(loc)
if(2)
- itemname = "a grenade launcher"
- new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(loc)
- new /obj/item/ammo_casing/a40mm(loc)
- new /obj/item/ammo_casing/a40mm(loc)
- new /obj/item/ammo_casing/a40mm(loc)
+ itemname = "a rocket launcher"
+ new /obj/item/gun/ballistic/rocketlauncher/unrestricted(loc)
+ new /obj/item/ammo_casing/caseless/rocket(loc)
+ new /obj/item/ammo_casing/caseless/rocket(loc)
+ new /obj/item/ammo_casing/caseless/rocket(loc)
if(3)
itemname = "two bags of c4"
new /obj/item/storage/backpack/duffelbag/syndie/c4(loc)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 39d5c3d56f..bfa6b46134 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -13,17 +13,20 @@
var/scantemp_ckey
var/scantemp = "Ready to Scan"
var/menu = 1 //Which menu screen to display
- var/list/records = list()
var/datum/data/record/active_record = null
var/obj/item/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
var/autoprocess = 0
+ var/list/records = list()
light_color = LIGHT_COLOR_BLUE
/obj/machinery/computer/cloning/Initialize()
. = ..()
updatemodules(TRUE)
+ var/obj/item/circuitboard/computer/cloning/board = circuit
+ records = board.records
+
/obj/machinery/computer/cloning/Destroy()
if(pods)
@@ -346,6 +349,8 @@
active_record = null
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
src.menu = 2
+ var/obj/item/circuitboard/computer/cloning/board = circuit
+ board.records = records
else
src.temp = "Access Denied."
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
@@ -368,6 +373,8 @@
for(var/key in diskette.fields)
src.active_record.fields[key] = diskette.fields[key]
src.temp = "Load successful."
+ var/obj/item/circuitboard/computer/cloning/board = circuit
+ board.records = records
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
if("eject")
@@ -502,5 +509,7 @@
R.fields["imp"] = "[REF(imp)]"
src.records += R
+ var/obj/item/circuitboard/computer/cloning/board = circuit
+ board.records = records
scantemp = "Subject successfully scanned."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 2a24ce69b9..5e8515d3d5 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -95,7 +95,7 @@
var/obj/item/toy/crayon/CR = WM.color_source
add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
-/obj/item/reagents_containers/glass/rag/towel/machine_wash(obj/machinery/washing_machine/WM)
+/obj/item/reagents_containers/rag/towel/machine_wash(obj/machinery/washing_machine/WM)
if(WM.color_source)
if(istype(WM.color_source, /obj/item/toy/crayon))
var/obj/item/toy/crayon/CR = WM.color_source
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index a1ee62e2eb..7d2ffe0a02 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -110,6 +110,7 @@
/obj/item/circuitboard/computer/cloning
name = "Cloning (Computer Board)"
build_path = /obj/machinery/computer/cloning
+ var/list/records = list()
/obj/item/circuitboard/computer/prototype_cloning
name = "Prototype Cloning (Computer Board)"
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 4ff63ceeac..5a4d85885b 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -1196,3 +1196,20 @@
new /obj/item/reagent_containers/food/snacks/grown/chili(src)
new /obj/item/reagent_containers/food/drinks/coffee/type2(src)
new /obj/item/tank/internals/emergency_oxygen(src)
+
+//Where do I put this?
+/obj/item/secbat
+ name = "Secbat box"
+ desc = "Contained inside is a secbat for use with law enforcement."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "box"
+ item_state = "syringe_kit"
+ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
+
+/obj/item/secbat/attack_self(mob/user)
+ new /mob/living/simple_animal/hostile/retaliate/bat/secbat(user.loc)
+ to_chat(user, "You open the box, releasing the secbat!")
+ var/obj/item/stack/sheet/cardboard/I = new(user.drop_location())
+ qdel(src)
+ user.put_in_hands(I)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 5a9228e397..18928424c0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -9,6 +9,7 @@
new /obj/item/clothing/head/beret/qm(src)
new /obj/item/storage/lockbox/medal/cargo(src)
new /obj/item/clothing/under/rank/cargo(src)
+ new /obj/item/clothing/under/rank/cargo/skirt(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/radio/headset/headset_cargo(src)
new /obj/item/clothing/suit/fire/firefighter(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 0d06276876..167823b9be 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -8,6 +8,7 @@
new /obj/item/clothing/neck/cloak/ce(src)
new /obj/item/clothing/head/beret/ce(src)
new /obj/item/clothing/under/rank/chief_engineer(src)
+ new /obj/item/clothing/under/rank/chief_engineer/skirt(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/gloves/color/yellow(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 9081cddbe4..0f810225b3 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -61,6 +61,7 @@
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/suit/toggle/labcoat/cmo(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
+ new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
new /obj/item/clothing/shoes/sneakers/brown (src)
new /obj/item/cartridge/cmo(src)
new /obj/item/radio/headset/heads/cmo(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 7fe1247eb7..efcc2aa7ca 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -11,8 +11,11 @@
new /obj/item/clothing/head/bio_hood/scientist(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/under/rank/research_director(src)
+ new /obj/item/clothing/under/rank/research_director/skirt(src)
new /obj/item/clothing/under/rank/research_director/alt(src)
+ new /obj/item/clothing/under/rank/research_director/alt/skirt(src)
new /obj/item/clothing/under/rank/research_director/turtleneck(src)
+ new /obj/item/clothing/under/rank/research_director/turtleneck/skirt(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/cartridge/rd(src)
new /obj/item/clothing/gloves/color/latex(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 8c06af91a4..3cb8ceb22b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -2,7 +2,6 @@
name = "\proper captain's locker"
req_access = list(ACCESS_CAPTAIN)
icon_state = "cap"
-
/obj/structure/closet/secure_closet/captains/PopulateContents()
..()
new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
@@ -14,6 +13,7 @@
new /obj/item/pet_carrier(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/clothing/under/rank/captain(src)
+ new /obj/item/clothing/under/rank/captain/skirt(src)
new /obj/item/clothing/suit/armor/vest/capcarapace(src)
new /obj/item/clothing/head/caphat(src)
new /obj/item/clothing/under/captainparade(src)
@@ -34,16 +34,15 @@
new /obj/item/gun/energy/e_gun(src)
new /obj/item/door_remote/captain(src)
new /obj/item/storage/photo_album/Captain(src)
-
/obj/structure/closet/secure_closet/hop
name = "\proper head of personnel's locker"
req_access = list(ACCESS_HOP)
icon_state = "hop"
-
/obj/structure/closet/secure_closet/hop/PopulateContents()
..()
new /obj/item/clothing/neck/cloak/hop(src)
new /obj/item/clothing/under/rank/head_of_personnel(src)
+ new /obj/item/clothing/under/rank/head_of_personnel/skirt(src)
new /obj/item/clothing/head/hopcap(src)
new /obj/item/clothing/head/hopcap/beret(src)
new /obj/item/cartridge/hop(src)
@@ -62,12 +61,10 @@
new /obj/item/door_remote/civillian(src)
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/HoP(src)
-
/obj/structure/closet/secure_closet/hos
name = "\proper head of security's locker"
req_access = list(ACCESS_HOS)
icon_state = "hos"
-
/obj/structure/closet/secure_closet/hos/PopulateContents()
..()
new /obj/item/clothing/neck/cloak/hos(src)
@@ -77,7 +74,9 @@
new /obj/item/clothing/under/hosparademale(src)
new /obj/item/clothing/suit/armor/vest/leather(src)
new /obj/item/clothing/suit/armor/hos(src)
+ new /obj/item/clothing/under/rank/head_of_security/skirt(src)
new /obj/item/clothing/under/rank/head_of_security/alt(src)
+ new /obj/item/clothing/under/rank/head_of_security/alt/skirt(src)
new /obj/item/clothing/head/HoS(src)
new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src)
new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src)
@@ -95,12 +94,10 @@
new /obj/item/pinpointer/nuke(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
new /obj/item/storage/photo_album/HoS(src)
-
/obj/structure/closet/secure_closet/warden
name = "\proper warden's locker"
req_access = list(ACCESS_ARMORY)
icon_state = "warden"
-
/obj/structure/closet/secure_closet/warden/PopulateContents()
..()
new /obj/item/radio/headset/headset_sec(src)
@@ -110,6 +107,7 @@
new /obj/item/clothing/head/beret/sec/navywarden(src)
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
new /obj/item/clothing/under/rank/warden/navyblue(src)
+ new /obj/item/clothing/under/rank/warden/skirt(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/holosign_creator/security(src)
new /obj/item/clothing/mask/gas/sechailer(src)
@@ -120,12 +118,10 @@
new /obj/item/clothing/gloves/krav_maga/sec(src)
new /obj/item/door_remote/head_of_security(src)
new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src)
-
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
req_access = list(ACCESS_SECURITY)
icon_state = "sec"
-
/obj/structure/closet/secure_closet/security/PopulateContents()
..()
new /obj/item/clothing/suit/armor/vest(src)
@@ -134,55 +130,45 @@
new /obj/item/radio/headset/headset_sec/alt(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/flashlight/seclite(src)
-
/obj/structure/closet/secure_closet/security/sec
-
/obj/structure/closet/secure_closet/security/sec/PopulateContents()
..()
new /obj/item/storage/belt/security/full(src)
-
/obj/structure/closet/secure_closet/security/cargo
-
/obj/structure/closet/secure_closet/security/cargo/PopulateContents()
..()
new /obj/item/clothing/accessory/armband/cargo(src)
new /obj/item/encryptionkey/headset_cargo(src)
-
/obj/structure/closet/secure_closet/security/engine
-
/obj/structure/closet/secure_closet/security/engine/PopulateContents()
..()
new /obj/item/clothing/accessory/armband/engine(src)
new /obj/item/encryptionkey/headset_eng(src)
-
/obj/structure/closet/secure_closet/security/science
-
/obj/structure/closet/secure_closet/security/science/PopulateContents()
..()
new /obj/item/clothing/accessory/armband/science(src)
new /obj/item/encryptionkey/headset_sci(src)
-
/obj/structure/closet/secure_closet/security/med
-
/obj/structure/closet/secure_closet/security/med/PopulateContents()
..()
new /obj/item/clothing/accessory/armband/medblue(src)
new /obj/item/encryptionkey/headset_med(src)
-
/obj/structure/closet/secure_closet/detective
name = "\improper detective's cabinet"
req_access = list(ACCESS_FORENSICS_LOCKERS)
icon_state = "cabinet"
resistance_flags = FLAMMABLE
max_integrity = 70
-
/obj/structure/closet/secure_closet/detective/PopulateContents()
..()
new /obj/item/clothing/under/rank/det(src)
+ new /obj/item/clothing/under/rank/det/skirt(src)
new /obj/item/clothing/suit/det_suit(src)
new /obj/item/clothing/head/fedora/det_hat(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/under/rank/det/grey(src)
+ new /obj/item/clothing/under/rank/det/grey/skirt(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/suit/det_suit/grey(src)
new /obj/item/clothing/head/fedora(src)
@@ -200,33 +186,29 @@
/obj/structure/closet/secure_closet/injection
name = "lethal injections"
req_access = list(ACCESS_HOS)
-
/obj/structure/closet/secure_closet/injection/PopulateContents()
..()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/syringe/lethal/execution(src)
-
/obj/structure/closet/secure_closet/brig
name = "brig locker"
req_access = list(ACCESS_BRIG)
anchored = TRUE
var/id = null
-
/obj/structure/closet/secure_closet/evidence
anchored = TRUE
name = "Secure Evidence Closet"
req_access_txt = "0"
req_one_access_txt = list(ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS)
-
/obj/structure/closet/secure_closet/brig/PopulateContents()
..()
new /obj/item/clothing/under/rank/prisoner( src )
+ new /obj/item/clothing/under/rank/prisoner/skirt( src )
new /obj/item/clothing/shoes/sneakers/orange( src )
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"
req_access = list(ACCESS_COURT)
-
/obj/structure/closet/secure_closet/courtroom/PopulateContents()
..()
new /obj/item/clothing/shoes/sneakers/brown(src)
@@ -236,22 +218,18 @@
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
new /obj/item/storage/briefcase(src)
-
/obj/structure/closet/secure_closet/contraband/armory
anchored = TRUE
name = "Contraband Locker"
req_access = list(ACCESS_ARMORY)
-
/obj/structure/closet/secure_closet/contraband/heads
anchored = TRUE
name = "Contraband Locker"
req_access = list(ACCESS_HEADS)
-
/obj/structure/closet/secure_closet/armory1
name = "armory armor locker"
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
-
/obj/structure/closet/secure_closet/armory1/PopulateContents()
..()
new /obj/item/clothing/suit/armor/laserproof(src)
@@ -261,12 +239,10 @@
new /obj/item/clothing/head/helmet/riot(src)
for(var/i in 1 to 3)
new /obj/item/shield/riot(src)
-
/obj/structure/closet/secure_closet/armory2
name = "armory ballistics locker"
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
-
/obj/structure/closet/secure_closet/armory2/PopulateContents()
..()
new /obj/item/storage/box/firingpins(src)
@@ -274,12 +250,10 @@
new /obj/item/storage/box/rubbershot(src)
for(var/i in 1 to 3)
new /obj/item/gun/ballistic/shotgun/riot(src)
-
/obj/structure/closet/secure_closet/armory3
name = "armory energy gun locker"
req_access = list(ACCESS_ARMORY)
icon_state = "armory"
-
/obj/structure/closet/secure_closet/armory3/PopulateContents()
..()
new /obj/item/storage/box/firingpins(src)
@@ -288,24 +262,20 @@
new /obj/item/gun/energy/e_gun(src)
for(var/i in 1 to 3)
new /obj/item/gun/energy/laser(src)
-
/obj/structure/closet/secure_closet/tac
name = "armory tac locker"
req_access = list(ACCESS_ARMORY)
icon_state = "tac"
-
/obj/structure/closet/secure_closet/tac/PopulateContents()
..()
new /obj/item/gun/ballistic/automatic/wt550(src)
new /obj/item/clothing/head/helmet/alt(src)
new /obj/item/clothing/mask/gas/sechailer(src)
new /obj/item/clothing/suit/armor/bulletproof(src)
-
/obj/structure/closet/secure_closet/lethalshots
name = "shotgun lethal rounds"
req_access = list(ACCESS_ARMORY)
icon_state = "tac"
-
/obj/structure/closet/secure_closet/lethalshots/PopulateContents()
..()
for(var/i in 1 to 3)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index f2d32b773e..94d1b03fdb 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -9,6 +9,7 @@
/obj/structure/closet/syndicate/personal/PopulateContents()
..()
new /obj/item/clothing/under/syndicate(src)
+ new /obj/item/clothing/under/syndicate/skirt(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/radio/headset/syndicate(src)
new /obj/item/ammo_box/magazine/m10mm(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 7493603ad4..d83922d708 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -2,33 +2,34 @@
name = "wardrobe"
desc = "It's a storage unit for standard-issue Nanotrasen attire."
icon_door = "blue"
-
/obj/structure/closet/wardrobe/PopulateContents()
..()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/blue(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/blue(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/brown(src)
return
-
/obj/structure/closet/wardrobe/pink
name = "pink wardrobe"
icon_door = "pink"
-
/obj/structure/closet/wardrobe/pink/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/pink(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/pink(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/brown(src)
return
-
/obj/structure/closet/wardrobe/black
name = "black wardrobe"
icon_door = "black"
-
/obj/structure/closet/wardrobe/black/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/black(src)
if(prob(25))
new /obj/item/clothing/suit/jacket/leather(src)
if(prob(20))
@@ -44,66 +45,60 @@
if(prob(40))
new /obj/item/clothing/mask/bandana/skull(src)
return
-
-
/obj/structure/closet/wardrobe/green
name = "green wardrobe"
icon_door = "green"
-
/obj/structure/closet/wardrobe/green/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/green(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/green(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/mask/bandana/green(src)
new /obj/item/clothing/mask/bandana/green(src)
return
-
-
/obj/structure/closet/wardrobe/orange
name = "prison wardrobe"
desc = "It's a storage unit for Nanotrasen-regulation prisoner attire."
icon_door = "orange"
-
/obj/structure/closet/wardrobe/orange/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/prisoner(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/prisoner/skirt(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/orange(src)
return
-
-
/obj/structure/closet/wardrobe/yellow
name = "yellow wardrobe"
icon_door = "yellow"
-
/obj/structure/closet/wardrobe/yellow/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/yellow(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/yellow(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/orange(src)
new /obj/item/clothing/mask/bandana/gold(src)
new /obj/item/clothing/mask/bandana/gold(src)
return
-
-
/obj/structure/closet/wardrobe/white
name = "white wardrobe"
icon_door = "white"
-
/obj/structure/closet/wardrobe/white/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/white(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/white(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/white(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft/mime(src)
return
-
/obj/structure/closet/wardrobe/pjs
name = "pajama wardrobe"
icon_door = "white"
-
/obj/structure/closet/wardrobe/pjs/PopulateContents()
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/red(src)
@@ -112,15 +107,14 @@
for(var/i in 1 to 4)
new /obj/item/clothing/shoes/sneakers/white(src)
return
-
-
/obj/structure/closet/wardrobe/grey
name = "grey wardrobe"
icon_door = "grey"
-
/obj/structure/closet/wardrobe/grey/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/clothing/under/color/grey(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/skirt/color/grey(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
for(var/i in 1 to 3)
@@ -140,28 +134,36 @@
if(prob(30))
new /obj/item/clothing/accessory/pocketprotector(src)
return
-
-
/obj/structure/closet/wardrobe/mixed
name = "mixed wardrobe"
icon_door = "mixed"
-
/obj/structure/closet/wardrobe/mixed/PopulateContents()
if(prob(40))
new /obj/item/clothing/suit/jacket(src)
if(prob(40))
new /obj/item/clothing/suit/jacket(src)
new /obj/item/clothing/under/color/white(src)
+ new /obj/item/clothing/under/skirt/color/white(src)
new /obj/item/clothing/under/color/blue(src)
+ new /obj/item/clothing/under/skirt/color/blue(src)
new /obj/item/clothing/under/color/yellow(src)
+ new /obj/item/clothing/under/skirt/color/yellow(src)
new /obj/item/clothing/under/color/green(src)
+ new /obj/item/clothing/under/skirt/color/green(src)
new /obj/item/clothing/under/color/orange(src)
+ new /obj/item/clothing/under/skirt/color/orange(src)
new /obj/item/clothing/under/color/pink(src)
+ new /obj/item/clothing/under/skirt/color/pink(src)
new /obj/item/clothing/under/color/red(src)
+ new /obj/item/clothing/under/skirt/color/red(src)
new /obj/item/clothing/under/color/darkblue(src)
+ new /obj/item/clothing/under/skirt/color/darkblue(src)
new /obj/item/clothing/under/color/teal(src)
+ new /obj/item/clothing/under/skirt/color/teal(src)
new /obj/item/clothing/under/color/lightpurple(src)
+ new /obj/item/clothing/under/skirt/color/lightpurple(src)
new /obj/item/clothing/under/color/green(src)
+ new /obj/item/clothing/under/skirt/color/green(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/blue(src)
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 9858db2abb..0d9c0730c1 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -38,8 +38,11 @@ GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list())
for(var/id in cached_gases)
. += cached_gases[id] * cached_gasheats[id]
-/datum/gas_mixture/turf/heat_capacity()
- . = ..()
+/datum/gas_mixture/turf/heat_capacity() // Same as above except vacuums return HEAT_CAPACITY_VACUUM
+ var/list/cached_gases = gases
+ var/list/cached_gasheats = GLOB.meta_gas_specific_heats
+ for(var/id in cached_gases)
+ . += cached_gases[id] * cached_gasheats[id]
if(!.)
. += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space
@@ -331,22 +334,19 @@ GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list())
/datum/gas_mixture/react(datum/holder)
. = NO_REACTION
var/list/cached_gases = gases
- if(!cached_gases.len)
+ if(!length(cached_gases))
return
- var/possible
+ var/list/reactions = list()
for(var/I in cached_gases)
- if(GLOB.nonreactive_gases[I])
- continue
- possible = TRUE
- break
- if(!possible)
+ reactions += SSair.gas_reactions[I]
+ if(!length(reactions))
return
reaction_results = new
var/temp = temperature
var/ener = THERMAL_ENERGY(src)
reaction_loop:
- for(var/r in SSair.gas_reactions)
+ for(var/r in reactions)
var/datum/gas_reaction/reaction = r
var/list/min_reqs = reaction.min_requirements
@@ -376,14 +376,11 @@ GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list())
continue reaction_loop
//at this point, all requirements for the reaction are satisfied. we can now react()
*/
-
. |= reaction.react(src, holder)
if (. & STOP_REACTIONS)
break
if(.)
GAS_GARBAGE_COLLECT(gases)
- if(temperature < TCMB) //just for safety
- temperature = TCMB
//Takes the amount of the gas you want to PP as an argument
//So I don't have to do some hacky switches/defines/magic strings
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index d628826b01..19f7bff965 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -78,22 +78,26 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
var/moles_visible = null
var/dangerous = FALSE //currently used by canisters
var/fusion_power = 0 //How much the gas accelerates a fusion reaction
+ var/rarity = 0 // relative rarity compared to other gases, used when setting up the reactions list.
/datum/gas/oxygen
id = "o2"
specific_heat = 20
name = "Oxygen"
+ rarity = 900
/datum/gas/nitrogen
id = "n2"
specific_heat = 20
name = "Nitrogen"
+ rarity = 1000
/datum/gas/carbon_dioxide //what the fuck is this?
id = "co2"
specific_heat = 30
name = "Carbon Dioxide"
fusion_power = 3
+ rarity = 700
/datum/gas/plasma
id = "plasma"
@@ -102,6 +106,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "plasma"
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
+ rarity = 800
/datum/gas/water_vapor
id = "water_vapor"
@@ -110,6 +115,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "water_vapor"
moles_visible = MOLES_GAS_VISIBLE
fusion_power = 8
+ rarity = 500
/datum/gas/hypernoblium
id = "nob"
@@ -118,6 +124,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "freon"
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
+ rarity = 50
/datum/gas/nitrous_oxide
id = "n2o"
@@ -126,6 +133,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "nitrous_oxide"
moles_visible = MOLES_GAS_VISIBLE * 2
dangerous = TRUE
+ rarity = 600
/datum/gas/nitryl
id = "no2"
@@ -135,6 +143,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
fusion_power = 15
+ rarity = 100
/datum/gas/tritium
id = "tritium"
@@ -144,6 +153,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
fusion_power = 1
+ rarity = 300
/datum/gas/bz
id = "bz"
@@ -151,18 +161,21 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
name = "BZ"
dangerous = TRUE
fusion_power = 8
+ rarity = 400
/datum/gas/stimulum
id = "stim"
specific_heat = 5
name = "Stimulum"
fusion_power = 7
+ rarity = 1
/datum/gas/pluoxium
id = "pluox"
specific_heat = 80
name = "Pluoxium"
fusion_power = 10
+ rarity = 200
/datum/gas/miasma
id = "miasma"
@@ -171,6 +184,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
name = "Miasma"
gas_overlay = "miasma"
moles_visible = MOLES_GAS_VISIBLE * 60
+ rarity = 250
/obj/effect/overlay/gas
icon = 'icons/effects/atmospherics.dmi'
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index ef0a422079..5ad97fb7c8 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -1,19 +1,36 @@
//All defines used in reactions are located in ..\__DEFINES\reactions.dm
/proc/init_gas_reactions()
- var/list/reaction_types = list()
+ . = list()
+ for(var/type in subtypesof(/datum/gas))
+ .[type] = list()
+
for(var/r in subtypesof(/datum/gas_reaction))
var/datum/gas_reaction/reaction = r
- if(!initial(reaction.exclude))
- reaction_types += reaction
- reaction_types = sortList(reaction_types, /proc/cmp_gas_reactions)
+ if(initial(reaction.exclude))
+ continue
+ reaction = new r
+ var/datum/gas/reaction_key
+ for (var/req in reaction.min_requirements)
+ if (ispath(req))
+ var/datum/gas/req_gas = req
+ if (!reaction_key || initial(reaction_key.rarity) > initial(req_gas.rarity))
+ reaction_key = req_gas
+ .[reaction_key] += list(reaction)
+ sortTim(., /proc/cmp_gas_reactions, TRUE)
- . = list()
- for(var/path in reaction_types)
- . += new path
-
-/proc/cmp_gas_reactions(datum/gas_reaction/a, datum/gas_reaction/b) //sorts in descending order of priority
- return initial(b.priority) - initial(a.priority)
+/proc/cmp_gas_reactions(list/datum/gas_reaction/a, list/datum/gas_reaction/b) // compares lists of reactions by the maximum priority contained within the list
+ if (!length(a) || !length(b))
+ return length(b) - length(a)
+ var/maxa
+ var/maxb
+ for (var/datum/gas_reaction/R in a)
+ if (R.priority > maxa)
+ maxa = R.priority
+ for (var/datum/gas_reaction/R in b)
+ if (R.priority > maxb)
+ maxb = R.priority
+ return maxb - maxa
/datum/gas_reaction
//regarding the requirements lists: the minimum or maximum requirements must be non-zero.
@@ -364,7 +381,7 @@
cached_gases[/datum/gas/nitrous_oxide] -= reaction_efficency
cached_gases[/datum/gas/plasma] -= 2*reaction_efficency
- SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, (reaction_efficency**0.5)*BZ_RESEARCH_AMOUNT)
+ SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, (reaction_efficency**0.5)*BZ_RESEARCH_AMOUNT)
if(energy_released > 0)
var/new_heat_capacity = air.heat_capacity()
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 72f5d2d068..53a8ab42c3 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -252,6 +252,17 @@
crate_name = "space suit crate"
crate_type = /obj/structure/closet/crate/secure
+/datum/supply_pack/emergency/spacejets
+ name = "Spare EVA Jetpacks"
+ desc = "Contains three EVA grade jectpaks. Requires EVA access to open."
+ cost = 2000
+ access = ACCESS_EVA
+ contains = list(/obj/item/tank/jetpack/carbondioxide/eva,
+ /obj/item/tank/jetpack/carbondioxide/eva,
+ /obj/item/tank/jetpack/carbondioxide/eva)
+ crate_name = "eva jetpacks crate"
+ crate_type = /obj/structure/closet/crate/secure
+
/datum/supply_pack/emergency/specialops
name = "Special Ops Supplies"
desc = "(*!&@#TOO CHEAP FOR THAT NULL_ENTRY, HUH OPERATIVE? WELL, THIS LITTLE ORDER CAN STILL HELP YOU OUT IN A PINCH. CONTAINS A BOX OF FIVE EMP GRENADES, THREE SMOKEBOMBS, AN INCENDIARY GRENADE, AND A \"SLEEPY PEN\" FULL OF NICE TOXINS!#@*$"
@@ -339,15 +350,6 @@
/obj/item/clothing/head/fedora/det_hat)
crate_name = "forensics crate"
-/datum/supply_pack/security/sechardsuit
- name = "Sec Hardsuit"
- desc = "One Sec Hardsuit with a small air tank and mask."
- cost = 3000 // half of SWAT gear for have the armor and half the gear
- contains = list(/obj/item/clothing/suit/space/hardsuit/security,
- /obj/item/tank/internals/air,
- /obj/item/clothing/mask/gas)
- crate_name = "sec hardsuit crate"
-
/datum/supply_pack/security/helmets
name = "Helmets Crate"
desc = "Contains three standard-issue brain buckets. Requires Security access to open."
@@ -366,6 +368,55 @@
/obj/item/gun/energy/laser)
crate_name = "laser crate"
+/datum/supply_pack/security/russianclothing
+ name = "Russian Surplus Clothing"
+ desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!"
+ contraband = TRUE
+ cost = 5000 // Its basicly sec suits, good boots/gloves
+ contains = list(/obj/item/clothing/suit/security/officer/russian,
+ /obj/item/clothing/suit/security/officer/russian,
+ /obj/item/clothing/shoes/combat,
+ /obj/item/clothing/shoes/combat,
+ /obj/item/clothing/head/ushanka,
+ /obj/item/clothing/head/ushanka,
+ /obj/item/clothing/suit/armor/bulletproof,
+ /obj/item/clothing/suit/armor/bulletproof,
+ /obj/item/clothing/head/helmet/alt,
+ /obj/item/clothing/head/helmet/alt,
+ /obj/item/clothing/gloves/combat,
+ /obj/item/clothing/gloves/combat,
+ /obj/item/clothing/mask/gas,
+ /obj/item/clothing/mask/gas)
+ crate_name = "surplus russian clothing"
+ crate_type = /obj/structure/closet/crate/internals
+
+/datum/supply_pack/security/russianmosin
+ name = "Russian Minutemen Gear"
+ desc = "An old russian Minutemen crate, comes with a full russian outfit, a mosin and a stripper clip."
+ contraband = TRUE
+ access = FALSE
+ cost = 5000 //
+ contains = list(/obj/item/clothing/suit/security/officer/russian,
+ /obj/item/clothing/shoes/combat,
+ /obj/item/clothing/head/ushanka,
+ /obj/item/clothing/suit/armor/bulletproof,
+ /obj/item/clothing/head/helmet/alt,
+ /obj/item/clothing/gloves/combat,
+ /obj/item/clothing/mask/gas,
+ /obj/item/gun/ballistic/shotgun/boltaction,
+ /obj/item/ammo_box/a762)
+ crate_name = "surplus russian gear"
+ crate_type = /obj/structure/closet/crate/internals
+
+/datum/supply_pack/security/sechardsuit
+ name = "Sec Hardsuit"
+ desc = "One Sec Hardsuit with a small air tank and mask."
+ cost = 3000 // half of SWAT gear for have the armor and half the gear
+ contains = list(/obj/item/clothing/suit/space/hardsuit/security,
+ /obj/item/tank/internals/air,
+ /obj/item/clothing/mask/gas)
+ crate_name = "sec hardsuit crate"
+
/datum/supply_pack/security/securitybarriers
name = "Security Barrier Grenades"
desc = "Stem the tide with four Security Barrier grenades. Requires Security access to open."
@@ -430,28 +481,6 @@
/obj/item/melee/baton/loaded)
crate_name = "stun baton crate"
-/datum/supply_pack/security/russianclothing
- name = "Russian Surplus Clothing"
- desc = "An old russian crate full of surplus armor that they used to use! Has two sets of bulletproff armor, a few union suits and some warm hats!"
- contraband = TRUE
- cost = 5000 // Its basicly sec suits, good boots/gloves
- contains = list(/obj/item/clothing/suit/security/officer/russian,
- /obj/item/clothing/suit/security/officer/russian,
- /obj/item/clothing/shoes/combat,
- /obj/item/clothing/shoes/combat,
- /obj/item/clothing/head/ushanka,
- /obj/item/clothing/head/ushanka,
- /obj/item/clothing/suit/armor/bulletproof,
- /obj/item/clothing/suit/armor/bulletproof,
- /obj/item/clothing/head/helmet/alt,
- /obj/item/clothing/head/helmet/alt,
- /obj/item/clothing/gloves/combat,
- /obj/item/clothing/gloves/combat,
- /obj/item/clothing/mask/gas,
- /obj/item/clothing/mask/gas)
- crate_name = "surplus russian clothing"
- crate_type = /obj/structure/closet/crate/internals
-
/datum/supply_pack/security/taser
name = "Taser Crate"
desc = "From the depths of stunbased combat, this order rises above, supreme. Contains three hybrid tasers, capable of firing both electrodes and disabling shots. Requires Security access to open."
@@ -665,6 +694,15 @@
/obj/item/gun/energy/e_gun/stun)
crate_name = "swat taser crate"
+/datum/supply_pack/security/armory/woodstock
+ name = "Classic WoodStock Shotguns Crate"
+ desc = "Contains three rustic, pumpaction shotguns. Requires Armory access to open."
+ cost = 3500
+ contains = list(/obj/item/gun/ballistic/shotgun,
+ /obj/item/gun/ballistic/shotgun,
+ /obj/item/gun/ballistic/shotgun)
+ crate_name = "woodstock shotguns crate"
+
/datum/supply_pack/security/armory/wt550
name = "WT-550 Semi-Auto Rifle Crate"
desc = "Contains two high-powered, semiautomatic rifles chambered in 4.6x30mm. Requires Armory access to open."
@@ -2204,6 +2242,17 @@
/mob/living/simple_animal/hostile/retaliate/poison/snake)
crate_name = "snake crate"
+/datum/supply_pack/critter/secbat
+ name = "Security Bat Crate"
+ desc = "Contains five security bats, perfect to Bat-up any security officer."
+ cost = 2500
+ contains = list(/mob/living/simple_animal/hostile/retaliate/bat/secbat,
+ /mob/living/simple_animal/hostile/retaliate/bat/secbat,
+ /mob/living/simple_animal/hostile/retaliate/bat/secbat,
+ /mob/living/simple_animal/hostile/retaliate/bat/secbat,
+ /mob/living/simple_animal/hostile/retaliate/bat/secbat)
+ crate_name = "security bat crate"
+
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Costumes & Toys /////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -2775,4 +2824,3 @@
/obj/item/toner,
/obj/item/toner)
crate_name = "toner crate"
-
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 95979f7827..ecc0ca759a 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -78,6 +78,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/socks = "Nude" //socks type
var/socks_color = "#FFFFFF"
var/backbag = DBACKPACK //backpack type
+ var/jumpsuit_style = PREF_SUIT //suit/skirt
var/hair_style = "Bald" //Hair type
var/hair_color = "000" //Hair color
var/facial_hair_style = "Shaved" //Face hair type
@@ -687,6 +688,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(UNDIE_COLORABLE(GLOB.socks_list[socks]))
dat += "Socks Color:[socks_color]"
dat += "Backpack:[backbag]"
+ dat += "Jumpsuit:
[jumpsuit_style]
"
dat += "Uplink Location:[uplink_spawn_loc]"
dat += ""
@@ -1424,6 +1426,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
skin_tone = random_skin_tone()
if("bag")
backbag = pick(GLOB.backbaglist)
+ if("suit")
+ jumpsuit_style = pick(GLOB.jumpsuitlist)
if("all")
random_character()
@@ -1965,6 +1969,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_backbag)
backbag = new_backbag
+ if("suit")
+ if(jumpsuit_style == PREF_SUIT)
+ jumpsuit_style = PREF_SKIRT
+ else
+ jumpsuit_style = PREF_SUIT
+
+
if("uplink_loc")
var/new_loc = input(user, "Choose your character's traitor uplink spawn location:", "Character Preference") as null|anything in GLOB.uplink_spawn_loc_list
if(new_loc)
@@ -2287,6 +2298,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.backbag = backbag
+ character.jumpsuit_style = jumpsuit_style
var/datum/species/chosen_species
if(!roundstart_checks || (pref_species.id in GLOB.roundstart_races))
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 00f8ea7e6b..0f0d887c83 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -274,6 +274,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] >> socks
S["socks_color"] >> socks_color
S["backbag"] >> backbag
+ S["jumpsuit_style"] >> jumpsuit_style
S["uplink_loc"] >> uplink_spawn_loc
S["feature_mcolor"] >> features["mcolor"]
S["feature_lizard_tail"] >> features["tail_lizard"]
@@ -408,6 +409,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
eye_color = sanitize_hexcolor(eye_color, 3, 0)
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
+ jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
@@ -476,7 +478,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["shirt_color"] , shirt_color)
WRITE_FILE(S["socks"] , socks)
WRITE_FILE(S["socks_color"] , socks_color)
- WRITE_FILE(S["backbag"] , backbag)
+ WRITE_FILE(S["backbag"] , backbag)
+ WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
WRITE_FILE(S["species"] , pref_species.id)
WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index 7346dc9ea9..cf411ef367 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -28,7 +28,6 @@
H.update_inv_wear_suit()
else if(adjusted == ALT_STYLE)
adjusted = NORMAL_STYLE
- H.update_inv_wear_suit()
if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
if(H.dna.features["taur"] in list("Naga", "Tentacle"))
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index c239f48b05..54264ef9d4 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -1,12 +1,18 @@
/obj/item/clothing/under/color
desc = "A standard issue colored jumpsuit. Variety is the spice of life!"
+/obj/item/clothing/under/skirt/color
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/color/random
icon_state = "random_jumpsuit"
/obj/item/clothing/under/color/random/Initialize()
..()
- var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
+ var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - subtypesof(/obj/item/clothing/under/skirt/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
+
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) //or else you end up with naked assistants running around everywhere...
@@ -14,6 +20,20 @@
new C(loc)
return INITIALIZE_HINT_QDEL
+/obj/item/clothing/under/skirt/color/random
+ icon_state = "random_jumpsuit" //Skirt variant needed
+
+/obj/item/clothing/under/skirt/color/random/Initialize()
+ ..()
+ var/obj/item/clothing/under/skirt/color/C = pick(subtypesof(/obj/item/clothing/under/skirt/color) - /obj/item/clothing/under/skirt/color/random)
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM)
+ else
+ new C(loc)
+ return INITIALIZE_HINT_QDEL
+
+
/obj/item/clothing/under/color/black
name = "black jumpsuit"
icon_state = "black"
@@ -21,6 +41,12 @@
item_color = "black"
resistance_flags = NONE
+/obj/item/clothing/under/skirt/color/black
+ name = "black jumpskirt"
+ icon_state = "black_skirt"
+ item_state = "bl_suit"
+ item_color = "black_skirt"
+
/obj/item/clothing/under/color/black/ghost
item_flags = DROPDEL
@@ -28,6 +54,9 @@
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
+/obj/item/clothing/under/color/black/ghost/Initialize()
+ . = ..()
+ ADD_TRAIT(src, TRAIT_NODROP, DROPDEL)
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
desc = "A tasteful grey jumpsuit that reminds you of the good old days."
@@ -35,6 +64,13 @@
item_state = "gy_suit"
item_color = "grey"
+/obj/item/clothing/under/skirt/color/grey
+ name = "grey jumpskirt"
+ desc = "A tasteful grey jumpskirt that reminds you of the good old days."
+ icon_state = "grey_skirt"
+ item_state = "gy_suit"
+ item_color = "grey_skirt"
+
/obj/item/clothing/under/color/grey/glorf
name = "ancient jumpsuit"
desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade."
@@ -49,12 +85,24 @@
item_state = "b_suit"
item_color = "blue"
+/obj/item/clothing/under/skirt/color/blue
+ name = "blue jumpskirt"
+ icon_state = "blue_skirt"
+ item_state = "b_suit"
+ item_color = "blue_skirt"
+
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
+/obj/item/clothing/under/skirt/color/green
+ name = "green jumpskirt"
+ icon_state = "green_skirt"
+ item_state = "g_suit"
+ item_color = "green_skirt"
+
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
desc = "Don't wear this near paranoid security officers."
@@ -62,6 +110,12 @@
item_state = "o_suit"
item_color = "orange"
+/obj/item/clothing/under/skirt/color/orange
+ name = "orange jumpskirt"
+ icon_state = "orange_skirt"
+ item_state = "o_suit"
+ item_color = "orange_skirt"
+
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
@@ -69,66 +123,133 @@
item_state = "p_suit"
item_color = "pink"
+/obj/item/clothing/under/skirt/color/pink
+ name = "pink jumpskirt"
+ icon_state = "pink_skirt"
+ item_state = "p_suit"
+ item_color = "pink_skirt"
+
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
+/obj/item/clothing/under/skirt/color/red
+ name = "red jumpskirt"
+ icon_state = "red_skirt"
+ item_state = "r_suit"
+ item_color = "red_skirt"
+
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
+/obj/item/clothing/under/skirt/color/white
+ name = "white jumpskirt"
+ icon_state = "white_skirt"
+ item_state = "w_suit"
+ item_color = "white_skirt"
+
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
+/obj/item/clothing/under/skirt/color/yellow
+ name = "yellow jumpskirt"
+ icon_state = "yellow_skirt"
+ item_state = "y_suit"
+ item_color = "yellow_skirt"
+
/obj/item/clothing/under/color/darkblue
name = "darkblue jumpsuit"
icon_state = "darkblue"
item_state = "b_suit"
item_color = "darkblue"
+/obj/item/clothing/under/skirt/color/darkblue
+ name = "darkblue jumpskirt"
+ icon_state = "darkblue_skirt"
+ item_state = "b_suit"
+ item_color = "darkblue_skirt"
+
/obj/item/clothing/under/color/teal
name = "teal jumpsuit"
icon_state = "teal"
item_state = "b_suit"
item_color = "teal"
+/obj/item/clothing/under/skirt/color/teal
+ name = "teal jumpskirt"
+ icon_state = "teal_skirt"
+ item_state = "b_suit"
+ item_color = "teal_skirt"
+
+
/obj/item/clothing/under/color/lightpurple
name = "purple jumpsuit"
icon_state = "lightpurple"
item_state = "p_suit"
item_color = "lightpurple"
+/obj/item/clothing/under/skirt/color/lightpurple
+ name = "lightpurple jumpskirt"
+ icon_state = "lightpurple_skirt"
+ item_state = "p_suit"
+ item_color = "lightpurple_skirt"
+
/obj/item/clothing/under/color/darkgreen
name = "darkgreen jumpsuit"
icon_state = "darkgreen"
item_state = "g_suit"
item_color = "darkgreen"
+/obj/item/clothing/under/skirt/color/darkgreen
+ name = "darkgreen jumpskirt"
+ icon_state = "darkgreen_skirt"
+ item_state = "g_suit"
+ item_color = "darkgreen_skirt"
+
/obj/item/clothing/under/color/lightbrown
name = "lightbrown jumpsuit"
icon_state = "lightbrown"
item_state = "lb_suit"
item_color = "lightbrown"
+/obj/item/clothing/under/skirt/color/lightbrown
+ name = "lightbrown jumpskirt"
+ icon_state = "lightbrown_skirt"
+ item_state = "lb_suit"
+ item_color = "lightbrown_skirt"
+
/obj/item/clothing/under/color/brown
name = "brown jumpsuit"
icon_state = "brown"
item_state = "lb_suit"
item_color = "brown"
+/obj/item/clothing/under/skirt/color/brown
+ name = "brown jumpskirt"
+ icon_state = "brown_skirt"
+ item_state = "lb_suit"
+ item_color = "brown_skirt"
+
/obj/item/clothing/under/color/maroon
name = "maroon jumpsuit"
icon_state = "maroon"
item_state = "r_suit"
item_color = "maroon"
+/obj/item/clothing/under/skirt/color/maroon
+ name = "maroon jumpskirt"
+ icon_state = "maroon_skirt"
+ item_state = "r_suit"
+ item_color = "maroon_skirt"
+
/obj/item/clothing/under/color/rainbow
name = "rainbow jumpsuit"
desc = "A multi-colored jumpsuit!"
@@ -136,3 +257,11 @@
item_state = "rainbow"
item_color = "rainbow"
can_adjust = FALSE
+
+/obj/item/clothing/under/skirt/color/rainbow
+ name = "rainbow jumpskirt"
+ desc = "A multi-colored jumpskirt!"
+ icon_state = "rainbow_skirt"
+ item_state = "rainbow"
+ item_color = "rainbow_skirt"
+ can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 2288c98b34..c6796d64c9 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -16,6 +16,16 @@
item_color = "purplebartender"
can_adjust = FALSE
+/obj/item/clothing/under/rank/bartender/skirt
+ name = "bartender's skirt"
+ desc = "It looks like it could use some more flair."
+ icon_state = "barman_skirt"
+ item_state = "bar_suit"
+ item_color = "barman_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"."
name = "captain's jumpsuit"
@@ -25,6 +35,16 @@
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
+/obj/item/clothing/under/rank/captain/skirt
+ name = "captain's jumpskirt"
+ desc = "It's a blue jumpskirt with some gold markings denoting the rank of \"Captain\"."
+ icon_state = "captain_skirt"
+ item_state = "b_suit"
+ item_color = "captain_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/cargo
name = "quartermaster's jumpsuit"
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
@@ -32,6 +52,16 @@
item_state = "lb_suit"
item_color = "qm"
+/obj/item/clothing/under/rank/cargo/skirt
+ name = "quartermaster's jumpskirt"
+ desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
+ icon_state = "qm_skirt"
+ item_state = "lb_suit"
+ item_color = "qm_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/cargotech
name = "cargo technician's jumpsuit"
desc = "Shooooorts! They're comfy and easy to wear!"
@@ -42,6 +72,15 @@
mutantrace_variation = MUTANTRACE_VARIATION
alt_covers_chest = TRUE
+/obj/item/clothing/under/rank/cargotech/skirt
+ name = "cargo technician's jumpskirt"
+ desc = "Skiiiiirts! They're comfy and easy to wear"
+ icon_state = "cargo_skirt"
+ item_state = "lb_suit"
+ item_color = "cargo_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/chaplain
desc = "It's a black jumpsuit, often worn by religious folk."
@@ -51,6 +90,16 @@
item_color = "chapblack"
can_adjust = FALSE
+/obj/item/clothing/under/rank/chaplain/skirt
+ name = "chaplain's jumpskirt"
+ desc = "It's a black jumpskirt, often worn by religious folk."
+ icon_state = "chapblack_skirt"
+ item_state = "bl_suit"
+ item_color = "chapblack_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/chef
name = "cook's suit"
desc = "A suit which is given only to the most hardcore cooks in space."
@@ -58,6 +107,15 @@
item_color = "chef"
alt_covers_chest = TRUE
+/obj/item/clothing/under/rank/chef/skirt
+ name = "cook's skirt"
+ desc = "A skirt which is given only to the most hardcore cooks in space."
+ icon_state = "chef_skirt"
+ item_color = "chef_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/clown
name = "clown suit"
desc = "'HONK!'"
@@ -66,7 +124,6 @@
item_color = "clown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/rank/blueclown
name = "blue clown suit"
desc = "'BLUE HONK!'"
@@ -130,7 +187,6 @@
/obj/item/clothing/under/rank/clown/Initialize()
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
-
/obj/item/clothing/under/rank/head_of_personnel
desc = "It's a jumpsuit worn by someone who works in the position of \"Head of Personnel\"."
name = "head of personnel's jumpsuit"
@@ -139,6 +195,16 @@
item_color = "hop"
can_adjust = FALSE
+/obj/item/clothing/under/rank/head_of_personnel/skirt
+ name = "head of personnel's jumpskirt"
+ desc = "It's a jumpskirt worn by someone who works in the position of \"Head of Personnel\"."
+ icon_state = "hop_skirt"
+ item_state = "b_suit"
+ item_color = "hop_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/hydroponics
desc = "It's a jumpsuit designed to protect against minor plant-related hazards."
name = "botanist's jumpsuit"
@@ -147,6 +213,16 @@
item_color = "hydroponics"
permeability_coefficient = 0.5
+/obj/item/clothing/under/rank/hydroponics/skirt
+ name = "botanist's jumpskirt"
+ desc = "It's a jumpskirt designed to protect against minor plant-related hazards."
+ icon_state = "hydroponics_skirt"
+ item_state = "g_suit"
+ item_color = "hydroponics_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/janitor
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
@@ -154,49 +230,108 @@
item_color = "janitor"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+/obj/item/clothing/under/rank/janitor/skirt
+ name = "janitor's jumpskirt"
+ desc = "It's the official skirt of the station's janitor. It has minor protection from biohazards."
+ icon_state = "janitor_skirt"
+ item_color = "janitor_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
can_adjust = FALSE
-
/obj/item/clothing/under/lawyer/black
+ name = "lawyer black suit"
icon_state = "lawyer_black"
item_state = "lawyer_black"
item_color = "lawyer_black"
+/obj/item/clothing/under/lawyer/black/skirt
+ name = "lawyer black suitskirt"
+ icon_state = "lawyer_black_skirt"
+ item_state = "lawyer_black"
+ item_color = "lawyer_black_skirt"
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer/female
+ name = "female black suit"
icon_state = "black_suit_fem"
- item_state = "black_suit_fem"
+ item_state = "bl_suit"
item_color = "black_suit_fem"
/obj/item/clothing/under/lawyer/red
+ name = "lawyer red suit"
icon_state = "lawyer_red"
item_state = "lawyer_red"
item_color = "lawyer_red"
+/obj/item/clothing/under/lawyer/female/skirt
+ name = "female black suitskirt"
+ icon_state = "black_suit_fem_skirt"
+ item_state = "bl_suit"
+ item_color = "black_suit_fem_skirt"
+ fitted = FEMALE_UNIFORM_TOP
+
+/obj/item/clothing/under/lawyer/red/skirt
+ name = "lawyer red suitskirt"
+ icon_state = "lawyer_red_skirt"
+ item_state = "lawyer_red"
+ item_color = "lawyer_red_skirt"
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer/blue
+ name = "lawyer blue suit"
icon_state = "lawyer_blue"
item_state = "lawyer_blue"
item_color = "lawyer_blue"
+/obj/item/clothing/under/lawyer/blue/skirt
+ name = "lawyer blue suitskirt"
+ icon_state = "lawyer_blue_skirt"
+ item_state = "lawyer_blue"
+ item_color = "lawyer_blue_skirt"
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer/bluesuit
name = "blue suit"
desc = "A classy suit and tie."
icon_state = "bluesuit"
- item_state = "bluesuit"
+ item_state = "b_suit"
item_color = "bluesuit"
can_adjust = TRUE
alt_covers_chest = TRUE
+/obj/item/clothing/under/lawyer/bluesuit/skirt
+ name = "blue suitskirt"
+ desc = "A classy suitskirt and tie."
+ icon_state = "bluesuit_skirt"
+ item_state = "b_suit"
+ item_color = "bluesuit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer/purpsuit
name = "purple suit"
icon_state = "lawyer_purp"
- item_state = "lawyer_purp"
+ item_state = "p_suit"
item_color = "lawyer_purp"
fitted = NO_FEMALE_UNIFORM
can_adjust = TRUE
alt_covers_chest = TRUE
+/obj/item/clothing/under/lawyer/purpsuit/skirt
+ name = "purple suitskirt"
+ icon_state = "lawyer_purp_skirt"
+ item_state = "p_suit"
+ item_color = "lawyer_purp_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/lawyer/blacksuit
name = "black suit"
desc = "A professional black suit. Nanotrasen Investigation Bureau approved!"
@@ -206,6 +341,16 @@
can_adjust = TRUE
alt_covers_chest = TRUE
+/obj/item/clothing/under/lawyer/blacksuit/skirt
+ name = "black suitskirt"
+ desc = "A professional black suit. Nanotrasen Investigation Bureau approved!"
+ icon_state = "blacksuit_skirt"
+ item_state = "bar_suit"
+ item_color = "blacksuit_skirt"
+ can_adjust = FALSE
+ alt_covers_chest = TRUE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/curator
name = "sensible suit"
desc = "It's very... sensible."
@@ -214,6 +359,33 @@
item_color = "red_suit"
can_adjust = FALSE
+/obj/item/clothing/under/lawyer/really_black
+ name = "executive suit"
+ desc = "A formal black suit and red tie, intended for the station's finest."
+ icon_state = "really_black_suit"
+ item_state = "bl_suit"
+ item_color = "really_black_suit"
+
+/obj/item/clothing/under/lawyer/really_black/skirt
+ name = "executive suitskirt"
+ desc = "A formal black suitskirt and red tie, intended for the station's finest."
+ icon_state = "really_black_suit_skirt"
+ item_state = "bl_suit"
+ item_color = "really_black_suit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
+/obj/item/clothing/under/rank/curator/skirt
+ name = "sensible suitskirt"
+ desc = "It's very... sensible."
+ icon_state = "red_suit_skirt"
+ item_state = "red_suit"
+ item_color = "red_suit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/curator/treasure_hunter
name = "treasure hunter uniform"
desc = "A rugged uniform suitable for treasure hunting."
@@ -228,13 +400,22 @@
item_state = "mime"
item_color = "mime"
+/obj/item/clothing/under/rank/mime/skirt
+ name = "mime's skirt"
+ desc = "It's not very colourful."
+ icon_state = "mime_skirt"
+ item_state = "mime"
+ item_color = "mime_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
name = "shaft miner's jumpsuit"
icon_state = "miner"
item_state = "miner"
item_color = "miner"
-
/obj/item/clothing/under/rank/miner/lavaland
desc = "A green uniform for operating in hazardous environments."
name = "shaft miner's jumpsuit"
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index 4ee0963a64..f65b05c280 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -8,6 +8,16 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40)
resistance_flags = NONE
+/obj/item/clothing/under/rank/chief_engineer/skirt
+ name = "chief engineer's jumpskirt"
+ desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief Engineer\". It has minor radiation shielding."
+ icon_state = "chief_skirt"
+ item_state = "gy_suit"
+ item_color = "chief_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians."
name = "atmospheric technician's jumpsuit"
@@ -16,6 +26,16 @@
item_color = "atmos"
resistance_flags = NONE
+/obj/item/clothing/under/rank/atmospheric_technician/skirt
+ name = "atmospheric technician's jumpskirt"
+ desc = "It's a jumpskirt worn by atmospheric technicians."
+ icon_state = "atmos_skirt"
+ item_state = "atmos_suit"
+ item_color = "atmos_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
name = "engineer's jumpsuit"
@@ -24,6 +44,23 @@
item_color = "engine"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20)
resistance_flags = NONE
+/obj/item/clothing/under/rank/engineer/hazard
+ name = "engineer's hazard jumpsuit"
+ desc = "A high visibility jumpsuit made from heat and radiation resistant materials."
+ icon_state = "hazard"
+ item_state = "suit-orange"
+ item_color = "hazard"
+ alt_covers_chest = TRUE
+
+/obj/item/clothing/under/rank/engineer/skirt
+ name = "engineer's jumpskirt"
+ desc = "It's an orange high visibility jumpskirt worn by engineers."
+ icon_state = "engine_skirt"
+ item_state = "engi_suit"
+ item_color = "engine_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
@@ -31,4 +68,14 @@
icon_state = "robotics"
item_state = "robotics"
item_color = "robotics"
- resistance_flags = NONE
\ No newline at end of file
+ resistance_flags = NONE
+
+/obj/item/clothing/under/rank/roboticist/skirt
+ name = "roboticist's jumpskirt"
+ desc = "It's a slimming black with reinforced seams; great for industrial work."
+ icon_state = "robotics_skirt"
+ item_state = "robotics"
+ item_color = "robotics_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index f0980cae4d..7b7a205021 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -10,6 +10,16 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35)
can_adjust = FALSE
+/obj/item/clothing/under/rank/research_director/skirt
+ name = "research director's vest suitskirt"
+ desc = "It's a suitskirt worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
+ icon_state = "director_skirt"
+ item_state = "lb_suit"
+ item_color = "director_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/research_director/alt
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
name = "research director's tan suit"
@@ -20,6 +30,16 @@
can_adjust = TRUE
alt_covers_chest = TRUE
+/obj/item/clothing/under/rank/research_director/alt/skirt
+ name = "research director's tan suitskirt"
+ desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
+ icon_state = "rdwhimsy_skirt"
+ item_state = "rdwhimsy"
+ item_color = "rdwhimsy_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/research_director/turtleneck
desc = "A dark purple turtleneck and tan khakis, for a director with a superior sense of style."
name = "research director's turtleneck"
@@ -30,6 +50,16 @@
can_adjust = TRUE
alt_covers_chest = TRUE
+/obj/item/clothing/under/rank/research_director/turtleneck/skirt
+ name = "research director's turtleneck skirt"
+ desc = "A dark purple turtleneck and tan khaki skirt, for a director with a superior sense of style."
+ icon_state = "rdturtle_skirt"
+ item_state = "p_suit"
+ item_color = "rdturtle_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/scientist
desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist."
name = "scientist's jumpsuit"
@@ -39,6 +69,15 @@
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+/obj/item/clothing/under/rank/scientist/skirt
+ name = "scientist's jumpskirt"
+ desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist."
+ icon_state = "toxinswhite_skirt"
+ item_state = "w_suit"
+ item_color = "toxinswhite_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/chemist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
@@ -49,6 +88,16 @@
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65)
+/obj/item/clothing/under/rank/chemist/skirt
+ name = "chemist's jumpskirt"
+ desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
+ icon_state = "chemistrywhite_skirt"
+ item_state = "w_suit"
+ item_color = "chemistrywhite_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/*
* Medical
*/
@@ -61,6 +110,16 @@
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+/obj/item/clothing/under/rank/chief_medical_officer/skirt
+ name = "chief medical officer's jumpskirt"
+ desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
+ icon_state = "cmo_skirt"
+ item_state = "w_suit"
+ item_color = "cmo_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/geneticist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
name = "geneticist's jumpsuit"
@@ -70,6 +129,16 @@
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+/obj/item/clothing/under/rank/geneticist/skirt
+ name = "geneticist's jumpskirt"
+ desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
+ icon_state = "geneticswhite_skirt"
+ item_state = "w_suit"
+ item_color = "geneticswhite_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
name = "virologist's jumpsuit"
@@ -79,6 +148,16 @@
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
+/obj/item/clothing/under/rank/virologist/skirt
+ name = "virologist's jumpskirt"
+ desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
+ icon_state = "virologywhite_skirt"
+ item_state = "w_suit"
+ item_color = "virologywhite_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/nursesuit
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
name = "nurse's suit"
@@ -90,7 +169,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
-
/obj/item/clothing/under/rank/medical
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
name = "medical doctor's jumpsuit"
@@ -99,24 +177,31 @@
item_color = "medical"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
/obj/item/clothing/under/rank/medical/blue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_color = "scrubsblue"
can_adjust = FALSE
-
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_color = "scrubsgreen"
can_adjust = FALSE
-
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_color = "scrubspurple"
can_adjust = FALSE
+
+/obj/item/clothing/under/rank/medical/skirt
+ name = "medical doctor's jumpskirt"
+ desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
+ icon_state = "medical_skirt"
+ item_state = "w_suit"
+ item_color = "medical_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index 6f9e77b09f..6c00d6969c 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -4,11 +4,9 @@
* Detective
* Navy uniforms
*/
-
/*
* Security
*/
-
/obj/item/clothing/under/rank/security
name = "security jumpsuit"
desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle."
@@ -20,14 +18,12 @@
alt_covers_chest = TRUE
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
-
/obj/item/clothing/under/rank/security/grey
name = "grey security jumpsuit"
desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
icon_state = "security"
item_state = "gy_suit"
item_color = "security"
-
/obj/item/clothing/under/rank/security/skirt
name = "security jumpskirt"
desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt."
@@ -36,6 +32,7 @@
item_color = "secskirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone
+ fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/warden
@@ -49,7 +46,6 @@
alt_covers_chest = TRUE
sensor_mode = 3
random_sensor = FALSE
-
/obj/item/clothing/under/rank/warden/grey
name = "grey security suit"
desc = "A formal relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
@@ -57,6 +53,16 @@
item_state = "gy_suit"
item_color = "warden"
+/obj/item/clothing/under/rank/warden/skirt
+ name = "warden's suitskirt"
+ desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle."
+ icon_state = "rwarden_skirt"
+ item_state = "r_suit"
+ item_color = "rwarden_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/*
* Detective
*/
@@ -72,6 +78,16 @@
sensor_mode = 3
random_sensor = FALSE
+/obj/item/clothing/under/rank/det/skirt
+ name = "detective's suitskirt"
+ desc = "Someone who wears this means business."
+ icon_state = "detective_skirt"
+ item_state = "det"
+ item_color = "detective_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/det/grey
name = "noir suit"
desc = "A hard-boiled private investigator's grey suit, complete with tie clip."
@@ -80,6 +96,16 @@
item_color = "greydet"
alt_covers_chest = TRUE
+/obj/item/clothing/under/rank/det/grey/skirt
+ name = "noir suitskirt"
+ desc = "A hard-boiled private investigator's grey suitskirt, complete with tie clip."
+ icon_state = "greydet_skirt"
+ item_state = "greydet"
+ item_color = "greydet_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/*
* Head of Security
*/
@@ -95,13 +121,22 @@
sensor_mode = 3
random_sensor = FALSE
+/obj/item/clothing/under/rank/head_of_security/skirt
+ name = "head of security's jumpskirt"
+ desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security."
+ icon_state = "rhos_skirt"
+ item_state = "r_suit"
+ item_color = "rhos_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/head_of_security/grey
name = "head of security's grey jumpsuit"
desc = "There are old men, and there are bold men, but there are very few old, bold men."
icon_state = "hos"
item_state = "gy_suit"
item_color = "hos"
-
/obj/item/clothing/under/rank/head_of_security/alt
name = "head of security's turtleneck"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants."
@@ -109,10 +144,19 @@
item_state = "bl_suit"
item_color = "hosalt"
+/obj/item/clothing/under/rank/head_of_security/alt/skirt
+ name = "head of security's turtleneck skirt"
+ desc = "A stylish alternative to the normal head of security jumpsuit, complete with a tactical skirt."
+ icon_state = "hosalt_skirt"
+ item_state = "bl_suit"
+ item_color = "hosalt_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/*
* Navy uniforms
*/
-
/obj/item/clothing/under/rank/security/navyblue
name = "security officer's formal uniform"
desc = "The latest in fashionable security outfits."
@@ -120,7 +164,6 @@
item_state = "officerblueclothes"
item_color = "officerblueclothes"
alt_covers_chest = TRUE
-
/obj/item/clothing/under/rank/head_of_security/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's formal uniform"
@@ -128,7 +171,6 @@
item_state = "hosblueclothes"
item_color = "hosblueclothes"
alt_covers_chest = TRUE
-
/obj/item/clothing/under/rank/warden/navyblue
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
name = "warden's formal uniform"
@@ -136,11 +178,9 @@
item_state = "wardenblueclothes"
item_color = "wardenblueclothes"
alt_covers_chest = TRUE
-
/*
*Blueshirt
*/
-
/obj/item/clothing/under/rank/security/blueshirt
name = "blue shirt and tie"
desc = "I'm a little busy right now, Calhoun."
@@ -148,3 +188,13 @@
item_state = "blueshift"
item_color = "blueshift"
can_adjust = FALSE
+/*
+ *Spacepol
+ */
+/obj/item/clothing/under/rank/security/spacepol
+ name = "police uniform"
+ desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol."
+ icon_state = "spacepol"
+ item_state = "spacepol"
+ item_color = "spacepol"
+ can_adjust = FALSE
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 16848e393a..abc157fa71 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -5,7 +5,6 @@
item_color = "red_pyjamas"
item_state = "w_suit"
can_adjust = FALSE
-
/obj/item/clothing/under/pj/blue
name = "blue pj's"
desc = "Sleepwear."
@@ -13,7 +12,6 @@
item_color = "blue_pyjamas"
item_state = "w_suit"
can_adjust = FALSE
-
/obj/item/clothing/under/patriotsuit
name = "Patriotic Suit"
desc = "Motorcycle not included."
@@ -21,7 +19,6 @@
item_state = "ek"
item_color = "ek"
can_adjust = FALSE
-
/obj/item/clothing/under/scratch
name = "white suit"
desc = "A white suit, suitable for an excellent host."
@@ -30,13 +27,22 @@
item_color = "scratch"
can_adjust = FALSE
+/obj/item/clothing/under/scratch/skirt
+ name = "white suitskirt"
+ desc = "A white suitskirt, suitable for an excellent host."
+ icon_state = "white_suit_skirt"
+ item_state = "scratch"
+ item_color = "white_suit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/sl_suit
desc = "It's a very amish looking suit."
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
can_adjust = FALSE
-
/obj/item/clothing/under/roman
name = "\improper Roman armor"
desc = "Ancient Roman armor. Made of metallic and leather straps."
@@ -46,7 +52,6 @@
can_adjust = FALSE
strip_delay = 100
resistance_flags = NONE
-
/obj/item/clothing/under/waiter
name = "waiter's outfit"
desc = "It's a very smart uniform with a special pocket for tip."
@@ -54,7 +59,6 @@
item_state = "waiter"
item_color = "waiter"
can_adjust = FALSE
-
/obj/item/clothing/under/rank/prisoner
name = "prison jumpsuit"
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
@@ -65,20 +69,28 @@
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
+/obj/item/clothing/under/rank/prisoner/skirt
+ name = "prison jumpskirt"
+ desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
+ icon_state = "prisoner_skirt"
+ item_state = "o_suit"
+ item_color = "prisoner_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
desc = "'Special delivery!'"
icon_state = "mailman"
item_state = "b_suit"
item_color = "mailman"
-
/obj/item/clothing/under/rank/psyche
name = "psychedelic jumpsuit"
desc = "Groovy!"
icon_state = "psyche"
item_state = "p_suit"
item_color = "psyche"
-
/obj/item/clothing/under/rank/clown/sexy
name = "sexy-clown suit"
desc = "It makes you look HONKable!"
@@ -86,7 +98,6 @@
item_state = "sexyclown"
item_color = "sexyclown"
can_adjust = FALSE
-
/obj/item/clothing/under/jabroni
name = "Jabroni Outfit"
desc = "The leather club is two sectors down."
@@ -94,7 +105,6 @@
item_state = "darkholme"
item_color = "darkholme"
can_adjust = FALSE
-
/obj/item/clothing/under/rank/vice
name = "vice officer's jumpsuit"
desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision."
@@ -102,7 +112,6 @@
item_state = "gy_suit"
item_color = "vice"
can_adjust = FALSE
-
/obj/item/clothing/under/rank/centcom_officer
desc = "It's a jumpsuit worn by CentCom Officers."
name = "\improper CentCom officer's jumpsuit"
@@ -110,14 +119,12 @@
item_state = "g_suit"
item_color = "officer"
alt_covers_chest = TRUE
-
/obj/item/clothing/under/rank/centcom_commander
desc = "It's a jumpsuit worn by CentCom's highest-tier Commanders."
name = "\improper CentCom officer's jumpsuit"
icon_state = "centcom"
item_state = "dg_suit"
item_color = "centcom"
-
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
@@ -134,7 +141,6 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
can_adjust = FALSE
resistance_flags = NONE
-
/obj/item/clothing/under/acj
name = "administrative cybernetic jumpsuit"
icon_state = "syndicate"
@@ -151,28 +157,24 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
can_adjust = FALSE
resistance_flags = FIRE_PROOF | ACID_PROOF
-
/obj/item/clothing/under/owl
name = "owl uniform"
desc = "A soft brown jumpsuit made of synthetic feathers and strong conviction."
icon_state = "owl"
item_color = "owl"
can_adjust = FALSE
-
/obj/item/clothing/under/griffin
name = "griffon uniform"
desc = "A soft brown jumpsuit with a white feather collar made of synthetic feathers and a lust for mayhem."
icon_state = "griffin"
item_color = "griffin"
can_adjust = FALSE
-
/obj/item/clothing/under/cloud
name = "cloud"
desc = "cloud"
icon_state = "cloud"
item_color = "cloud"
can_adjust = FALSE
-
/obj/item/clothing/under/gimmick/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
@@ -181,6 +183,16 @@
item_color = "green_suit"
can_adjust = FALSE
+/obj/item/clothing/under/gimmick/rank/captain/suit/skirt
+ name = "green suitskirt"
+ desc = "A green suitskirt and yellow necktie. Exemplifies authority."
+ icon_state = "green_suit_skirt"
+ item_state = "dg_suit"
+ item_color = "green_suit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit
name = "head of personnel's suit"
desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
@@ -189,6 +201,16 @@
item_color = "teal_suit"
can_adjust = FALSE
+/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt
+ name = "teal suitskirt"
+ desc = "A teal suitskirt and yellow necktie. An authoritative yet tacky ensemble."
+ icon_state = "teal_suit_skirt"
+ item_state = "g_suit"
+ item_color = "teal_suit_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ can_adjust = FALSE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/suit_jacket
name = "black suit"
desc = "A black suit and red tie. Very formal."
@@ -196,21 +218,18 @@
item_state = "bl_suit"
item_color = "black_suit"
can_adjust = FALSE
-
/obj/item/clothing/under/suit_jacket/really_black
name = "executive suit"
desc = "A formal black suit and red tie, intended for the station's finest."
icon_state = "really_black_suit"
item_state = "bl_suit"
- item_color = "black_suit"
-
+ item_color = "really_black_suit"
/obj/item/clothing/under/suit_jacket/female
name = "executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
item_color = "black_suit_fem"
-
/obj/item/clothing/under/suit_jacket/green
name = "green suit"
desc = "A green suit and yellow necktie. Baller."
@@ -218,56 +237,48 @@
item_state = "dg_suit"
item_color = "green_suit"
can_adjust = FALSE
-
/obj/item/clothing/under/suit_jacket/red
name = "red suit"
desc = "A red suit and blue tie. Somewhat formal."
icon_state = "red_suit"
item_state = "r_suit"
item_color = "red_suit"
-
/obj/item/clothing/under/suit_jacket/charcoal
name = "charcoal suit"
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state = "charcoal_suit"
item_color = "charcoal_suit"
-
/obj/item/clothing/under/suit_jacket/navy
name = "navy suit"
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state = "navy_suit"
item_color = "navy_suit"
-
/obj/item/clothing/under/suit_jacket/burgundy
name = "burgundy suit"
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state = "burgundy_suit"
item_color = "burgundy_suit"
-
/obj/item/clothing/under/suit_jacket/checkered
name = "checkered suit"
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
icon_state = "checkered_suit"
item_state = "checkered_suit"
item_color = "checkered_suit"
-
/obj/item/clothing/under/suit_jacket/tan
name = "tan suit"
desc = "A tan suit with a yellow tie. Smart, but casual."
icon_state = "tan_suit"
item_state = "tan_suit"
item_color = "tan_suit"
-
/obj/item/clothing/under/suit_jacket/white
name = "white suit"
desc = "A white suit and jacket with a blue shirt. You wanna play rough? OKAY!"
icon_state = "white_suit"
item_state = "white_suit"
item_color = "white_suit"
-
/obj/item/clothing/under/burial
name = "burial garments"
desc = "Traditional burial garments from the early 22nd century."
@@ -275,7 +286,6 @@
item_state = "burial"
item_color = "burial"
has_sensor = NO_SENSORS
-
/obj/item/clothing/under/skirt/black
name = "black skirt"
desc = "A black skirt, very fancy!"
@@ -284,7 +294,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/skirt/blue
name = "blue skirt"
desc = "A blue, casual skirt."
@@ -294,7 +303,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/skirt/red
name = "red skirt"
desc = "A red, casual skirt."
@@ -304,7 +312,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/skirt/purple
name = "purple skirt"
desc = "A purple, casual skirt."
@@ -314,8 +321,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
-
/obj/item/clothing/under/schoolgirl
name = "blue schoolgirl uniform"
desc = "It's just like one of my Japanese animes!"
@@ -325,25 +330,21 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/schoolgirl/red
name = "red schoolgirl uniform"
icon_state = "schoolgirlred"
item_state = "schoolgirlred"
item_color = "schoolgirlred"
-
/obj/item/clothing/under/schoolgirl/green
name = "green schoolgirl uniform"
icon_state = "schoolgirlgreen"
item_state = "schoolgirlgreen"
item_color = "schoolgirlgreen"
-
/obj/item/clothing/under/schoolgirl/orange
name = "orange schoolgirl uniform"
icon_state = "schoolgirlorange"
item_state = "schoolgirlorange"
item_color = "schoolgirlorange"
-
/obj/item/clothing/under/overalls
name = "laborer's overalls"
desc = "A set of durable overalls for getting the job done."
@@ -351,7 +352,6 @@
item_state = "lb_suit"
item_color = "overalls"
can_adjust = FALSE
-
/obj/item/clothing/under/pirate
name = "pirate outfit"
desc = "Yarr."
@@ -359,7 +359,6 @@
item_state = "pirate"
item_color = "pirate"
can_adjust = FALSE
-
/obj/item/clothing/under/soviet
name = "soviet uniform"
desc = "For the Motherland!"
@@ -367,7 +366,6 @@
item_state = "soviet"
item_color = "soviet"
can_adjust = FALSE
-
/obj/item/clothing/under/redcoat
name = "redcoat uniform"
desc = "Looks old."
@@ -375,7 +373,6 @@
item_state = "redcoat"
item_color = "redcoat"
can_adjust = FALSE
-
/obj/item/clothing/under/kilt
name = "kilt"
desc = "Includes shoes and plaid."
@@ -385,7 +382,6 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/kilt/highlander
desc = "You're the only one worthy of this kilt."
@@ -402,7 +398,6 @@
body_parts_covered = CHEST|GROIN|LEGS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/gladiator
name = "gladiator uniform"
desc = "Are you not entertained? Is that not why you are here?"
@@ -413,11 +408,9 @@
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
resistance_flags = NONE
-
/obj/item/clothing/under/gladiator/ash_walker
desc = "This gladiator uniform appears to be covered in ash and fairly dated."
has_sensor = NO_SENSORS
-
/obj/item/clothing/under/sundress
name = "sundress"
desc = "Makes you want to frolic in a field of daisies."
@@ -427,7 +420,6 @@
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/captainparade
name = "captain's parade uniform"
desc = "A captain's luxury-wear, for special occasions."
@@ -435,7 +427,6 @@
item_state = "by_suit"
item_color = "captain_parade"
can_adjust = FALSE
-
/obj/item/clothing/under/hosparademale
name = "head of security's parade uniform"
desc = "A male head of security's luxury-wear, for special occasions."
@@ -443,7 +434,6 @@
item_state = "r_suit"
item_color = "hos_parade_male"
can_adjust = FALSE
-
/obj/item/clothing/under/hosparadefem
name = "head of security's parade uniform"
desc = "A female head of security's luxury-wear, for special occasions."
@@ -452,7 +442,6 @@
item_color = "hos_parade_fem"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/assistantformal
name = "assistant's formal uniform"
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
@@ -460,7 +449,6 @@
item_state = "gy_suit"
item_color = "assistant_formal"
can_adjust = FALSE
-
/obj/item/clothing/under/blacktango
name = "black tango dress"
desc = "Filled with Latin fire."
@@ -469,8 +457,6 @@
item_color = "black_tango"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
- body_parts_covered = CHEST|GROIN
-
/obj/item/clothing/under/stripeddress
name = "striped dress"
desc = "Fashion in space."
@@ -480,7 +466,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_FULL
can_adjust = FALSE
-
/obj/item/clothing/under/sailordress
name = "sailor dress"
desc = "Formal wear for a leading lady."
@@ -490,7 +475,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/redeveninggown
name = "red evening gown"
desc = "Fancy dress for space bar singers."
@@ -499,7 +483,6 @@
item_color = "red_evening_gown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/maid
name = "maid costume"
desc = "Maid in China."
@@ -509,12 +492,10 @@
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/maid/Initialize()
. = ..()
var/obj/item/clothing/accessory/maidapron/A = new (src)
attach_accessory(A)
-
/obj/item/clothing/under/janimaid
name = "maid uniform"
desc = "A simple maid uniform for housekeeping."
@@ -524,7 +505,6 @@
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/plaid_skirt
name = "red plaid skirt"
desc = "A preppy red skirt with a white blouse."
@@ -534,7 +514,6 @@
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
-
/obj/item/clothing/under/plaid_skirt/blue
name = "blue plaid skirt"
desc = "A preppy blue skirt with a white blouse."
@@ -544,7 +523,6 @@
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
-
/obj/item/clothing/under/plaid_skirt/purple
name = "purple plaid skirt"
desc = "A preppy purple skirt with a white blouse."
@@ -554,7 +532,6 @@
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
-
/obj/item/clothing/under/singery
name = "yellow performer's outfit"
desc = "Just looking at this makes you want to sing."
@@ -565,7 +542,6 @@
fitted = NO_FEMALE_UNIFORM
alternate_worn_layer = ABOVE_SHOES_LAYER
can_adjust = FALSE
-
/obj/item/clothing/under/singerb
name = "blue performer's outfit"
desc = "Just looking at this makes you want to sing."
@@ -576,7 +552,6 @@
alternate_worn_layer = ABOVE_SHOES_LAYER
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
-
/obj/item/clothing/under/plaid_skirt/green
name = "green plaid skirt"
desc = "A preppy green skirt with a white blouse."
@@ -586,17 +561,14 @@
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
-
/obj/item/clothing/under/jester
name = "jester suit"
desc = "A jolly dress, well suited to entertain your master, nuncle."
icon_state = "jester"
item_color = "jester"
can_adjust = FALSE
-
/obj/item/clothing/under/jester/alt
icon_state = "jester2"
-
/obj/item/clothing/under/geisha
name = "geisha suit"
desc = "Cute space ninja senpai not included."
@@ -604,14 +576,12 @@
item_color = "geisha"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
-
/obj/item/clothing/under/villain
name = "villain suit"
desc = "A change of wardrobe is necessary if you ever want to catch a real superhero."
icon_state = "villain"
item_color = "villain"
can_adjust = FALSE
-
/obj/item/clothing/under/sailor
name = "sailor suit"
desc = "Skipper's in the wardroom drinkin gin'."
@@ -619,7 +589,6 @@
item_state = "b_suit"
item_color = "sailor"
can_adjust = FALSE
-
/obj/item/clothing/under/plasmaman
name = "plasma envirosuit"
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
@@ -633,17 +602,12 @@
var/next_extinguish = 0
var/extinguish_cooldown = 100
var/extinguishes_left = 5
-
-
/obj/item/clothing/under/plasmaman/examine(mob/user)
..()
to_chat(user, "There are [extinguishes_left] extinguisher charges left in this suit.")
-
-
/obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H)
if(!istype(H))
return
-
if(H.on_fire)
if(extinguishes_left)
if(next_extinguish > world.time)
@@ -654,7 +618,6 @@
H.ExtinguishMob()
new /obj/effect/particle_effect/water(get_turf(H))
return 0
-
/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params)
..()
if (istype(E, /obj/item/extinguisher_refill))
@@ -668,20 +631,17 @@
return
return
return
-
/obj/item/extinguisher_refill
name = "envirosuit extinguisher cartridge"
desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits."
icon_state = "plasmarefill"
icon = 'icons/obj/device.dmi'
-
/obj/item/clothing/under/rank/security/navyblue/russian
name = "\improper Russian officer's uniform"
desc = "The latest in fashionable russian outfits."
icon_state = "hostanclothes"
item_state = "hostanclothes"
item_color = "hostanclothes"
-
/obj/item/clothing/under/mummy
name = "mummy wrapping"
desc = "Return the slab or suffer my stale references."
@@ -692,7 +652,6 @@
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
resistance_flags = NONE
-
/obj/item/clothing/under/scarecrow
name = "scarecrow clothes"
desc = "Perfect camouflage for hiding in botany."
@@ -703,7 +662,6 @@
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
resistance_flags = NONE
-
/obj/item/clothing/under/draculass
name = "draculass coat"
desc = "A dress inspired by the ancient \"Victorian\" era."
@@ -713,8 +671,6 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
- mutantrace_variation = NO_MUTANTRACE_VARIATION
-
/obj/item/clothing/under/drfreeze
name = "doctor freeze's jumpsuit"
desc = "A modified scientist jumpsuit to look extra cool."
@@ -722,8 +678,6 @@
item_state = "drfreeze"
item_color = "drfreeze"
can_adjust = FALSE
- mutantrace_variation = NO_MUTANTRACE_VARIATION
-
/obj/item/clothing/under/lobster
name = "foam lobster suit"
desc = "Who beheaded the college mascot?"
@@ -732,8 +686,6 @@
item_color = "lobster"
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
- mutantrace_variation = NO_MUTANTRACE_VARIATION
-
/obj/item/clothing/under/gondola
name = "gondola hide suit"
desc = "Now you're cooking."
@@ -741,7 +693,6 @@
item_state = "lb_suit"
item_color = "gondola"
can_adjust = FALSE
-
/obj/item/clothing/under/skeleton
name = "skeleton jumpsuit"
desc = "A black jumpsuit with a white bone pattern printed on it. Spooky!"
@@ -752,10 +703,18 @@
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
resistance_flags = NONE
+/obj/item/clothing/under/durathread
+ name = "durathread jumpsuit"
+ desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
+ icon_state = "durathread"
+ item_state = "durathread"
+ item_color = "durathread"
+ can_adjust = FALSE
+ armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
/obj/item/clothing/under/gear_harness
name = "gear harness"
desc = "A simple, inconspicuous harness replacement for a jumpsuit."
icon_state = "gear_harness"
item_state = "gear_harness" //We dont use golem do to being a item, item without faces making it default to error suit sprites.
- body_parts_covered = CHEST|GROIN
\ No newline at end of file
+ body_parts_covered = CHEST|GROIN
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 83cab9d992..9893edf248 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -8,6 +8,17 @@
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
alt_covers_chest = TRUE
+/obj/item/clothing/under/syndicate/skirt
+ name = "tactical skirtleneck"
+ desc = "A non-descript and slightly suspicious looking skirtleneck."
+ icon_state = "syndicate_skirt"
+ item_state = "bl_suit"
+ item_color = "syndicate_skirt"
+ has_sensor = NO_SENSORS
+ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ alt_covers_chest = TRUE
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/syndicate/tacticool
name = "tacticool turtleneck"
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
@@ -16,6 +27,15 @@
item_color = "tactifool"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+/obj/item/clothing/under/syndicate/tacticool/skirt
+ name = "tacticool skirtleneck"
+ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
+ icon_state = "tactifool_skirt"
+ item_state = "bl_suit"
+ item_color = "tactifool_skirt"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ fitted = FEMALE_UNIFORM_TOP
+
/obj/item/clothing/under/syndicate/sniper
name = "Tactical turtleneck suit"
desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp."
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index 65805f73fd..ce6eea97b0 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -30,6 +30,12 @@ Assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H)
..()
if (CONFIG_GET(flag/grey_assistants))
- uniform = /obj/item/clothing/under/color/grey
+ if(H.jumpsuit_style == PREF_SUIT)
+ uniform = /obj/item/clothing/under/color/grey
+ else
+ uniform = /obj/item/clothing/under/skirt/color/grey
else
- uniform = /obj/item/clothing/under/color/random
+ if(H.jumpsuit_style == PREF_SUIT)
+ uniform = /obj/item/clothing/under/color/random
+ else
+ uniform = /obj/item/clothing/under/skirt/color/random
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm
index f678700735..f03696e5da 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/job.dm
@@ -190,6 +190,16 @@
backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
backpack_contents[box] = 1
+ //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
+ var/holder
+ if(H.jumpsuit_style == PREF_SKIRT)
+ holder = "[uniform]/skirt"
+ if(!text2path(holder))
+ holder = "[uniform]"
+ else
+ holder = "[uniform]"
+ uniform = text2path(holder)
+
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 08aeed8d74..7a0a2d8ad8 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -31,6 +31,7 @@
var/socks = "Nude" //Which socks the player wants
var/socks_color = "#FFFFFF"
var/backbag = DBACKPACK //Which backpack type the player has chosen.
+ var/jumpsuit_style = PREF_SUIT //suit/skirt
//Equipment slots
var/obj/item/wear_suit = null
diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm
index 5c20b0ce75..49121c9409 100644
--- a/code/modules/mob/living/carbon/human/status_procs.dm
+++ b/code/modules/mob/living/carbon/human/status_procs.dm
@@ -3,7 +3,7 @@
amount = dna.species.spec_stun(src,amount)
return ..()
-/mob/living/carbon/human/Knockdown(amount, updating = 1, ignore_canknockdown = 0)
+/mob/living/carbon/human/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE, override_hardstun, override_stamdmg)
amount = dna.species.spec_stun(src,amount)
return ..()
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index feb80e8d2c..bb1b7ebe0e 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -377,13 +377,16 @@ There are several things that need to be remembered:
if(wear_suit)
var/obj/item/clothing/suit/S = wear_suit
+ var/no_taur_thanks = FALSE
+ if(!istype(S))
+ no_taur_thanks = TRUE
wear_suit.screen_loc = ui_oclothing
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown)
client.screen += wear_suit
update_observer_view(wear_suit,1)
- if(S.mutantrace_variation) //Just make sure we've got this checked too
+ if(!no_taur_thanks && S.mutantrace_variation) //Just make sure we've got this checked too
if(S.taurmode == NOT_TAURIC && S.adjusted == ALT_STYLE) //are we not a taur, but we have Digitigrade legs? Run this check first, then.
S.alternate_worn_icon = 'modular_citadel/icons/mob/suit_digi.dmi'
else
@@ -404,7 +407,7 @@ There are several things that need to be remembered:
if(OFFSET_SUIT in dna.species.offset_features)
suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1]
suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2]
- if(S.center)
+ if(!no_taur_thanks && S.center)
suit_overlay = center_image(suit_overlay, S.dimension_x, S.dimension_y)
overlays_standing[SUIT_LAYER] = suit_overlay
update_hair()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index 807c52ea46..23ac527b2e 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -222,7 +222,7 @@
if(.)
update_icons()
-/mob/living/simple_animal/drone/cogscarab/Knockdown(amount, updating = 1, ignore_canknockdown = 0)
+/mob/living/simple_animal/drone/cogscarab/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE, override_hardstun, override_stamdmg)
. = ..()
if(.)
update_icons()
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index 5cee4ef1b7..cc54ad3bef 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -38,3 +38,13 @@
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 = 0
+/mob/living/simple_animal/hostile/retaliate/bat/secbat
+ name = "Security Bat"
+ icon_state = "secbat"
+ icon_living = "secbat"
+ icon_dead = "secbat_dead"
+ icon_gib = "secbat_dead"
+ desc = "A fruit bat with a tiny little security hat who is ready to inject cuteness into any security operation."
+ emote_see = list("is ready to law down the law.", "flaps about with an air of authority.")
+ response_help = "respects the authority of"
+ gold_core_spawnable = FRIENDLY_SPAWN
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 5006bd2920..0880f7f432 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -62,15 +62,15 @@
return K.duration - world.time
return 0
-/mob/living/proc/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Can't go below remaining duration
+/mob/living/proc/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE, override_hardstun, override_stamdmg) //Can't go below remaining duration
if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
- if(absorb_stun(amount, ignore_canknockdown))
+ if(absorb_stun(isnull(override_hardstun)? amount : override_hardstun, ignore_canknockdown))
return
var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
if(K)
- K.duration = max(world.time + amount, K.duration)
- else if(amount > 0)
- K = apply_status_effect(STATUS_EFFECT_KNOCKDOWN, amount, updating)
+ K.duration = max(world.time + (isnull(override_hardstun)? amount : override_hardstun), K.duration)
+ else if((amount || override_hardstun) > 0)
+ K = apply_status_effect(STATUS_EFFECT_KNOCKDOWN, amount, updating, override_hardstun, override_stamdmg)
return K
/mob/living/proc/SetKnockdown(amount, updating = TRUE, ignore_canknockdown = FALSE) //Sets remaining duration
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index b098801da8..f7d10bfb7b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -155,7 +155,7 @@
// deaf_message (optional) is what deaf people will see.
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
-/mob/audible_message(message, deaf_message, hearing_distance, self_message)
+/mob/audible_message(message, deaf_message, hearing_distance, self_message, no_ghosts = FALSE)
var/range = 7
if(hearing_distance)
range = hearing_distance
@@ -163,6 +163,8 @@
var/msg = message
if(self_message && M==src)
msg = self_message
+ if(no_ghosts && isobserver(M))
+ continue
M.show_message( msg, 2, deaf_message, 1)
// Show a message to all mobs in earshot of this atom
@@ -171,11 +173,13 @@
// deaf_message (optional) is what deaf people will see.
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
-/atom/proc/audible_message(message, deaf_message, hearing_distance)
+/atom/proc/audible_message(message, deaf_message, hearing_distance, no_ghosts = FALSE)
var/range = 7
if(hearing_distance)
range = hearing_distance
for(var/mob/M in get_hearers_in_view(range, src))
+ if(no_ghosts && isobserver(M))
+ continue
M.show_message( message, 2, deaf_message, 1)
/mob/proc/Life()
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 66444abf91..1fc97c31e4 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -172,15 +172,11 @@ proc/get_top_level_mob(var/mob/S)
user.log_message(message, INDIVIDUAL_EMOTE_LOG)
message = "[user] " + "[message]"
- for(var/mob/M)
- if(M in list(/mob/living))
- M.show_message(message)
-
if(emote_type == EMOTE_AUDIBLE)
- user.audible_message(message=message,hearing_distance=1)
+ user.audible_message(message=message,hearing_distance=1, no_ghosts = TRUE)
else
- user.visible_message(message=message,self_message=message,vision_distance=1)
- log_emote("[key_name(user)] : [message]")
+ user.visible_message(message=message,self_message=message,vision_distance=1, no_ghosts = TRUE)
+ log_emote("[key_name(user)] : (SUBTLER) [message]")
message = null
diff --git a/code/modules/projectiles/ammunition/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm
index 9d6befce53..bc693d96bc 100644
--- a/code/modules/projectiles/ammunition/caseless/rocket.dm
+++ b/code/modules/projectiles/ammunition/caseless/rocket.dm
@@ -9,7 +9,7 @@
name = "\improper PM-9HEDP"
desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward mechs."
caliber = "84mm"
- icon_state = "s-casing-live"
+ icon_state = "84mm-hedp"
projectile_type = /obj/item/projectile/bullet/a84mm
/obj/item/ammo_casing/caseless/a75
diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm
index 352d1eb951..79a005ee8a 100644
--- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/grenade.dm
@@ -11,7 +11,7 @@
max_ammo = 1
/obj/item/ammo_box/magazine/internal/rocketlauncher
- name = "grenade launcher internal magazine"
+ name = "rocket launcher internal magazine"
ammo_type = /obj/item/ammo_casing/caseless/rocket
caliber = "84mm"
max_ammo = 1
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 98fd774d63..fb3ed19f82 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -32,9 +32,10 @@
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/weapon_weight = WEAPON_LIGHT //currently only used for inaccuracy
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/inaccuracy_modifier = 1
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
@@ -538,3 +539,13 @@
if(A == chambered)
chambered = null
update_icon()
+
+/obj/item/gun/proc/getinaccuracy(mob/living/user)
+ if(!iscarbon(user))
+ return FALSE
+ else
+ var/mob/living/carbon/holdingdude = user
+ if(istype(holdingdude) && holdingdude.combatmode)
+ return (max((holdingdude.lastdirchange + weapon_weight * 25) - world.time,0) * inaccuracy_modifier)
+ else
+ return ((weapon_weight * 25) * inaccuracy_modifier)
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index eea4e1bc0b..f6356dce99 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -86,6 +86,7 @@
pin = /obj/item/firing_pin/implant/pindicate
burst_size = 1
fire_delay = 0
+ inaccuracy_modifier = 0.7
casing_ejector = FALSE
weapon_weight = WEAPON_HEAVY
magazine_wording = "rocket"
@@ -108,34 +109,34 @@
/obj/item/gun/ballistic/rocketlauncher/can_shoot()
return chambered?.BB
-/obj/item/gun/ballistic/rocketlauncher/process_chamber()
- if(chambered)
- chambered = null
- if(magazine)
- QDEL_NULL(magazine)
- update_icon()
-
/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user)
return //too difficult to remove the rocket with TK
/obj/item/gun/ballistic/rocketlauncher/attack_self(mob/living/user)
if(magazine)
- if(chambered)
- chambered.forceMove(magazine)
- magazine.stored_ammo.Insert(1, chambered)
+ var/obj/item/ammo_casing/AC = chambered
+ if(AC)
+ if(!user.put_in_hands(AC))
+ AC.bounce_away(FALSE, NONE)
+ to_chat(user, "You remove \the [AC] from \the [src]!")
+ playsound(src, 'sound/weapons/gun_magazine_remove_full.ogg', 70, TRUE)
chambered = null
else
- stack_trace("Removed [magazine] from [src] without a chambered round")
- magazine.forceMove(drop_location())
- if(user.is_holding(src))
- user.put_in_hands(magazine)
- playsound(src, 'sound/weapons/gun_magazine_remove_full.ogg', 70, TRUE)
- to_chat(user, "You work the [magazine] out from [src].")
- magazine = null
- else
- to_chat(user, "There's no rocket in [src].")
+ to_chat(user, "There's no [magazine_wording] in [src].")
update_icon()
+/obj/item/gun/ballistic/rocketlauncher/attackby(obj/item/A, mob/user, params)
+ if(magazine && istype(A, /obj/item/ammo_casing))
+ if(user.temporarilyRemoveItemFromInventory(A))
+ if(!chambered)
+ to_chat(user, "You load a new [A] into \the [src].")
+ playsound(src, "gun_insert_full_magazine", 70, 1)
+ chamber_round()
+ update_icon()
+ return TRUE
+ else
+ to_chat(user, "You cannot seem to get \the [A] out of your hands!")
+
/obj/item/gun/ballistic/rocketlauncher/update_icon()
icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]"
diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm
index a62fa25f7d..e15810c6bb 100644
--- a/code/modules/projectiles/projectile/special/rocket.dm
+++ b/code/modules/projectiles/projectile/special/rocket.dm
@@ -16,6 +16,7 @@
var/anti_armour_damage = 200
armour_penetration = 100
dismemberment = 100
+ ricochets_max = 0
/obj/item/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE)
..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index fd0a896406..3351ae3f1c 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -350,10 +350,10 @@
return
var/amount_full = 0
- var/vol_part = min(reagents.total_volume, 30)
+ var/vol_part = min(reagents.total_volume, 60)
if(text2num(many))
- amount_full = round(reagents.total_volume / 30)
- vol_part = reagents.total_volume % 30
+ amount_full = round(reagents.total_volume / 60)
+ vol_part = reagents.total_volume % 60
var/name = stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr)))
return
@@ -363,7 +363,7 @@
P = new/obj/item/reagent_containers/glass/bottle/vial/small(drop_location())
P.name = trim("[name] hypovial")
adjust_item_drop_location(P)
- reagents.trans_to(P, 30)
+ reagents.trans_to(P, 60)
if(vol_part)
P = new/obj/item/reagent_containers/glass/bottle/vial/small(drop_location())
@@ -437,4 +437,4 @@
condi = TRUE
#undef PILL_STYLE_COUNT
-#undef RANDOM_PILL_STYLE
\ No newline at end of file
+#undef RANDOM_PILL_STYLE
diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm
index 47f3ba5efa..dc4e98d507 100644
--- a/code/modules/reagents/reagent_containers/rags.dm
+++ b/code/modules/reagents/reagent_containers/rags.dm
@@ -13,11 +13,18 @@
var/wipe_sound
var/soak_efficiency = 1
var/extinguish_efficiency = 0
+ var/action_speed = 3 SECONDS
+ var/damp_threshold = 0.5
/obj/item/reagent_containers/rag/suicide_act(mob/user)
user.visible_message("[user] is smothering [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return (OXYLOSS)
+/obj/item/reagent_containers/rag/examine(mob/user)
+ . = ..()
+ if(reagents.total_volume)
+ to_chat(user, "Alt-Click to squeeze the liquids out of it.")
+
/obj/item/reagent_containers/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity)
. = ..()
if(!proximity)
@@ -39,7 +46,7 @@
else if(istype(A) && src in user)
user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...")
- if(do_after(user,30, target = A))
+ if(do_after(user, action_speed, target = A))
user.visible_message("[user] finishes wiping off [A]!", "You finish wiping off [A].")
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
return
@@ -51,17 +58,43 @@
user.visible_message("\The [user] uses \the [src] to pat out [M == user ? "[user.p_their()]" : "\the [M]'s"] flames!")
if(hitsound)
playsound(M, hitsound, 25, 1)
- M.adjust_fire_stacks(-extinguish_efficiency)
+ M.adjust_fire_stacks(-min(extinguish_efficiency, M.fire_stacks))
else
+ if(reagents.total_volume > (volume * damp_threshold))
+ to_chat(user, "\The [src] is too drenched to be used to dry [user == M ? "yourself" : "\the [M]"] off.")
+ return TRUE
user.visible_message("\The [user] starts drying [M == user ? "[user.p_them()]self" : "\the [M]"] off with \the [src]...")
- if(do_mob(user, M, 3 SECONDS))
+ if(do_mob(user, M, action_speed))
+ if(reagents.total_volume > (volume * damp_threshold))
+ return
user.visible_message("\The [user] dries [M == user ? "[user.p_them()]self" : "\the [M]"] off with \the [src].")
if(wipe_sound)
playsound(M, wipe_sound, 25, 1)
- M.adjust_fire_stacks(-soak_efficiency)
+ if(M.fire_stacks)
+ var/minus_plus = M.fire_stacks < 0 ? 1 : -1
+ var/amount = min(abs(M.fire_stacks), soak_efficiency)
+ var/r_id = "fuel"
+ if(M.fire_stacks < 0)
+ r_id = "water"
+ reagents.add_reagent(r_id, amount * 0.3)
+ M.adjust_fire_stacks(minus_plus * amount)
+ M.wash_cream()
return TRUE
return ..()
+/obj/item/reagent_containers/rag/AltClick(mob/user)
+ . = ..()
+ if(reagents.total_volume && user.canUseTopic(src, BE_CLOSE))
+ to_chat(user, "You start squeezing the liquids out of \the [src]...")
+ if(do_after(user, action_speed, TRUE, src))
+ to_chat(user, "You squeeze \the [src] dry.")
+ var/atom/react_loc = get_turf(src)
+ if(ismob(react_loc))
+ react_loc = react_loc.loc
+ if(react_loc)
+ reagents.reaction(react_loc, TOUCH)
+ reagents.clear_reagents()
+
/obj/item/reagent_containers/rag/towel
name = "towel"
desc = "A soft cotton towel."
@@ -77,10 +110,16 @@
volume = 10
total_mass = 2
wipe_sound = 'sound/items/towelwipe.ogg'
- soak_efficiency = 2
- extinguish_efficiency = 2
+ soak_efficiency = 4
+ extinguish_efficiency = 3
var/flat_icon = "towel_flat"
var/folded_icon = "towel"
+ var/list/possible_colors
+
+/obj/item/reagent_containers/rag/towel/Initialize()
+ . = ..()
+ if(possible_colors)
+ add_atom_colour(pick(possible_colors), FIXED_COLOUR_PRIORITY)
/obj/item/reagent_containers/rag/towel/attack(mob/living/M, mob/living/user)
if(user.a_intent == INTENT_HARM)
@@ -112,13 +151,27 @@
to_chat(user, "You lay out \the [src] flat on the ground.")
icon_state = flat_icon
layer = BELOW_OBJ_LAYER
- qdel(src)
/obj/item/reagent_containers/rag/towel/pickup(mob/living/user)
. = ..()
icon_state = folded_icon
layer = initial(layer)
-/obj/item/reagent_containers/rag/towel/random/Initialize()
- . = ..()
- add_atom_colour(pick("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"), FIXED_COLOUR_PRIORITY)
+/obj/item/reagent_containers/rag/towel/on_reagent_change(changetype)
+ force = initial(force) + round(reagents.total_volume * 0.5)
+
+/obj/item/reagent_containers/rag/towel/random
+ possible_colors = list("#FF0000","#FF7F00","#FFFF00","#00FF00","#0000FF","#4B0082","#8F00FF")
+
+/obj/item/reagent_containers/rag/towel/syndicate
+ name = "syndicate towel"
+ desc = "Truly a weapon of mass destruction."
+ possible_colors = list("#DD1A1A", "#DB4325", "#E02700")
+ force = 4
+ armour_penetration = 10
+ volume = 20
+ soak_efficiency = 6
+ extinguish_efficiency = 5
+ action_speed = 15
+ damp_threshold = 0.8
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 50, "acid" = 50) //items don't provide armor to wearers unlike clothing yet.
\ No newline at end of file
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index 5cfa454bd9..a265a4e907 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -63,6 +63,8 @@
/obj/item/clothing/suit/wizrobe/fake = 1,
/obj/item/clothing/head/wizard/fake = 1,
/obj/item/staff = 3,
+ /obj/item/clothing/under/rank/mime/skirt = 1,
+ /obj/item/clothing/under/gimmick/rank/captain/suit/skirt = 1,
/obj/item/clothing/mask/gas/sexyclown = 1,
/obj/item/clothing/under/rank/clown/sexy = 1,
/obj/item/clothing/mask/gas/sexymime = 1,
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index c31c9a12a2..1497992fe8 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -31,6 +31,9 @@
/obj/item/clothing/under/pants/tan = 4,
/obj/item/clothing/under/pants/track = 3,
/obj/item/clothing/suit/jacket/miljacket = 5,
+ /obj/item/clothing/under/scratch/skirt = 2,
+ /obj/item/clothing/under/gimmick/rank/captain/suit/skirt = 2,
+ /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt = 2,
/obj/item/clothing/neck/tie/blue = 3,
/obj/item/clothing/neck/tie/red = 3,
/obj/item/clothing/neck/tie/black = 3,
@@ -98,6 +101,7 @@
/obj/item/clothing/suit/apron/purple_bartender = 4,
/obj/item/clothing/under/rank/bartender/purple = 4)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
+ /obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
/obj/item/clothing/head/ushanka = 3,
/obj/item/clothing/under/soviet = 3,
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index aaa1cf3b6f..b3b21fe375 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -12,7 +12,8 @@
/obj/item/reagent_containers/food/snacks/donut = 12,
/obj/item/storage/box/evidence = 6,
/obj/item/flashlight/seclite = 4,
- /obj/item/restraints/legcuffs/bola/energy = 7)
+ /obj/item/restraints/legcuffs/bola/energy = 7,
+ /obj/item/secbat = 5)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
/obj/item/storage/fancy/donut_box = 2,
/obj/item/ssword_kit = 1)
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index f51c3cb4dd..41caa29a2d 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -40,6 +40,7 @@
/obj/item/clothing/suit/hooded/wintercoat/medical = 3,
/obj/item/clothing/under/rank/nursesuit = 3,
/obj/item/clothing/head/nursehat = 3,
+ /obj/item/clothing/under/rank/medical/skirt= 5,
/obj/item/clothing/under/rank/medical/blue = 2,
/obj/item/clothing/under/rank/medical/green = 2,
/obj/item/clothing/under/rank/medical/purple = 2,
@@ -67,6 +68,7 @@
/obj/item/storage/backpack/satchel/eng = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
/obj/item/clothing/under/rank/engineer = 5,
+ /obj/item/clothing/under/rank/engineer/skirt = 5,
/obj/item/clothing/suit/hazardvest = 5,
/obj/item/clothing/shoes/workboots = 5,
/obj/item/clothing/head/hardhat = 5)
@@ -87,6 +89,7 @@
/obj/item/storage/backpack/industrial = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 5,
/obj/item/clothing/under/rank/atmospheric_technician = 5,
+ /obj/item/clothing/under/rank/atmospheric_technician/skirt = 5,
/obj/item/clothing/shoes/sneakers/black = 5)
refill_canister = /obj/item/vending_refill/wardrobe/atmos_wardrobe
@@ -101,6 +104,7 @@
vend_reply = "Thank you for using the CargoDrobe!"
products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 3,
/obj/item/clothing/under/rank/cargotech = 5,
+ /obj/item/clothing/under/rank/cargotech/skirt = 5,
/obj/item/clothing/shoes/sneakers/black = 5,
/obj/item/clothing/gloves/fingerless = 5,
/obj/item/clothing/head/soft = 5,
@@ -118,6 +122,7 @@
vend_reply = "Thank you for using the RoboDrobe!"
products = list(/obj/item/clothing/glasses/hud/diagnostic = 3,
/obj/item/clothing/under/rank/roboticist = 3,
+ /obj/item/clothing/under/rank/roboticist/skirt = 3,
/obj/item/clothing/suit/toggle/labcoat = 3,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/clothing/gloves/fingerless = 3,
@@ -140,6 +145,7 @@
/obj/item/storage/backpack/satchel/tox = 3,
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
/obj/item/clothing/under/rank/scientist = 4,
+ /obj/item/clothing/under/rank/scientist/skirt = 4,
/obj/item/clothing/suit/toggle/labcoat/science = 4,
/obj/item/clothing/shoes/sneakers/white = 4,
/obj/item/radio/headset/headset_sci = 4,
@@ -161,6 +167,7 @@
/obj/item/clothing/suit/apron = 3,
/obj/item/clothing/suit/apron/overalls = 5,
/obj/item/clothing/under/rank/hydroponics = 5,
+ /obj/item/clothing/under/rank/hydroponics/skirt = 5,
/obj/item/clothing/mask/bandana = 4)
refill_canister = /obj/item/vending_refill/wardrobe/hydro_wardrobe
@@ -175,6 +182,9 @@
vend_reply = "Thank you for using the CuraDrobe!"
products = list(/obj/item/clothing/head/fedora/curator = 2,
/obj/item/clothing/suit/curator = 2,
+ /obj/item/clothing/under/rank/curator/skirt = 2,
+ /obj/item/clothing/under/gimmick/rank/captain/suit/skirt = 2,
+ /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt = 2,
/obj/item/clothing/under/rank/curator/treasure_hunter = 2,
/obj/item/clothing/shoes/workboots/mining = 2,
/obj/item/storage/backpack/satchel/explorer = 2,
@@ -194,6 +204,7 @@
/obj/item/radio/headset/headset_srv = 3,
/obj/item/clothing/under/sl_suit = 3,
/obj/item/clothing/under/rank/bartender = 3,
+ /obj/item/clothing/under/rank/bartender/skirt = 2,
/obj/item/clothing/under/rank/bartender/purple = 2,
/obj/item/clothing/accessory/waistcoat = 3,
/obj/item/clothing/suit/apron/purple_bartender = 2,
@@ -226,6 +237,7 @@
/obj/item/circuitboard/machine/dish_drive = 1,
/obj/item/clothing/suit/toggle/chef = 2,
/obj/item/clothing/under/rank/chef = 2,
+ /obj/item/clothing/under/rank/chef/skirt = 2,
/obj/item/clothing/head/chefhat = 2,
/obj/item/reagent_containers/rag = 3)
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
@@ -240,6 +252,7 @@
product_ads = "Come and get your janitorial clothing, now endorsed by lizard janitors everywhere!"
vend_reply = "Thank you for using the JaniDrobe!"
products = list(/obj/item/clothing/under/rank/janitor = 2,
+ /obj/item/clothing/under/rank/janitor/skirt = 2,
/obj/item/cartridge/janitor = 3,
/obj/item/clothing/gloves/color/black = 2,
/obj/item/clothing/head/soft/purple = 2,
@@ -265,10 +278,19 @@
icon_state = "lawdrobe"
product_ads = "OBJECTION! Get the rule of law for yourself!"
vend_reply = "Thank you for using the LawDrobe!"
- products = list(/obj/item/clothing/under/lawyer/female = 3,
- /obj/item/clothing/under/lawyer/black = 3,
+ products = list(/obj/item/clothing/under/lawyer/bluesuit/skirt = 3,
+ /obj/item/clothing/under/lawyer/purpsuit/skirt = 3,
+ /obj/item/clothing/under/lawyer/blacksuit/skirt = 3,
+ /obj/item/clothing/under/lawyer/female = 3,
+ /obj/item/clothing/under/lawyer/female/skirt = 3,
+ /obj/item/clothing/under/lawyer/really_black = 3,
+ /obj/item/clothing/under/lawyer/really_black/skirt = 3,
+ /obj/item/clothing/under/lawyer/blue = 3,
+ /obj/item/clothing/under/lawyer/blue/skirt = 3,
/obj/item/clothing/under/lawyer/red = 3,
- /obj/item/clothing/under/lawyer/bluesuit = 3,
+ /obj/item/clothing/under/lawyer/red/skirt = 3,
+ /obj/item/clothing/under/lawyer/black = 3,
+ /obj/item/clothing/under/lawyer/black/skirt = 3,
/obj/item/clothing/suit/toggle/lawyer = 3,
/obj/item/clothing/under/lawyer/purpsuit = 3,
/obj/item/clothing/suit/toggle/lawyer/purple = 3,
@@ -291,6 +313,7 @@
/obj/item/storage/backpack/cultpack = 2,
/obj/item/clothing/accessory/pocketprotector/cosmetology = 2,
/obj/item/clothing/under/rank/chaplain = 2,
+ /obj/item/clothing/under/rank/chaplain/skirt = 2,
/obj/item/clothing/shoes/sneakers/black = 2,
/obj/item/clothing/suit/nun = 2,
/obj/item/clothing/head/nun_hood = 2,
@@ -308,6 +331,7 @@
product_ads = "Our clothes are 0.5% more resistant to acid spills! Get yours now!"
vend_reply = "Thank you for using the ChemDrobe!"
products = list(/obj/item/clothing/under/rank/chemist = 3,
+ /obj/item/clothing/under/rank/chemist/skirt = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/chemist = 3,
/obj/item/storage/backpack/chemistry = 3,
@@ -326,6 +350,7 @@
product_ads = "Perfect for the mad scientist in you!"
vend_reply = "Thank you for using the GeneDrobe!"
products = list(/obj/item/clothing/under/rank/geneticist = 3,
+ /obj/item/clothing/under/rank/geneticist/skirt = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/genetics = 3,
/obj/item/storage/backpack/genetics = 3,
@@ -342,6 +367,7 @@
product_ads = " Viruses getting you down? Then upgrade to sterilized clothing today!"
vend_reply = "Thank you for using the ViroDrobe"
products = list(/obj/item/clothing/under/rank/virologist = 3,
+ /obj/item/clothing/under/rank/virologist/skirt = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/clothing/suit/toggle/labcoat/virologist = 3,
/obj/item/clothing/mask/surgical = 3,
diff --git a/html/changelogs/AutoChangeLog-pr-8909.yml b/html/changelogs/AutoChangeLog-pr-8909.yml
new file mode 100644
index 0000000000..bfb1470f71
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8909.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes krav maga gloves, wizard spells knockdowns."
diff --git a/html/changelogs/AutoChangeLog-pr-8926.yml b/html/changelogs/AutoChangeLog-pr-8926.yml
new file mode 100644
index 0000000000..762318ab21
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8926.yml
@@ -0,0 +1,4 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - rscadd: "Added the secbat, a box to hold it and the ability to dispense it from the SecTech vendor."
diff --git a/html/changelogs/AutoChangeLog-pr-8929.yml b/html/changelogs/AutoChangeLog-pr-8929.yml
new file mode 100644
index 0000000000..4fed45f1d0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8929.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixing CX Shredder guns not accepting standard flechette mags."
+ - bugfix: "Fixing missing magpistol magazines icon states."
diff --git a/html/changelogs/AutoChangeLog-pr-8931.yml b/html/changelogs/AutoChangeLog-pr-8931.yml
new file mode 100644
index 0000000000..2bde1025db
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8931.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "more cargo to cargo"
diff --git a/html/changelogs/AutoChangeLog-pr-8933.yml b/html/changelogs/AutoChangeLog-pr-8933.yml
new file mode 100644
index 0000000000..09d318be08
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8933.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - balance: "Cloning no longer gives you positive mutations, but a chance for a negative one. Cloning has a chance to \"scramble\" your visual DNA."
diff --git a/html/changelogs/AutoChangeLog-pr-8934.yml b/html/changelogs/AutoChangeLog-pr-8934.yml
new file mode 100644
index 0000000000..e86e47a45f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8934.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "More loadout gear"
diff --git a/html/changelogs/AutoChangeLog-pr-8939.yml b/html/changelogs/AutoChangeLog-pr-8939.yml
new file mode 100644
index 0000000000..6041d66721
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8939.yml
@@ -0,0 +1,9 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscadd: "The syndicate base's bathroom is now fitted with a shower, and a special towel."
+ - bugfix: "Fixed many issues with towels."
+ - tweak: "The dry people off with rags/towels action can only be done if the object is NOT moist with reagents now. Also cleans banana creaming."
+ - rscadd: "Towels deal more damage while soaked with reagents."
+ - rscadd: "You can now squeeze rags/towels with Alt-Click."
+ - rscdel: "deleted an old and crappier towel sprite that got in the way."
diff --git a/html/changelogs/AutoChangeLog-pr-8949.yml b/html/changelogs/AutoChangeLog-pr-8949.yml
new file mode 100644
index 0000000000..83560d74f2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8949.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "Poojawa power creep"
diff --git a/html/changelogs/AutoChangeLog-pr-8952.yml b/html/changelogs/AutoChangeLog-pr-8952.yml
new file mode 100644
index 0000000000..df2ff22d09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8952.yml
@@ -0,0 +1,4 @@
+author: "CdrCross"
+delete-after: True
+changes:
+ - rscadd: "Adds the ability for cloning consoles to read and write record lists to the circuit board, and provides a template for giving other machines local circuit board memory."
diff --git a/html/changelogs/AutoChangeLog-pr-8970.yml b/html/changelogs/AutoChangeLog-pr-8970.yml
new file mode 100644
index 0000000000..304c9115dc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8970.yml
@@ -0,0 +1,6 @@
+author: "original by @randolfthemeh and @twaticus, port by sishen1542"
+delete-after: True
+changes:
+ - rscadd: "jumpskirts"
+ - rscadd: "more jumpskirts"
+ - rscadd: "jumpskirt/suit prefs"
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index c98ca98c42..2a85f8a422 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi
index aad4718cbd..6cce82b5f7 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 3d281606de..fe0a8a5c62 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index e7bec8dbe4..2cdf97bd37 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 3e3a1cefcb..315086b4d7 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index 159805d4ce..8788567b36 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index 90172bbf43..e75a63f540 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -434,3 +434,11 @@ datum/gear/darksabresheath
category = SLOT_NECK
path = /obj/item/bedsheet/captain
ckeywhitelist = list("tikibomb")
+
+/datum/gear/borgplush
+ name = "Robot Plush"
+ category = SLOT_IN_BACKPACK
+ /obj/item/toy/plush/borgplushie
+ ckeywhitelist = list("nicholaiavenicci")
+
+
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
index 6fa597565f..c2713b49be 100644
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ b/modular_citadel/code/modules/client/loadout/backpack.dm
@@ -23,11 +23,6 @@
category = SLOT_IN_BACKPACK
path = /obj/item/toy/plush/lampplushie
-/datum/gear/plushrng
- name = "Random plushie"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/random
-
/datum/gear/tennis
name = "Classic Tennis Ball"
category = SLOT_IN_BACKPACK
@@ -84,8 +79,24 @@
path = /obj/item/toy/katana
cost = 3
-//datum/gear/lumeyes
-// name = "Luminescent eye auto surgeon"
-// category = SLOT_IN_BACKPACK
-// path = /obj/item/autosurgeon/gloweyes
-// cost = 4
+/datum/gear/box
+ name = "Spare box"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/storage/box
+ cost = 2
+
+/datum/gear/crowbar
+ name = "Pocket Crowbar"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/crowbar
+ cost = 2
+
+/datum/gear/tapeplayer
+ name = "Taperecorder"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/taperecorder
+
+/datum/gear/tape
+ name = "Spare cassette tape"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/tape/random
\ No newline at end of file
diff --git a/modular_citadel/code/modules/clothing/under/trek_under.dm b/modular_citadel/code/modules/clothing/under/trek_under.dm
index 8e2b94372d..a60f7653c5 100644
--- a/modular_citadel/code/modules/clothing/under/trek_under.dm
+++ b/modular_citadel/code/modules/clothing/under/trek_under.dm
@@ -5,7 +5,8 @@
*//////////////////////////////////////////////////////////////////////////////////
// <3 Nienhaus && Joan.
// I made the Voy and DS9 stuff tho. - Poojy
-
+// Armor lists for even Heads of Staff is Nulled out do round start armor as well most armor going onto the suit itself rather then a armor slot - Trilby
+///////////////////////////////////////////////////////////////////////////////////
/obj/item/clothing/under/rank/trek
@@ -22,7 +23,7 @@
desc = "The uniform worn by command officers in the mid 2260s."
icon_state = "trek_command"
item_state = "trek_command"
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 10, "rad" = 10, "fire" = 0, "acid" = 0) // Considering only staff heads get to pick it
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/trek/engsec
name = "Operations Uniform"
@@ -104,7 +105,7 @@
/obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
)
- armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/suit/storage/trek/ds9/admiral // Only for adminuz
name = "Admiral Overcoat"
@@ -135,7 +136,6 @@
/obj/item/clothing/suit/storage/fluff/fedcoat
name = "Federation Uniform Jacket"
desc = "A uniform jacket from the United Federation. Set phasers to awesome."
-
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
icon_state = "fedcoat"
@@ -160,7 +160,7 @@
/obj/item/reagent_containers/glass/beaker,
/obj/item/storage/pill_bottle,
/obj/item/taperecorder)
- armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
var/unbuttoned = 0
verb/toggle()
@@ -214,7 +214,7 @@
/obj/item/reagent_containers/glass/bottle/vial,/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/pill,/obj/item/storage/pill_bottle, /obj/item/restraints/handcuffs,/obj/item/hypospray
)
- armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 5, "rad" = 10, "fire" = 10, "acid" = 0)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
//Variants
/obj/item/clothing/suit/storage/fluff/modernfedcoat/medsci
@@ -231,6 +231,7 @@
/obj/item/clothing/head/caphat/formal/fedcover
name = "Federation Officer's Cap"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
desc = "An officer's cap that demands discipline from the one who wears it."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
icon_state = "fedcapofficer"
diff --git a/modular_citadel/code/modules/mob/living/status_procs.dm b/modular_citadel/code/modules/mob/living/status_procs.dm
deleted file mode 100644
index 851c7438a7..0000000000
--- a/modular_citadel/code/modules/mob/living/status_procs.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/mob/living/Knockdown(amount, updating = TRUE, ignore_canknockdown = FALSE, override_hardstun, override_stamdmg) //Can't go below remaining duration
- if(((status_flags & CANKNOCKDOWN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canknockdown)
- if(absorb_stun(isnull(override_hardstun)? amount : override_hardstun, ignore_canknockdown))
- return
- var/datum/status_effect/incapacitating/knockdown/K = IsKnockdown()
- if(K)
- K.duration = max(world.time + (isnull(override_hardstun)? amount : override_hardstun), K.duration)
- else if((amount || override_hardstun) > 0)
- K = apply_status_effect(STATUS_EFFECT_KNOCKDOWN, amount, updating, override_hardstun, override_stamdmg)
- return K
diff --git a/modular_citadel/code/modules/projectiles/gun.dm b/modular_citadel/code/modules/projectiles/gun.dm
index ea8af7c74c..317f68b4c4 100644
--- a/modular_citadel/code/modules/projectiles/gun.dm
+++ b/modular_citadel/code/modules/projectiles/gun.dm
@@ -9,13 +9,3 @@
return 0
else
return ..()
-
-/obj/item/gun/proc/getinaccuracy(mob/living/user)
- if(!iscarbon(user))
- return 0
- else
- var/mob/living/carbon/holdingdude = user
- if(istype(holdingdude) && holdingdude.combatmode)
- return max((holdingdude.lastdirchange + weapon_weight * 25) - world.time,0)
- else
- return weapon_weight * 25
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm
deleted file mode 100644
index f70ec76f04..0000000000
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm
+++ /dev/null
@@ -1,117 +0,0 @@
-//////Flechette Launcher//////
-
-///projectiles///
-
-/obj/item/projectile/bullet/cflechetteap //shreds armor
- name = "flechette (armor piercing)"
- damage = 8
- armour_penetration = 80
-
-/obj/item/projectile/bullet/cflechettes //shreds flesh and forces bleeding
- name = "flechette (serrated)"
- damage = 15
- dismemberment = 10
- armour_penetration = -80
-
-/obj/item/projectile/bullet/cflechettes/on_hit(atom/target, blocked = FALSE)
- if((blocked != 100) && iscarbon(target))
- var/mob/living/carbon/C = target
- C.bleed(10)
- return ..()
-
-///ammo casings (CASELESS AMMO CASINGS WOOOOOOOO)///
-
-/obj/item/ammo_casing/caseless/flechetteap
- name = "flechette (armor piercing)"
- desc = "A flechette made with a tungsten alloy."
- projectile_type = /obj/item/projectile/bullet/cflechetteap
- caliber = "flechette"
- throwforce = 1
- throw_speed = 3
-
-/obj/item/ammo_casing/caseless/flechettes
- name = "flechette (serrated)"
- desc = "A serrated flechette made of a special alloy intended to deform drastically upon penetration of human flesh."
- projectile_type = /obj/item/projectile/bullet/cflechettes
- caliber = "flechette"
- throwforce = 2
- throw_speed = 3
- embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10)
-
-///magazine///
-
-/obj/item/ammo_box/magazine/flechette
- name = "flechette magazine (armor piercing)"
- icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
- icon_state = "flechettemag"
- ammo_type = /obj/item/ammo_casing/caseless/flechetteap
- caliber = "flechette"
- max_ammo = 40
- multiple_sprites = 2
-
-/obj/item/ammo_box/magazine/flechette/s
- name = "flechette magazine (serrated)"
- ammo_type = /obj/item/ammo_casing/caseless/flechettes
-
-///the gun itself///
-
-/obj/item/gun/ballistic/automatic/flechette
- name = "\improper CX Flechette Launcher"
- desc = "A flechette launching machine pistol with an unconventional bullpup frame."
- icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
- icon_state = "flechettegun"
- item_state = "gun"
- w_class = WEIGHT_CLASS_NORMAL
- slot_flags = 0
- /obj/item/firing_pin/implant/pindicate
- mag_type = /obj/item/ammo_box/magazine/flechette/
- fire_sound = 'sound/weapons/gunshot_smg.ogg'
- can_suppress = 0
- burst_size = 5
- fire_delay = 1
- casing_ejector = 0
- spread = 10
- recoil = 0.05
-
-/obj/item/gun/ballistic/automatic/flechette/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("flechettegun-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-///unique variant///
-
-/obj/item/projectile/bullet/cflechetteshredder
- name = "flechette (shredder)"
- damage = 5
- dismemberment = 40
-
-/obj/item/ammo_casing/caseless/flechetteshredder
- name = "flechette (shredder)"
- desc = "A serrated flechette made of a special alloy that forms a monofilament edge."
- projectile_type = /obj/item/projectile/bullet/cflechettes
-
-/obj/item/ammo_box/magazine/flechette/shredder
- name = "flechette magazine (shredder)"
- icon_state = "shreddermag"
- ammo_type = /obj/item/ammo_casing/caseless/flechetteshredder
-
-/obj/item/gun/ballistic/automatic/flechette/shredder
- name = "\improper CX Shredder"
- desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/flechette/shredder
- spread = 15
- recoil = 0.1
-
-/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("shreddergun-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm
index b3af722332..70d3bee5af 100644
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm
@@ -86,7 +86,7 @@
/obj/item/ammo_box/magazine/mmag/small
name = "magpistol magazine (non-lethal disabler)"
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
- icon_state = "nlmagmag"
+ icon_state = "smallmagmag"
ammo_type = /obj/item/ammo_casing/caseless/anlmags
caliber = "mags"
max_ammo = 15
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
index 8d08937f55..8786eb6dc9 100644
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
@@ -56,7 +56,7 @@
/obj/item/ammo_box/magazine/mmag_e/small
name = "magpistol magazine (non-lethal disabler)"
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
- icon_state = "nlmagmag"
+ icon_state = "smallmagmag"
ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags
caliber = "mag_e"
max_ammo = 16
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
index 3df77c4951..1e0e0afc87 100644
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
@@ -123,8 +123,8 @@
item_state = "gun"
w_class = WEIGHT_CLASS_NORMAL
slot_flags = 0
- /obj/item/firing_pin/implant/pindicate
- mag_type = /obj/item/ammo_box/magazine/flechette/
+ pin = /obj/item/firing_pin/implant/pindicate
+ mag_type = /obj/item/ammo_box/magazine/flechette
fire_sound = 'sound/weapons/gunshot_smg.ogg'
can_suppress = 0
burst_size = 5
@@ -134,12 +134,9 @@
recoil = 0.05
/obj/item/gun/ballistic/automatic/flechette/update_icon()
- ..()
+ cut_overlays()
if(magazine)
- cut_overlays()
add_overlay("flechettegun-magazine")
- else
- cut_overlays()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
///unique variant///
@@ -163,17 +160,13 @@
name = "\improper CX Shredder"
desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/flechette/shredder
spread = 15
recoil = 0.1
/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
- ..()
+ cut_overlays()
if(magazine)
- cut_overlays()
add_overlay("shreddergun-magazine")
- else
- cut_overlays()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
/*/////////////////////////////////////////////////////////////
diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi
index 5ff291f400..7e00c60caf 100644
Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ
diff --git a/modular_citadel/icons/obj/guns/cit_guns.dmi b/modular_citadel/icons/obj/guns/cit_guns.dmi
index cc04fbcb14..cec9b076aa 100644
Binary files a/modular_citadel/icons/obj/guns/cit_guns.dmi and b/modular_citadel/icons/obj/guns/cit_guns.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 41a9ec0fa5..1f086b2fae 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2996,7 +2996,6 @@
#include "modular_citadel\code\modules\mob\dead\new_player\sprite_accessories.dm"
#include "modular_citadel\code\modules\mob\living\damage_procs.dm"
#include "modular_citadel\code\modules\mob\living\living.dm"
-#include "modular_citadel\code\modules\mob\living\status_procs.dm"
#include "modular_citadel\code\modules\mob\living\carbon\carbon.dm"
#include "modular_citadel\code\modules\mob\living\carbon\damage_procs.dm"
#include "modular_citadel\code\modules\mob\living\carbon\life.dm"
@@ -3026,7 +3025,6 @@
#include "modular_citadel\code\modules\projectiles\bullets\bullets\smg.dm"
#include "modular_citadel\code\modules\projectiles\guns\pumpenergy.dm"
#include "modular_citadel\code\modules\projectiles\guns\toys.dm"
-#include "modular_citadel\code\modules\projectiles\guns\ballistic\flechette.dm"
#include "modular_citadel\code\modules\projectiles\guns\ballistic\handguns.dm"
#include "modular_citadel\code\modules\projectiles\guns\ballistic\magweapon.dm"
#include "modular_citadel\code\modules\projectiles\guns\ballistic\magweapon_energy.dm"
diff --git a/tgui/src/interfaces/chem_master.ract b/tgui/src/interfaces/chem_master.ract
index 40ccc2c859..83122de6f7 100644
--- a/tgui/src/interfaces/chem_master.ract
+++ b/tgui/src/interfaces/chem_master.ract
@@ -77,7 +77,7 @@
Dispense Buffer to Bottles
- Create Hypo Vial (max 30µ)
+ Create Hypo Vial (max 60µ)
Dispense Buffer to Hypo vials