From 170a38a3a72c1034bf64781177809612de2bd239 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 17 Jun 2020 02:22:56 +0300 Subject: [PATCH 1/5] Porting sutures and meshes from /TG/ (#12532) * Porting sutures and meshes from /TG/ * Recipes fix --- .../lavaland_surface_biodome_winter.dmm | 4 +- _maps/RandomRuins/SpaceRuins/TheDerelict.dmm | 8 +- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 2 +- _maps/RandomZLevels/away_mission/wildwest.dmm | 2 +- _maps/map_files/CogStation/CogStation.dmm | 4 +- .../map_files/Deltastation/DeltaStation2.dmm | 20 +-- _maps/map_files/KiloStation/KiloStation.dmm | 10 +- _maps/map_files/LambdaStation/lambda.dmm | 16 +-- _maps/map_files/MetaStation/MetaStation.dmm | 22 ++-- _maps/map_files/PubbyStation/PubbyStation.dmm | 6 +- _maps/map_files/generic/CentCom.dmm | 8 +- _maps/shuttles/emergency_meta.dmm | 4 +- _maps/shuttles/emergency_russiafightpit.dmm | 4 +- _maps/shuttles/infiltrator_basic.dmm | 4 +- code/_globalvars/lists/maintenance_loot.dm | 2 +- .../crafting/recipes/recipes_misc.dm | 10 +- .../game/objects/effects/spawners/lootdrop.dm | 2 +- code/game/objects/items/stacks/medical.dm | 122 +++++++++++++++++- code/game/objects/items/storage/boxes.dm | 4 +- code/game/objects/items/storage/firstaid.dm | 20 +-- .../objects/structures/ghost_role_spawners.dm | 2 +- code/modules/holiday/halloween/bartholomew.dm | 2 +- .../chemistry/reagents/medicine_reagents.dm | 4 +- 23 files changed, 201 insertions(+), 81 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index f48801c199..b71b6838b0 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -3,9 +3,9 @@ /turf/template_noop, /area/template_noop) "ac" = ( -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/mesh, /obj/structure/table, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/plating, /area/ruin/powered/snow_biodome) "ad" = ( diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index 1464dd9529..ac1d1ca4d8 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -2368,7 +2368,7 @@ /turf/open/floor/plasteel/airless/white, /area/ruin/space/derelict/medical) "hW" = ( -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/plasteel/airless/white, /area/ruin/space/derelict/medical) "hX" = ( @@ -2610,13 +2610,13 @@ /turf/open/floor/plasteel/airless/white, /area/ruin/space/derelict/medical) "iM" = ( -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/plasteel/airless{ icon_state = "damaged2" }, /area/ruin/space/derelict/medical) "iN" = ( -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/mesh, /turf/open/floor/plasteel/airless{ icon_state = "damaged3" }, @@ -2866,7 +2866,7 @@ /turf/open/floor/plasteel/airless/white, /area/ruin/space/derelict/medical) "jB" = ( -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/mesh, /turf/open/floor/plasteel/airless/white, /area/ruin/space/derelict/medical) "jC" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 89e2c553b9..343c79a895 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -843,7 +843,7 @@ /area/ruin/space/has_grav/ancientstation/deltacorridor) "cx" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/deltacorridor) diff --git a/_maps/RandomZLevels/away_mission/wildwest.dmm b/_maps/RandomZLevels/away_mission/wildwest.dmm index 064be0907a..76c59a8e1d 100644 --- a/_maps/RandomZLevels/away_mission/wildwest.dmm +++ b/_maps/RandomZLevels/away_mission/wildwest.dmm @@ -1610,7 +1610,7 @@ /turf/open/floor/plasteel/cafeteria, /area/awaymission/wildwest/mines) "fi" = ( -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /obj/effect/turf_decal/tile/blue{ dir = 4 }, diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 5025a99ec4..ce96e027ef 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -15264,8 +15264,8 @@ }, /obj/item/stack/medical/gauze, /obj/item/reagent_containers/blood, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 5a630f05ef..8a4b5f8130 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -77360,8 +77360,8 @@ "cBx" = ( /obj/structure/rack, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/item/reagent_containers/syringe/epinephrine{ pixel_x = -3; pixel_y = 3 @@ -85495,8 +85495,8 @@ "cPs" = ( /obj/structure/table, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -91727,8 +91727,8 @@ "cZH" = ( /obj/structure/table/glass, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/machinery/camera{ c_tag = "Medbay - Sleepers"; name = "medbay camera"; @@ -94026,8 +94026,8 @@ "ddp" = ( /obj/structure/table/glass, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/structure/sign/warning/nosmoking{ pixel_y = 32 }, @@ -101144,8 +101144,8 @@ "dqj" = ( /obj/structure/table, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 1c3741c18e..b205e7c324 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -25243,7 +25243,7 @@ pixel_y = 4 }, /obj/item/lighter, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/plasteel/dark, /area/maintenance/port) "aPO" = ( @@ -27105,8 +27105,8 @@ "aSy" = ( /obj/structure/table, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture{ pixel_x = 4 }, /obj/item/storage/firstaid/regular, @@ -55554,10 +55554,10 @@ /obj/structure/table, /obj/item/storage/firstaid/regular, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/ointment{ +/obj/item/stack/medical/mesh{ pixel_y = 4 }, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm index 901824a5de..825bc3c2aa 100644 --- a/_maps/map_files/LambdaStation/lambda.dmm +++ b/_maps/map_files/LambdaStation/lambda.dmm @@ -16073,11 +16073,11 @@ pixel_y = -1 }, /obj/item/reagent_containers/dropper, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ pixel_x = -2; pixel_y = 6 }, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/mesh, /obj/item/healthanalyzer, /turf/open/floor/plasteel/white, /area/science/explab) @@ -34517,8 +34517,8 @@ /area/gateway) "bmm" = ( /obj/structure/rack, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, /obj/item/reagent_containers/syringe/charcoal, /obj/item/reagent_containers/syringe/epinephrine{ pixel_x = -1; @@ -64186,8 +64186,8 @@ pixel_y = -32 }, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/structure/table/glass, /turf/open/floor/plating, /area/medical/abandoned) @@ -75822,11 +75822,11 @@ /obj/item/folder, /obj/item/folder, /obj/structure/table/reinforced, -/obj/item/stack/medical/ointment{ +/obj/item/stack/medical/mesh{ pixel_x = 3; pixel_y = -2 }, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ pixel_x = -3; pixel_y = 2 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index e8af6a21b5..c08670c2c0 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -4919,11 +4919,11 @@ /area/maintenance/solars/port/fore) "ajj" = ( /obj/structure/table, -/obj/item/stack/medical/ointment{ +/obj/item/stack/medical/mesh{ pixel_x = 3; pixel_y = -2 }, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ pixel_x = -3; pixel_y = 2 }, @@ -46804,8 +46804,8 @@ /area/bridge/showroom/corporate) "bOG" = ( /obj/structure/rack, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, /obj/item/reagent_containers/syringe/charcoal, /obj/item/reagent_containers/syringe/epinephrine{ pixel_x = -1; @@ -52251,8 +52251,8 @@ "cap" = ( /obj/structure/table, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -58829,11 +58829,11 @@ pixel_y = -1 }, /obj/item/reagent_containers/dropper, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ pixel_x = -2; pixel_y = 6 }, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/mesh, /obj/item/healthanalyzer, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -60419,9 +60419,9 @@ /obj/effect/decal/cleanable/blood/gibs/limb, /obj/structure/rack, /obj/item/storage/firstaid/regular, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/item/clothing/glasses/hud/health, /turf/open/floor/plating, /area/maintenance/starboard/aft) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index fabb2b7217..18d1b115a4 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -34525,8 +34525,8 @@ /area/maintenance/department/engine) "bBY" = ( /obj/structure/closet/crate/medical, -/obj/item/stack/medical/ointment, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, /turf/open/floor/plating, /area/maintenance/department/engine) "bBZ" = ( @@ -40238,7 +40238,7 @@ }, /area/maintenance/department/chapel/monastery) "bNF" = ( -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/plasteel/dark, /area/maintenance/department/engine) "bNG" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 66072817f4..f82ba2d735 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -49,7 +49,7 @@ /area/holodeck/rec_center/bunker) "ak" = ( /obj/structure/table, -/obj/item/stack/medical/ointment{ +/obj/item/stack/medical/mesh{ heal_burn = 10 }, /turf/open/floor/holofloor/asteroid, @@ -355,7 +355,7 @@ /area/holodeck/rec_center/lounge) "bc" = ( /obj/structure/table, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ heal_brute = 10 }, /turf/open/floor/holofloor/asteroid, @@ -10568,8 +10568,8 @@ /area/wizard_station) "yD" = ( /obj/structure/table/wood, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /turf/open/floor/engine/cult, /area/wizard_station) "yE" = ( diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 8df487714e..cae3139c41 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -333,8 +333,8 @@ "aT" = ( /obj/structure/table, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/machinery/light{ dir = 4 }, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 65fc7e30a2..206ebc4687 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -365,11 +365,11 @@ /area/shuttle/escape) "bi" = ( /obj/structure/table, -/obj/item/stack/medical/bruise_pack{ +/obj/item/stack/medical/suture{ pixel_x = 5; pixel_y = 5 }, -/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/suture, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bj" = ( diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index f5861fab32..42fe684e05 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -608,8 +608,8 @@ "bu" = ( /obj/structure/table/reinforced, /obj/item/stack/medical/gauze, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/medical) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 396eb87723..69d4794e87 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/airlock_painter = 1, /obj/item/stack/cable_coil/random = 4, /obj/item/stack/cable_coil/random/five = 6, - /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/medical/suture = 1, /obj/item/stack/rods/ten = 9, /obj/item/stack/rods/twentyfive = 1, /obj/item/stack/rods/fifty = 1, diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 1ad53aae67..b076407efc 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -124,9 +124,9 @@ category = CAT_MISC subcategory = CAT_TOOL -/datum/crafting_recipe/bruise_pack - name = "Bruise Pack" - result = /obj/item/stack/medical/bruise_pack/one +/datum/crafting_recipe/brute_pack + name = "Suture Pack" + result = /obj/item/stack/medical/suture/one time = 1 reqs = list(/obj/item/stack/medical/gauze = 1, /datum/reagent/medicine/styptic_powder = 10) @@ -134,8 +134,8 @@ subcategory = CAT_TOOL /datum/crafting_recipe/burn_pack - name = "Burn Ointment" - result = /obj/item/stack/medical/ointment/one + name = "Regenerative Mesh" + result = /obj/item/stack/medical/mesh/one time = 1 reqs = list(/obj/item/stack/medical/gauze = 1, /datum/reagent/medicine/silver_sulfadiazine = 10) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 5b2006b6f3..57b25a8901 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -491,7 +491,7 @@ /obj/item/kitchen/knife = 5, /obj/item/screwdriver = 5, /obj/item/crowbar/red = 1, //Dont you need a crowbar to open this? - /obj/item/stack/medical/bruise_pack = 3, + /obj/item/stack/medical/suture = 3, /obj/item/reagent_containers/food/drinks/bottle/vodka = 2, /obj/item/radio = 5, /obj/item/flashlight = 4, diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 98bf02906b..e6403e83cc 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -13,18 +13,33 @@ novariants = FALSE item_flags = NOBLUDGEON var/self_delay = 50 + var/other_delay = 0 + var/repeating = FALSE /obj/item/stack/medical/attack(mob/living/M, mob/user) . = ..() + try_heal(M, user) + + +/obj/item/stack/medical/proc/try_heal(mob/living/M, mob/user, silent = FALSE) if(!M.can_inject(user, TRUE)) return if(M == user) - user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") + if(!silent) + user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE))) return + else if(other_delay) + if(!silent) + user.visible_message("[user] starts to apply \the [src] on [M].", "You begin applying \the [src] on [M]...") + if(!do_mob(user, M, other_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE))) + return + if(heal(M, user)) log_combat(user, M, "healed", src.name) use(1) + if(repeating && amount > 0) + try_heal(M, user, TRUE) /obj/item/stack/medical/proc/heal(mob/living/M, mob/user) @@ -174,3 +189,108 @@ /obj/item/stack/medical/ointment/suicide_act(mob/living/user) user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?") return TOXLOSS + +/obj/item/stack/medical/suture + name = "suture" + desc = "Sterile sutures used to seal up cuts and lacerations." + gender = PLURAL + singular_name = "suture" + icon_state = "suture" + self_delay = 30 + other_delay = 10 + amount = 15 + max_amount = 15 + repeating = TRUE + var/heal_brute = 10 + grind_results = list(/datum/reagent/medicine/spaceacillin = 2) + +/obj/item/stack/medical/suture/one + amount = 1 + +/obj/item/stack/medical/suture/heal(mob/living/M, mob/user) + . = ..() + if(M.stat == DEAD) + to_chat(user, "[M] is dead! You can not help [M.p_them()].") + return + if(iscarbon(M)) + return heal_carbon(M, user, heal_brute, 0) + if(isanimal(M)) + var/mob/living/simple_animal/critter = M + if (!(critter.healable)) + to_chat(user, "You cannot use \the [src] on [M]!") + return FALSE + else if (critter.health == critter.maxHealth) + to_chat(user, "[M] is at full health.") + return FALSE + user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") + M.heal_bodypart_damage(heal_brute) + return TRUE + + to_chat(user, "You can't heal [M] with the \the [src]!") + +/obj/item/stack/medical/mesh + name = "regenerative mesh" + desc = "A bacteriostatic mesh used to dress burns." + gender = PLURAL + singular_name = "regenerative mesh" + icon_state = "regen_mesh" + self_delay = 30 + other_delay = 10 + amount = 15 + max_amount = 15 + repeating = TRUE + var/heal_burn = 10 + var/is_open = TRUE ///This var determines if the sterile packaging of the mesh has been opened. + grind_results = list(/datum/reagent/medicine/spaceacillin = 2) + +/obj/item/stack/medical/mesh/one + amount = 1 + +/obj/item/stack/medical/mesh/Initialize() + . = ..() + if(amount == max_amount) //only seal full mesh packs + is_open = FALSE + update_icon() + +/obj/item/stack/medical/mesh/update_icon_state() + if(!is_open) + icon_state = "regen_mesh_closed" + else + return ..() + +/obj/item/stack/medical/mesh/heal(mob/living/M, mob/user) + . = ..() + if(M.stat == DEAD) + to_chat(user, "[M] is dead! You can not help [M.p_them()].") + return + if(iscarbon(M)) + return heal_carbon(M, user, 0, heal_burn) + to_chat(user, "You can't heal [M] with the \the [src]!") + + +/obj/item/stack/medical/mesh/try_heal(mob/living/M, mob/user, silent = FALSE) + if(!is_open) + to_chat(user, "You need to open [src] first.") + return + . = ..() + +/obj/item/stack/medical/mesh/AltClick(mob/living/user) + if(!is_open) + to_chat(user, "You need to open [src] first.") + return + . = ..() + +/obj/item/stack/medical/mesh/attack_hand(mob/user) + if(!is_open & user.get_inactive_held_item() == src) + to_chat(user, "You need to open [src] first.") + return + . = ..() + +/obj/item/stack/medical/mesh/attack_self(mob/user) + if(!is_open) + is_open = TRUE + to_chat(user, "You open the sterile mesh package.") + update_icon() + playsound(src, 'sound/items/poster_ripped.ogg', 20, TRUE) + return + . = ..() diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 41c5204bdc..08b5f18ead 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -745,8 +745,8 @@ ////// /obj/item/storage/box/hug/medical/PopulateContents() - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/mesh(src) new /obj/item/reagent_containers/hypospray/medipen(src) // Clown survival box diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index ba2746844c..e082c15741 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -37,10 +37,10 @@ if(empty) return new /obj/item/stack/medical/gauze(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/mesh(src) + new /obj/item/stack/medical/mesh(src) new /obj/item/reagent_containers/hypospray/medipen(src) new /obj/item/healthanalyzer(src) @@ -52,12 +52,12 @@ if(empty) return new /obj/item/stack/medical/gauze(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/bruise_pack(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/stack/medical/ointment(src) - new /obj/item/stack/medical/ointment(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/suture(src) + new /obj/item/stack/medical/mesh(src) + new /obj/item/stack/medical/mesh(src) + new /obj/item/stack/medical/mesh(src) /obj/item/storage/firstaid/fire name = "burn treatment kit" diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 8c9a3636c8..4455c8820d 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -581,7 +581,7 @@ uniform = /obj/item/clothing/under/rank/rnd/scientist shoes = /obj/item/clothing/shoes/laceup id = /obj/item/card/id/away/old/sci - l_pocket = /obj/item/stack/medical/bruise_pack + l_pocket = /obj/item/stack/medical/suture assignedrole = "Ancient Crew" job_description = "Oldstation Crew" diff --git a/code/modules/holiday/halloween/bartholomew.dm b/code/modules/holiday/halloween/bartholomew.dm index 4ef00e29cb..82ac374525 100644 --- a/code/modules/holiday/halloween/bartholomew.dm +++ b/code/modules/holiday/halloween/bartholomew.dm @@ -88,7 +88,7 @@ /obj/item/t_scanner = 5, /obj/item/airlock_painter = 1, /obj/item/stack/cable_coil = 6, - /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/medical/suture = 1, /obj/item/stack/rods = 3, /obj/item/stack/sheet/cardboard = 2, /obj/item/stack/sheet/metal = 1, diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index b51e28decf..369c13b2fc 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -250,7 +250,7 @@ if(istype(O, /obj/item/stack/medical/gauze)) var/obj/item/stack/medical/gauze/G = O reac_volume = min((reac_volume / 10), G.amount) - new/obj/item/stack/medical/ointment(get_turf(G), reac_volume) + new/obj/item/stack/medical/mesh(get_turf(G), reac_volume) G.use(reac_volume) /datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) @@ -336,7 +336,7 @@ if(istype(O, /obj/item/stack/medical/gauze)) var/obj/item/stack/medical/gauze/G = O reac_volume = min((reac_volume / 10), G.amount) - new/obj/item/stack/medical/bruise_pack(get_turf(G), reac_volume) + new/obj/item/stack/medical/suture(get_turf(G), reac_volume) G.use(reac_volume) /datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M) From 17ac614ba5cfc2da530c16b74ddddf82c093e542 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 16 Jun 2020 18:22:59 -0500 Subject: [PATCH 2/5] Automatic changelog generation for PR #12532 [ci skip] --- html/changelogs/AutoChangeLog-pr-12532.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12532.yml diff --git a/html/changelogs/AutoChangeLog-pr-12532.yml b/html/changelogs/AutoChangeLog-pr-12532.yml new file mode 100644 index 0000000000..9011d90a36 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12532.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - rscadd: "Sutures and Meshes" From 29ff6fc46466951cb95cac122cbf9c4297857b6a Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 17 Jun 2020 02:23:17 +0300 Subject: [PATCH 3/5] Updating ID Icons (#12535) * Mid-process * ID updates --- code/game/objects/items/cards_ids.dm | 55 ++++++++++++++++++++++----- icons/obj/card.dmi | Bin 5937 -> 15291 bytes 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 9117df8e6b..58d907e14b 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -83,7 +83,7 @@ /obj/item/card/emag/bluespace name = "bluespace cryptographic sequencer" desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it." - color = rgb(40, 130, 255) + icon_state = "emag_bs" prox_check = FALSE /obj/item/card/emag/attack() @@ -166,6 +166,7 @@ slot_flags = ITEM_SLOT_ID armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF + var/id_type_name = "identification card" var/mining_points = 0 //For redeeming at mining equipment vendors var/list/access = list() var/registered_name = null // The name registered_name on the card @@ -174,6 +175,8 @@ var/bank_support = ID_FREE_BANK_ACCOUNT var/datum/bank_account/registered_account var/obj/machinery/paystand/my_store + var/uses_overlays = TRUE + var/icon/cached_flat_icon /obj/item/card/id/Initialize(mapload) . = ..() @@ -362,20 +365,38 @@ /obj/item/card/id/RemoveID() return src -/* -Usage: -update_label() - Sets the id name to whatever registered_name and assignment is +/obj/item/card/id/update_overlays() + . = ..() + if(!uses_overlays) + return + cached_flat_icon = null + var/job = assignment ? ckey(GetJobName()) : null + if(registered_name == "Captain") + job = "captain" + if(registered_name && registered_name != "Captain") + . += mutable_appearance(icon, "assigned") + if(job) + . += mutable_appearance(icon, "id[job]") + +/obj/item/card/id/proc/get_cached_flat_icon() + if(!cached_flat_icon) + cached_flat_icon = getFlatIcon(src) + return cached_flat_icon + + +/obj/item/card/id/get_examine_string(mob/user, thats = FALSE) + if(uses_overlays) + return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" //displays all overlays in chat + return ..() -update_label("John Doe", "Clowny") - Properly formats the name and occupation and sets the id name to the arguments -*/ /obj/item/card/id/proc/update_label(newname, newjob) if(newname || newjob) name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]" + update_icon() return name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]" + update_icon() /obj/item/card/id/silver name = "silver identification card" @@ -388,6 +409,7 @@ update_label("John Doe", "Clowny") /obj/item/card/id/silver/reaper name = "Thirteen's ID Card (Reaper)" access = list(ACCESS_MAINT_TUNNELS) + icon_state = "reaper" assignment = "Reaper" registered_name = "Thirteen" @@ -539,7 +561,7 @@ update_label("John Doe", "Clowny") /obj/item/card/id/ert name = "\improper CentCom ID" desc = "An ERT ID card." - icon_state = "centcom" + icon_state = "ert_commander" registered_name = "Emergency Response Team Commander" assignment = "Emergency Response Team Commander" @@ -548,6 +570,7 @@ update_label("John Doe", "Clowny") . = ..() /obj/item/card/id/ert/Security + icon_state = "ert_security" registered_name = "Security Response Officer" assignment = "Security Response Officer" @@ -556,6 +579,7 @@ update_label("John Doe", "Clowny") . = ..() /obj/item/card/id/ert/Engineer + icon_state = "ert_engineer" registered_name = "Engineer Response Officer" assignment = "Engineer Response Officer" @@ -564,6 +588,7 @@ update_label("John Doe", "Clowny") . = ..() /obj/item/card/id/ert/Medical + icon_state = "ert_medical" registered_name = "Medical Response Officer" assignment = "Medical Response Officer" @@ -572,6 +597,7 @@ update_label("John Doe", "Clowny") . = ..() /obj/item/card/id/ert/chaplain + icon_state = "ert_chaplain" registered_name = "Religious Response Officer" assignment = "Religious Response Officer" @@ -624,40 +650,49 @@ update_label("John Doe", "Clowny") . += "Your sentence is up! You're free!" /obj/item/card/id/prisoner/one + icon_state = "prisoner_001" name = "Prisoner #13-001" registered_name = "Prisoner #13-001" /obj/item/card/id/prisoner/two + icon_state = "prisoner_002" name = "Prisoner #13-002" registered_name = "Prisoner #13-002" /obj/item/card/id/prisoner/three + icon_state = "prisoner_003" name = "Prisoner #13-003" registered_name = "Prisoner #13-003" /obj/item/card/id/prisoner/four + icon_state = "prisoner_004" name = "Prisoner #13-004" registered_name = "Prisoner #13-004" /obj/item/card/id/prisoner/five + icon_state = "prisoner_005" name = "Prisoner #13-005" registered_name = "Prisoner #13-005" /obj/item/card/id/prisoner/six + icon_state = "prisoner_006" name = "Prisoner #13-006" registered_name = "Prisoner #13-006" /obj/item/card/id/prisoner/seven + icon_state = "prisoner_007" name = "Prisoner #13-007" registered_name = "Prisoner #13-007" /obj/item/card/id/mining name = "mining ID" + icon_state = "retro" access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) /obj/item/card/id/away name = "a perfectly generic identification card" desc = "A perfectly generic identification card. Looks like it could use some flavor." + icon_state = "retro" access = list(ACCESS_AWAY_GENERAL) /obj/item/card/id/away/hotel @@ -700,6 +735,7 @@ update_label("John Doe", "Clowny") /obj/item/card/id/departmental_budget name = "departmental card (FUCK)" desc = "Provides access to the departmental budget." + icon_state = "budgetcard" var/department_ID = ACCOUNT_CIV var/department_name = ACCOUNT_CIV_NAME @@ -712,6 +748,7 @@ update_label("John Doe", "Clowny") B.bank_cards += src name = "departmental card ([department_name])" desc = "Provides access to the [department_name]." + icon_state = "[lowertext(department_ID)]_budget" SSeconomy.dep_cards += src /obj/item/card/id/departmental_budget/Destroy() diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index a3b0d19df4d1719b796b80c528a3997faf144408..13a0725b05653393a1b8f68b6cf6a691f4a6face 100644 GIT binary patch literal 15291 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�e}O^D!-Yt9%^Et-Z=<2&}%d=&g|@zH=EKhw7vo`E<7BzTR@; zJ!{ZKHF0$!TvMyVKjOuwRBTg z%{E%?!$stKfya)$!;DanYo~}aSheiM?BB%fsAnnouW?Ag@(ZE3NK<7c&J*4>u;>_K zVL~ykB0l5|%=rVeNg=fqr2LH1LQo)Co#J<`TENTGII&@g7fUm6`BhyEuxF6puJ(vY zYB1PwIm;JJBNQ=JbYp%8dotPTX8Krgz%d#^+!I z*H6(K9puaJZOA|Wej&v5G4Aj?_O?fK%VA-#CB|xWu}Muj-}f7%f|kHom(`U)ny~hA z`p&5ty8%R+_tldC(?B@vFJre?wjF47PL$-A)~ z(Q$O<9#t7L-mQ*JbIaNW0Y? zU=3^>L|mL>k}wJ={cf@OsEYip(T0A*od#A8_uY0Gi5xv_K^=iFBOu@QSs^#8Mp;;} zmZ(Rtc?S>GtBFW4BbzvNcE_cNKE@j|Z6N)4y}ON^t}UsA0^14RH^<74uQv$ll09=4 zcTxijmwEp}$YP}|=+Zhzi>+hz&L&Y%DMsnSlj9UYMsxUIFQoe$DBB11D+l zRARzEx{BGLpm1|gKHUQ<+EoPEl^8S*ym^peu+>K{d#{j^3cfZG)nwo}Ye*BDq|G=Y0aqRfYJa`d z*Mq6LFuif(T|O?H=Tl?*`M3AbmUpoHXt)BQP)p||S{tcl2Tp08IS(6J6XIo{{y zlAlQAB!A+PVS-^*b->G*wffBOq=z(dm^&#r1u|zTF78LrrWpJ6@U-5EORm2|O91+Z z!Y_LXzk?Cv_Ik89jz?vgqvRq*?8Gygk4y*+pQYQBK%?WNtJorlO2;?<>J`+P4urpp*nUX?N3Qp&*8{ffH(bQ~M@CKIQBa&|xq->)m<3Z$f zi5xa=9QQ(M@{gPTrMTw|%^aa!QT;9;j`s{sn1Yu5&{i54^> z5Y?d_ZRAD`z@T-VY@D0SzrAC!MOMaNy?Q!Dj$Av@rFr^YYT6a0a?R@Gu`W`$uhaFF zw1lZjZpR;Wc}o?eV4Cv;`>BoiE3f3Fysd#mk;d1B2N8-N!Sx{@uciYmb|*_?_Rctz zLQwU{Ej~ci{iH)@rMD~JM!+k5MA*cOsbvoi&}WQ$?2-r6(@ow*76 z9ri&iV42U#%BsMi!We&|9c1uQ%Vh4(bJvg2$(6*d#wn=tZEue6nIg#UQs%(jS zRbdnO+b5|tg{2sL96j5g-KGR)1p@9OcHrCoLw!q`0C8>=Uh zns?)x7i%!&A_6~z;7z&e)u@%AK9qIuW;Z?{A}gtqKeHVchz^Buxf-$wz~#@bhURptvS8W>NBq;%i?u`C z)iE$jpijBa?*OhQXaY3o04@dwQ4a;TE``}Tzp$A*cSiBUKgGvm0-ciHpgyUM7)}?A zC!rS!3jOgz(g6j&X5zU!`E$+ezPZm4vcYY+10tUNgqmmA?+5(k%ZNbs`IR-wa{cfI z@=p^ufpJ~s8eZlTGkPg^Sx0!#kIAZ)wbfM?=|5Cq=gQ^@sAZY=1(>)bS57Q{M*?4< z(cAdtzy-6F^~YGY?JP$}1{RWoFDCx$`kgg2M0UwKFQoh|34AFR NP?pz_tCY0}{vWCqdCLF* literal 5937 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 VQ-4n+@gF$AK-W~KTFWW&zX0Fb!WRGl From 176b6bcf14f40ee08cab9f80734315b5f43206f8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 16 Jun 2020 18:23:20 -0500 Subject: [PATCH 4/5] Automatic changelog generation for PR #12535 [ci skip] --- html/changelogs/AutoChangeLog-pr-12535.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12535.yml diff --git a/html/changelogs/AutoChangeLog-pr-12535.yml b/html/changelogs/AutoChangeLog-pr-12535.yml new file mode 100644 index 0000000000..561499eeb1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12535.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - rscadd: "New ID icons" From d9d3eb15f1be369870c5a1239ea9a019d386f368 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 17 Jun 2020 00:07:45 +0000 Subject: [PATCH 5/5] Automatic changelog compile [ci skip] --- html/changelog.html | 264 +-------------------- html/changelogs/.all_changelog.yml | 6 + html/changelogs/AutoChangeLog-pr-12532.yml | 4 - html/changelogs/AutoChangeLog-pr-12535.yml | 4 - html/changelogs/AutoChangeLog-pr-12543.yml | 4 - 5 files changed, 17 insertions(+), 265 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-12532.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-12535.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-12543.yml diff --git a/html/changelog.html b/html/changelog.html index 2a6536d2f2..24d4cd8ac3 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,17 @@ -->
+

17 June 2020

+

SmArtKar updated:

+
    +
  • New ID icons
  • +
  • Sutures and Meshes
  • +
+

Trilbyspaceclone updated:

+
    +
  • Gin export takes gin now
  • +
+

16 June 2020

Ghommie updated:

    @@ -320,259 +331,6 @@
    • remove any slurs, etc. to comply with GitHub's ToS
    - -

    15 April 2020

    -

    Arturlang updated:

    -
      -
    • Adds garlic, a mutation of onions
    • -
    • You can now make garlic necklaces.
    • -
    • Tweaked hunger to be more the same as blood level for bloodsuckers
    • -
    • Bloodsuckers no longer get zero healing from regenerative cores, the core now heals their wounds but not their blood.
    • -
    • Bloodsucker heal is now based a lot more on blood level.
    • -
    • You can no longer be effectively immortal when fully auged as a bloodsucker.
    • -
    • Regenerative cores will regain their old names when they are renewed, no more working decayed cores.
    • -
    • Removes a lot of unnecesiry clutter of comments and tries to make the vars more consistent for bloodsucker code.
    • -
    • Made the regenerative core use one proc instead of copypasta
    • -
    -

    Auris456852 updated:

    -
      -
    • Added printer sound for admins that plays when someone messages Centcomm or the Syndicate. Just like RP!
    • -
    -

    Bhijn updated:

    -
      -
    • The traitor panel now actually shows a list of contractor targets.
    • -
    • Fail2Topic now supports Linux. Do beware that this requires some sysop experience to properly set up!
    • -
    • Fail2Topic is now disabled by default, and the out-of-the-box config files have been updated to be a little more detailed.
    • -
    • Added a lfwb-inspired orbiting pixel + flashing outline animation to the sprint and combat mode buttons. This can be toggled via the preferences menu, and is completely independent from all HUD themes.
    • -
    -

    BuffEngineering updated:

    -
      -
    • You may no longer summon plasteel from the door dimension.
    • -
    • High security airlocks are now 33% more materially efficient!
    • -
    -

    DeltaFire15 updated:

    -
      -
    • clockie vanguard now quickly regenerates stam while active (as its description always told you,)
    • -
    -

    Detective-Google updated:

    -
      -
    • Shotguns are now slower and require two hands to fire.
    • -
    -

    Ghommie updated:

    -
      -
    • mobs with antag statuses such as wizard, ert and nuke ops get their flavor text removed now.
    • -
    • Fixed megafauna mobs, goliaths and "anchored" AIs being stuffable into closets.
    • -
    • After years of visual agony, the Curse of The Floating Disembodied Phallus has come to an end.
    • -
    • Underwear now fulfills its purpose.
    • -
    • Privates visibility preferences.
    • -
    • refactored polychromic clothing into an element.
    • -
    • Blacklists unsynthetizable reagents from botany bees honey production.
    • -
    • Fixed toilet cistern loot spawning on the floor.
    • -
    • The megafauna's hitbox doesn't include 0 alpha sections anymore.
    • -
    • Wizard robes & co work again now.
    • -
    • Fixed some spell casting message spam.
    • -
    • Added M/F body preferences.
    • -
    • fixed yet another few airless issues with the space hermit ruin.
    • -
    • Intellectual property infringment is not cool.
    • -
    • Near-station nuclear explosions now display the on-station nuke explosion cinematic, consistently with its clearance of the station level and its nuclear victory / total annihilation ending status.
    • -
    • Nuclear bombs can't be anchored in space areas (not just turfs) anymore, as a quick effortless way to discourage players from anchoring the device on the edge of the map.
    • -
    • Fixed a whacky miniature cell duping issue.
    • -
    • Liver failure is back!
    • -
    • standarized a few (prefs off) side effects from enlargment chems on livers to do organ damage instead without the blood volume whackiness.
    • -
    • High liver damage now slows mobs down.
    • -
    • Fixing an issue with the split personality removing the original owner from the round if the body died while the stranger was in control.
    • -
    • fixed a few floaty sprite accessories.
    • -
    • Fixed a few mutations not working correctly.
    • -
    • Fixed the phantom thief component, again.
    • -
    • Made votes obfuscation settings more robust.
    • -
    • Also included them in custom votes.
    • -
    • The map rotation vote will only hide ongoing votes now, not the results.
    • -
    • The crusher's vortex talisman trophy now has a cooldown between each spawned wall.
    • -
    • Backend body size preferences.
    • -
    • Infiltrator's boots don't stop slips and "space wind" through the power of runtime errors anymore, and properly silence the user's footsteps now.
    • -
    • Chaplains are now inelegible for bloodsuckers.
    • -
    • Fixed crafting hud icon overlapping the second pocket on 1:1 screen mode.
    • -
    • Removed some dead flightsuit code leftovers.
    • -
    • Reenabled the swarmers event. Also blacklisted another dozen other machineries and structures that may be critical to the shift or station integrity from swarmers' HUNGER for materials.
    • -
    • Fixed find_safe_turfs() searching for turfs with concentration of oxygen lower than 16 rather higher.
    • -
    -

    KathrinBailey updated:

    -
      -
    • Radiation shuttesr to all supermatters.
    • -
    • Windowed shutters to armouries where relevant.
    • -
    • New posters are now on the map in relevant locations.
    • -
    • Windowed shutter now has glass, the door closing proc sees this and no longer changes opacity.
    • -
    • Accidental HoochMaster removal in the bar.
    • -
    • Spawning looking at the supermatter with no mesons on Meta.
    • -
    • Missing disposal pipe outside HoP office.
    • -
    • Sofas were never adjusted when the pool was added.
    • -
    • New shutter sprites
    • -
    • Reinforced Shutter
    • -
    • Radiation Shutter
    • -
    • Window Shutter
    • -
    • Shutters not being blast doors functionally.
    • -
    • Shutter armour block and health.
    • -
    -

    Kraseo updated:

    -
      -
    • Sneaksuit now costs 5 TC rather than 3.
    • -
    • You can break out of neckgrabs once more.
    • -
    -

    Owai-Seek updated:

    -
      -
    • Port Pina Colada, Painkiller, Moscow Mule, Hivemind Eraser, Moana Lou Drinks
    • -
    • Gunfire, Hellfire, Sins Delight, Strawberry Daiquiri, Miami Vice, Malibu Sunset, Lizz Fizz, Hotline Miami
    • -
    • Strawberry and Pineapple Juice
    • -
    • Salami Slices
    • -
    • Soda Dispenser Juices
    • -
    • Reorganize Vendor Objects (Bowls, Glasses, Shot Glasses)
    • -
    • Strawberry Milk and Tea actually use strawberry Juice.
    • -
    • Lizards can eat egg wraps. Moved Egg Wraps to Misc
    • -
    -

    PersianXerxes updated:

    -
      -
    • TGUI Next UIs for: chem heaters, chem masters, chem dispensers, and sleepers
    • -
    • Reworked Chem Master code
    • -
    -

    Putnam3145 updated:

    -
      -
    • No more station integrity goal
    • -
    • Upload-hacked-law goal only picksif there's an AI to upload to
    • -
    • A new, much more barebones holding facility for contractors.
    • -
    • Energy nets are gone.
    • -
    • Various ghost roles are now easier to ghost as.
    • -
    • The candles in the dojo no longer make the place hotter and hotter over time.
    • -
    • Nymphomania removed
    • -
    • Exhibitionism ignored by preferences now, since it was also removed
    • -
    • Quirk migration now does an admin log instead of a stack trace
    • -
    • Roundstart rulesets now roll properly.
    • -
    • Added configs for various antag threat levels.
    • -
    • Fixed a runtime in threat calculation.
    • -
    • Fixed up some misleading texts.
    • -
    • Dynamic reworked to be more "storyteller-like": threat is now how threatened the station is right now and threat level is how much the mode wants the station to be threatened.
    • -
    • Random storyteller is now truly random.
    • -
    • Story storyteller now gives a nice rising-action-climax-falling action curve for threat level.
    • -
    • "Chaotic" storyteller now simply ramps up threat level as round goes on.
    • -
    • "Classic" storyteller, basically doing what "random" did before.
    • -
    • Latejoin changelings for dynamic
    • -
    • Average threat calculation works now
    • -
    • Contamination is back.
    • -
    -

    Seris02 updated:

    -
      -
    • stops hijackers from being able to remotely blow up borgs
    • -
    • wall walking boots
    • -
    • made color picking for character appearance show the colors when you pick them
    • -
    • the sergal markings
    • -
    -

    Trilbyspaceclone updated:

    -
      -
    • Cooks aided by Clowns have came out with and new healthy Salad - Caesar Salad. Just dont eat the knife...
    • -
    • Ports over TG's Mortars and Pestles.
    • -
    • Water, Holywater and Unholywater will now now quickly purge itself if you have 151u in your system
    • -
    • Most crate types can now be made, some costing more do to function over fashion
    • -
    • Medical Mechs syringe gun now knows many more life saving chems, like Insulin, Dexalin, Prussian Blue, Kelotane and Bicaridine
    • -
    • torches take less staminda to use.
    • -
    • Glowsticks dont last as long
    • -
    • Penlights are better at being lights
    • -
    • Torches are brighter then before - Indian Johns want to be on lava land rejoy!
    • -
    • Eye lights have 30% less light coming out of them.
    • -
    • Spec Ops crate no longer talks about a "Null Crate" what ever that is
    • -
    • Changlogs are updateded once again as of the 28th of March on year 2020
    • -
    • White Ships, Telerelays and a defunk mining post are now always going to spawn.
    • -
    • Corrects a few desc on station side ruins
    • -
    -

    Xantholne updated:

    -
      -
    • bumbles will stop sleeping so much
    • -
    -

    actioninja updated:

    -
      -
    • Washing machines now support arbitrary dye color
    • -
    • Washing machines now dye nearly every item.
    • -
    • lots of backend changes to clothing overlays, report any issues
    • -
    • Better glowing lights
    • -
    -

    actioninja (ported by Ghommie) updated:

    -
      -
    • repathed all under clothing, keep an eye out for errors.
    • -
    -

    bunny232 updated:

    -
      -
    • Box secmos now is now longer connected to the scrubber loop
    • -
    -

    dapnee updated:

    -
      -
    • plant disk sorter in botany, bounty console for the rest of cargo, a missing air alarm in the incinerator
    • -
    • fixed a decal in front of security, moved an AIR alarm so it doesn't look awful to ghosts/AI, asteroids don't delete air anymore, fixed more active turfs, the buttons in the bridge "should" work now, HoP and cargo desks should be secure now
    • -
    • quarters that found their way out of the quartermaster's back room
    • -
    -

    kappa-sama updated:

    -
      -
    • normies can no longer steal circuit codes
    • -
    • doubles the Stam damage of nonlethal krav stompers
    • -
    • no longer Krav Maga stomp people that are standing
    • -
    • no more 20pop requirement for noslips
    • -
    -

    keronshb updated:

    -
      -
    • Reverts Mining Base RNG Placement
    • -
    -

    kevinz000 updated:

    -
      -
    • Melee attacks now stagger people, preventing them from sprinting until the (relatively short lived) effect runs out. Duration equation is [(1.5 + (w_class/7.5)) * force].
    • -
    • Fireman carrying now makes the person being carried unable to use items. Piggybacking now slows down the person being ridden. In both cases, the person riding will be dazed when forcefully dismounted, and dazed for a second if dismounting from piggybacking
    • -
    • turfs properly initialize atom colors if they're colored.
    • -
    • cloners now stabilize mutations while someone's cloning, meaning active genes will not life tick.
    • -
    • datum/pipeline return_air stack trace now gives a reference so it's actually marginally useful if caught in round.
    • -
    • Volumetric storage is here.
    • -
    • Traitor chaplains can now become neutered versions of cults.
    • -
    • beams should no longer go across the map and mess everything up if their source or target isn't on a turf.
    • -
    -

    kiwedespars updated:

    -
      -
    • Added paper masks.
    • -
    -

    necromanceranne updated:

    -
      -
    • Fixed limb damage calc
    • -
    • Stunslugs are now a mixed damage taser-like slug that will allow you to apply a variety of damage while still being countered by tasers usual counters.
    • -
    • Mech scattershot guns are no longer oneshotting people into stamina crit.
    • -
    • Removed an number of cargo crate packs: Riot shotguns/standard shotguns, double barreled shotguns, techshell crate, swat tasers, WT550 types (not rubber or standard), traitor theft objective kits.
    • -
    • HEALTH AND STAMINA DON'T STACK FOR PUTTING YOU INTO STAMINA CRIT.
    • -
    • YOUR FISTS ARE HELLA GODDAMN STRONG.
    • -
    • ACCEPT THE FELINIDS WARES, FOR SKOOMA HAS INCREDIBLE LETHAL PROPERTIES: YOUR HANDS BECOME LIKE SWORDS.
    • -
    • BOXERS CAN ONLY KNOCK OUT OTHER BOXERS BECAUSE THEY HAVE HONOR OR SOME SHIT
    • -
    • INCREASED STAMINA DAMAGE TO LIMBS FROM 50% TO 75%.
    • -
    • Double-barreled shotguns and any child of such now can be used with off-hand equipment.
    • -
    • Readds bioterror darts to the nuclear operative uplink for the legacy price of 6tc! Has all new horrid reagents!
    • -
    • Scatterlaser is now in-line with buckshot. Nukies can't purchase scatterlaser shot.
    • -
    • Null crates are no longer available in cargo!
    • -
    • Sleeping Carp and Rising Bass now dodge. Again.
    • -
    • Russian Revolver can no longer be exploited for a free 357.
    • -
    • Several guns now shoot exactly where you click regardless of movement or turning.
    • -
    -

    timothyteakettle updated:

    -
      -
    • added beacon for cooks to choose an ingredient box, which replaces the random box they used to receive
    • -
    • added a new sushi ingredients box
    • -
    • added more items to the wildcard box's possible contents
    • -
    • add new holodeck wrestling belt which lets you use moves only on those also wearing it
    • -
    • add new holodeck map featuring the holodeck wrestling belt
    • -
    • new reagent 'Condensed Cooking Oil'
    • -
    • list of chems that can go into fried non-food items was changed
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • sneaksuit to contractor items
    • -
    • sneaksuit is a bundle
    • -
    • intel potion and radio implant from contractor items
    • -
    • ghosts can now DNR
    • -
    • sneaksuit is not fireproof
    • -
    • insidious balaclava muzzlepsprite works
    • -
    • You can now choose your name and color as a holoparasite/guardian/holocarp!
    • -
    • fixes lings being able to get mechanical holoparasites
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 26a6767d18..b5b212e0f5 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -25977,3 +25977,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Food carts now function as intended, allowing the pouring and mixing of drinks. - rscadd: slimes can now change their color using alter form +2020-06-17: + SmArtKar: + - rscadd: New ID icons + - rscadd: Sutures and Meshes + Trilbyspaceclone: + - bugfix: Gin export takes gin now diff --git a/html/changelogs/AutoChangeLog-pr-12532.yml b/html/changelogs/AutoChangeLog-pr-12532.yml deleted file mode 100644 index 9011d90a36..0000000000 --- a/html/changelogs/AutoChangeLog-pr-12532.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - rscadd: "Sutures and Meshes" diff --git a/html/changelogs/AutoChangeLog-pr-12535.yml b/html/changelogs/AutoChangeLog-pr-12535.yml deleted file mode 100644 index 561499eeb1..0000000000 --- a/html/changelogs/AutoChangeLog-pr-12535.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - rscadd: "New ID icons" diff --git a/html/changelogs/AutoChangeLog-pr-12543.yml b/html/changelogs/AutoChangeLog-pr-12543.yml deleted file mode 100644 index 775d6514a9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-12543.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Trilbyspaceclone" -delete-after: True -changes: - - bugfix: "Gin export takes gin now"