diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index c9fe06d47c..2164dbe5dd 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -84,12 +84,10 @@
RestrainedClickOn(A)
return 1
- if(in_throw_mode)
- if(isturf(A) || isturf(A.loc))
- throw_item(A)
- trigger_aiming(TARGET_CAN_CLICK)
- return 1
+ if(in_throw_mode && (isturf(A) || isturf(A.loc)) && throw_item(A))
+ trigger_aiming(TARGET_CAN_CLICK)
throw_mode_off()
+ return TRUE
var/obj/item/W = get_active_hand()
@@ -286,7 +284,7 @@
if(T && user.TurfAdjacent(T))
user.ToggleTurfTab(T)
return 1
-
+
/mob/proc/ToggleTurfTab(var/turf/T)
if(listed_turf == T)
listed_turf = null
diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm
index 0fdad908c2..76b510807a 100644
--- a/code/datums/outfits/costumes/halloween.dm
+++ b/code/datums/outfits/costumes/halloween.dm
@@ -32,7 +32,7 @@
/decl/hierarchy/outfit/costume/horrorcop
name = OUTFIT_COSTUME("Slasher Movie Cop")
- uniform = /obj/item/clothing/under/pcrc{ starting_accessories=list(/obj/item/clothing/accessory/holster/hip) }
+ uniform = /obj/item/clothing/under/corp/pcrc{ starting_accessories=list(/obj/item/clothing/accessory/holster/hip) }
shoes = /obj/item/clothing/shoes/black
gloves = /obj/item/clothing/gloves/black
glasses = /obj/item/clothing/glasses/fakesunglasses
@@ -78,10 +78,9 @@
name = OUTFIT_COSTUME("Firefighter")
uniform = /obj/item/clothing/under/pants
shoes = /obj/item/clothing/shoes/boots/workboots
- head = /obj/item/clothing/head/hardhat/red
+ head = /obj/item/clothing/head/hardhat/firefighter
gloves = /obj/item/clothing/gloves/black
suit = /obj/item/clothing/suit/fire/firefighter
- mask = /obj/item/clothing/mask/gas
/decl/hierarchy/outfit/costume/highlander
name = OUTFIT_COSTUME("Highlander")
diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm
index c9a43077b5..7facd60d5e 100644
--- a/code/datums/outfits/misc.dm
+++ b/code/datums/outfits/misc.dm
@@ -21,7 +21,7 @@
name = "Soviet soldier"
uniform = /obj/item/clothing/under/soviet
shoes = /obj/item/clothing/shoes/boots/combat
- head = /obj/item/clothing/head/ushanka
+ head = /obj/item/clothing/head/ushanka/soviet
gloves = /obj/item/clothing/gloves/combat
back = /obj/item/weapon/storage/backpack/satchel
belt = /obj/item/weapon/gun/projectile/revolver/mateba
diff --git a/code/datums/supplypacks/costumes.dm b/code/datums/supplypacks/costumes.dm
index 4af40491d3..1cf5292f9f 100644
--- a/code/datums/supplypacks/costumes.dm
+++ b/code/datums/supplypacks/costumes.dm
@@ -62,8 +62,8 @@
/obj/item/clothing/suit/nun,
/obj/item/clothing/suit/imperium_monk,
/obj/item/clothing/suit/ianshirt,
- /obj/item/clothing/under/gimmick/rank/captain/suit,
- /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
+ /obj/item/clothing/under/suit_jacket/green,
+ /obj/item/clothing/under/suit_jacket/teal,
/obj/item/clothing/under/lawyer/purpsuit,
/obj/item/clothing/under/rank/mailman,
/obj/item/clothing/under/dress/dress_saloon,
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 50e6b04923..7ff6f5971b 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -55,6 +55,9 @@
var/denied_sound = 'sound/machines/deniedbeep.ogg'
var/bolt_up_sound = 'sound/machines/door/boltsup.ogg'
var/bolt_down_sound = 'sound/machines/door/boltsdown.ogg'
+ var/knock_sound = 'sound/machines/2beeplow.ogg'
+ var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg'
+ var/knock_unpowered_sound = 'sound/machines/door/knock_glass.ogg'
/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage)
if(stat & (BROKEN|NOPOWER))
@@ -975,6 +978,28 @@ About the new airlock wires panel:
..(user)
return
+/obj/machinery/door/airlock/AltClick(mob/user as mob)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ if(!Adjacent(user))
+ return
+ else if(user.a_intent == I_HURT)
+ src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!")
+ src.add_fingerprint(user)
+ if(icon_state == "door_closed" && arePowerSystemsOn())
+ flick("door_deny", src)
+ playsound(src, knock_hammer_sound, 50, 0, 3)
+ else if(arePowerSystemsOn())
+ src.visible_message("[user] presses the door bell on \the [src].", "\The [src]'s bell rings.")
+ src.add_fingerprint(user)
+ if(icon_state == "door_closed")
+ flick("door_deny", src)
+ playsound(src, knock_sound, 50, 0, 3)
+ else
+ src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].")
+ src.add_fingerprint(user)
+ playsound(src, knock_unpowered_sound, 50, 0, 3)
+ return
+
/obj/machinery/door/airlock/tgui_act(action, params)
if(..())
return TRUE
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 01175eb3b0..c83fb398b2 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -212,6 +212,9 @@
for(var/path in starting_equipment)
var/obj/item/mecha_parts/mecha_equipment/ME = new path(src)
ME.attach(src)
+
+ START_PROCESSING(SSobj, src)
+
update_transform()
/obj/mecha/drain_power(var/drain_check)
@@ -328,6 +331,8 @@
QDEL_NULL(spark_system)
QDEL_NULL(minihud)
+ STOP_PROCESSING(SSobj, src)
+
mechas_list -= src //global mech list
. = ..()
@@ -917,27 +922,19 @@
if(istype(obstacle, /mob))//First we check if it is a mob. Mechs mostly shouln't go through them, even while phasing.
var/mob/M = obstacle
M.Move(get_step(obstacle,src.dir))
+ else if(phasing && get_charge()>=phasing_energy_drain)//Phazon check. This could use an improvement elsewhere.
+ src.use_power(phasing_energy_drain)
+ phase()
+ . = ..(obstacle)
+ return
else if(istype(obstacle, /obj))//Then we check for regular obstacles.
var/obj/O = obstacle
-
- if(phasing && get_charge()>=phasing_energy_drain)//Phazon check. This could use an improvement elsewhere.
- spawn()
- if(can_phase)
- can_phase = FALSE
- flick("[initial_icon]-phase", src)
- src.loc = get_step(src,src.dir)
- src.use_power(phasing_energy_drain)
- sleep(get_step_delay() * 3)
- can_phase = TRUE
- occupant_message("Phazed.")
- . = ..(obstacle)
- return
if(istype(O, /obj/effect/portal)) //derpfix
- src.anchored = FALSE //I have no idea what this really fix.
+ src.anchored = 0 // Portals can only move unanchored objects.
O.Crossed(src)
spawn(0)//countering portal teleport spawn(0), hurr
- src.anchored = TRUE
- else if(O.anchored)
+ src.anchored = 1
+ if(O.anchored)
obstacle.Bumped(src)
else
step(obstacle,src.dir)
@@ -946,6 +943,18 @@
. = ..(obstacle)
return
+/obj/mecha/proc/phase() // Force the mecha to move forward by phasing.
+ set waitfor = FALSE
+ if(can_phase)
+ can_phase = FALSE
+ flick("[initial_icon]-phase", src)
+ forceMove(get_step(src,src.dir))
+ sleep(get_step_delay() * 3)
+ can_phase = TRUE
+ occupant_message("Phazed.")
+ return TRUE // In the event this is sequenced
+ return FALSE
+
///////////////////////////////////
//////// Internal damage ////////
///////////////////////////////////
@@ -1704,8 +1713,7 @@
return
/obj/mecha/remove_air(amount)
- var/obj/item/mecha_parts/component/gas/GC = internal_components[MECH_GAS]
- if(use_internal_tank && (GC && prob(GC.get_efficiency() * 100)))
+ if(use_internal_tank)
return cabin_air.remove(amount)
else
var/turf/T = get_turf(src)
@@ -1714,7 +1722,8 @@
return
/obj/mecha/return_air()
- if(use_internal_tank)
+ var/obj/item/mecha_parts/component/gas/GC = internal_components[MECH_GAS]
+ if(use_internal_tank && (GC && prob(GC.get_efficiency() * 100)))
return cabin_air
return get_turf_air()
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index ce1535601f..51ee1430f5 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -161,14 +161,14 @@
qdel(src)
/obj/effect/landmark/costume/madscientist/New()
- new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
+ new /obj/item/clothing/under/suit_jacket/green(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
delete_me = 1
/obj/effect/landmark/costume/elpresidente/New()
- new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
+ new /obj/item/clothing/under/suit_jacket/green(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/boots/jackboots(src.loc)
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 82550df2ae..7643191642 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -37,6 +37,19 @@
sprite_name = "miniFE"
rand_overlays = 0
+/obj/item/weapon/extinguisher/atmo
+ name = "atmospheric fire extinguisher"
+ desc = "A heavy duty fire extinguisher meant to fight large fires."
+ icon_state = "atmos_extinguisher0"
+ item_state = "atmos_extinguisher"
+ throwforce = 12
+ w_class = ITEMSIZE_LARGE
+ force = 3.0
+ max_water = 600
+ spray_particles = 3
+ sprite_name = "atmo_extinguisher"
+ rand_overlays = 0
+
/obj/item/weapon/extinguisher/Initialize()
create_reagents(max_water)
reagents.add_reagent("firefoam", max_water)
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index 5a8fe7448d..325e9f518a 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -73,6 +73,7 @@
/mob/living/carbon/human/set_id_info(var/obj/item/weapon/card/id/id_card)
..()
id_card.age = age
+ id_card.sex = capitalize(name_gender())
/obj/item/weapon/card/id/tgui_data(mob/user)
var/list/data = list()
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 54413bb6e0..e3fbab67e0 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -8,7 +8,7 @@
w_class = ITEMSIZE_NORMAL
origin_tech = list(TECH_COMBAT = 4)
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
-
+ hitsound = 'sound/weapons/whip.ogg'
reach = 2
/obj/item/weapon/melee/chainofcommand/suicide_act(mob/user)
@@ -16,6 +16,20 @@
user.visible_message(span("danger", "\The [user] [T.is] strangling [T.himself] with \the [src]! It looks like [T.he] [T.is] trying to commit suicide."), span("danger", "You start to strangle yourself with \the [src]!"), span("danger", "You hear the sound of someone choking!"))
return (OXYLOSS)
+/obj/item/weapon/melee/chainofcommand/curator_whip
+ name = "leather whip"
+ desc = "A fine weapon for some treasure hunting."
+ icon_state = "curator_whip"
+ force = 5
+ throwforce = 5
+ origin_tech = list(TECH_COMBAT = 2)
+
+/obj/item/weapon/melee/chainofcommand/curator_whip/toy
+ name = "toy whip"
+ desc = "A fake whip. Perfect for fake treasure hunting"
+ force = 2
+ throwforce = 2
+
/obj/item/weapon/melee/umbrella
name = "umbrella"
desc = "To keep the rain off you. Use with caution on windy days."
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 9489c83057..f5e5d02907 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -372,10 +372,28 @@
max_w_class = ITEMSIZE_NORMAL
max_storage_space = ITEMSIZE_COST_NORMAL * 7
+/obj/item/weapon/storage/belt/bandolier
+ name = "shotgun bandolier"
+ desc = "Designed to hold shotgun shells. Can't really hold more than that."
+ icon_state = "bandolier1"
+ storage_slots = 8
+ max_w_class = ITEMSIZE_TINY
+ can_hold = list(
+ /obj/item/ammo_casing/a12g,
+ /obj/item/ammo_casing/a12g/pellet,
+ /obj/item/ammo_casing/a12g/blank,
+ /obj/item/ammo_casing/a12g/practice,
+ /obj/item/ammo_casing/a12g/beanbag,
+ /obj/item/ammo_casing/a12g/stunshell,
+ /obj/item/ammo_casing/a12g/flash,
+ /obj/item/ammo_casing/a12g/emp,
+ /obj/item/ammo_casing/a12g/flechette
+ )
+
/obj/item/weapon/storage/belt/security/tactical/bandolier
- name = "combat belt"
+ name = "combat bandolier"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
- icon_state = "bandolier"
+ icon_state = "bandolier2"
/obj/item/weapon/storage/belt/janitor
name = "janitorial belt"
diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
index 0db94e5aaf..04a46fb124 100644
--- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
+++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
@@ -51,7 +51,7 @@
open_icon.Blend(icon(base_icon, "open"), ICON_OVERLAY)
open_icon.Blend(color, BLEND_ADD)
open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY)
-
+
door_back_icon = icon(base_icon, "door_back")
door_back_icon.Blend(color, BLEND_ADD)
@@ -74,7 +74,7 @@
this_decal_icon.Blend(decals[thing], BLEND_ADD)
closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY)
door_front_icon.Blend(this_decal_icon, ICON_OVERLAY)
-
+
door_front_icon.AddAlphaMask(icon(base_icon, "door_front")) // Remove pesky 'more than just door' decals
closed_locked_icon = icon(closed_emagged_icon)
@@ -622,6 +622,13 @@
"vertical_stripe_simple" = COLOR_OFF_WHITE,
)
+/decl/closet_appearance/oxygen/fire/atmos
+ color = COLOR_YELLOW_GRAY
+ extra_decals = list(
+ "extinguisher" = COLOR_TEAL,
+ "vertical_stripe_simple" = COLOR_TEAL,
+ )
+
/decl/closet_appearance/alien
color = COLOR_PURPLE
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 5e0944ed41..dedfceecad 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -41,7 +41,6 @@
/obj/item/device/radio/headset/headset_qm/alt, //VOREStation Edit,
/obj/item/clothing/gloves/black,
/obj/item/clothing/gloves/fingerless,
- /obj/item/clothing/suit/fire/firefighter,
/obj/item/weapon/tank/emergency/oxygen,
/obj/item/clothing/mask/gas,
/obj/item/clothing/glasses/meson,
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 674a2e04b8..9e2aa36cb4 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -83,6 +83,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
/obj/item/clothing/shoes/boots/winter/engineering,
/obj/item/weapon/tank/emergency/oxygen/engi,
+ /obj/item/weapon/storage/belt/utility, //VOREStation Add
/obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add
/obj/structure/closet/secure_closet/engineering_personal/Initialize()
@@ -102,10 +103,10 @@
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
- /obj/item/clothing/suit/fire/firefighter,
- /obj/item/clothing/head/hardhat/red,
+ /obj/item/clothing/suit/fire/heavy,
+ /obj/item/clothing/head/hardhat/firefighter/atmos,
/obj/item/device/flashlight,
- /obj/item/weapon/extinguisher,
+ /obj/item/weapon/extinguisher/atmo,
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
/obj/item/device/radio/headset/headset_eng,
/obj/item/device/radio/headset/headset_eng/alt,
@@ -115,7 +116,8 @@
/obj/item/taperoll/atmos,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos,
/obj/item/clothing/shoes/boots/winter/atmos,
- /obj/item/weapon/tank/emergency/oxygen/engi) //removed RPD from lockers. Now starts on desk in map. YW edit
+ /obj/item/weapon/tank/emergency/oxygen/engi,
+ /obj/item/weapon/storage/belt/utility) //VOREStation Add
/obj/structure/closet/secure_closet/atmos_personal/Initialize()
if(prob(50))
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 fd0c1c474f..062913f692 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -43,7 +43,8 @@
/obj/item/clothing/shoes/boots/winter/medical,
/obj/item/clothing/under/rank/nursesuit,
/obj/item/clothing/head/nursehat,
- /obj/item/weapon/storage/box/freezer = 3)
+ /obj/item/weapon/storage/box/freezer = 3,
+ /obj/item/weapon/storage/belt/medical) //VOREStation Add
/obj/structure/closet/secure_closet/medical3/Initialize()
if(prob(50))
@@ -146,7 +147,8 @@
/obj/item/clothing/suit/bio_suit/cmo,
/obj/item/clothing/head/bio_hood/cmo,
/obj/item/clothing/shoes/white,
- /obj/item/weapon/reagent_containers/glass/beaker/vial) //VOREStation Add
+ /obj/item/weapon/reagent_containers/glass/beaker/vial, //VOREStation Add
+ /obj/item/weapon/storage/belt/medical) //VOREStation Add
/obj/structure/closet/secure_closet/CMO/Initialize()
if(prob(50))
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 424fb792ff..8a8becaff9 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -58,8 +58,8 @@
/obj/item/clothing/shoes/white,
/obj/item/clothing/under/rank/head_of_personnel_whimsy,
/obj/item/clothing/head/caphat/hop,
- /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
- /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt,
+ /obj/item/clothing/under/suit_jacket/teal,
+ /obj/item/clothing/under/suit_jacket/teal/skirt,
/obj/item/clothing/glasses/sunglasses,
/obj/item/clothing/suit/storage/hooded/wintercoat/hop)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 07c5276a6f..61a8fe6afd 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -65,7 +65,7 @@
closet_appearance = /decl/closet_appearance/oxygen/fire
starts_with = list(
- /obj/item/clothing/suit/fire/firefighter,
+ /obj/item/clothing/suit/fire,
/obj/item/clothing/mask/gas,
/obj/item/weapon/tank/oxygen/red,
/obj/item/weapon/extinguisher,
@@ -73,7 +73,7 @@
/obj/structure/closet/firecloset/full
starts_with = list(
- /obj/item/clothing/suit/fire/firefighter,
+ /obj/item/clothing/suit/fire,
/obj/item/clothing/mask/gas,
/obj/item/device/flashlight,
/obj/item/weapon/tank/oxygen/red,
@@ -82,13 +82,24 @@
/obj/structure/closet/firecloset/full/double
starts_with = list(
- /obj/item/clothing/suit/fire/firefighter = 2,
+ /obj/item/clothing/suit/fire = 2,
/obj/item/clothing/mask/gas = 2,
/obj/item/device/flashlight = 2,
/obj/item/weapon/tank/oxygen/red = 2,
/obj/item/weapon/extinguisher = 2,
/obj/item/clothing/head/hardhat/red = 2)
+/obj/structure/closet/firecloset/full/atmos
+ name = "atmos fire-safety closet"
+ desc = "It's a storage unit for atmospheric fire-fighting supplies."
+ closet_appearance = /decl/closet_appearance/oxygen/fire/atmos
+
+ starts_with = list(
+ /obj/item/clothing/suit/fire/heavy,
+ /obj/item/weapon/tank/oxygen/red,
+ /obj/item/weapon/extinguisher/atmo,
+ /obj/item/clothing/head/hardhat/firefighter/atmos)
+
/*
* Tool Closet
*/
diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
index 561f15369d..4be5c9c2fa 100644
--- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm
+++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
@@ -131,7 +131,7 @@
/obj/structure/closet/walllocker_double/kitchen/east
pixel_x = 32
dir = EAST
-
+
/obj/structure/closet/walllocker_double/medical
name = "Medical Cabinet"
desc = "A wall mounted medical supply cabinet. Probably full of drugs!" //not actually full of drugs, sorry!
@@ -152,7 +152,7 @@
/obj/structure/closet/walllocker_double/medical/east
pixel_x = 32
dir = EAST
-
+
/obj/structure/closet/walllocker_double/hydrant
name = "fire-safety closet"
desc = "It's a storage cabinet packed with fire-fighting supplies."
@@ -161,7 +161,7 @@
density = FALSE
starts_with = list(
- /obj/item/clothing/suit/fire/firefighter,
+ /obj/item/clothing/suit/fire,
/obj/item/clothing/mask/gas,
/obj/item/device/flashlight,
/obj/item/weapon/tank/oxygen/red,
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index a83c589a1b..7ba61d9dd4 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -474,7 +474,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/captain,
/obj/item/clothing/shoes/boots/winter/command,
/obj/item/clothing/head/beret/centcom/captain,
- /obj/item/clothing/under/gimmick/rank/captain/suit,
- /obj/item/clothing/under/gimmick/rank/captain/suit/skirt,
+ /obj/item/clothing/under/suit_jacket/green,
+ /obj/item/clothing/under/suit_jacket/green/skirt,
/obj/item/clothing/glasses/sunglasses,
/obj/item/clothing/head/caphat)
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index bbcd3e8840..a0c01e52cd 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -17,7 +17,7 @@
pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0
else
has_extinguisher = new/obj/item/weapon/extinguisher(src)
-
+
update_icon()
/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user)
@@ -80,9 +80,11 @@
if(has_extinguisher)
if(istype(has_extinguisher, /obj/item/weapon/extinguisher/mini))
suffix = "mini"
+ if(istype(has_extinguisher, /obj/item/weapon/extinguisher/atmo))
+ suffix = "advanced"
else
suffix = "standard"
-
+
icon_state = "[initial(icon_state)][opened ? "" : "_closed"]_[suffix]"
/obj/structure/extinguisher_cabinet/old
diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm
index e7799fcf8f..cfcf280020 100644
--- a/code/game/objects/structures/simple_doors.dm
+++ b/code/game/objects/structures/simple_doors.dm
@@ -12,6 +12,8 @@
var/isSwitchingStates = 0
var/hardness = 1
var/oreAmount = 7
+ var/knock_sound = 'sound/machines/door/knock_glass.ogg'
+ var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg'
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
TemperatureAct(exposed_temperature)
@@ -68,6 +70,20 @@
/obj/structure/simple_door/attack_hand(mob/user as mob)
return TryToSwitchState(user)
+/obj/structure/simple_door/AltClick(mob/user as mob)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ if(!Adjacent(user))
+ return
+ else if(user.a_intent == I_HURT)
+ src.visible_message("[user] hammers on \the [src]!", "Someone hammers loudly on \the [src]!")
+ src.add_fingerprint(user)
+ playsound(src, knock_hammer_sound, 50, 0, 3)
+ else
+ src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].")
+ src.add_fingerprint(user)
+ playsound(src, knock_sound, 50, 0, 3)
+ return
+
/obj/structure/simple_door/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /obj/effect/beam))
return !opacity
@@ -225,6 +241,7 @@
/obj/structure/simple_door/wood/Initialize(mapload,var/material_name)
..(mapload, material_name || MAT_WOOD)
+ knock_sound = 'sound/machines/door/knock_wood.wav'
/obj/structure/simple_door/sifwood/Initialize(mapload,var/material_name)
..(mapload, material_name || MAT_SIFWOOD)
diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm
index 4025094d37..be1f7619a3 100644
--- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm
@@ -204,6 +204,14 @@
sweaters[initial(sweater_type.name)] = sweater_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sweaters))
+/datum/gear/accessory/virginkiller
+ display_name = "virgin killer sweater (colorable)"
+ path = /obj/item/clothing/accessory/sweater/virgin
+
+/datum/gear/accessory/virginkiller/New()
+ ..()
+ gear_tweaks += gear_tweak_free_color_choice
+
/datum/gear/accessory/bracelet/material
display_name = "bracelet selection"
description = "Choose from a number of bracelets."
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index 911c92d578..6a45000a95 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -127,7 +127,7 @@
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/head/cap/mbill
- display_name = "cap, bill"
+ display_name = "cap, major bill's"
path = /obj/item/clothing/head/soft/mbill
/datum/gear/head/cap/sol
diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm
index 6e1a80d5ef..f3f191d27c 100644
--- a/code/modules/client/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm
@@ -35,9 +35,13 @@
path = /obj/item/clothing/suit/storage/toggle/bomber
/datum/gear/suit/bomber_alt
- display_name = "bomber jacket 2"
+ display_name = "bomber jacket, alt"
path = /obj/item/clothing/suit/storage/bomber/alt
+/datum/gear/suit/bomber_retro
+ display_name = "bomber jacket, retro"
+ path = /obj/item/clothing/suit/storage/toggle/bomber/retro
+
/datum/gear/suit/leather_jacket
display_name = "leather jacket, black"
path = /obj/item/clothing/suit/storage/toggle/leather_jacket
@@ -101,7 +105,7 @@
path = /obj/item/clothing/suit/storage/trench/grey
/datum/gear/suit/duster
- display_name = "cowboy duster"
+ display_name = "cowboy duster, colorable"
path = /obj/item/clothing/suit/storage/duster
/datum/gear/suit/duster/New()
@@ -533,14 +537,6 @@
display_name = "denim vest, corporate"
path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless
-/datum/gear/suit/miscellaneous/kimono
- display_name = "kimono"
- path = /obj/item/clothing/suit/kimono
-
-/datum/gear/suit/miscellaneous/kimono/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
/datum/gear/suit/miscellaneous/dep_jacket
display_name = "department jacket selection"
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
@@ -569,17 +565,13 @@
gear_tweaks += new/datum/gear_tweak/path(jacket)
/datum/gear/suit/miscellaneous/peacoat
- display_name = "peacoat"
+ display_name = "peacoat, colorable"
path = /obj/item/clothing/suit/storage/toggle/peacoat
/datum/gear/suit/miscellaneous/peacoat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
-/datum/gear/suit/miscellaneous/kamishimo
- display_name = "kamishimo"
- path = /obj/item/clothing/suit/kamishimo
-
/datum/gear/suit/snowsuit
display_name = "snowsuit"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit
@@ -615,7 +607,7 @@
allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel")
/datum/gear/suit/miscellaneous/cardigan
- display_name = "cardigan"
+ display_name = "cardigan, colorable"
path = /obj/item/clothing/suit/storage/toggle/cardigan
/datum/gear/suit/miscellaneous/cardigan/New()
@@ -626,3 +618,38 @@
display_name = "command dress jacket"
path = /obj/item/clothing/suit/storage/cmddressjacket
allowed_roles = list("Site Manager", "Head of Personnel", "Command Secretary")
+
+/datum/gear/suit/miscellaneous/kimono
+ display_name = "traditional kimono, colorable"
+ path = /obj/item/clothing/suit/kimono
+
+/datum/gear/suit/miscellaneous/kimono/New()
+ ..()
+ gear_tweaks += gear_tweak_free_color_choice
+
+/datum/gear/suit/miscellaneous/kamishimo
+ display_name = "traditional kamishimo, colorable"
+ path = /obj/item/clothing/suit/kamishimo
+
+/datum/gear/suit/miscellaneous/kamishimo/New()
+ ..()
+ gear_tweaks += gear_tweak_free_color_choice
+
+/datum/gear/suit/miscellaneous/kimono
+ display_name = "kimono selection"
+ path = /obj/item/clothing/suit/kimono/red
+
+/datum/gear/suit/miscellaneous/kimono/New()
+ ..()
+ var/list/kimonos = list(
+ "Red kimono" = /obj/item/clothing/suit/kimono/red,
+ "Orange kimono" = /obj/item/clothing/suit/kimono/orange,
+ "Yellow kimono" = /obj/item/clothing/suit/kimono/yellow,
+ "Green kimono" = /obj/item/clothing/suit/kimono/green,
+ "Blue kimono" = /obj/item/clothing/suit/kimono/blue,
+ "Purple kimono" = /obj/item/clothing/suit/kimono/purple,
+ "Violet kimono" = /obj/item/clothing/suit/kimono/violet,
+ "Pink kimono" = /obj/item/clothing/suit/kimono/pink,
+ "Earth kimono" = /obj/item/clothing/suit/kimono/earth
+ )
+ gear_tweaks += new/datum/gear_tweak/path(kimonos)
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
index b9dd7c5643..8672ea50cc 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
@@ -425,39 +425,10 @@
display_name = "sweater, grey"
path = /obj/item/clothing/under/rank/psych/turtleneck/sweater
-/datum/gear/uniform/brandsuit/aether
- display_name = "jumpsuit, aether"
- path = /obj/item/clothing/under/aether
-
-/datum/gear/uniform/brandsuit/focal
- display_name = "jumpsuit, focal"
- path = /obj/item/clothing/under/focal
-
-/datum/gear/uniform/mbill
- display_name = "outfit, major bill's"
- path = /obj/item/clothing/under/mbill
-
-/datum/gear/uniform/pcrc
- display_name = "uniform, PCRC (Security)"
- path = /obj/item/clothing/under/pcrc
- allowed_roles = list("Security Officer","Head of Security","Warden","Blueshield Guard","Security Pilot") //YW ADDITIONS
-
-/datum/gear/uniform/brandsuit/grayson
- display_name = "outfit, grayson"
- path = /obj/item/clothing/under/grayson
-
-/datum/gear/uniform/brandsuit/wardt
- display_name = "jumpsuit, ward-takahashi"
- path = /obj/item/clothing/under/wardt
-
/datum/gear/uniform/frontier
display_name = "outfit, frontier"
path = /obj/item/clothing/under/frontier
-/datum/gear/uniform/brandsuit/hephaestus
- display_name = "jumpsuit, hephaestus"
- path = /obj/item/clothing/under/hephaestus
-
/datum/gear/uniform/yogapants
display_name = "yoga pants"
path = /obj/item/clothing/under/pants/yogapants
@@ -668,7 +639,7 @@
/datum/gear/uniform/verglasdress
display_name = "verglas dress"
- path = /obj/item/clothing/under/verglasdress
+ path = /obj/item/clothing/under/dress/verglasdress
/datum/gear/uniform/fashionminiskirt
display_name = "fashionable miniskirt"
@@ -718,4 +689,84 @@
"Brown Cowboy Outfit" = /obj/item/clothing/under/cowboy/brown,
"Grey Cowboy Outfit" = /obj/item/clothing/under/cowboy/grey
)
- gear_tweaks += new/datum/gear_tweak/path(cowboy_outfits)
\ No newline at end of file
+ gear_tweaks += new/datum/gear_tweak/path(cowboy_outfits)
+
+/datum/gear/uniform/utility/gsa
+ display_name = "utility, galactic survey"
+ path = /obj/item/clothing/under/gsa
+
+/datum/gear/uniform/utility/gsa_work
+ display_name = "heavy utility, galactic survey"
+ path = /obj/item/clothing/under/gsa_work
+
+/*
+ * Branded Uniforms
+ */
+
+/datum/gear/uniform/brandsuit/mbill
+ display_name = "uniform, major bill's"
+ path = /obj/item/clothing/under/mbill
+
+/datum/gear/uniform/brandsuit/mbill_flight
+ display_name = "uniform, major bill's flightsuit (Pilot)"
+ path = /obj/item/clothing/under/mbill_flight
+ allowed_roles = list("Pilot")
+
+/datum/gear/uniform/brandsuit/aether
+ display_name = "jumpsuit, aether"
+ path = /obj/item/clothing/under/corp/aether
+
+/datum/gear/uniform/brandsuit/focal
+ display_name = "jumpsuit, focal"
+ path = /obj/item/clothing/under/corp/focal
+
+/datum/gear/uniform/brandsuit/pcrc
+ display_name = "uniform, PCRC (Security)"
+ path = /obj/item/clothing/under/corp/pcrc
+ allowed_roles = list("Security Officer","Head of Security","Warden")
+
+/datum/gear/uniform/brandsuit/grayson
+ display_name = "outfit, grayson"
+ path = /obj/item/clothing/under/corp/grayson
+
+/datum/gear/uniform/brandsuit/grayson_jump
+ display_name = "jumpsuit, grayson"
+ path = /obj/item/clothing/under/corp/grayson_jump
+
+/datum/gear/uniform/brandsuit/wardt
+ display_name = "jumpsuit, ward-takahashi"
+ path = /obj/item/clothing/under/corp/wardt
+
+/datum/gear/uniform/brandsuit/hephaestus
+ display_name = "jumpsuit, hephaestus"
+ path = /obj/item/clothing/under/corp/hephaestus
+
+/datum/gear/uniform/brandsuit/centauri
+ display_name = "jumpsuit, centauri provisions"
+ path = /obj/item/clothing/under/corp/centauri
+
+/datum/gear/uniform/brandsuit/morpheus
+ display_name = "jumpsuit, morpheus"
+ path = /obj/item/clothing/under/corp/morpheus
+
+/datum/gear/uniform/brandsuit/wulf
+ display_name = "jumpsuit, wulf"
+ path = /obj/item/clothing/under/corp/wulf
+
+/datum/gear/uniform/brandsuit/zenghu
+ display_name = "jumpsuit, zeng-hu"
+ path = /obj/item/clothing/under/corp/zenghu
+
+/datum/gear/uniform/brandsuit/xion
+ display_name = "jumpsuit, xion"
+ path = /obj/item/clothing/under/corp/xion
+
+/datum/gear/uniform/brandsuit/vedmed
+ display_name = "jumpsuit, vey-med (Medical)"
+ path = /obj/item/clothing/under/corp/veymed
+ allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
+
+/datum/gear/uniform/brandsuit/kaleidoscope
+ display_name = "outfit, kaleidoscope (Science)"
+ path = /obj/item/clothing/under/corp/kaleidoscope
+ allowed_roles = list("Research Director","Scientist","Xenobiologist")
\ No newline at end of file
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 1d7bcee6b2..8d7ec44f54 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -36,8 +36,8 @@
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
- desc = "These tactical gloves are somewhat fire and impact resistant in addition to being shock absorbant." //Clarified its description compared to swat gloves
- name = "Combat gloves"
+ desc = "These tactical gloves are somewhat fire and impact resistant."
+ name = "combat gloves"
icon_state = "swat"
item_state = "swat"
siemens_coefficient = 0
@@ -167,3 +167,10 @@
/obj/item/clothing/gloves/ranger/yellow
glovecolor = "yellow"
+
+/obj/item/clothing/gloves/waterwings
+ name = "water wings"
+ desc = "Swim aids designed to help a wearer float in water and learn to swim."
+ icon_state = "waterwings"
+
+
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 47a5b89f1a..86ce792d4c 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -1,3 +1,14 @@
+/*
+ * Contains:
+ * Hard Hats
+ * Firefighter Hats
+ * Ranger Hats
+ */
+
+/*
+ * Hard Hats
+ */
+
/obj/item/clothing/head/hardhat
name = "hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
@@ -18,27 +29,61 @@
icon_state = "hardhat0_orange"
name = "orange hard hat"
-/obj/item/clothing/head/hardhat/red
- icon_state = "hardhat0_red"
- name = "firefighter helmet"
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
- min_pressure_protection = 0.2* ONE_ATMOSPHERE
- max_pressure_protection = 20 * ONE_ATMOSPHERE
-
-
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
name = "sleek hard hat"
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
- min_pressure_protection = 0.2* ONE_ATMOSPHERE
- max_pressure_protection = 20 * ONE_ATMOSPHERE
/obj/item/clothing/head/hardhat/dblue
name = "blue hard hat"
icon_state = "hardhat0_dblue"
+/*
+ * Firefighter Hats
+ */
+
+/obj/item/clothing/head/hardhat/red
+ icon_state = "hardhat0_red"
+ name = "emergency fire helmet"
+ heat_protection = HEAD
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ min_pressure_protection = 0.2* ONE_ATMOSPHERE
+ max_pressure_protection = 20 * ONE_ATMOSPHERE
+
+/obj/item/clothing/head/hardhat/firefighter
+ name = "firefighter helmet"
+ desc = "A helmet with face mask specially designed for firefighting. It's airtight and has a port for internals."
+ icon_state = "helmet_firefighter"
+ item_flags = THICKMATERIAL | AIRTIGHT
+ permeability_coefficient = 0
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE+5000
+ min_pressure_protection = 0.5 * ONE_ATMOSPHERE
+ max_pressure_protection = 20 * ONE_ATMOSPHERE
+ body_parts_covered = HEAD|FACE|EYES
+ cold_protection = HEAD
+ min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
+ flash_protection = FLASH_PROTECTION_MODERATE
+ sprite_sheets = list(
+ SPECIES_TAJARAN = 'icons/inventory/head/mob_tajaran.dmi',
+ SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi'
+ )
+
+/obj/item/clothing/head/hardhat/firefighter/atmos
+ name = "atmospheric firefighter helmet"
+ desc = "An atmospheric firefighter's helmet, includes a face mask specially designed for firefighting. It's airtight and has a port for internals."
+ icon_state = "atmos_fire"
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + 10000
+
+/obj/item/clothing/head/hardhat/firefighter/chief
+ name = "chief firefighter helmet"
+ desc = "A helmet with face mask specially designed for firefighting. This one is in the colors of the Chief Engineer. It's airtight and has a port for internals."
+ icon_state = "helmet_firefighter_ce"
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + 10000
+
+/*
+ * Ranger Hats
+ */
+
/obj/item/clothing/head/hardhat/ranger
var/hatcolor = "white"
name = "ranger helmet"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 1d3759fae9..724b77a9af 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -6,8 +6,8 @@
* Pumpkin head
* Kitty ears
* Holiday hats
- Crown of Wrath
- Warning cone
+ * Crown of Wrath
+ * Warning cone
*/
/*
@@ -146,7 +146,7 @@
*/
/obj/item/clothing/head/ushanka
name = "ushanka"
- desc = "Perfect for winter in Siberia, da?"
+ desc = "Perfect for those cold winter nights."
icon_state = "ushankadown"
flags_inv = HIDEEARS
@@ -158,6 +158,19 @@
src.icon_state = initial(icon_state)
to_chat(user, "You lower the ear flaps on the ushanka.")
+/obj/item/clothing/head/ushanka/black
+ icon_state = "blkushankadown"
+
+/obj/item/clothing/head/ushanka/soviet
+ name = "soviet ushanka"
+ desc = "Perfect for winter in Siberia, da?"
+ icon_state = "sovushankadown"
+
+/obj/item/clothing/head/ushanka/hedberg
+ name = "\improper Hedberg-Hammarstrom fur hat"
+ desc = "An Hedberg-Hammarstrom private security ushanka."
+ icon_state = "hedbergushankadown"
+
/*
* Pumpkin head
*/
diff --git a/code/modules/clothing/head/pilot_helmet_vr.dm b/code/modules/clothing/head/pilot_helmet_vr.dm
index de4d52b622..ab4b2335c8 100644
--- a/code/modules/clothing/head/pilot_helmet_vr.dm
+++ b/code/modules/clothing/head/pilot_helmet_vr.dm
@@ -57,7 +57,7 @@
)
action_button_name = "Toggle Visor"
-/obj/item/clothing/head/pilot_vr/alt/attack_self(mob/user as mob)
+/obj/item/clothing/head/pilot_vr/talon/attack_self(mob/user as mob)
if(src.icon_state == initial(icon_state))
src.icon_state = "[icon_state]up"
to_chat(user, "You raise the visor on the pilot helmet.")
@@ -65,3 +65,25 @@
src.icon_state = initial(icon_state)
to_chat(user, "You lower the visor on the pilot helmet.")
update_clothing_icon() //so our mob-overlays update
+
+//////////Major Bill's Pilot Headgear//////////
+
+/obj/item/clothing/head/pilot_vr/mbill
+ name = "\improper Major Bill's pilot helmet"
+ desc = "An Major Bill's Transportation version of the standard pilot helmet. Protects the head from impacts. This one has a retractable visor"
+ icon_state = "pilot3"
+ item_icons = list(slot_head_str = 'icons/inventory/head/mob_vr.dmi')
+ catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
+ sprite_sheets = list(
+ SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi'
+ )
+ action_button_name = "Toggle Visor"
+
+/obj/item/clothing/head/pilot_vr/mbill/attack_self(mob/user as mob)
+ if(src.icon_state == initial(icon_state))
+ src.icon_state = "[icon_state]up"
+ to_chat(user, "You raise the visor on the pilot helmet.")
+ else
+ src.icon_state = initial(icon_state)
+ to_chat(user, "You lower the visor on the pilot helmet.")
+ update_clothing_icon() //so our mob-overlays update
\ No newline at end of file
diff --git a/code/modules/clothing/head/solgov.dm b/code/modules/clothing/head/solgov.dm
index 5b7bce5c82..75c14f76ec 100644
--- a/code/modules/clothing/head/solgov.dm
+++ b/code/modules/clothing/head/solgov.dm
@@ -1,6 +1,20 @@
-//SolGov uniform hats
+/*
+ * SolGov Uniform Hats
+ * Contents:
+ * Utility
+ * Service
+ * Dress
+ * Government Departments (Berets)
+ * SifGuard (Berets)
+ * Fleet (Berets)
+ * Ushanka
+ * Almachi
+ * Unused Baylore Stuff
+ */
-//Utility
+/*
+ * Utility
+ */
/obj/item/clothing/head/soft/solgov
name = "\improper SolGov cap"
desc = "It's a blue ballcap in Solar Confederate Government colors."
@@ -72,8 +86,9 @@
desc = "A grey utility cover bearing the crest of the SCG Marines."
icon_state = "greyutility"
-//Service
-
+/*
+ * Service
+ */
/obj/item/clothing/head/service
name = "service cover"
desc = "A service uniform cover."
@@ -130,8 +145,9 @@
desc = "A green campaign cover with an SCG Marine crest. Typically found on the heads of Drill Sergeants."
icon_state = "greendrill"
-//Dress
-
+/*
+ * Dress
+ */
/obj/item/clothing/head/dress
name = "dress cover"
desc = "A dress uniform cover."
@@ -168,10 +184,9 @@
desc = "A white dress uniform cover with an SCG Marine crest and gold stripe."
icon_state = "whitewheelcap_com"
-//Berets
-
-//Government Departments
-
+/*
+ * Government Departments (Berets)
+ */
/obj/item/clothing/head/beret/solgov
name = "\improper SCG beret"
desc = "A beret in basic Solar Confederate Government colors. For peacekeepers that are more inclined towards style than safety."
@@ -251,8 +266,9 @@
icon_state = "beret_greensilver"
//YW END
-//SifGuard
-
+/*
+ * SifGuard (Berets)
+ */
/obj/item/clothing/head/beret/solgov/sifguard
name = "\improper SifGuard beret"
desc = "A black beret belonging to the Sif Defense Force. For personnel that are more inclined towards style than safety."
@@ -300,7 +316,9 @@
icon_state = "beret_black_fieldOps"
//YW END
-//Fleet
+/*
+ * Fleet (Berets)
+ */
/obj/item/clothing/head/beret/solgov/fleet
name = "fleet beret"
@@ -352,7 +370,7 @@
desc = "A white SCG Fleet beret with a golden crest. For personnel that are more inclined towards style than safety."
icon_state = "beret_whiterim_com"
-//YW UNDO COMMENT OUT
+//YW START
/obj/item/clothing/head/beret/solgov/fleet/branch
name = "first fleet beret"
@@ -379,10 +397,11 @@
desc = "An SCG Fleet beret carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech. For personnel that are more inclined towards style than safety."
icon_state = "beret_navy_fifth"
-//YW UNDO COMMENT OUT
-
-//ushanka
+//YW END
+/*
+ * Ushanka
+ */
/obj/item/clothing/head/ushanka/solgov
name = "\improper SifGuard fur hat"
desc = "An Sif Defense Force synthfur-lined hat for operating in cold environments."
@@ -396,15 +415,16 @@
/obj/item/clothing/head/ushanka/solgov/marine
name = "marine fur hat"
desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
- icon_state = "barushankadown"
+ icon_state = "mar1ushankadown"
/obj/item/clothing/head/ushanka/solgov/marine/green
- name = "\improper Hedberg-Hammarstrom fur hat"
- desc = "An Hedberg-Hammarstrom private security synthfur-lined hat for operating in cold environments."
- icon_state = "arushankadown"
-
-//Almachi
+ name = "green marine fur hat"
+ desc = "An SCG Marine synthfur-lined hat for operating in cold environments."
+ icon_state = "mar2ushankadown"
+/*
+ * Almachi
+ */
/obj/item/clothing/head/almach
name = "\improper Almach Militia service cover"
desc = "A service uniform cover, occasionally worn by crew within the defunct Almach Militia."
@@ -420,3 +440,33 @@
desc = "A service uniform cover, occasionally worn by command crew within the defunct Almach Militia."
icon_state = "almachhat_comm"
item_state = "almachhat_comm"
+
+/*
+ * Unused Baylore Stuff
+ *
+/obj/item/clothing/head/beret/solgov/fleet/branch
+ name = "first fleet beret"
+ desc = "An SCG Fleet beret carrying insignia of First Fleet, the Sol Guard, stationed in Sol. For personnel that are more inclined towards style than safety."
+ icon_state = "beret_navy_first"
+
+/obj/item/clothing/head/beret/solgov/fleet/branch/second
+ name = "second fleet beret"
+ desc = "An SCG Fleet beret carrying insignia of Second Fleet, the Home Guard, tasked with defense of Sol territories. For personnel that are more inclined towards style than safety."
+ icon_state = "beret_navy_second"
+
+/obj/item/clothing/head/beret/solgov/fleet/branch/third
+ name = "third fleet beret"
+ desc = "An SCG Fleet beret carrying insignia of Third Fleet, the Border Guard, guarding borders of Sol territory against Vox and pirates. For personnel that are more inclined towards style than safety."
+ icon_state = "beret_navy_third"
+
+/obj/item/clothing/head/beret/solgov/fleet/branch/fourth
+ name = "fourth fleet beret"
+ desc = "An SCG Fleet beret carrying insignia of Fourth Fleet, stationed on Skrell border. For personnel that are more inclined towards style than safety."
+ icon_state = "beret_navy_fourth"
+
+/obj/item/clothing/head/beret/solgov/fleet/branch/fifth
+ name = "fifth fleet beret"
+ desc = "An SCG Fleet beret carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech. For personnel that are more inclined towards style than safety."
+ icon_state = "beret_navy_fifth"
+ *
+ */
\ No newline at end of file
diff --git a/code/modules/clothing/head/solgov_vr.dm b/code/modules/clothing/head/solgov_vr.dm
index 925782f9dc..1a540af194 100644
--- a/code/modules/clothing/head/solgov_vr.dm
+++ b/code/modules/clothing/head/solgov_vr.dm
@@ -1,6 +1,17 @@
-//SolGov uniform hats
+/*
+ * SolGov Uniform Hats
+ * Contents:
+ * Utility
+ * Service
+ * Dress
+ * Berets
+ * Ushanka
+ * Terran
+ */
-//Utility
+/*
+ * Utility
+ */
/obj/item/clothing/head/soft/solgov
name = "\improper SolGov cap" //YW EDIT: SolGov
desc = "It's a blue ballcap in Solar Central Government colors." //YW EDIT: SolGov
@@ -37,7 +48,9 @@
name = "urban utility cover"
desc = "A grey utility cover bearing the crest of the USDF Marines." //YW EDIT: TCG to USDF
-//Service
+/*
+ * Service
+ */
/obj/item/clothing/head/service/sifguard
name = "\improper NDF peaked cap"
desc = "A peaked black uniform cap belonging to the Nanotrasen Defense Force Corps."
@@ -74,7 +87,9 @@
name = "campaign cover"
desc = "A green campaign cover with an USDF Marine crest. Only found on the heads of Drill Sergeants." //YW EDIT: TCG to USDF
-//Dress
+/*
+ * Dress
+ */
/obj/item/clothing/head/dress/fleet/garrison
name = "fleet garrison cap"
desc = "A white dress uniform cap. The classic sailor's choice."
@@ -95,8 +110,9 @@
name = "marine officer's dress wheel cover"
desc = "A white dress uniform cover with an USDF Marine crest and gold stripe." //YW EDIT: TCG to USDF
-//Berets
-
+/*
+ * Berets
+ */
/obj/item/clothing/head/beret/solgov
name = "peacekeeper beret"
desc = "A beret in Solar Central Government colors. For peacekeepers that are more inclined towards style than safety." //YW EDIT: Terran Commonwealth to Solar Central Government
@@ -238,26 +254,29 @@
name = "fifth fleet beret"
desc = "An USDF Fleet beret carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech. For personnel that are more inclined towards style than safety." //YW EDIT: TCG to USDF
-//ushanka
-
+/*
+ * Ushanka
+ */
/obj/item/clothing/head/ushanka/solgov
name = "\improper NDF fur hat"
desc = "An Nanotrasen Defense Force synthfur-lined hat for operating in cold environments."
+ icon_state = "ntguardushankadown"
/obj/item/clothing/head/ushanka/solgov/fleet
name = "fleet fur hat"
desc = "An USDF Fleet synthfur-lined hat for operating in cold environments." //YW EDIT: TCG to USDF
-/obj/item/clothing/head/ushanka/solgov/army
+/obj/item/clothing/head/ushanka/solgov/marine
name = "marine fur hat"
desc = "An USDF Marine synthfur-lined hat for operating in cold environments." //YW EDIT: TCG to USDF
-/obj/item/clothing/head/ushanka/solgov/army/green
+/obj/item/clothing/head/ushanka/solgov/marine/green
name = "green marine fur hat"
desc = "An USDF Marine synthfur-lined hat for operating in cold environments." //YW EDIT: TCG to USDF
-//Terran
-
+/*
+ * Terran
+ */
/obj/item/clothing/head/terran/navy/service
name = "Ares service cover"
desc = "A service uniform cover, worn by low-ranking crew within the Ares Confederation Navy."
diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm
index ebf63f2f87..aeca7084df 100644
--- a/code/modules/clothing/spacesuits/void/station.dm
+++ b/code/modules/clothing/spacesuits/void/station.dm
@@ -328,7 +328,7 @@
icon_state = "rig0-atmos"
item_state_slots = list(slot_r_hand_str = "atmos_helm", slot_l_hand_str = "atmos_helm")
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 50)
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE+15000
light_overlay = "helmet_light_dual"
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 20* ONE_ATMOSPHERE
@@ -339,7 +339,7 @@
icon_state = "rig-atmos"
item_state_slots = list(slot_r_hand_str = "atmos_voidsuit", slot_l_hand_str = "atmos_voidsuit")
armor = list(melee = 40, bullet = 5, laser = 20, energy = 5, bomb = 35, bio = 100, rad = 50)
- max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+15000
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 20* ONE_ATMOSPHERE
breach_threshold = 16 //Extra Thicc
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 73d253415d..bce11495c7 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -183,12 +183,12 @@
/obj/item/clothing/suit/storage/hazardvest/green
name = "green hazard vest"
- desc = "A high-visibility vest used by emergency responders. This one is green!"
+ desc = "A high-visibility vest used by emergency responders."
icon_state = "hazard_g"
/obj/item/clothing/suit/storage/hazardvest/white
name = "white hazard vest"
- desc = "A high-visibility vest used in work zones. This one has a red cross!"
+ desc = "A high-visibility vest used in work zones. This one bears the symbol of a disaster relief team!"
icon_state = "hazard_w"
//Lawyer
@@ -246,9 +246,17 @@
//Mime
/obj/item/clothing/suit/suspenders
- name = "suspenders"
+ name = "red suspenders"
desc = "They suspend the illusion of the mime's play."
icon = 'icons/inventory/belt/item.dmi'
icon_state = "suspenders"
blood_overlay_type = "armor" //it's the less thing that I can put here
body_parts_covered = 0
+
+/obj/item/clothing/suit/suspenders/blue
+ name = "blue suspenders"
+ icon_state = "suspenders_blue"
+
+/obj/item/clothing/suit/suspenders/grey
+ name = "grey suspenders"
+ icon_state = "suspenders_grey"
\ No newline at end of file
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index d0f8949d8d..a8f6bf57a1 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -270,16 +270,57 @@
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDETIE|HIDEHOLSTER
+/*
+ * Kimonos
+ */
+
/obj/item/clothing/suit/kimono
- name = "kimono"
+ name = "traditional kimono"
desc = "A traditional Japanese kimono."
icon_state = "kimono"
addblends = "kimono_a"
/obj/item/clothing/suit/kamishimo
- name = "kamishimo"
+ name = "traditional kamishimo"
desc = "Traditional Japanese menswear."
icon_state = "kamishimo"
+ addblends = "kamishimo_a"
+
+/obj/item/clothing/suit/kimono/red
+ name = "red kimono"
+ icon_state = "kimono_red"
+
+/obj/item/clothing/suit/kimono/orange
+ name = "orange kimono"
+ icon_state = "kimono_orange"
+
+/obj/item/clothing/suit/kimono/yellow
+ name = "yellow kimono"
+ icon_state = "kimono_yellow"
+
+/obj/item/clothing/suit/kimono/green
+ name = "green kimono"
+ icon_state = "kimono_green"
+
+/obj/item/clothing/suit/kimono/blue
+ name = "blue kimono"
+ icon_state = "kimono_blue"
+
+/obj/item/clothing/suit/kimono/purple
+ name = "purple kimono"
+ icon_state = "kimono_purple"
+
+/obj/item/clothing/suit/kimono/violet
+ name = "violet kimono"
+ icon_state = "kimono_violet"
+
+/obj/item/clothing/suit/kimono/pink
+ name = "pink kimono"
+ icon_state = "kimono_pink"
+
+/obj/item/clothing/suit/kimono/earth
+ name = "earth kimono"
+ icon_state = "kimono_earth"
/*
* Coats
@@ -480,6 +521,11 @@
min_cold_protection_temperature = T0C - 20
siemens_coefficient = 0.7
+/obj/item/clothing/suit/storage/toggle/bomber/retro
+ name = "retro bomber jacket"
+ desc = "A retro style, fur-lined leather bomber jacket that invokes the early days of space exploration when spacemen were spacemen, and laser guns had funny little antennae on them."
+ icon_state = "retro_bomber"
+
/obj/item/clothing/suit/storage/bomber/alt
name = "bomber jacket"
desc = "A thick, well-worn WW2 leather bomber jacket."
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index fb1494f4bc..31f550da77 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -10,9 +10,10 @@
*/
/obj/item/clothing/suit/fire
- name = "firesuit"
+ name = "emergency firesuit"
desc = "A suit that protects against fire and heat."
- icon_state = "fire"
+ icon_state = "firesuit"
+ item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit")
w_class = ITEMSIZE_LARGE//bulky item
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
@@ -27,16 +28,16 @@
min_pressure_protection = 0.2 * ONE_ATMOSPHERE
max_pressure_protection = 20 * ONE_ATMOSPHERE
-
/obj/item/clothing/suit/fire/firefighter
- icon_state = "firesuit"
-
-/obj/item/clothing/suit/fire/heavy //Is this even used?? -S2-
name = "firesuit"
+ icon_state = "firesuit2"
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+5000
+
+/obj/item/clothing/suit/fire/heavy
+ name = "atmospheric firesuit"
desc = "A suit that protects against extreme fire and heat."
- //icon_state = "thermal"
- item_state_slots = list(slot_r_hand_str = "black_suit", slot_l_hand_str = "black_suit")
- w_class = ITEMSIZE_LARGE//bulky item
+ icon_state = "atmos_firesuit"
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE+10000
slowdown = 1.5
/*
diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm
index d25cda260b..3b78982631 100644
--- a/code/modules/clothing/under/accessories/clothing.dm
+++ b/code/modules/clothing/under/accessories/clothing.dm
@@ -14,6 +14,21 @@
icon_state = "tan_jacket"
slot = ACCESSORY_SLOT_OVER
+/obj/item/clothing/accessory/jacket/red
+ name = "red suit jacket"
+ desc = "Relaxing suit jacket."
+ icon_state = "red_jacket"
+
+/obj/item/clothing/accessory/jacket/teal
+ name = "teal suit jacket"
+ desc = "Relaxing suit jacket."
+ icon_state = "teal_jacket"
+
+/obj/item/clothing/accessory/jacket/green
+ name = "green suit jacket"
+ desc = "Relaxing suit jacket."
+ icon_state = "green_jacket"
+
/obj/item/clothing/accessory/jacket/charcoal
name = "charcoal suit jacket"
desc = "Strict suit jacket."
@@ -39,6 +54,11 @@
desc = "Chairman suit jacket."
icon_state = "gambler_jacket"
+/obj/item/clothing/accessory/jacket/extravagant
+ name = "extravagant suit jacket"
+ desc = "Luxury suit jacket."
+ icon_state = "extravagant_jacket"
+
/*
* Hawaiian
*/
@@ -434,6 +454,12 @@
desc = "A comfortable turtleneck in a dark red."
icon_state = "turtleneck_red"
+/obj/item/clothing/accessory/sweater/virgin
+ name = "virgin killer"
+ desc = "A knit sweater that leaves little to the imagination."
+ icon_state = "virginkiller"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO
+
/*
* Misc
*/
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index c675c1b68c..da5d5627be 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -68,6 +68,11 @@
icon_state = "chef"
rolled_sleeves = 0
+/obj/item/clothing/under/rank/chef/alt
+ desc = "It's an apron which is given only to the chefs that swear the most."
+ name = "souschef's uniform"
+ icon_state = "souschef"
+
/obj/item/clothing/under/rank/clown
name = "clown suit"
desc = "Honk!"
@@ -95,6 +100,9 @@
permeability_coefficient = 0.50
rolled_sleeves = 0
+/obj/item/clothing/under/rank/hydroponics/alt
+ icon_state = "hydro"
+
/obj/item/clothing/under/rank/internalaffairs
desc = "The plain, professional attire of an Internal Affairs Agent. The collar is immaculately starched."
name = "Internal Affairs uniform"
@@ -115,6 +123,10 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
rolled_sleeves = 0
+/obj/item/clothing/under/rank/janitor/alt
+ name = "janitor's overalls"
+ icon_state = "janitor_alt"
+
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "lawyer suit"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index 40d8e12afd..57ec7e9267 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -93,6 +93,7 @@
H.update_inv_w_uniform(1)
to_chat(H, "You roll the sleeves of your shirt [unrolled ? "up" : "down"]")
*/
+
/obj/item/clothing/under/det/grey
icon_state = "detective2"
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks."
@@ -120,6 +121,11 @@
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat)
+/obj/item/clothing/under/det/black/waistcoat
+ icon_state = "detective3"
+ desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, a red tie, and a charcoal vest."
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat)
+
/obj/item/clothing/under/det/skirt
name = "detective's skirt"
icon_state = "detective_skirt"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 37fd676a4c..bc4d45685d 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -1,3 +1,9 @@
+/obj/item/clothing/under/gimmick //used to fix an error
+ name = "gimmick jumpsuit"
+ desc = "Something about this jumpsuit feels... off..."
+ icon_state = "grey"
+ item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
+
/obj/item/clothing/under/pj/red
name = "red pj's"
desc = "Sleepwear."
@@ -95,19 +101,6 @@
icon_state = "ert_uniform"
item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
-/obj/item/clothing/under/gov
- desc = "A neat proper uniform of someone on offical business. The collar is immaculately starched."
- name = "Green formal uniform"
- icon_state = "greensuit"
- item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
- rolled_sleeves = 0
- starting_accessories = list(/obj/item/clothing/accessory/tie/darkgreen)
-
-/obj/item/clothing/under/gov/skirt
- name = "Green formal skirt uniform"
- desc = "A neat proper uniform of someone on offical business. The top button is sewn shut."
- icon_state = "greensuit_skirt"
-
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
@@ -168,25 +161,6 @@
desc = "A silk black blouse with a matching gray skirt. Feels proper."
icon_state = "gentlesuit_skirt"
-/obj/item/clothing/under/gimmick/rank/captain/suit
- name = "site manager's suit"
- desc = "A green suit and yellow necktie. Exemplifies authority."
- icon_state = "green_suit"
- item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
-
-/obj/item/clothing/under/gimmick/rank/captain/suit/skirt
- name = "site manager's skirt suit"
- icon_state = "green_suit_skirt"
-
-/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."
- icon_state = "teal_suit"
- item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
-
-/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt
- name = "head of personnel's skirt suit"
- icon_state = "teal_suit_skirt"
/obj/item/clothing/under/suit_jacket
name = "black suit"
@@ -218,17 +192,6 @@
icon_state = "black_suit_fem"
item_state = "black_formal_skirt"
-/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_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
-
-/obj/item/clothing/under/suit_jacket/red/skirt
- name = "red skirt suit"
- desc = "A red suit and blue necktie. Somewhat formal."
- icon_state = "red_suit_skirt"
-
/obj/item/clothing/under/schoolgirl
name = "schoolgirl uniform"
desc = "It's just like one of my Japanese animes!"
@@ -288,13 +251,6 @@
item_state_slots = list(slot_r_hand_str = "yellow", slot_l_hand_str = "yellow")
body_parts_covered = LOWER_TORSO
-/obj/item/clothing/under/moderncoat
- name = "modern wrapped coat"
- desc = "The cutting edge of fashion."
- icon_state = "moderncoat"
- item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
-
/obj/item/clothing/under/ascetic
name = "plain ascetic garb"
desc = "Popular with freshly grown vatborn and new age cultists alike."
@@ -322,8 +278,9 @@
icon_state = "whitegoldrobe"
/*
- * dress
+ * Dress Stuff
*/
+
/obj/item/clothing/under/dress
body_parts_covered = UPPER_TORSO|LOWER_TORSO
@@ -565,14 +522,40 @@
desc = "A red and black dress fit for a countess."
icon_state = "countess"
-/obj/item/clothing/under/verglasdress
+/obj/item/clothing/under/dress/verglasdress
name = "verglas dress"
desc = "The modern twist on a forgotten pattern, the Verglas style utilizes comfortable velvet and silver white satin to create an otherworldly effect evocative of winter, or the void."
icon_state = "verglas_dress"
+/obj/item/clothing/under/dress/goddess
+ name = "goddess dress"
+ desc = "A blue and orange dress fit for a goddess."
+ icon_state = "goddess"
+
+/obj/item/clothing/under/dress/alpine
+ name = "alpine dress"
+ desc = "A green and white dress that makes you want to yodel."
+ icon_state = "corsetdress"
+
+/obj/item/clothing/under/dress/goldwrap
+ name = "golden dress"
+ desc = "A dress so ostentatious that you feel poorer just looking at it."
+ icon_state = "golddress"
+
+/obj/item/clothing/under/dress/golddress
+ name = "golden wrap"
+ desc = "An outfit so ostentatious that you feel poorer just looking at it."
+ icon_state = "goldwrap"
+
+/obj/item/clothing/under/dress/hightrousers
+ name = "high-waisted trousers"
+ desc = "A waistline this high is just made for ripping bodices, swashing buckles, or - just occasionally - sucking blood."
+ icon_state = "gayvampire"
+
/*
- * wedding stuff
+ * Wedding Stuff
*/
+
/obj/item/clothing/under/wedding
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
@@ -619,8 +602,8 @@
icon_state = "whitegown"
/*
-Uniforms and such
-*/
+ * Uniforms and such
+ */
/obj/item/clothing/under/sundress
name = "sundress"
@@ -732,6 +715,52 @@ Uniforms and such
name = "burgundy skirt"
icon_state = "burgundy_suit_skirt"
+/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_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
+ starting_accessories = list(/obj/item/clothing/accessory/tie/navy, /obj/item/clothing/accessory/jacket/red)
+
+/obj/item/clothing/under/suit_jacket/red/skirt
+ name = "red skirt"
+ icon_state = "red_suit_skirt"
+
+/obj/item/clothing/under/suit_jacket/teal
+ name = "teal suit"
+ desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
+ icon_state = "teal_suit"
+ item_state_slots = list(slot_r_hand_str = "green", slot_l_hand_str = "green")
+ starting_accessories = list(/obj/item/clothing/accessory/tie/yellow, /obj/item/clothing/accessory/jacket/teal)
+
+/obj/item/clothing/under/suit_jacket/teal/skirt
+ name = "teal skirt suit"
+ icon_state = "teal_suit_skirt"
+
+/obj/item/clothing/under/suit_jacket/green
+ name = "green suit"
+ desc = "A green suit and yellow necktie. Exemplifies authority."
+ icon_state = "green_suit"
+ item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
+ starting_accessories = list(/obj/item/clothing/accessory/tie/yellow, /obj/item/clothing/accessory/jacket/green)
+
+/obj/item/clothing/under/gov
+ name = "green formal uniform"
+ desc = "A neat proper uniform of someone on offical business. The collar is immaculately starched."
+ icon_state = "greensuit"
+ item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
+ starting_accessories = list(/obj/item/clothing/accessory/tie/darkgreen)
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/gov/skirt
+ name = "green formal skirt"
+ desc = "A neat proper uniform of someone on offical business. The top button is sewn shut."
+ icon_state = "greensuit_skirt"
+
+/obj/item/clothing/under/suit_jacket/green/skirt
+ name = "green skirt suit"
+ icon_state = "green_suit_skirt"
+
/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?"
@@ -750,6 +779,13 @@ Uniforms and such
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/gambler)
+/obj/item/clothing/under/suit_jacket/extravagant
+ name = "extravagant suit"
+ desc = "An extravagant suit. Perfect for being over dramatic."
+ icon_state = "extravagant_suit"
+ item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
+ starting_accessories = list(/obj/item/clothing/accessory/jacket/extravagant)
+
/obj/item/clothing/under/suit_jacket/tan
name = "tan suit"
desc = "A tan suit. Smart, but casual."
@@ -902,12 +938,24 @@ Uniforms and such
icon_state = "flowerskirt"
/obj/item/clothing/under/fashionminiskirt
- name = "fashionable miniskirt"
- desc = "An impractically short miniskirt allegedly making waves through the local fashion scene."
- icon_state = "miniskirt_fashion"
+ name = "fashionable miniskirt"
+ desc = "An impractically short miniskirt allegedly making waves through the local fashion scene."
+ icon_state = "miniskirt_fashion"
+
+/obj/item/clothing/under/retrosweater
+ name = "retro sweater"
+ desc = "A rugged cableknit sweater and leather pants, fit for a dashing space adventurer."
+ icon_state = "retro_sweater"
+
+/obj/item/clothing/under/wednesday
+ name = "cropped sweater skirt"
+ desc = "A cropped green sweater and matching miniskirt."
+ icon_state = "wednesday"
+
/*
- * swimsuit
+ * Swimsuit
*/
+
/obj/item/clothing/under/swimsuit/
siemens_coefficient = 1
body_parts_covered = 0
@@ -974,8 +1022,9 @@ Uniforms and such
/*
- * pyjamas
+ * Pyjamas
*/
+
/obj/item/clothing/under/bluepyjamas
name = "blue pyjamas"
desc = "Slightly old-fashioned sleepwear."
@@ -990,74 +1039,12 @@ Uniforms and such
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
-/*
- *Misc Uniforms
- */
-
-/obj/item/clothing/under/aether
- name = "\improper Aether jumpsuit"
- desc = "A jumpsuit belonging to Aether Atmospherics and Recycling, a Trans-Stellar that supplies recycling and atmospheric systems to colonies."
- icon_state = "aether"
- worn_state = "aether"
-
-/obj/item/clothing/under/pcrc
- name = "\improper PCRC uniform"
- desc = "A uniform belonging to Proxima Centauri Risk Control, a private security firm."
- icon_state = "pcrc"
- item_state = "jensensuit"
- worn_state = "pcrc"
-
-/obj/item/clothing/under/grayson
- name = "\improper Grayson overalls"
- desc = "A set of overalls belonging to Grayson Manufactories, a mining Trans-Stellar."
- icon_state = "mechanic"
- worn_state = "mechanic"
-
-/obj/item/clothing/under/wardt
- name = "\improper Ward-Takahashi jumpsuit"
- desc = "A jumpsuit belonging to Ward-Takahashi, a Trans-Stellar in the consumer goods market."
- icon_state = "robotics2"
- worn_state = "robotics2"
-
-/obj/item/clothing/under/mbill
- name = "\improper Major Bill's uniform"
- desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation."
- icon_state = "mbill"
- worn_state = "mbill"
- catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
-
-/obj/item/clothing/under/confederacy
- name = "\improper Confederacy uniform"
- desc = "A military uniform belonging to the Confederacy of Man, an independent human government."
- icon_state = "confed"
- worn_state = "confed"
-
-/obj/item/clothing/under/saare
- name = "\improper SAARE uniform"
- desc = "A dress uniform belonging to Stealth Assault Enterprises, a minor private military corporation."
- icon_state = "saare"
- worn_state = "saare"
-
-/obj/item/clothing/under/focal
- name = "\improper Focal Point jumpsuit"
- desc = "A jumpsuit belonging to Focal Point Energistics, an engineering megacorporation."
- icon_state = "focal"
- worn_state = "focal"
-
-/obj/item/clothing/under/hephaestus
- name = "\improper Hephaestus jumpsuit"
- desc = "A jumpsuit belonging to Hephaestus Industries, a Trans-Stellar best known for its arms production."
- icon_state = "heph"
- worn_state = "heph"
-
/obj/item/clothing/under/rank/psych/turtleneck/sweater
desc = "A warm looking sweater and a pair of dark blue slacks."
name = "sweater"
icon_state = "turtleneck"
worn_state = "turtleneck"
-//Uniforms end above here.
-
/obj/item/clothing/under/medigown
name = "medical gown"
desc = "A flimsy examination gown, the back ties never close."
@@ -1221,4 +1208,197 @@ Uniforms and such
desc = "Some patched together rags. Better than being naked."
force = 0
icon_state = "rag"
- worn_state = "rag"
\ No newline at end of file
+ worn_state = "rag"
+
+/obj/item/clothing/under/curator
+ name = "curator uniform"
+ desc = "A rugged uniform suitable for treasure hunting."
+ icon_state = "curator"
+ worn_state = "curator"
+
+/*
+ * Modern
+ */
+
+/obj/item/clothing/under/moderncoat
+ name = "modern wrapped coat"
+ desc = "The cutting edge of fashion."
+ icon_state = "mod_coat"
+ worn_state = "mod_coat"
+ item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
+
+/obj/item/clothing/under/modjump
+ name = "modern jumpsuit"
+ desc = "A stylish jumpsuit of modern culture."
+ icon_state = "mod_jump"
+ worn_state = "mod_jump"
+ item_state_slots = list(slot_r_hand_str = "orange", slot_l_hand_str = "orange")
+
+/obj/item/clothing/under/modjump2
+ name = "modern outfit"
+ desc = "A stylish outfit of modern culture."
+ icon_state = "mod_jump2"
+ worn_state = "mod_jump2"
+ item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
+
+/obj/item/clothing/under/modjump3
+ name = "cyber jumpsuit"
+ desc = "A cool cyberpunk styled jumpsuit. The lights on the back glitched out and don't work."
+ icon_state = "cyber"
+ worn_state = "cyber"
+ item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
+
+/*
+ * Corporate Uniforms
+ */
+
+/obj/item/clothing/under/mbill
+ name = "\improper Major Bill's uniform"
+ desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation."
+ icon_state = "mbill"
+ worn_state = "mbill"
+ catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
+
+/obj/item/clothing/under/mbill_flight
+ name = "\improper Major Bill's flightsuit"
+ desc = "A flightsuit belonging to Major Bill's Transportation, a shipping megacorporation."
+ icon_state = "mbill_flight"
+ worn_state = "mbill_flight"
+ catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
+ starting_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1)
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/aether
+ name = "\improper Aether jumpsuit"
+ desc = "A jumpsuit belonging to Aether Atmospherics and Recycling, a Trans-Stellar that supplies recycling and atmospheric systems to colonies."
+ icon_state = "aether"
+ worn_state = "aether"
+
+/obj/item/clothing/under/corp/pcrc
+ name = "\improper PCRC uniform"
+ desc = "A uniform belonging to Proxima Centauri Risk Control, a private security firm."
+ icon_state = "pcrc"
+ item_state = "jensensuit"
+ worn_state = "pcrc"
+
+/obj/item/clothing/under/corp/centauri
+ name = "\improper Centauri Provisions jumpsuit"
+ desc = "A jumpsuit belonging to Centauri Provisions, a Trans-Stellar best known for its food and drink products."
+ icon_state = "centauri"
+ worn_state = "centauri"
+
+/obj/item/clothing/under/corp/grayson
+ name = "\improper Grayson overalls"
+ desc = "A set of overalls belonging to Grayson Manufactories, a mining Trans-Stellar."
+ icon_state = "grayson_mech"
+ worn_state = "grayson_mech"
+
+/obj/item/clothing/under/corp/grayson_jump
+ name = "\improper Grayson jumpsuit"
+ desc = "A jumpsuit belonging to Grayson Manufactories, a mining Trans-Stellar."
+ icon_state = "grayson"
+ worn_state = "grayson"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/wardt
+ name = "\improper Ward-Takahashi jumpsuit"
+ desc = "A jumpsuit belonging to Ward-Takahashi, a Trans-Stellar in the consumer goods market."
+ icon_state = "robotics2"
+ worn_state = "robotics2"
+
+/obj/item/clothing/under/corp/confederacy
+ name = "\improper Confederacy uniform"
+ desc = "A military uniform belonging to the Confederacy of Man, an independent human government."
+ icon_state = "confed"
+ worn_state = "confed"
+
+/obj/item/clothing/under/corp/saare
+ name = "\improper SAARE uniform"
+ desc = "A dress uniform belonging to Stealth Assault Enterprises, a minor private military corporation."
+ icon_state = "saare"
+ worn_state = "saare"
+
+/obj/item/clothing/under/corp/focal
+ name = "\improper Focal Point jumpsuit"
+ desc = "A jumpsuit belonging to Focal Point Energistics, an engineering megacorporation."
+ icon_state = "focal"
+ worn_state = "focal"
+
+/obj/item/clothing/under/corp/wulf
+ name = "\improper Wulf jumpsuit"
+ desc = "A jumpsuit belonging to Wulf Aeronautics, a ship-building and propulsion systems Trans-Stellar."
+ icon_state = "wulf"
+ worn_state = "wulf"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/hephaestus
+ name = "\improper Hephaestus jumpsuit"
+ desc = "A jumpsuit belonging to Hephaestus, a Trans-Stellar best known for high-grade arms manufacturing."
+ icon_state = "heph"
+ worn_state = "heph"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/kaleidoscope
+ name = "\improper Kaleidoscope uniform"
+ desc = "A science uniform belonging to Kaleidoscope Cosmetics, a cosmetic and gene-modification trans-stellar."
+ icon_state = "kaleido"
+ worn_state = "kaleido"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/veymed
+ name = "\improper Vey-Med uniform"
+ desc = "A uniform belonging to Vey-Medical, a Skrellian biomedical Trans-Stellar."
+ icon_state = "veymed"
+ worn_state = "veymed"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/wardt
+ name = "\improper Ward-Takahashi jumpsuit"
+ desc = "A jumpsuit belonging to Ward-Takahashi, a Trans-Stellar in the consumer goods market."
+ icon_state = "robotics2"
+ worn_state = "robotics2"
+
+/obj/item/clothing/under/corp/xion
+ name = "\improper Xion jumpsuit"
+ desc = "A jumpsuit belonging to Xion Manufacturing, an industrial equipment Trans-Stellar."
+ icon_state = "xion"
+ worn_state = "xion"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/zenghu
+ name = "\improper Zeng-Hu jumpsuit"
+ desc = "A jumpsuit belonging to Zeng-Hu Pharmaceuticals, a Trans-Stellar in the business of exactly what you'd expect.."
+ icon_state = "zenghu"
+ worn_state = "zenghu"
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red)
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/morpheus
+ name = "\improper Morpheus jumpsuit"
+ desc = "A uniform belonging to Morpheus Cyberkinetics, a positronic-run cybernetics Trans-Stellar."
+ icon_state = "morpheus"
+ worn_state = "morpheus"
+
+/obj/item/clothing/under/corp/xion
+ name = "\improper Xion jumpsuit"
+ desc = "A jumpsuit belonging to Xion Manufacturing, an industrial equipment Trans-Stellar."
+ icon_state = "xion"
+ worn_state = "xion"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/hedberg
+ name = "\improper Hedberg law enforcement uniform"
+ desc = "A sturdy civilian law enforcement uniform belonging to the Hedberg-Hammarstrom private security corporation."
+ icon_state = "hedberg"
+ worn_state = "hedberg"
+ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //Equivalent to security officer's jumpsuit
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/corp/hedbergtech
+ name = "\improper Hedberg technician uniform"
+ desc = "A technician's uniform belonging to the Hedberg-Hammarstrom private security corporation. It is lightly shielded against radiation."
+ icon_state = "hedberg_tech"
+ worn_state = "hedberg_tech"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) // Equivalent to engineer's jumpsuit.
+ rolled_sleeves = 0
\ No newline at end of file
diff --git a/code/modules/clothing/under/solgov.dm b/code/modules/clothing/under/solgov.dm
index 5854c006e2..82386c9769 100644
--- a/code/modules/clothing/under/solgov.dm
+++ b/code/modules/clothing/under/solgov.dm
@@ -71,6 +71,14 @@
worn_state = "blackutility_crew"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
+/obj/item/clothing/under/sifcop
+ name = "\improper SifGuard law enforcement uniform"
+ desc = "A sturdy law enforcement uniform typical of Vir's civilian law enforcement officers."
+ icon_state = "sifcop"
+ worn_state = "sifcop"
+ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //Equivalent to security officer's jumpsuit
+ rolled_sleeves = 0
+
/obj/item/clothing/under/solgov/utility/sifguard_skirt
name = "\improper SifGuard skirt"
desc = "A black turtleneck and skirt, the elusive ladies' uniform of the Sif Defense Force."
@@ -469,7 +477,7 @@
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0)
-//Terrans
+//SAARE
/obj/item/clothing/under/saare
name = "master SAARE uniform"
@@ -497,4 +505,21 @@
name = "SAARE command service uniform"
desc = "The service uniform of Stealth Assault Enterprises, for high-ranking mercenaries."
icon_state = "terranservice_comm"
- worn_state = "terranservice_comm"
\ No newline at end of file
+ worn_state = "terranservice_comm"
+
+//Galactic Survey
+
+/obj/item/clothing/under/gsa
+ name = "\improper Galactic Survey utility uniform"
+ desc = "A jumpsuit belonging to the Galactic Survey Administration, SolGov's scientific exploration division."
+ icon_state = "gsa"
+ worn_state = "gsa"
+ rolled_sleeves = 0
+
+/obj/item/clothing/under/gsa_work
+ name = "\improper Galactic Survey worksuit"
+ desc = "A padded work suit belonging to the Galactic Survey Administration, SolGov's scientific exploration division. It has minor radiation shielding."
+ icon_state = "gsa_work"
+ worn_state = "gsa_work"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
+ rolled_sleeves = 0
\ No newline at end of file
diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm
index 6578b950fb..7f64515829 100644
--- a/code/modules/economy/vending_machines.dm
+++ b/code/modules/economy/vending_machines.dm
@@ -693,7 +693,8 @@
/obj/item/weapon/weldingtool = 8,
/obj/item/clothing/head/welding = 8,
/obj/item/weapon/light/tube = 10,
- /obj/item/clothing/suit/fire = 4,
+ /obj/item/clothing/head/hardhat/firefighter = 4,
+ /obj/item/clothing/suit/fire/firefighter = 4,
/obj/item/weapon/stock_parts/scanning_module = 5,
/obj/item/weapon/stock_parts/micro_laser = 5,
/obj/item/weapon/stock_parts/matter_bin = 5,
diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm
index 0f14326a99..f07595dd7f 100644
--- a/code/modules/economy/vending_machines_vr.dm
+++ b/code/modules/economy/vending_machines_vr.dm
@@ -713,10 +713,10 @@
/obj/item/clothing/under/color/white = 5,
/obj/item/clothing/under/color/yellow = 5,
/obj/item/clothing/under/color/yellowgreen = 5,
- /obj/item/clothing/under/aether = 5,
- /obj/item/clothing/under/focal = 5,
- /obj/item/clothing/under/hephaestus = 5,
- /obj/item/clothing/under/wardt = 5,
+ /obj/item/clothing/under/corp/aether = 5,
+ /obj/item/clothing/under/corp/focal = 5,
+ /obj/item/clothing/under/corp/hephaestus = 5,
+ /obj/item/clothing/under/corp/wardt = 5,
/obj/item/clothing/under/kilt = 5,
/obj/item/clothing/under/fluff/latexmaid = 5,
/obj/item/clothing/under/dress/lilacdress = 5,
@@ -884,10 +884,10 @@
/obj/item/clothing/under/color/white = 50,
/obj/item/clothing/under/color/yellow = 50,
/obj/item/clothing/under/color/yellowgreen = 50,
- /obj/item/clothing/under/aether = 50,
- /obj/item/clothing/under/focal = 50,
- /obj/item/clothing/under/hephaestus = 50,
- /obj/item/clothing/under/wardt = 50,
+ /obj/item/clothing/under/corp/aether = 50,
+ /obj/item/clothing/under/corp/focal = 50,
+ /obj/item/clothing/under/corp/hephaestus = 50,
+ /obj/item/clothing/under/corp/wardt = 50,
/obj/item/clothing/under/kilt = 50,
/obj/item/clothing/under/fluff/latexmaid = 50,
/obj/item/clothing/under/dress/lilacdress = 50,
@@ -1332,7 +1332,7 @@
/obj/item/clothing/head/helmet/gladiator = 3,
/obj/item/clothing/under/gladiator = 3,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 3,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 3,
+ /obj/item/clothing/under/suit_jacket/green = 3,
/obj/item/clothing/glasses/gglasses = 3,
/obj/item/clothing/head/flatcap = 3,
/obj/item/clothing/shoes/boots/jackboots = 3,
@@ -1397,7 +1397,7 @@
/obj/item/clothing/head/helmet/gladiator = 300,
/obj/item/clothing/under/gladiator = 500,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 200,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 200,
+ /obj/item/clothing/under/suit_jacket/green = 200,
/obj/item/clothing/glasses/gglasses = 200,
/obj/item/clothing/head/flatcap = 200,
/obj/item/clothing/shoes/boots/jackboots = 200,
@@ -1984,10 +1984,10 @@
/obj/item/clothing/under/color/white = 5,
/obj/item/clothing/under/color/yellow = 5,
/obj/item/clothing/under/color/yellowgreen = 5,
- /obj/item/clothing/under/aether = 5,
- /obj/item/clothing/under/focal = 5,
- /obj/item/clothing/under/hephaestus = 5,
- /obj/item/clothing/under/wardt = 5,
+ /obj/item/clothing/under/corp/aether = 5,
+ /obj/item/clothing/under/corp/focal = 5,
+ /obj/item/clothing/under/corp/hephaestus = 5,
+ /obj/item/clothing/under/corp/wardt = 5,
/obj/item/clothing/under/kilt = 5,
/obj/item/clothing/under/fluff/latexmaid = 5,
/obj/item/clothing/under/dress/lilacdress = 5,
@@ -2155,10 +2155,10 @@
/obj/item/clothing/under/color/white = 50,
/obj/item/clothing/under/color/yellow = 50,
/obj/item/clothing/under/color/yellowgreen = 50,
- /obj/item/clothing/under/aether = 50,
- /obj/item/clothing/under/focal = 50,
- /obj/item/clothing/under/hephaestus = 50,
- /obj/item/clothing/under/wardt = 50,
+ /obj/item/clothing/under/corp/aether = 50,
+ /obj/item/clothing/under/corp/focal = 50,
+ /obj/item/clothing/under/corp/hephaestus = 50,
+ /obj/item/clothing/under/corp/wardt = 50,
/obj/item/clothing/under/kilt = 50,
/obj/item/clothing/under/fluff/latexmaid = 50,
/obj/item/clothing/under/dress/lilacdress = 50,
@@ -2512,7 +2512,7 @@
/obj/item/clothing/head/helmet/gladiator = 3,
/obj/item/clothing/under/gladiator = 3,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 3,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 3,
+ /obj/item/clothing/under/suit_jacket/green = 3,
/obj/item/clothing/glasses/gglasses = 3,
/obj/item/clothing/head/flatcap = 3,
/obj/item/clothing/shoes/boots/jackboots = 3,
@@ -2577,7 +2577,7 @@
/obj/item/clothing/head/helmet/gladiator = 300,
/obj/item/clothing/under/gladiator = 500,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 200,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 200,
+ /obj/item/clothing/under/suit_jacket/green = 200,
/obj/item/clothing/glasses/gglasses = 200,
/obj/item/clothing/head/flatcap = 200,
/obj/item/clothing/shoes/boots/jackboots = 200,
@@ -2675,7 +2675,7 @@
/obj/item/clothing/head/helmet/gladiator = 3,
/obj/item/clothing/under/gladiator = 3,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 3,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 3,
+ /obj/item/clothing/under/suit_jacket/green = 3,
/obj/item/clothing/glasses/gglasses = 3,
/obj/item/clothing/head/flatcap = 3,
/obj/item/clothing/shoes/boots/jackboots = 3,
@@ -3007,10 +3007,10 @@
/obj/item/clothing/under/color/white = 5,
/obj/item/clothing/under/color/yellow = 5,
/obj/item/clothing/under/color/yellowgreen = 5,
- /obj/item/clothing/under/aether = 5,
- /obj/item/clothing/under/focal = 5,
- /obj/item/clothing/under/hephaestus = 5,
- /obj/item/clothing/under/wardt = 5,
+ /obj/item/clothing/under/corp/aether = 5,
+ /obj/item/clothing/under/corp/focal = 5,
+ /obj/item/clothing/under/corp/hephaestus = 5,
+ /obj/item/clothing/under/corp/wardt = 5,
/obj/item/clothing/under/kilt = 5,
/obj/item/clothing/under/fluff/latexmaid = 5,
/obj/item/clothing/under/dress/lilacdress = 5,
@@ -3418,7 +3418,7 @@
/obj/item/clothing/head/helmet/gladiator = 3,
/obj/item/clothing/under/gladiator = 3,
/obj/item/clothing/suit/storage/toggle/labcoat/mad = 3,
- /obj/item/clothing/under/gimmick/rank/captain/suit = 3,
+ /obj/item/clothing/under/suit_jacket/green = 3,
/obj/item/clothing/glasses/gglasses = 3,
/obj/item/clothing/head/flatcap = 3,
/obj/item/clothing/shoes/boots/jackboots = 3,
diff --git a/code/modules/food/kitchen/cooking_machines/container.dm b/code/modules/food/kitchen/cooking_machines/container.dm
index 408835a4da..981a809fd4 100644
--- a/code/modules/food/kitchen/cooking_machines/container.dm
+++ b/code/modules/food/kitchen/cooking_machines/container.dm
@@ -11,7 +11,11 @@
var/list/insertable = list(
/obj/item/weapon/reagent_containers/food/snacks,
/obj/item/weapon/holder,
- /obj/item/weapon/paper
+ /obj/item/weapon/paper,
+ /obj/item/clothing/head/wizard,
+ /obj/item/clothing/head/cakehat,
+ /obj/item/clothing/mask/gas/clown_hat,
+ /obj/item/clothing/head/beret
)
/obj/item/weapon/reagent_containers/cooking_container/Initialize()
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 18cd0ab750..2c0de82adc 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -185,7 +185,7 @@
var/speaker_name = handle_speaker_name(speaker, vname, hard_to_hear)
var/track = handle_track(message, verb, speaker, speaker_name, hard_to_hear)
- message = encode_html_emphasis(message)
+ message = "[encode_html_emphasis(message)][part_c]"
if((sdisabilities & DEAF) || ear_deaf)
if(prob(20))
diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm
index c361959976..0d3edc90c8 100644
--- a/code/modules/mob/living/carbon/give.dm
+++ b/code/modules/mob/living/carbon/give.dm
@@ -1,42 +1,46 @@
-/mob/living/carbon/human/verb/give(var/mob/living/carbon/target in living_mobs(1))
+/mob/living/verb/give(var/mob/living/target in living_mobs(1))
set category = "IC"
set name = "Give"
- // TODO : Change to incapacitated() on merge.
- if(src.stat || src.lying || src.resting || src.handcuffed)
+ do_give(target)
+
+/mob/living/proc/do_give(var/mob/living/carbon/human/target)
+
+ if(src.incapacitated())
return
- if(!istype(target) || target.stat || target.lying || target.resting || target.handcuffed || target.client == null)
+ if(!istype(target) || target.incapacitated() || target.client == null)
return
var/obj/item/I = src.get_active_hand()
if(!I)
I = src.get_inactive_hand()
if(!I)
- to_chat(src, "You don't have anything in your hands to give to \the [target].")
+ to_chat(src, SPAN_WARNING("You don't have anything in your hands to give to \the [target]."))
return
- if(tgui_alert(target,"[src] wants to give you \a [I]. Will you accept it?","Item Offer",list("Yes","No")) == "No") //VOREStation Edit - make yes on the left to be consistent with other dialogs
- target.visible_message("\The [src] tried to hand \the [I] to \the [target], \
- but \the [target] didn't want it.")
+ usr.visible_message(SPAN_NOTICE("\The [usr] holds out \the [I] to \the [target]."), SPAN_NOTICE("You hold out \the [I] to \the [target], waiting for them to accept it."))
+
+ if(tgui_alert(target,"[src] wants to give you \a [I]. Will you accept it?","Item Offer",list("No","Yes")) == "No")
+ target.visible_message(SPAN_NOTICE("\The [src] tried to hand \the [I] to \the [target], but \the [target] didn't want it."))
return
if(!I) return
if(!Adjacent(target))
- to_chat(src, "You need to stay in reaching distance while giving an object.")
- to_chat(target, "\The [src] moved too far away.")
+ to_chat(src, SPAN_WARNING("You need to stay in reaching distance while giving an object"))
+ to_chat(target, SPAN_WARNING("\The [src] moved too far away."))
return
if(I.loc != src || !src.item_is_in_hands(I))
- to_chat(src, "You need to keep the item in your hands.")
- to_chat(target, "\The [src] seems to have given up on passing \the [I] to you.")
+ to_chat(src, SPAN_WARNING("You need to keep the item in your hands."))
+ to_chat(target, SPAN_WARNING("\The [src] seems to have given up on passing \the [I] to you."))
return
if(target.hands_are_full())
- to_chat(target, "Your hands are full.")
- to_chat(src, "Their hands are full.")
+ to_chat(target, SPAN_WARNING("Your hands are full."))
+ to_chat(src, SPAN_WARNING("Their hands are full."))
return
if(src.unEquip(I))
target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
- target.visible_message("\The [src] handed \the [I] to \the [target].")
+ target.visible_message(SPAN_NOTICE("\The [src] handed \the [I] to \the [target]"))
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 3e5dce2658..692f121ba8 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -95,6 +95,14 @@
/mob/living/carbon/human/get_gender()
return identifying_gender ? identifying_gender : gender
+/mob/living/carbon/human/name_gender() /// Returns proper names for gender identites
+ if(identifying_gender == "plural")
+ return "other"
+ if(identifying_gender == "neuter")
+ return "none"
+ else
+ return get_gender()
+
// This is the 'mechanical' check for synthetic-ness, not appearance
// Returns the company that made the synthetic
/mob/living/carbon/human/isSynthetic()
diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm
index 486264e2c8..9d8703d617 100644
--- a/code/modules/mob/living/carbon/human/species/species_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/species_vr.dm
@@ -81,6 +81,8 @@
var/list/blacklist = list("type", "loc", "client", "ckey")
//Makes thorough copy of species datum.
for(var/i in vars)
+ if(!(i in S.vars)) //Don't copy incompatible vars.
+ continue
if(S.vars[i] != vars[i] && !islist(vars[i])) //If vars are same, no point in copying.
if(i in blacklist)
continue
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index e2f87a160e..4252615d04 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1004,14 +1004,13 @@
swap_hand()
/mob/living/throw_item(atom/target)
- src.throw_mode_off()
- if(usr.stat || !target)
- return
- if(target.type == /obj/screen) return
+ if(incapacitated() || !target || istype(target, /obj/screen))
+ return FALSE
var/atom/movable/item = src.get_active_hand()
- if(!item) return
+ if(!item)
+ return FALSE
var/throw_range = item.throw_range
if (istype(item, /obj/item/weapon/grab))
@@ -1031,10 +1030,32 @@
if((N.health + N.halloss) < config.health_threshold_crit || N.stat == DEAD)
N.adjustBruteLoss(rand(10,30))
src.drop_from_inventory(G)
+ return TRUE
+ else
+ return FALSE
- src.drop_from_inventory(item)
- if(!item || !isturf(item.loc))
- return
+ if(!item)
+ return FALSE //Grab processing has a chance of returning null
+
+ if(a_intent == I_HELP && Adjacent(target) && isitem(item))
+ var/obj/item/I = item
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(H.in_throw_mode && H.a_intent == I_HELP && unEquip(I))
+ H.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
+ visible_message("[src] hands \the [H] \a [I].", SPAN_NOTICE("You give \the [target] \a [I]."))
+ else
+ to_chat(src, SPAN_NOTICE("You offer \the [I] to \the [target]."))
+ do_give(H)
+ return TRUE
+ make_item_drop_sound(I)
+ I.forceMove(get_turf(target))
+ return TRUE
+
+ drop_from_inventory(item)
+
+ if(!item || QDELETED(item))
+ return TRUE //It may not have thrown, but it sure as hell left your hand successfully.
//actually throw it!
src.visible_message("[src] has thrown [item].")
@@ -1055,6 +1076,7 @@
item.throw_at(target, throw_range, item.throw_speed, src)
+ return TRUE
/mob/living/get_sound_env(var/pressure_factor)
if (hallucination)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index dad668f3e5..b266a6d516 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -586,6 +586,9 @@
/mob/proc/get_gender()
return gender
+/mob/proc/name_gender()
+ return gender
+
/mob/proc/see(message)
if(!is_active())
return 0
@@ -1147,7 +1150,7 @@
//Throwing stuff
/mob/proc/throw_item(atom/target)
- return
+ return FALSE
/mob/proc/will_show_tooltip()
if(alpha <= EFFECTIVE_INVIS)
diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm
index 02ab02b3a2..3dac19cf36 100644
--- a/code/modules/overmap/spacetravel.dm
+++ b/code/modules/overmap/spacetravel.dm
@@ -5,7 +5,8 @@
known = FALSE
in_space = TRUE
-/obj/effect/overmap/visitable/sector/temporary/New(var/nx, var/ny)
+/obj/effect/overmap/visitable/sector/temporary/Initialize(var/nx, var/ny)
+ . = ..()
loc = locate(nx, ny, global.using_map.overmap_z)
x = nx
y = ny
@@ -20,16 +21,19 @@
testing("Temporary sector at [x],[y] was destroyed, returning empty zlevel [map_z[1]] to map datum.")
return ..()
-/obj/effect/overmap/visitable/sector/temporary/proc/can_die(var/mob/observer)
- testing("Checking if sector at [map_z[1]] can die.")
+/obj/effect/overmap/visitable/sector/temporary/proc/is_empty(var/mob/observer)
+ if(!LAZYLEN(map_z))
+ log_and_message_admins("CANARY: [src] tried to check is_empty, but map_z is `[map_z || "null"]`")
+ return TRUE
+ testing("Checking if sector at [map_z[1]] has no players.")
for(var/mob/M in global.player_list)
if(M != observer && (M.z in map_z))
testing("There are people on it.")
- return 0
- return 1
+ return FALSE
+ return TRUE
/obj/effect/overmap/visitable/sector/temporary/cleanup()
- if(can_die())
+ if(is_empty())
qdel(src)
/proc/get_deepspace(x,y)
diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm
index 01c57f2f76..50570e848c 100644
--- a/code/modules/random_map/_random_map_setup.dm
+++ b/code/modules/random_map/_random_map_setup.dm
@@ -3,20 +3,29 @@
*/
#define MIN_SURFACE_COUNT 500
-#define MIN_RARE_COUNT 200
-#define MIN_DEEP_COUNT 100
-#define RESOURCE_HIGH_MAX 4
-#define RESOURCE_HIGH_MIN 2
-#define RESOURCE_MID_MAX 3
-#define RESOURCE_MID_MIN 1
-#define RESOURCE_LOW_MAX 1
-#define RESOURCE_LOW_MIN 0
+#define MIN_RARE_COUNT 200
+#define MIN_DEEP_COUNT 100
+#define RESOURCE_HIGH_MAX 4
+#define RESOURCE_HIGH_MIN 2
+#define RESOURCE_MID_MAX 3
+#define RESOURCE_MID_MIN 1
+#define RESOURCE_LOW_MAX 1
+#define RESOURCE_LOW_MIN 0
-#define FLOOR_CHAR 0
-#define WALL_CHAR 1
-#define DOOR_CHAR 2
-#define EMPTY_CHAR 3
-#define ROOM_TEMP_CHAR 4
-#define MONSTER_CHAR 5
-#define ARTIFACT_TURF_CHAR 6
-#define ARTIFACT_CHAR 7
\ No newline at end of file
+#define FLOOR_CHAR 0
+#define WALL_CHAR 1
+#define DOOR_CHAR 2
+#define EMPTY_CHAR 3
+#define ROOM_TEMP_CHAR 4
+#define MONSTER_CHAR 5
+#define ARTIFACT_TURF_CHAR 6
+#define ARTIFACT_CHAR 7
+
+#define TRANSLATE_COORD(X,Y) ((((Y) - 1) * limit_x) + (X))
+#define TRANSLATE_AND_VERIFY_COORD(X,Y) TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,map.len)
+
+#define TRANSLATE_AND_VERIFY_COORD_MLEN(X,Y,LEN) \
+ tmp_cell = TRANSLATE_COORD(X,Y);\
+ if (tmp_cell < 1 || tmp_cell > LEN) {\
+ tmp_cell = null;\
+ }
diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm
index f3867d78bd..544b625a33 100644
--- a/code/modules/random_map/automata/automata.dm
+++ b/code/modules/random_map/automata/automata.dm
@@ -1,3 +1,7 @@
+#define CELL_ALIVE(VAL) (VAL == cell_live_value)
+#define KILL_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_dead_value;
+#define REVIVE_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_live_value;
+
/datum/random_map/automata
descriptor = "generic caves"
initial_wall_cell = 55
@@ -8,58 +12,60 @@
// Automata-specific procs and processing.
/datum/random_map/automata/generate_map()
- for(var/i=1;i<=iterations;i++)
- iterate(i)
+ for(var/iter = 1 to iterations)
+ var/list/next_map[limit_x*limit_y]
+ var/count
+ var/is_not_border_left
+ var/is_not_border_right
+ var/ilim_u
+ var/ilim_d
+ var/bottom_lim = ((limit_y - 1) * limit_x)
-/datum/random_map/automata/get_additional_spawns(var/value, var/turf/T)
- return
+ if (!islist(map))
+ set_map_size()
-/datum/random_map/automata/proc/iterate(var/iteration)
- var/list/next_map[limit_x*limit_y]
- for(var/x = 1, x <= limit_x, x++)
- for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
- next_map[current_cell] = map[current_cell]
- var/count = 0
+ for (var/i in 1 to (limit_x * limit_y))
+ count = 0
- // Every attempt to place this in a proc or a list has resulted in
- // the generator being totally bricked and useless. Fuck it. We're
- // hardcoding this shit. Feel free to rewrite and PR a fix. ~ Z
- var/tmp_cell = get_map_cell(x,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ is_not_border_left = i != 1 && ((i - 1) % limit_x)
+ is_not_border_right = i % limit_x
+
+ if (CELL_ALIVE(map[i])) // Center row.
+ ++count
+ if (is_not_border_left && CELL_ALIVE(map[i - 1]))
+ ++count
+ if (is_not_border_right && CELL_ALIVE(map[i + 1]))
+ ++count
+
+ if (i > limit_x) // top row
+ ilim_u = i - limit_x
+ if (CELL_ALIVE(map[ilim_u]))
+ ++count
+ if (is_not_border_left && CELL_ALIVE(map[ilim_u - 1]))
+ ++count
+ if (is_not_border_right && CELL_ALIVE(map[ilim_u + 1]))
+ ++count
+
+ if (i <= bottom_lim) // bottom row
+ ilim_d = i + limit_x
+ if (CELL_ALIVE(map[ilim_d]))
+ ++count
+ if (is_not_border_left && CELL_ALIVE(map[ilim_d - 1]))
+ ++count
+ if (is_not_border_right && CELL_ALIVE(map[ilim_d + 1]))
+ ++count
if(count >= cell_threshold)
- revive_cell(current_cell, next_map, (iteration == iterations))
- else
- kill_cell(current_cell, next_map, (iteration == iterations))
- map = next_map
+ REVIVE_CELL(i, next_map)
+ else // Nope. Can't be alive. Kill it.
+ KILL_CELL(i, next_map)
-// Check if a given tile counts as alive for the automata generations.
-/datum/random_map/automata/proc/cell_is_alive(var/value)
- return (value == cell_live_value) && (value != cell_dead_value)
+ CHECK_TICK
-/datum/random_map/automata/proc/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- if(!use_next_map)
- use_next_map = map
- use_next_map[target_cell] = cell_live_value
+ map = next_map
-/datum/random_map/automata/proc/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- if(!use_next_map)
- use_next_map = map
- use_next_map[target_cell] = cell_dead_value
\ No newline at end of file
+/datum/random_map/automata/get_additional_spawns(value, turf/T)
+ return
+
+#undef KILL_CELL
+#undef REVIVE_CELL
\ No newline at end of file
diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm
index ee9d4ddf54..9783c77541 100644
--- a/code/modules/random_map/automata/caves.dm
+++ b/code/modules/random_map/automata/caves.dm
@@ -18,28 +18,36 @@
return "X"
return ..(value)
-/datum/random_map/automata/cave_system/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- ..()
- if(final_iter)
- ore_turfs |= target_cell
-
-/datum/random_map/automata/cave_system/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- ..()
- if(final_iter)
- ore_turfs -= target_cell
-
// Create ore turfs.
/datum/random_map/automata/cave_system/cleanup()
+ var/tmp_cell
+ for (var/x = 1 to limit_x)
+ for (var/y = 1 to limit_y)
+ tmp_cell = TRANSLATE_COORD(x, y)
+ if (CELL_ALIVE(map[tmp_cell]))
+ ore_turfs += tmp_cell
+
+ testing("ASGEN: Found [ore_turfs.len] ore turfs.")
var/ore_count = round(map.len/20)
+ var/door_count = 0
+ var/empty_count = 0
while((ore_count>0) && (ore_turfs.len>0))
- if(!priority_process) sleep(-1)
+
+ if(!priority_process)
+ CHECK_TICK
+
var/check_cell = pick(ore_turfs)
ore_turfs -= check_cell
if(prob(75))
map[check_cell] = DOOR_CHAR // Mineral block
+ door_count += 1
else
map[check_cell] = EMPTY_CHAR // Rare mineral block.
+ empty_count += 1
ore_count--
+
+ testing("ASGEN: Set [door_count] turfs to random minerals.")
+ testing("ASGEN: Set [empty_count] turfs to high-chance random minerals.")
return 1
/datum/random_map/automata/cave_system/apply_to_turf(var/x,var/y)
@@ -62,4 +70,4 @@
T.make_ore(1)
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
//VOREStation Edit End
- return T
\ No newline at end of file
+ return T
diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm
index 8e45a21c3f..d8702a59a6 100644
--- a/code/modules/random_map/noise/noise.dm
+++ b/code/modules/random_map/noise/noise.dm
@@ -10,6 +10,7 @@
var/cell_base // Set in New()
var/initial_cell_range // Set in New()
var/smoothing_iterations = 0
+ var/smooth_single_tiles // Single turfs of different value are not allowed
/datum/random_map/noise/New()
initial_cell_range = cell_range/5
@@ -35,13 +36,13 @@
// Instantiate the grid.
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- map[get_map_cell(x,y)] = 0
+ map[TRANSLATE_COORD(x,y)] = 0
// Now dump in the actual random data.
- map[get_map_cell(1,1)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(1,limit_y)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(limit_x,limit_y)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(limit_x,1)] = cell_base+rand(initial_cell_range)
+ map[TRANSLATE_COORD(1,1)] = cell_base+rand(initial_cell_range)
+ map[TRANSLATE_COORD(1,limit_y)] = cell_base+rand(initial_cell_range)
+ map[TRANSLATE_COORD(limit_x,limit_y)] = cell_base+rand(initial_cell_range)
+ map[TRANSLATE_COORD(limit_x,1)] = cell_base+rand(initial_cell_range)
/datum/random_map/noise/generate_map()
// Begin recursion.
@@ -69,33 +70,33 @@
(x,y)----------(x+hsize,y)----------(x+isize,y)
*/
// Central edge values become average of corners.
- map[get_map_cell(x+hsize,y+isize)] = round((\
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x+isize,y+isize)] \
+ map[TRANSLATE_COORD(x+hsize,y+isize)] = round((\
+ map[TRANSLATE_COORD(x,y+isize)] + \
+ map[TRANSLATE_COORD(x+isize,y+isize)] \
)/2)
- map[get_map_cell(x+hsize,y)] = round(( \
- map[get_map_cell(x,y)] + \
- map[get_map_cell(x+isize,y)] \
+ map[TRANSLATE_COORD(x+hsize,y)] = round(( \
+ map[TRANSLATE_COORD(x,y)] + \
+ map[TRANSLATE_COORD(x+isize,y)] \
)/2)
map[get_map_cell(x,y+hsize)] = round(( \
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x,y)] \
+ map[TRANSLATE_COORD(x,y+isize)] + \
+ map[TRANSLATE_COORD(x,y)] \
)/2)
- map[get_map_cell(x+isize,y+hsize)] = round(( \
- map[get_map_cell(x+isize,y+isize)] + \
- map[get_map_cell(x+isize,y)] \
+ map[TRANSLATE_COORD(x+isize,y+hsize)] = round(( \
+ map[TRANSLATE_COORD(x+isize,y+isize)] + \
+ map[TRANSLATE_COORD(x+isize,y)] \
)/2)
// Centre value becomes the average of all other values + possible random variance.
- var/current_cell = get_map_cell(x+hsize,y+hsize)
+ var/current_cell = TRANSLATE_COORD(x+hsize,y+hsize)
map[current_cell] = round(( \
- map[get_map_cell(x+hsize,y+isize)] + \
- map[get_map_cell(x+hsize,y)] + \
- map[get_map_cell(x,y+hsize)] + \
- map[get_map_cell(x+isize,y)] \
+ map[TRANSLATE_COORD(x+hsize,y+isize)] + \
+ map[TRANSLATE_COORD(x+hsize,y)] + \
+ map[TRANSLATE_COORD(x,y+hsize)] + \
+ map[TRANSLATE_COORD(x+isize,y)] \
)/4)
if(prob(random_variance_chance))
@@ -104,58 +105,58 @@
// Recurse until size is too small to subdivide.
if(isize>3)
- if(!priority_process) sleep(-1)
+ if(!priority_process)
+ CHECK_TICK
iteration++
subdivide(iteration, x, y, hsize)
subdivide(iteration, x+hsize, y, hsize)
subdivide(iteration, x, y+hsize, hsize)
subdivide(iteration, x+hsize, y+hsize, hsize)
+#define NOISE2VALUE(X) CLAMP(round(((X)/cell_range)*10), 0, 9)
/datum/random_map/noise/cleanup()
-
- for(var/i = 1;i<=smoothing_iterations;i++)
+ var/is_not_border_left
+ var/is_not_border_right
+ for(var/i = 1 to smoothing_iterations)
var/list/next_map[limit_x*limit_y]
- for(var/x = 1, x <= limit_x, x++)
- for(var/y = 1, y <= limit_y, y++)
-
- var/current_cell = get_map_cell(x,y)
+ for(var/x = 1 to limit_x)
+ for(var/y = 1 to limit_y)
+ var/current_cell = TRANSLATE_COORD(x,y)
next_map[current_cell] = map[current_cell]
- var/val_count = 0
- var/total = 0
+ var/val_count = 1
+ var/total = map[current_cell]
+
+ is_not_border_left = (x != 1)
+ is_not_border_right = (x != limit_x)
+
+ // Center row. Center value's already been done above.
+ if (is_not_border_left)
+ total += map[TRANSLATE_COORD(x - 1, y)]
+ ++val_count
+ if (is_not_border_right)
+ total += map[TRANSLATE_COORD(x + 1, y)]
+ ++val_count
+
+ if (y != 1) // top row
+ total += map[TRANSLATE_COORD(x, y - 1)]
+ ++val_count
+ if (is_not_border_left)
+ total += map[TRANSLATE_COORD(x - 1, y - 1)]
+ ++val_count
+ if (is_not_border_right)
+ total += map[TRANSLATE_COORD(x + 1, y - 1)]
+ ++val_count
+
+ if (y != limit_y) // bottom row
+ total += map[TRANSLATE_COORD(x, y + 1)]
+ ++val_count
+ if (is_not_border_left)
+ total += map[TRANSLATE_COORD(x - 1, y + 1)]
+ ++val_count
+ if (is_not_border_right)
+ total += map[TRANSLATE_COORD(x + 1, y + 1)]
+ ++val_count
- // Get the average neighboring value.
- var/tmp_cell = get_map_cell(x+1,y+1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x-1,y-1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x+1,y-1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x-1,y+1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x-1,y)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x,y-1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x+1,y)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
- tmp_cell = get_map_cell(x,y+1)
- if(tmp_cell)
- total += map[tmp_cell]
- val_count++
total = round(total/val_count)
if(abs(map[current_cell]-total) <= cell_smooth_amt)
@@ -165,4 +166,35 @@
else if(map[current_cell] < total)
map[current_cell]-=cell_smooth_amt
map[current_cell] = max(0,min(cell_range,map[current_cell]))
- map = next_map
\ No newline at end of file
+ map = next_map
+
+ if(smooth_single_tiles)
+ var/list/buddies = list()
+ for(var/x in 1 to limit_x - 1)
+ for(var/y in 1 to limit_y - 1)
+ var/mapcell = get_map_cell(x,y)
+ var/list/neighbors = get_neighbors(x, y)
+ buddies.Cut()
+ var/mapcellval = NOISE2VALUE(map[mapcell])
+ for(var/cell in neighbors)
+ if(NOISE2VALUE(map[cell]) == mapcellval)
+ buddies |= cell
+ if(!length(buddies))
+ map[mapcell] = map[pick(neighbors)]
+#undef NOISE2VALUE
+
+/datum/random_map/noise/proc/get_neighbors(x, y, include_diagonals)
+ . = list()
+ if(!include_diagonals)
+ var/static/list/ortho_offsets = list(list(-1, 0), list(1, 0), list(0, 1), list(0,-1))
+ for(var/list/offset in ortho_offsets)
+ var/tmp_cell = get_map_cell(x+offset[1],y+offset[2])
+ if(tmp_cell)
+ . += tmp_cell
+ else
+ for(var/dx in -1 to 1)
+ for(var/dy in -1 to 1)
+ var/tmp_cell = get_map_cell(x+dx,y+dy)
+ if(tmp_cell)
+ . += tmp_cell
+ . -= get_map_cell(x,y)
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 09df3a64e2..5f5a06221a 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -215,6 +215,7 @@
//Messages if it's a mob
if(isliving(thing))
var/mob/living/M = thing
+ M.updateVRPanel()
if(desc)
to_chat(M, "[desc]")
var/taste
@@ -244,6 +245,8 @@
/obj/belly/proc/vore_fx(mob/living/L)
if(!istype(L))
return
+ if(!L.client)
+ return
if(!L.show_vore_fx)
L.clear_fullscreen("belly")
return
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index e96d367e7c..2aee027c95 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -22,6 +22,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
noise_chance = 50
/datum/digest_mode/digest/process_mob(obj/belly/B, mob/living/L)
+ var/oldstat = L.stat
//Pref protection!
if(!L.digestable || L.absorbed)
return null
@@ -59,6 +60,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved.
else
B.owner.adjust_nutrition(4.5 * (damage_gain) / difference)
+ if(L.stat != oldstat)
+ return list("to_update" = TRUE)
/datum/digest_mode/absorb
id = DM_ABSORB
@@ -120,6 +123,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
noise_chance = 50 //Wet heals! The secret is you can leave this on for gurgle noises for fun.
/datum/digest_mode/heal/process_mob(obj/belly/B, mob/living/L)
+ var/oldstat = L.stat
if(L.stat == DEAD)
return null // Can't heal the dead with healbelly
if(B.owner.nutrition > 90 && (L.health < L.maxHealth))
@@ -134,6 +138,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
else if(B.owner.nutrition > 90 && (L.nutrition <= 400))
B.owner.adjust_nutrition(-1)
L.adjust_nutrition(1)
+ if(L.stat != oldstat)
+ return list("to_update" = TRUE)
// E G G
/datum/digest_mode/egg
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index 15099c56f5..95f3089dcb 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -63,10 +63,9 @@
SEND_SOUND(M, prey_digest)
play_sound = pred_digest
- if(to_update)
- updateVRPanels()
-
if(!LAZYLEN(touchable_mobs))
+ if(to_update)
+ updateVRPanels()
if(play_sound)
for(var/mob/M in hearers(VORE_SOUND_RANGE, get_turf(owner))) //so we don't fill the whole room with the sound effect
if(!M.is_preference_enabled(/datum/client_preference/digestion_noises))
@@ -124,6 +123,9 @@
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
to_chat(M, "[formatted_message]")
+
+ if(to_update)
+ updateVRPanels()
/obj/belly/proc/handle_touchable_atoms(list/touchable_atoms)
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 2b00d23391..eebcb40214 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -638,6 +638,7 @@
return FALSE
host.vore_selected.digest_mode = new_mode
+ host.vore_selected.updateVRPanels()
. = TRUE
if("b_addons")
var/list/menu_list = host.vore_selected.mode_flag_list.Copy()
diff --git a/icons/inventory/accessory/item.dmi b/icons/inventory/accessory/item.dmi
index 4aa7121c5e..9c51533b02 100644
Binary files a/icons/inventory/accessory/item.dmi and b/icons/inventory/accessory/item.dmi differ
diff --git a/icons/inventory/accessory/mob.dmi b/icons/inventory/accessory/mob.dmi
index d4c479ef0d..dcf3765fe4 100644
Binary files a/icons/inventory/accessory/mob.dmi and b/icons/inventory/accessory/mob.dmi differ
diff --git a/icons/inventory/belt/item.dmi b/icons/inventory/belt/item.dmi
index b4bc29446f..8c32c4552b 100644
Binary files a/icons/inventory/belt/item.dmi and b/icons/inventory/belt/item.dmi differ
diff --git a/icons/inventory/belt/mob.dmi b/icons/inventory/belt/mob.dmi
index c3f0f0d956..25de974858 100644
Binary files a/icons/inventory/belt/mob.dmi and b/icons/inventory/belt/mob.dmi differ
diff --git a/icons/inventory/hands/item.dmi b/icons/inventory/hands/item.dmi
index 9949cefb10..556cfcfb56 100644
Binary files a/icons/inventory/hands/item.dmi and b/icons/inventory/hands/item.dmi differ
diff --git a/icons/inventory/hands/mob.dmi b/icons/inventory/hands/mob.dmi
index 32008f190b..e3912aa269 100644
Binary files a/icons/inventory/hands/mob.dmi and b/icons/inventory/hands/mob.dmi differ
diff --git a/icons/inventory/head/item.dmi b/icons/inventory/head/item.dmi
index b74c635711..35a07f74bf 100644
Binary files a/icons/inventory/head/item.dmi and b/icons/inventory/head/item.dmi differ
diff --git a/icons/inventory/head/item_vr.dmi b/icons/inventory/head/item_vr.dmi
index c80a9e2927..1f298898de 100644
Binary files a/icons/inventory/head/item_vr.dmi and b/icons/inventory/head/item_vr.dmi differ
diff --git a/icons/inventory/head/item_vr_vulpkanin.dmi b/icons/inventory/head/item_vr_vulpkanin.dmi
index b83b041501..dce35a0549 100644
Binary files a/icons/inventory/head/item_vr_vulpkanin.dmi and b/icons/inventory/head/item_vr_vulpkanin.dmi differ
diff --git a/icons/inventory/head/mob.dmi b/icons/inventory/head/mob.dmi
index ed9e936b7d..1e8a6315bd 100644
Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ
diff --git a/icons/inventory/head/mob_tajaran.dmi b/icons/inventory/head/mob_tajaran.dmi
index 84f3982c2d..6493b9948f 100644
Binary files a/icons/inventory/head/mob_tajaran.dmi and b/icons/inventory/head/mob_tajaran.dmi differ
diff --git a/icons/inventory/head/mob_vr.dmi b/icons/inventory/head/mob_vr.dmi
index dff6cb7eab..2c417cdd25 100644
Binary files a/icons/inventory/head/mob_vr.dmi and b/icons/inventory/head/mob_vr.dmi differ
diff --git a/icons/inventory/head/mob_vr_teshari.dmi b/icons/inventory/head/mob_vr_teshari.dmi
index bed3f6532f..4ebb53d2d8 100644
Binary files a/icons/inventory/head/mob_vr_teshari.dmi and b/icons/inventory/head/mob_vr_teshari.dmi differ
diff --git a/icons/inventory/head/mob_vr_unathi.dmi b/icons/inventory/head/mob_vr_unathi.dmi
index 730be5905f..fd9a2904ca 100644
Binary files a/icons/inventory/head/mob_vr_unathi.dmi and b/icons/inventory/head/mob_vr_unathi.dmi differ
diff --git a/icons/inventory/head/mob_vr_vulpkanin.dmi b/icons/inventory/head/mob_vr_vulpkanin.dmi
index bff1c5f81b..902887853f 100644
Binary files a/icons/inventory/head/mob_vr_vulpkanin.dmi and b/icons/inventory/head/mob_vr_vulpkanin.dmi differ
diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi
index 3f12359223..6390e02435 100644
Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ
diff --git a/icons/inventory/suit/item_vr_vulpkanin.dmi b/icons/inventory/suit/item_vr_vulpkanin.dmi
index feeb780f60..92b5f1fc06 100644
Binary files a/icons/inventory/suit/item_vr_vulpkanin.dmi and b/icons/inventory/suit/item_vr_vulpkanin.dmi differ
diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi
index ddad77a5c3..8736d3d420 100644
Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ
diff --git a/icons/inventory/suit/mob_vr_vulpkanin.dmi b/icons/inventory/suit/mob_vr_vulpkanin.dmi
index 7d0e5376bd..8e6bf59b58 100644
Binary files a/icons/inventory/suit/mob_vr_vulpkanin.dmi and b/icons/inventory/suit/mob_vr_vulpkanin.dmi differ
diff --git a/icons/inventory/uniform/item.dmi b/icons/inventory/uniform/item.dmi
index eb30629c03..9f46849608 100644
Binary files a/icons/inventory/uniform/item.dmi and b/icons/inventory/uniform/item.dmi differ
diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi
index f51574cbd9..a6bb42e1d7 100644
Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ
diff --git a/icons/inventory/uniform/mob_rolled_down.dmi b/icons/inventory/uniform/mob_rolled_down.dmi
index 7c7afd8594..01da7ea4a3 100644
Binary files a/icons/inventory/uniform/mob_rolled_down.dmi and b/icons/inventory/uniform/mob_rolled_down.dmi differ
diff --git a/icons/inventory/uniform/mob_sleeves_rolled.dmi b/icons/inventory/uniform/mob_sleeves_rolled.dmi
index 5803d1a3a1..88ccb64ad1 100644
Binary files a/icons/inventory/uniform/mob_sleeves_rolled.dmi and b/icons/inventory/uniform/mob_sleeves_rolled.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 1e0de2d20e..f67b29720d 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_face_m.dmi b/icons/mob/human_face_m.dmi
index 0841388673..0fbb422fd3 100644
Binary files a/icons/mob/human_face_m.dmi and b/icons/mob/human_face_m.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 7a3adca781..327eb3b9ce 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_holder.dmi b/icons/mob/items/lefthand_holder.dmi
index aad27da53a..3788ee9379 100644
Binary files a/icons/mob/items/lefthand_holder.dmi and b/icons/mob/items/lefthand_holder.dmi differ
diff --git a/icons/mob/items/lefthand_melee.dmi b/icons/mob/items/lefthand_melee.dmi
index 1aca98f66f..e965d64b43 100644
Binary files a/icons/mob/items/lefthand_melee.dmi and b/icons/mob/items/lefthand_melee.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 4098221f59..75d2c9ac51 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_holder.dmi b/icons/mob/items/righthand_holder.dmi
index 0015ff061b..de4dc80295 100644
Binary files a/icons/mob/items/righthand_holder.dmi and b/icons/mob/items/righthand_holder.dmi differ
diff --git a/icons/mob/items/righthand_melee.dmi b/icons/mob/items/righthand_melee.dmi
index b4a1a9f341..3fee6cb6bd 100644
Binary files a/icons/mob/items/righthand_melee.dmi and b/icons/mob/items/righthand_melee.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index b8b832471d..1ee1f2fc1f 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 0ad63f5424..c153951397 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 06be929179..97ee06a906 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index a8b57870bf..2e9090c763 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/maps/southern_cross/loadout/loadout_vr.dm b/maps/southern_cross/loadout/loadout_vr.dm
index db62b7394b..45b886e8b4 100644
--- a/maps/southern_cross/loadout/loadout_vr.dm
+++ b/maps/southern_cross/loadout/loadout_vr.dm
@@ -9,6 +9,11 @@
allowed_roles = list("Pilot")
/datum/gear/head/pilot/talon
- display_name = "helmet, Talon pilot (Pilot)"
+ display_name = "helmet, talon pilot (Pilot)"
path = /obj/item/clothing/head/pilot_vr/talon
+ allowed_roles = list("Pilot")
+
+/datum/gear/head/pilot/mbill
+ display_name = "helmet, major bill's (Pilot)"
+ path = /obj/item/clothing/head/pilot_vr/mbill
allowed_roles = list("Pilot")
\ No newline at end of file
diff --git a/sound/machines/door/knock_glass.ogg b/sound/machines/door/knock_glass.ogg
new file mode 100644
index 0000000000..8878dda801
Binary files /dev/null and b/sound/machines/door/knock_glass.ogg differ
diff --git a/sound/machines/door/knock_wood.wav b/sound/machines/door/knock_wood.wav
new file mode 100644
index 0000000000..dae7b95b99
Binary files /dev/null and b/sound/machines/door/knock_wood.wav differ
diff --git a/sound/weapons/whip.ogg b/sound/weapons/whip.ogg
new file mode 100644
index 0000000000..3c9a4aff09
Binary files /dev/null and b/sound/weapons/whip.ogg differ