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