From 2ef333f7d1c6b6dd8833a307619ccd00c48882e9 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 21 Jan 2022 12:26:19 -0600 Subject: [PATCH 01/45] Add splash_turf/splash_area helpers --- code/modules/reagents/Chemistry-Holder.dm | 62 +++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 8b09d347f68..3fe17f24e02 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -334,6 +334,68 @@ var/global/obj/temp_reagents_holder = new if(amount) trans_to(target, amount, multiplier, copy, defer_update = defer_update) +//Spreads the contents of this reagent holder all over the vicinity of the target turf. +/datum/reagents/proc/splash_area(var/turf/epicentre, var/range = 3, var/portion = 1.0, var/multiplier = 1, var/copy = 0) + var/list/things = list() + DVIEW(things, range, epicentre, INVISIBILITY_LIGHTING) + + var/list/turfs = list() + for (var/turf/T in things) + turfs += T + + if (!turfs.len) + return//Nowhere to splash to, somehow + + //Create a temporary holder to hold all the amount that will be spread + var/datum/reagents/R = new /datum/reagents(total_volume * portion * multiplier, global.temp_reagents_holder) + trans_to_holder(R, total_volume * portion, multiplier, copy) + + //The exact amount that will be given to each turf + var/turfportion = R.total_volume / turfs.len + for (var/turf/T in turfs) + R.splash_turf(T, amount = turfportion, multiplier = 1, copy = FALSE) + qdel(R) + +//Spreads the contents of this reagent holder all over the target turf, dividing among things in it. +//50% is divided between mobs, 20% between objects, and whatever's left on the turf itself +/datum/reagents/proc/splash_turf(var/turf/T, var/amount = null, var/multiplier = 1, var/copy = 0) + if (isnull(amount)) + amount = total_volume + else + amount = min(amount, total_volume) + if (amount <= 0) + return + + var/list/mobs = list() + for (var/mob/M in T) + mobs += M + + var/list/objs = list() + for (var/obj/O in T) + //Todo: Add some check here to not hit wires/pipes that are hidden under floor tiles. + //Maybe also not hit things under tables. + objs += O + + if (objs.len) + var/objportion = (amount * 0.2) / objs.len + for (var/o in objs) + var/obj/O = o + + trans_to(O, objportion, multiplier, copy) + + amount = min(amount, total_volume) + + if (mobs.len) + var/mobportion = (amount * 0.5) / mobs.len + for (var/m in mobs) + var/mob/M = m + trans_to(M, mobportion, multiplier, copy) + + trans_to(T, total_volume, multiplier, copy) + + if (total_volume <= 0) + qdel(src) + /datum/reagents/proc/trans_type_to(var/atom/target, var/type, var/amount = 1, var/multiplier = 1, var/defer_update = FALSE) if (!target || !target.reagents || !target.simulated) return From b6a04bd2c08e63670ec49d72aa2c8c809bd8036a Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 21 Jan 2022 20:12:05 -0600 Subject: [PATCH 02/45] Fix and refactor seed splattering Fixes a bug with incorrect vars being passed to `/obj/effect/decal/cleanable/fruit_smudge/Initialize()`. --- code/modules/hydroponics/seed.dm | 129 ++++++++++--------------------- 1 file changed, 42 insertions(+), 87 deletions(-) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index da1fbd8f6b5..eb6a20c794e 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -200,40 +200,42 @@ environment.adjust_gas(/decl/material/gas/carbon_dioxide, -req_CO2_moles, 1) environment.adjust_gas(/decl/material/gas/oxygen, req_CO2_moles, 1) +/datum/seed/proc/make_splat(var/turf/T, var/obj/item/thrown) + if(!splat_type || locate(splat_type) in T) + return + var/atom/splat = new splat_type(T, src) + splat.SetName("[name] [pick("smear","smudge","splatter")]") + if(get_trait(TRAIT_BIOLUM)) + var/clr + if(get_trait(TRAIT_BIOLUM_COLOUR)) + clr = get_trait(TRAIT_BIOLUM_COLOUR) + splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) + splat.color = get_trait(TRAIT_FLESH_COLOUR) || get_trait(TRAIT_PRODUCT_COLOUR) + //Splatter a turf. -/datum/seed/proc/splatter(var/turf/T,var/obj/item/thrown) - if(splat_type && !(locate(/obj/effect/vine) in T)) - var/obj/effect/vine/splat = new splat_type(T, src) - if(!istype(splat)) // Plants handle their own stuff. - splat.SetName("[thrown.name] [pick("smear","smudge","splatter")]") - if(get_trait(TRAIT_BIOLUM)) - var/clr - if(get_trait(TRAIT_BIOLUM_COLOUR)) - clr = get_trait(TRAIT_BIOLUM_COLOUR) - splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) - var/flesh_colour = get_trait(TRAIT_FLESH_COLOUR) - if(!flesh_colour) flesh_colour = get_trait(TRAIT_PRODUCT_COLOUR) - if(flesh_colour) splat.color = get_trait(TRAIT_PRODUCT_COLOUR) - - if(chems) - for(var/mob/living/M in T.contents) - if(!M.reagents) - continue - var/body_coverage = SLOT_HEAD|SLOT_FACE|SLOT_EYES|SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS - var/held_items = M.get_held_items() - for(var/obj/item/clothing/clothes in M) - if(clothes in held_items) - continue - body_coverage &= ~(clothes.body_parts_covered) - if(!body_coverage) - continue - var/datum/reagents/R = M.reagents - var/mob/living/carbon/human/H = M - if(istype(H)) - R = H.get_contact_reagents() - if(istype(R)) - for(var/chem in chems) - R.add_reagent(chem,min(5,max(1,get_trait(TRAIT_POTENCY)/3))) +//Thrown can be null, but T cannot. +/datum/seed/proc/splatter(var/turf/T, var/obj/item/thrown) + make_splat(T, thrown) + + var/datum/reagents/splat_reagents = thrown?.reagents + if(!splat_reagents?.maximum_volume) // if thrown doesn't exist or has no reagents, use the seed's default reagents. + splat_reagents = new /datum/reagents(INFINITY, global.temp_reagents_holder) + var/potency = get_trait(TRAIT_POTENCY) + for(var/rid in chems) + var/list/reagent_data = chems[rid] + if(reagent_data && reagent_data.len) + var/rtotal = reagent_data[1] + var/list/data = list() + if(reagent_data.len > 1 && potency > 0) + rtotal += round(potency/reagent_data[2]) + if(rid == /decl/material/liquid/nutriment) + data[seed_name] = max(1,rtotal) + splat_reagents.add_reagent(rid,max(1,rtotal),data) + if(splat_reagents) + var/splat_range = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) + splat_reagents.splash_area(T, range = splat_range) + qdel(splat_reagents) + qdel(thrown) //Applies an effect to a target atom. /datum/seed/proc/thrown_at(var/obj/item/thrown,var/atom/target, var/force_explode) @@ -242,65 +244,22 @@ var/turf/origin_turf = get_turf(target) if(force_explode || get_trait(TRAIT_EXPLOSIVE)) - create_spores(origin_turf) - - var/flood_dist = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) - var/list/open_turfs = list() - var/list/closed_turfs = list() - var/list/valid_turfs = list() - open_turfs |= origin_turf - - // Flood fill to get affected turfs. - while(open_turfs.len) - var/turf/T = pick(open_turfs) - open_turfs -= T - closed_turfs |= T - valid_turfs |= T - - for(var/dir in global.alldirs) - var/turf/neighbor = get_step(T,dir) - if(!neighbor || (neighbor in closed_turfs) || (neighbor in open_turfs)) - continue - if(neighbor.density || get_dist(neighbor,origin_turf) > flood_dist || isspaceturf(neighbor)) - closed_turfs |= neighbor - continue - // Check for windows. - var/no_los - var/turf/last_turf = origin_turf - for(var/turf/target_turf in getline(origin_turf,neighbor)) - if(!last_turf.Enter(target_turf) || target_turf.density) - no_los = 1 - break - last_turf = target_turf - if(!no_los && !origin_turf.Enter(neighbor)) - no_los = 1 - if(no_los) - closed_turfs |= neighbor - continue - open_turfs |= neighbor - - for(var/turf/T in valid_turfs) - for(var/mob/living/M in T.contents) - apply_special_effect(M) - splatter(T,thrown) if(origin_turf) - origin_turf.visible_message("The [thrown.name] explodes!") - qdel(thrown) + origin_turf.visible_message(SPAN_DANGER("\The [thrown] explodes!")) + splatter(origin_turf,thrown) return if(istype(target,/mob/living)) splatted = apply_special_effect(target,thrown) else if(isturf(target)) - splatted = 1 - for(var/mob/living/M in target.contents) - apply_special_effect(M) + for(var/mob/living/M in target) + splatted |= apply_special_effect(M, thrown) if(get_trait(TRAIT_JUICY) && splatted) - splatter(origin_turf,thrown) if(origin_turf) - origin_turf.visible_message("The [thrown.name] splatters against [target]!") - qdel(thrown) + origin_turf.visible_message(SPAN_DANGER("\The [thrown] splatters against [target]!")) + splatter(origin_turf,thrown) /datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only) @@ -363,8 +322,6 @@ return health_change /datum/seed/proc/apply_special_effect(var/mob/living/target,var/obj/item/thrown) - - var/impact = 1 do_sting(target,thrown) do_thorns(target,thrown) @@ -380,9 +337,7 @@ spark_at(target, cardinal_only = TRUE) new/obj/effect/decal/cleanable/molten_item(get_turf(target)) // Leave a pile of goo behind for dramatic effect... target.forceMove(T) // And teleport them to the chosen location. - impact = 1 - - return impact + return TRUE /datum/seed/proc/generate_name() var/prefix = "" From 39516e5379bbdddef90ef4c08cd9f13f8e7f44f1 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 21 Jan 2022 20:12:31 -0600 Subject: [PATCH 03/45] Fix mushroom vines/spores on throw_impact --- code/modules/hydroponics/seed_datums.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 7399286c58a..24dc79470d2 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -390,6 +390,12 @@ splat_type = /obj/effect/vine kitchen_tag = "mushroom" +/datum/seed/mushroom/make_splat(var/turf/T, var/obj/item/thrown) + if(!splat_type || locate(splat_type) in T) + return + new splat_type(T, src) + // No further logic; the vine will handle it. + /datum/seed/mushroom/New() ..() set_trait(TRAIT_MATURATION,7) From dde30f511023930d50819a0343fb19c2f183b3c0 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Sat, 29 Jan 2022 10:51:26 -0600 Subject: [PATCH 04/45] Implement changes from code review --- code/modules/hydroponics/grown.dm | 14 +++++++------- code/modules/hydroponics/seed.dm | 18 +++++++++--------- code/modules/hydroponics/seed_datums.dm | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index c4455231f2f..bc5f3058d79 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -42,14 +42,14 @@ reagents.clear_reagents() // Fill the object up with the appropriate reagents. for(var/rid in seed.chems) - var/list/reagent_data = seed.chems[rid] - if(reagent_data && reagent_data.len) - var/rtotal = reagent_data[1] - var/list/data = list() - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) + var/list/reagent_amounts = seed.chems[rid] + if(LAZYLEN(reagent_amounts)) + var/rtotal = reagent_amounts[1] + var/list/data = null + if(reagent_amounts?[2] && potency > 0) + rtotal += round(potency/reagent_amounts[2]) if(rid == /decl/material/liquid/nutriment) - data[seed.seed_name] = max(1,rtotal) + LAZYSET(data, seed.seed_name, max(1,rtotal)) reagents.add_reagent(rid,max(1,rtotal),data) update_desc() if(reagents.total_volume > 0) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index eb6a20c794e..19bc11554ab 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -201,10 +201,10 @@ environment.adjust_gas(/decl/material/gas/oxygen, req_CO2_moles, 1) /datum/seed/proc/make_splat(var/turf/T, var/obj/item/thrown) - if(!splat_type || locate(splat_type) in T) + if(!splat_type || (locate(splat_type) in T)) return var/atom/splat = new splat_type(T, src) - splat.SetName("[name] [pick("smear","smudge","splatter")]") + splat.SetName("[seed_name] [pick("smear","smudge","splatter")]") if(get_trait(TRAIT_BIOLUM)) var/clr if(get_trait(TRAIT_BIOLUM_COLOUR)) @@ -222,14 +222,14 @@ splat_reagents = new /datum/reagents(INFINITY, global.temp_reagents_holder) var/potency = get_trait(TRAIT_POTENCY) for(var/rid in chems) - var/list/reagent_data = chems[rid] - if(reagent_data && reagent_data.len) - var/rtotal = reagent_data[1] - var/list/data = list() - if(reagent_data.len > 1 && potency > 0) - rtotal += round(potency/reagent_data[2]) + var/list/reagent_amounts = chems[rid] + if(LAZYLEN(reagent_amounts)) + var/rtotal = reagent_amounts[1] + var/list/data = null + if(reagent_amounts?[2] && potency > 0) + rtotal += round(potency/reagent_amounts[2]) if(rid == /decl/material/liquid/nutriment) - data[seed_name] = max(1,rtotal) + LAZYSET(data, seed_name, max(1,rtotal)) splat_reagents.add_reagent(rid,max(1,rtotal),data) if(splat_reagents) var/splat_range = min(10,max(1,get_trait(TRAIT_POTENCY)/15)) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 24dc79470d2..e496569ed34 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -391,7 +391,7 @@ kitchen_tag = "mushroom" /datum/seed/mushroom/make_splat(var/turf/T, var/obj/item/thrown) - if(!splat_type || locate(splat_type) in T) + if(!splat_type || (locate(splat_type) in T)) return new splat_type(T, src) // No further logic; the vine will handle it. From 720c230106bf7456243ab49676b7d67f0878764d Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 1 Feb 2022 20:08:13 +1100 Subject: [PATCH 05/45] Automatic changelog generation for PR #2278 [ci skip] --- html/changelogs/AutoChangeLog-pr-2278.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2278.yml diff --git a/html/changelogs/AutoChangeLog-pr-2278.yml b/html/changelogs/AutoChangeLog-pr-2278.yml new file mode 100644 index 00000000000..5887d294c59 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2278.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: Sometimes, thrown fruit smudges would fail to save. That's fixed now. From 74fb7cec03b48e400dd86895ae0545c0bc1e4d17 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 2 Feb 2022 00:30:17 +0000 Subject: [PATCH 06/45] Automatic changelog generation [ci skip] --- html/changelog.html | 12 ++++++------ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2278.yml | 4 ---- 3 files changed, 9 insertions(+), 10 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2278.yml diff --git a/html/changelog.html b/html/changelog.html index 6cab5b5ab47..8436d957441 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
+

02 February 2022

+

tag if you want to specify another name or several people. --> updated:

+
    +
  • Sometimes, thrown fruit smudges would fail to save. That's fixed now.
  • +
+

27 January 2022

tag if you want to specify another name or several people. --> updated:

    @@ -100,12 +106,6 @@

    PsyCommando updated:

  • File changes.
  • Fishes can float now.
- -

01 December 2021

-

PsyCommando updated:

-
    -
  • Blanks don't runtime.
  • -
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a6856b2e5cd..c5e0dac13e5 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14076,3 +14076,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-01-27: tag if you want to specify another name or several people. -->: - bugfix: Brute damage healing medications now heal brute damage again.. +2022-02-02: + tag if you want to specify another name or several people. -->: + - bugfix: Sometimes, thrown fruit smudges would fail to save. That's fixed now. diff --git a/html/changelogs/AutoChangeLog-pr-2278.yml b/html/changelogs/AutoChangeLog-pr-2278.yml deleted file mode 100644 index 5887d294c59..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2278.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: Sometimes, thrown fruit smudges would fail to save. That's fixed now. From 058f60d6197140b509b11f0ff89c5c6ac5c9a5d5 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Thu, 3 Feb 2022 00:28:10 +0000 Subject: [PATCH 07/45] Automatic changelog generation [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 8436d957441..0b122e90bd1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -99,13 +99,6 @@

PsyCommando updated:

  • Tweak inventory hiding fix.
- -

02 December 2021

-

PsyCommando updated:

-
    -
  • File changes.
  • -
  • Fishes can float now.
  • -
From d7bef45115e74c1da3faac2a53b53aee214fd604 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Fri, 4 Feb 2022 00:27:44 +0000 Subject: [PATCH 08/45] Automatic changelog generation [ci skip] --- html/changelog.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 0b122e90bd1..2f962adaee4 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -88,17 +88,6 @@

MistakeNot4892 updated:

  • Utility frames, Kharmaani and adherent now bleed exciting new colours.
  • Human subtypes can now share blood without triggering a rejection.
  • - -

    03 December 2021

    -

    NotRanged updated:

    -
      -
    • Lying down while facing left or right now lays you down left or right.
    • -
    • You can now change facing direction while lying down.
    • -
    -

    PsyCommando updated:

    -
      -
    • Tweak inventory hiding fix.
    • -
    From c89e7e93cd705e8914fcb20fab8c12032a9d354a Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sat, 5 Feb 2022 00:23:26 +0000 Subject: [PATCH 09/45] Automatic changelog generation [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2f962adaee4..44f7f487b6b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -81,13 +81,6 @@

    tag if you want to specify another name or several people. --
    • fix looping APC power down sound
    - -

    04 December 2021

    -

    MistakeNot4892 updated:

    -
      -
    • Utility frames, Kharmaani and adherent now bleed exciting new colours.
    • -
    • Human subtypes can now share blood without triggering a rejection.
    • -
    From 80328e8263c661e08db1dc5f5c9c4ed84b1f6453 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Sat, 5 Feb 2022 14:33:54 -0600 Subject: [PATCH 10/45] Fix character setup + change_species --- code/__defines/species.dm | 2 ++ code/game/objects/structures/mineral_bath.dm | 2 +- code/modules/client/preferences.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 1 + code/modules/mob/living/carbon/human/human_damage.dm | 1 + code/modules/mob/living/deity/phenomena/transmutation.dm | 2 +- code/modules/mob/mob_transformation_simple.dm | 2 +- code/modules/mob/new_player/preferences_setup.dm | 4 +++- code/modules/mob/transform_procs.dm | 2 +- code/modules/organs/external/_external.dm | 4 ++-- code/modules/projectiles/projectile/change.dm | 2 +- code/modules/species/outsider/random.dm | 2 +- code/modules/species/species.dm | 9 ++++++--- code/modules/species/station/golem.dm | 4 +--- mods/species/adherent/datum/species.dm | 2 +- mods/species/ascent/machines/magnetotron.dm | 2 +- mods/species/utility_frames/species.dm | 2 +- 17 files changed, 26 insertions(+), 19 deletions(-) diff --git a/code/__defines/species.dm b/code/__defines/species.dm index fe2e22f6969..75ab5d81503 100644 --- a/code/__defines/species.dm +++ b/code/__defines/species.dm @@ -10,6 +10,8 @@ #define SPECIES_FLAG_NO_BLOCK BITFLAG(8) // Unable to block or defend itself from attackers. #define SPECIES_FLAG_NEED_DIRECT_ABSORB BITFLAG(9) // This species can only have their DNA taken by direct absorption. #define SPECIES_FLAG_LOW_GRAV_ADAPTED BITFLAG(10) // This species is used to lower than standard gravity, affecting stamina in high-grav +#define SPECIES_FLAG_CRYSTALLINE BITFLAG(11) // This species is made of crystalline material. Replaces var/is_crystalline. +#define SPECIES_FLAG_SYNTHETIC BITFLAG(12) // This species is synthetic/robotic and spawns with prosthetic limbs. // Species spawn flags #define SPECIES_IS_WHITELISTED BITFLAG(0) // Must be whitelisted to play. diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index 8c70a19bd64..dfebcdd5d9c 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -107,7 +107,7 @@ var/repaired_organ // Replace limbs for crystalline species. - if(H.species.is_crystalline && prob(10)) + if((H.species.species_flags & SPECIES_FLAG_CRYSTALLINE) && prob(10)) for(var/limb_type in H.species.has_limbs) var/obj/item/organ/external/E = H.get_organ(limb_type) if(E && !E.is_usable() && !(E.limb_flags & ORGAN_FLAG_HEALS_OVERKILL)) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index fb50d73c99d..d69437f5fbe 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -340,7 +340,7 @@ var/global/list/time_prefs_fixed = list() // Sanitizing rather than saving as someone might still be editing when copy_to occurs. player_setup.sanitize_setup() character.personal_aspects = list() - character.set_species(species) + character.change_species(species) character.set_bodytype((character.species.get_bodytype_by_name(bodytype) || character.species.default_bodytype), FALSE) if(be_random_name) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f2ced029f8a..b21bbd90c81 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -695,6 +695,7 @@ if(!istype(move_intent)) set_next_usable_move_intent() update_emotes() + species.update_appearence_descriptors(src) return TRUE //Syncs cultural tokens to the currently set specie, and may trigger a language update diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 4ef5ad78817..e8fa65350fb 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -322,6 +322,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t This function restores all organs. */ /mob/living/carbon/human/restore_all_organs(var/ignore_prosthetic_prefs) + species?.create_missing_organs(src) for(var/bodypart in global.all_limb_tags_by_depth) var/obj/item/organ/external/current_organ = get_organ(bodypart) if(istype(current_organ)) diff --git a/code/modules/mob/living/deity/phenomena/transmutation.dm b/code/modules/mob/living/deity/phenomena/transmutation.dm index d7d9908ae0b..7f6f20a8399 100644 --- a/code/modules/mob/living/deity/phenomena/transmutation.dm +++ b/code/modules/mob/living/deity/phenomena/transmutation.dm @@ -22,5 +22,5 @@ /datum/phenomena/rock_form/activate(var/mob/living/carbon/human/H) ..() to_chat(H, "You feel your body harden as it rapidly is transformed into living crystal!") - H.set_species(SPECIES_GOLEM) + H.change_species(SPECIES_GOLEM) SET_STATUS_MAX(H, STAT_WEAK, 5) \ No newline at end of file diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index 9687967ec5f..7374d9610fd 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -47,7 +47,7 @@ if(subspecies && istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M - H.set_species(subspecies) + H.change_species(subspecies) if(delete_old_mob) QDEL_IN(src, 1) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 72609f783bb..89e22c0e6fe 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -44,8 +44,10 @@ return var/update_icon = FALSE - mannequin.rejuvenate() copy_to(mannequin, TRUE) + mannequin.restore_all_organs() + mannequin.sync_organ_dna() + mannequin.force_update_limbs() var/datum/job/previewJob if(equip_preview_mob) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 22f9d76397b..320add46d12 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -30,7 +30,7 @@ for(var/obj/item/W in src) drop_from_inventory(W) - set_species(species.primitive_form) + change_species(species.primitive_form) dna.SetSEState(global.MONKEYBLOCK,1) dna.SetSEValueRange(global.MONKEYBLOCK,0xDAC, 0xFFF) diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index d25a423cddf..452bb685954 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -396,13 +396,13 @@ // for(var/obj/item/organ/internal/I in owner.get_internal_organs()) if(I.parent_organ == organ_tag) - LAZYDISTINCTADD(I, internal_organs) + LAZYDISTINCTADD(internal_organs, I) update_internal_organs_cost() for(var/obj/item/organ/external/E in owner.get_external_organs()) if(E.parent_organ == organ_tag) E.parent = src - LAZYDISTINCTADD(E, children) + LAZYDISTINCTADD(children, E) //Add any existing implants that should be refering us for(var/obj/implant in implants) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 05d5241b545..1e47bd833bc 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -36,7 +36,7 @@ H.set_gender(M.get_sex()) H.name = "unknown" // This will cause set_species() to randomize the mob name. H.real_name = H.name - H.set_species(choice) + H.change_species(choice) H.universal_speak = TRUE var/datum/preferences/A = new() A.randomize_appearance_and_body_for(H) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm index a53f2b05030..45357b68e4e 100644 --- a/code/modules/species/outsider/random.dm +++ b/code/modules/species/outsider/random.dm @@ -170,7 +170,7 @@ to_chat(user, "You can't speak any other languages by default. You can use translator implant that spawns on top of this monolith - it will give you knowledge of any language if you hear it enough times.") var/mob/living/carbon/human/H = user new /obj/item/implanter/translator(get_turf(src)) - H.set_species(SPECIES_ALIEN) + H.change_species(SPECIES_ALIEN) var/decl/cultural_info/culture = H.get_cultural_value(TAG_CULTURE) H.fully_replace_character_name(culture.get_random_name(H, H.gender)) H.rename_self("Humanoid Alien", 1) diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 7bd11a13674..64daf338031 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -13,7 +13,6 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/ooc_codex_information var/cyborg_noun = "Cyborg" var/hidden_from_codex = TRUE - var/is_crystalline = FALSE var/holder_icon var/list/available_bodytypes = list() @@ -458,6 +457,10 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 //Checks if an existing limbs is the specie's default /decl/species/proc/is_default_limb(var/obj/item/organ/external/E) + if((species_flags & SPECIES_FLAG_CRYSTALLINE) != BP_IS_CRYSTAL(E)) + return FALSE + if((species_flags & SPECIES_FLAG_SYNTHETIC) != BP_IS_PROSTHETIC(E)) + return FALSE for(var/tag in has_limbs) if(E.organ_tag == tag) var/list/organ_data = has_limbs[tag] @@ -865,7 +868,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 else . = 8 /decl/species/proc/post_organ_rejuvenate(var/obj/item/organ/org, var/mob/living/carbon/human/H) - if(org && (org.species ? org.species.is_crystalline : is_crystalline)) + if(org && (org.species ? (org.species.species_flags & SPECIES_FLAG_CRYSTALLINE) : (species_flags & SPECIES_FLAG_CRYSTALLINE))) org.status |= (ORGAN_BRITTLE|ORGAN_CRYSTAL) /decl/species/proc/check_no_slip(var/mob/living/carbon/human/H) @@ -945,7 +948,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#species_[ckey(name)]") if(mannequin) - mannequin.set_species(name) + mannequin.change_species(name) customize_preview_mannequin(mannequin) preview_icon = getFlatIcon(mannequin) diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm index eb51a3e5af5..422559d3739 100644 --- a/code/modules/species/station/golem.dm +++ b/code/modules/species/station/golem.dm @@ -11,7 +11,7 @@ available_bodytypes = list(/decl/bodytype/golem) unarmed_attacks = list(/decl/natural_attack/stomp, /decl/natural_attack/kick, /decl/natural_attack/punch) - species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_POISON + species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_CRYSTALLINE spawn_flags = SPECIES_IS_RESTRICTED siemens_coefficient = 0 @@ -45,8 +45,6 @@ death_message = "becomes completely motionless..." available_pronouns = list(/decl/pronouns/neuter) - is_crystalline = TRUE - force_cultural_info = list( TAG_CULTURE = /decl/cultural_info/culture/hidden/cultist, TAG_HOMEWORLD = /decl/cultural_info/location/stateless, diff --git a/mods/species/adherent/datum/species.dm b/mods/species/adherent/datum/species.dm index ff2a7747322..9dabaf5e1bd 100644 --- a/mods/species/adherent/datum/species.dm +++ b/mods/species/adherent/datum/species.dm @@ -59,7 +59,7 @@ heat_level_2 = SYNTH_HEAT_LEVEL_2 heat_level_3 = SYNTH_HEAT_LEVEL_3 - species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_MINOR_CUT + species_flags = SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_CRYSTALLINE spawn_flags = SPECIES_CAN_JOIN appearance_flags = HAS_EYE_COLOR diff --git a/mods/species/ascent/machines/magnetotron.dm b/mods/species/ascent/machines/magnetotron.dm index aa072d6c7a0..3affc3825d4 100644 --- a/mods/species/ascent/machines/magnetotron.dm +++ b/mods/species/ascent/machines/magnetotron.dm @@ -43,7 +43,7 @@ target.visible_message(SPAN_NOTICE("[target] molts away their shell, emerging as a new gyne.")) spark_at(src, cardinal_only = TRUE) ADJ_STATUS(target, STAT_STUN, 6) - target.set_species(SPECIES_MANTID_GYNE) + target.change_species(SPECIES_MANTID_GYNE) new /obj/effect/temp_visual/emp_burst(loc) for(var/obj/item/organ/external/E in target.get_external_organs()) if(prob(60)) diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm index ec0bc9e7b8a..8c098685752 100644 --- a/mods/species/utility_frames/species.dm +++ b/mods/species/utility_frames/species.dm @@ -20,7 +20,7 @@ available_bodytypes = list(/decl/bodytype/utility_frame) age_descriptor = /datum/appearance_descriptor/age/utility_frame hidden_from_codex = FALSE - species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_POISON + species_flags = SPECIES_FLAG_NO_PAIN | SPECIES_FLAG_NO_SCAN | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_SYNTHETIC spawn_flags = SPECIES_CAN_JOIN appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR strength = STR_HIGH From 81445a32201387b12825060a21b6376fdf74c9ee Mon Sep 17 00:00:00 2001 From: keIgaras Date: Wed, 9 Feb 2022 22:23:04 +0300 Subject: [PATCH 11/45] say no to window murder say no to window murder --- code/game/objects/structures/window.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 972ddb3732b..cd79b8fbb39 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -306,14 +306,16 @@ if(G.damage_stage() < 2) G.affecting.visible_message(SPAN_DANGER("[G.assailant] bashes [G.affecting] against \the [src]!")) if(prob(50)) - SET_STATUS_MAX(affecting_mob, STAT_WEAK, 1) + SET_STATUS_MAX(affecting_mob, STAT_WEAK, 2) affecting_mob.apply_damage(10, BRUTE, def_zone, used_weapon = src) hit(25) + qdel(G) else G.affecting.visible_message(SPAN_DANGER("[G.assailant] crushes [G.affecting] against \the [src]!")) SET_STATUS_MAX(affecting_mob, STAT_WEAK, 5) affecting_mob.apply_damage(20, BRUTE, def_zone, used_weapon = src) hit(50) + qdel(G) return TRUE /obj/structure/window/proc/hit(var/damage, var/sound_effect = 1) @@ -421,7 +423,7 @@ basestate = reinf_basestate else basestate = initial(basestate) - + ..() if (paint_color) From 3eacd295d525e5746707ad857a03b73630df886c Mon Sep 17 00:00:00 2001 From: comma Date: Fri, 11 Feb 2022 10:40:49 +0300 Subject: [PATCH 12/45] Fixes #2216 Special icon was only drawn if there's buckled mob, but shuttle chair had one for both states. Only other chair to use special icons (cap chair) has one that works for both cases too, so just axed buckled check. Code in the block already handles layering in case of buckled/not anyway. --- .../structures/stool_bed_chair_nest/chairs.dm | 2 +- icons/obj/furniture.dmi | Bin 36246 -> 35246 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 100cb5a06bf..c14bd89cf23 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -46,7 +46,7 @@ I.appearance_flags |= RESET_COLOR I.color = reinf_material.color add_overlay(I) - if(has_special_overlay && buckled_mob) + if(has_special_overlay) I = image(icon, "[icon_state]_special") I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER if(material_alteration & MAT_FLAG_ALTERATION_COLOR) diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index fb3ef87ae245bf7e2e5a41ec3e3bc8bdf2532e3d..98c1f64ca5eeb889f55ca75b61b22f2d9bc44235 100644 GIT binary patch literal 35246 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 From c61fef6cc56f218258382df68d647aab605440db Mon Sep 17 00:00:00 2001 From: comma Date: Fri, 11 Feb 2022 15:25:28 +0300 Subject: [PATCH 13/45] Fixes #2004 It seems to be mostly caused by relays never reconnecting and therefore entire decks losing network connectivity forever. Now if network is shutting down, relays will start trying to reconnect (every 30 seconds), so if router goes up, relays will follow soon. --- .../modular_computers/networking/_network.dm | 2 +- .../networking/device_types/_network_device.dm | 2 +- .../networking/device_types/relay.dm | 18 +++++++++++++++++- .../networking/machinery/relay.dm | 7 ++++++- nano/templates/network_router.tmpl | 8 ++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/code/modules/modular_computers/networking/_network.dm b/code/modules/modular_computers/networking/_network.dm index 3469ee73ed5..f012ad3d3be 100644 --- a/code/modules/modular_computers/networking/_network.dm +++ b/code/modules/modular_computers/networking/_network.dm @@ -33,7 +33,7 @@ /datum/computer_network/Destroy() for(var/datum/extension/network_device/D in devices) - D.disconnect() + D.disconnect(TRUE) QDEL_NULL_LIST(chat_channels) devices = null mainframes = null diff --git a/code/modules/modular_computers/networking/device_types/_network_device.dm b/code/modules/modular_computers/networking/device_types/_network_device.dm index aa0ad6d872a..73eefa579e1 100644 --- a/code/modules/modular_computers/networking/device_types/_network_device.dm +++ b/code/modules/modular_computers/networking/device_types/_network_device.dm @@ -40,7 +40,7 @@ return FALSE return net.add_device(src) -/datum/extension/network_device/proc/disconnect() +/datum/extension/network_device/proc/disconnect(net_down) var/datum/computer_network/net = SSnetworking.networks[network_id] if(!net) return FALSE diff --git a/code/modules/modular_computers/networking/device_types/relay.dm b/code/modules/modular_computers/networking/device_types/relay.dm index cc56e7d4f91..4179effbf61 100644 --- a/code/modules/modular_computers/networking/device_types/relay.dm +++ b/code/modules/modular_computers/networking/device_types/relay.dm @@ -1,6 +1,7 @@ /datum/extension/network_device/broadcaster/relay connection_type = NETWORK_CONNECTION_STRONG_WIRELESS expected_type = /obj/machinery + var/reconnect_time /datum/extension/network_device/broadcaster/relay/get_nearby_networks() if(long_range) @@ -21,7 +22,22 @@ return FALSE if(!long_range && !(network_id in get_nearby_networks())) return FALSE - return net.add_device(src) + . = net.add_device(src) + if(.) + reconnect_time = null +/datum/extension/network_device/broadcaster/relay/disconnect(net_down) + . = ..() + // Router went down, we should try to hook back up when it's up + if(net_down) + reconnect_time = world.time + 30 SECONDS + START_PROCESSING(SSprocessing, src) + +/datum/extension/network_device/broadcaster/relay/Process() + if(world.time > reconnect_time) + if(connect()) + return PROCESS_KILL + reconnect_time = world.time + 30 SECONDS + /datum/extension/network_device/broadcaster/relay/long_range long_range = TRUE diff --git a/code/modules/modular_computers/networking/machinery/relay.dm b/code/modules/modular_computers/networking/machinery/relay.dm index bd4f2fb4099..5e0b44bebf8 100644 --- a/code/modules/modular_computers/networking/machinery/relay.dm +++ b/code/modules/modular_computers/networking/machinery/relay.dm @@ -16,6 +16,7 @@ if(!istype(R)) return data data["wifi"] = R.allow_wifi + data["reconnect"] = R.reconnect_time && round((R.reconnect_time - world.time)/10) return data /obj/machinery/network/relay/OnTopic(mob/user, href_list, datum/topic_state/state) @@ -24,7 +25,11 @@ if(R) R.allow_wifi = !R.allow_wifi return TOPIC_REFRESH - + if(href_list["reconnect"]) + var/datum/extension/network_device/broadcaster/relay/R = get_extension(src, /datum/extension/network_device) + if(R) + R.connect() + return TOPIC_REFRESH . = ..() /obj/machinery/network/relay/long_range diff --git a/nano/templates/network_router.tmpl b/nano/templates/network_router.tmpl index 740382aa17f..464b4e51451 100644 --- a/nano/templates/network_router.tmpl +++ b/nano/templates/network_router.tmpl @@ -30,6 +30,14 @@ BACKUP ROUTER / RELAY {{/if}} + {{if data.reconnect}} +
    + CONNECTION LOST, ATTEMPTING RECONNECT IN {{:data.reconnect}}s +
    +
    + {{:helper.link("RECONNECT NOW", null, { "reconnect" : 1 })}} +
    + {{/if}}
    Wi-Fi Connections:
    From 3fe9ced8b36da5171ed97cef2aa82920e7e1ef71 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 13 Feb 2022 17:05:01 +1100 Subject: [PATCH 14/45] Automatic changelog generation for PR #2285 [ci skip] --- html/changelogs/AutoChangeLog-pr-2285.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2285.yml diff --git a/html/changelogs/AutoChangeLog-pr-2285.yml b/html/changelogs/AutoChangeLog-pr-2285.yml new file mode 100644 index 00000000000..0b491c0d749 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2285.yml @@ -0,0 +1,6 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - balance: if you hit a person against a window while they are in a grapple, you + release them from the grapple, also increased the duration of the weakness effect + from 1 to 2 seconds From 718dab2f629e18708e9da32465b048ca0e86f83a Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Mon, 14 Feb 2022 09:13:25 +1100 Subject: [PATCH 15/45] Automatic changelog generation for PR #2288 [ci skip] --- html/changelogs/AutoChangeLog-pr-2288.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2288.yml diff --git a/html/changelogs/AutoChangeLog-pr-2288.yml b/html/changelogs/AutoChangeLog-pr-2288.yml new file mode 100644 index 00000000000..c2c9ce6db89 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2288.yml @@ -0,0 +1,5 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: Network relays will now attempt reconnect on their own, so if router had + a blackout, they'll rejoin on their own without manual reboot. From df9967732397e441b3f217c7e9281bd6a11036cb Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Mon, 14 Feb 2022 00:29:06 +0000 Subject: [PATCH 16/45] Automatic changelog generation [ci skip] --- html/changelog.html | 7 +++++++ html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/AutoChangeLog-pr-2285.yml | 6 ------ html/changelogs/AutoChangeLog-pr-2288.yml | 5 ----- 4 files changed, 14 insertions(+), 11 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2285.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2288.yml diff --git a/html/changelog.html b/html/changelog.html index 44f7f487b6b..6c849d84935 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,13 @@ -->
    +

    14 February 2022

    +

    tag if you want to specify another name or several people. --> updated:

    +
      +
    • if you hit a person against a window while they are in a grapple, you release them from the grapple, also increased the duration of the weakness effect from 1 to 2 seconds
    • +
    • Network relays will now attempt reconnect on their own, so if router had a blackout, they'll rejoin on their own without manual reboot.
    • +
    +

    02 February 2022

    tag if you want to specify another name or several people. --> updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c5e0dac13e5..cca17edb41b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14079,3 +14079,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-02-02: tag if you want to specify another name or several people. -->: - bugfix: Sometimes, thrown fruit smudges would fail to save. That's fixed now. +2022-02-14: + tag if you want to specify another name or several people. -->: + - balance: if you hit a person against a window while they are in a grapple, you + release them from the grapple, also increased the duration of the weakness effect + from 1 to 2 seconds + - bugfix: Network relays will now attempt reconnect on their own, so if router had + a blackout, they'll rejoin on their own without manual reboot. diff --git a/html/changelogs/AutoChangeLog-pr-2285.yml b/html/changelogs/AutoChangeLog-pr-2285.yml deleted file mode 100644 index 0b491c0d749..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2285.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - balance: if you hit a person against a window while they are in a grapple, you - release them from the grapple, also increased the duration of the weakness effect - from 1 to 2 seconds diff --git a/html/changelogs/AutoChangeLog-pr-2288.yml b/html/changelogs/AutoChangeLog-pr-2288.yml deleted file mode 100644 index c2c9ce6db89..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2288.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: Network relays will now attempt reconnect on their own, so if router had - a blackout, they'll rejoin on their own without manual reboot. From 7bf8cbd9fcc569ce172f6a64d618a952b524e7ac Mon Sep 17 00:00:00 2001 From: comma Date: Fri, 11 Feb 2022 11:50:25 +0300 Subject: [PATCH 17/45] Fixes #2211 Updates bordercheck flag when window direction is set --- code/game/objects/structures/window.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 972ddb3732b..15d420e18b6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -333,6 +333,13 @@ set_dir(turn(dir, 90)) update_nearby_tiles(need_rebuild=1) +/obj/structure/window/set_dir(ndir) + . = ..() + if(is_fulltile()) + atom_flags &= ~ATOM_FLAG_CHECKS_BORDER + else + atom_flags |= ATOM_FLAG_CHECKS_BORDER + /obj/structure/window/update_nearby_tiles(need_rebuild) . = ..() for(var/obj/structure/S in orange(loc, 1)) From fcb28fc954fe8931dfcfcec9aaad9304160b0b50 Mon Sep 17 00:00:00 2001 From: keIgaras Date: Fri, 11 Feb 2022 13:40:54 +0300 Subject: [PATCH 18/45] You can force move mob on catwalk in passive grab You can force move mob on catwalk in passive grab --- code/game/objects/structures/catwalk.dm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index a0e6e655ab8..52560645d6a 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -79,6 +79,19 @@ if(!QDELETED(src) && severity != 3) physically_destroyed() +/obj/structure/catwalk/grab_attack(var/obj/item/grab/G) + var/mob/living/affecting_mob = G.get_affecting_mob() + if(atom_flags & ATOM_FLAG_CLIMBABLE) + var/obj/occupied = turf_is_crowded() + if (occupied) + to_chat(G.assailant, SPAN_WARNING("There's \a [occupied] in the way.")) + return TRUE + G.affecting.forceMove(src.loc) + if(affecting_mob) + SET_STATUS_MAX(affecting_mob, STAT_WEAK, rand(2,5)) + visible_message(SPAN_DANGER("[G.assailant] puts [G.affecting] on \the [src].")) + return TRUE + /obj/structure/catwalk/attack_robot(var/mob/user) if(Adjacent(user)) attack_hand(user) From 656c68203a5e342b824b8a4cbaf7b944ed3c7a96 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 16 Feb 2022 09:34:51 +1100 Subject: [PATCH 19/45] Automatic changelog generation for PR #2286 [ci skip] --- html/changelogs/AutoChangeLog-pr-2286.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2286.yml diff --git a/html/changelogs/AutoChangeLog-pr-2286.yml b/html/changelogs/AutoChangeLog-pr-2286.yml new file mode 100644 index 00000000000..8ab0bd6d28b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2286.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: You can force move mob on catwalk in passive grab From 57889ed330de8dd9c3beb43ece36ea5d26863ef6 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 16 Feb 2022 00:29:24 +0000 Subject: [PATCH 20/45] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2286.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2286.yml diff --git a/html/changelog.html b/html/changelog.html index 6c849d84935..56a9b1d9235 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
      +

      16 February 2022

      +

      tag if you want to specify another name or several people. --> updated:

      +
        +
      • You can force move mob on catwalk in passive grab
      • +
      +

      14 February 2022

      tag if you want to specify another name or several people. --> updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cca17edb41b..6ddc9cd90e1 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14086,3 +14086,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. from 1 to 2 seconds - bugfix: Network relays will now attempt reconnect on their own, so if router had a blackout, they'll rejoin on their own without manual reboot. +2022-02-16: + tag if you want to specify another name or several people. -->: + - bugfix: You can force move mob on catwalk in passive grab diff --git a/html/changelogs/AutoChangeLog-pr-2286.yml b/html/changelogs/AutoChangeLog-pr-2286.yml deleted file mode 100644 index 8ab0bd6d28b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2286.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: You can force move mob on catwalk in passive grab From c5848af3e58d8d74d1444cf487ba216da2fab460 Mon Sep 17 00:00:00 2001 From: keIgaras Date: Mon, 14 Feb 2022 19:43:29 +0300 Subject: [PATCH 21/45] Open door sprite now renders correctly Open door sprite now renders correctly --- code/game/objects/structures/doors/_door.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/doors/_door.dm b/code/game/objects/structures/doors/_door.dm index ffdaa951296..5f86d8b6db9 100644 --- a/code/game/objects/structures/doors/_door.dm +++ b/code/game/objects/structures/doors/_door.dm @@ -39,7 +39,7 @@ /obj/structure/door/on_update_icon() ..() - icon_state = "[icon_base][!density ? "open" : ""]" + icon_state = "[icon_base][!density ? "_open" : ""]" /obj/structure/door/proc/post_change_state() update_nearby_tiles() From 1e639d9f9cedc5b7dec7beebd657ebe962c25955 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Thu, 17 Feb 2022 19:46:52 +1100 Subject: [PATCH 22/45] Automatic changelog generation for PR #2292 [ci skip] --- html/changelogs/AutoChangeLog-pr-2292.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2292.yml diff --git a/html/changelogs/AutoChangeLog-pr-2292.yml b/html/changelogs/AutoChangeLog-pr-2292.yml new file mode 100644 index 00000000000..b7563a8965b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2292.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: Fix bug where sprites for open doors were not displayed From 7bd5c47d2b79d6f0418a1091ee6a5711169ee0ca Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Fri, 18 Feb 2022 00:34:04 +0000 Subject: [PATCH 23/45] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2292.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2292.yml diff --git a/html/changelog.html b/html/changelog.html index 56a9b1d9235..26a3e5aedcb 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
        +

        18 February 2022

        +

        tag if you want to specify another name or several people. --> updated:

        +
          +
        • Fix bug where sprites for open doors were not displayed
        • +
        +

        16 February 2022

        tag if you want to specify another name or several people. --> updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 6ddc9cd90e1..2eb3b8b8ed6 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14089,3 +14089,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-02-16: tag if you want to specify another name or several people. -->: - bugfix: You can force move mob on catwalk in passive grab +2022-02-18: + tag if you want to specify another name or several people. -->: + - bugfix: Fix bug where sprites for open doors were not displayed diff --git a/html/changelogs/AutoChangeLog-pr-2292.yml b/html/changelogs/AutoChangeLog-pr-2292.yml deleted file mode 100644 index b7563a8965b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2292.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: Fix bug where sprites for open doors were not displayed From 6b5c9a30d249b6545f2b67967999a32216b4d06f Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 18 Feb 2022 20:19:43 -0600 Subject: [PATCH 24/45] Fix logic error in is_default_limb --- code/modules/species/species.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 64daf338031..9ed18ffab29 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -457,9 +457,10 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 //Checks if an existing limbs is the specie's default /decl/species/proc/is_default_limb(var/obj/item/organ/external/E) - if((species_flags & SPECIES_FLAG_CRYSTALLINE) != BP_IS_CRYSTAL(E)) + // We don't have ^^ (logical XOR), so !x != !y will suffice. + if(!(species_flags & SPECIES_FLAG_CRYSTALLINE) != !BP_IS_CRYSTAL(E)) return FALSE - if((species_flags & SPECIES_FLAG_SYNTHETIC) != BP_IS_PROSTHETIC(E)) + if(!(species_flags & SPECIES_FLAG_SYNTHETIC) != !BP_IS_PROSTHETIC(E)) return FALSE for(var/tag in has_limbs) if(E.organ_tag == tag) @@ -929,8 +930,8 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/update_appearence_descriptors(var/mob/living/carbon/human/H) if(!LAZYLEN(src.appearance_descriptors)) H.appearance_descriptors = null - return - + return + var/list/new_descriptors = list() //Add missing descriptors, and sanitize any existing ones for(var/desctype in src.appearance_descriptors) From eede425705a5ccc4af0a1585020a80a9e7ea8b88 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 18 Feb 2022 20:21:10 -0600 Subject: [PATCH 25/45] Remove bad update_appearence_descriptors call --- code/modules/mob/living/carbon/human/human.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b21bbd90c81..f2ced029f8a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -695,7 +695,6 @@ if(!istype(move_intent)) set_next_usable_move_intent() update_emotes() - species.update_appearence_descriptors(src) return TRUE //Syncs cultural tokens to the currently set specie, and may trigger a language update From 16eaa02c1410d236416dbb38d4193a40ecfe3322 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 18 Feb 2022 20:22:47 -0600 Subject: [PATCH 26/45] Fix specie/appearence typos --- code/game/turfs/turf_changing.dm | 8 ++++---- code/modules/mob/living/carbon/human/human.dm | 12 ++++++------ code/modules/species/species.dm | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index e12bd213650..6644fd83503 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -103,7 +103,7 @@ // end of lighting stuff - // Outside/weather stuff. set_outside() updates weather already + // Outside/weather stuff. set_outside() updates weather already // so only call it again if it doesn't already handle it. if(!keep_outside || !W.set_outside(old_outside)) W.update_weather() @@ -124,14 +124,14 @@ /turf/simulated/floor/transport_properties_from(turf/simulated/floor/other) if(!..()) return FALSE - + broken = other.broken burnt = other.burnt if(broken || burnt) queue_icon_update() set_flooring(other.flooring) return TRUE - + //I would name this copy_from() but we remove the other turf from their air zone for some reason /turf/simulated/transport_properties_from(turf/simulated/other) if(!..()) @@ -161,7 +161,7 @@ update_material() return TRUE -//No idea why resetting the base appearence from New() isn't enough, but without this it doesn't work +//No idea why resetting the base appearance from New() isn't enough, but without this it doesn't work /turf/simulated/shuttle/wall/corner/transport_properties_from(turf/simulated/other) . = ..() reset_base_appearance() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f2ced029f8a..39e119743f4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -640,7 +640,7 @@ update_body() //set_species should not handle the entirety of initing the mob, and should not trigger deep updates -//It focuses on setting up specie related data, without force applying them uppon organs and the mob's appearence. +//It focuses on setting up species-related data, without force applying them uppon organs and the mob's appearance. // For transforming an existing mob, look at change_species() /mob/living/carbon/human/proc/set_species(var/new_species_name) if(!new_species_name) @@ -697,7 +697,7 @@ update_emotes() return TRUE -//Syncs cultural tokens to the currently set specie, and may trigger a language update +//Syncs cultural tokens to the currently set species, and may trigger a language update /mob/living/carbon/human/proc/apply_species_cultural_info() var/update_lang for(var/token in ALL_CULTURAL_TAGS) @@ -711,7 +711,7 @@ if(update_lang) update_languages() -//Drop anything that cannot be worn by the current specie of the mob +//Drop anything that cannot be worn by the current species of the mob /mob/living/carbon/human/proc/apply_species_inventory_restrictions() if(species) if(!(species.appearance_flags & HAS_UNDERWEAR)) @@ -730,7 +730,7 @@ icon_state = lowertext(SPECIES_HUMAN) skin_colour = COLOR_BLACK else - species.apply_appearence(src) + species.apply_appearance(src) force_update_limbs() //updates bodytype default_pixel_x = initial(pixel_x) + bodytype.pixel_offset_x @@ -1288,7 +1288,7 @@ //Set species and real name data set_real_name(new_dna.real_name) set_species(new_dna.species) - //Revive actually regen organs, reset their appearence and makes sure if the player is kicked out they get reinserted in + //Revive actually regen organs, reset their appearance and makes sure if the player is kicked out they get reinserted in revive() species.handle_pre_spawn(src) @@ -1333,7 +1333,7 @@ species.create_missing_organs(src) //Syncs DNA when adding organs species.handle_post_spawn(src) - UpdateAppearance() //Apply dna appearence to mob, causes DNA to change because filler values are regenerated + UpdateAppearance() //Apply dna appearance to mob, causes DNA to change because filler values are regenerated reset_blood() //If the mob has its default name it'll try to generate /obtain a proper one diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 9ed18ffab29..9e5e5d2678f 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -188,7 +188,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/list/override_organ_types // Used for species that only need to change one or two entries in has_organ. - //List of organ tags, with the amount and type required for living by this specie + //List of organ tags, with the amount and type required for living by this species //#REMOVEME: The vital organ stuff was apparently mostly dropped, so its a bit pointless to improve it... var/list/vital_organs = list( BP_HEART = list("path" = /obj/item/organ/internal/heart), @@ -447,7 +447,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/get_manual_dexterity(var/mob/living/carbon/human/H) . = manual_dexterity -//Checks if an existing organ is the specie's default +//Checks if an existing organ is the species default /decl/species/proc/is_default_organ(var/obj/item/organ/O) for(var/tag in has_organ) if(O.organ_tag == tag) @@ -455,7 +455,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return TRUE return FALSE -//Checks if an existing limbs is the specie's default +//Checks if an existing limbs is the species default /decl/species/proc/is_default_limb(var/obj/item/organ/external/E) // We don't have ^^ (logical XOR), so !x != !y will suffice. if(!(species_flags & SPECIES_FLAG_CRYSTALLINE) != !BP_IS_CRYSTAL(E)) @@ -920,14 +920,14 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/get_holder_color(var/mob/living/carbon/human/H) return -//Called after a mob's specie is set, organs were created, and we're about to update the icon, color, and etc of the mob being created. +//Called after a mob's species is set, organs were created, and we're about to update the icon, color, and etc of the mob being created. //Consider this might be called post-init -/decl/species/proc/apply_appearence(var/mob/living/carbon/human/H) +/decl/species/proc/apply_appearance(var/mob/living/carbon/human/H) H.icon_state = lowertext(src.name) H.skin_colour = src.base_color - update_appearence_descriptors(H) + update_appearance_descriptors(H) -/decl/species/proc/update_appearence_descriptors(var/mob/living/carbon/human/H) +/decl/species/proc/update_appearance_descriptors(var/mob/living/carbon/human/H) if(!LAZYLEN(src.appearance_descriptors)) H.appearance_descriptors = null return From 494592ba30aee699e5a520dd38a4eac6ea124baa Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 20 Feb 2022 08:48:07 +1100 Subject: [PATCH 27/45] Automatic changelog generation for PR #2287 [ci skip] --- html/changelogs/AutoChangeLog-pr-2287.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2287.yml diff --git a/html/changelogs/AutoChangeLog-pr-2287.yml b/html/changelogs/AutoChangeLog-pr-2287.yml new file mode 100644 index 00000000000..e664c65b62d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2287.yml @@ -0,0 +1,5 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: Cannot phase onto low walls through solid windows anymore. + - bugfix: Shuttle chairs now display their bars in raised state too From cd14827079ff9e8818b96020431d2e453a6b465c Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 20 Feb 2022 00:37:06 +0000 Subject: [PATCH 28/45] Automatic changelog generation [ci skip] --- html/changelog.html | 7 +++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-2287.yml | 5 ----- 3 files changed, 11 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2287.yml diff --git a/html/changelog.html b/html/changelog.html index 26a3e5aedcb..ccbde2ff9e2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,13 @@ -->
          +

          20 February 2022

          +

          tag if you want to specify another name or several people. --> updated:

          +
            +
          • Cannot phase onto low walls through solid windows anymore.
          • +
          • Shuttle chairs now display their bars in raised state too
          • +
          +

          18 February 2022

          tag if you want to specify another name or several people. --> updated:

            diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2eb3b8b8ed6..0d8901c0e2a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14092,3 +14092,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-02-18: tag if you want to specify another name or several people. -->: - bugfix: Fix bug where sprites for open doors were not displayed +2022-02-20: + tag if you want to specify another name or several people. -->: + - bugfix: Cannot phase onto low walls through solid windows anymore. + - bugfix: Shuttle chairs now display their bars in raised state too diff --git a/html/changelogs/AutoChangeLog-pr-2287.yml b/html/changelogs/AutoChangeLog-pr-2287.yml deleted file mode 100644 index e664c65b62d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2287.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: Cannot phase onto low walls through solid windows anymore. - - bugfix: Shuttle chairs now display their bars in raised state too From 79fbb89c72594da9ee379da3b552fa842e94c962 Mon Sep 17 00:00:00 2001 From: keIgaras Date: Fri, 18 Feb 2022 18:18:51 +0300 Subject: [PATCH 29/45] Change the location of the ui_storage Change the location of the ui_storage --- .../items/weapons/storage/storage_ui/default.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/storage/storage_ui/default.dm b/code/game/objects/items/weapons/storage/storage_ui/default.dm index 41540a2b609..5ea7a3f7843 100644 --- a/code/game/objects/items/weapons/storage/storage_ui/default.dm +++ b/code/game/objects/items/weapons/storage/storage_ui/default.dm @@ -180,7 +180,7 @@ /datum/storage_ui/default/proc/arrange_item_slots(var/rows, var/cols) var/cx = 4 var/cy = 2+rows - boxes.screen_loc = "LEFT+4:16,BOTTOM+2:16 to LEFT+[4+cols]:16,BOTTOM+[2+rows]:16" + boxes.screen_loc = "LEFT+3:16,BOTTOM+1.7:16 to LEFT+[3+cols]:16,BOTTOM+[1.7+rows]:16" for(var/obj/O in storage.contents) O.screen_loc = "LEFT+[cx]:16,BOTTOM+[cy]:16" @@ -206,9 +206,9 @@ M.Scale((storage_width-storage_cap_width*2+3)/32,1) storage_continue.transform = M - storage_start.screen_loc = "LEFT+4:16,BOTTOM+2:16" - storage_continue.screen_loc = "LEFT+4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],BOTTOM+2:16" - storage_end.screen_loc = "LEFT+4:[19+storage_width-storage_cap_width],BOTTOM+2:16" + storage_start.screen_loc = "LEFT+3:16,BOTTOM+1.7:16" + storage_continue.screen_loc = "LEFT+3:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],BOTTOM+1.7:16" + storage_end.screen_loc = "LEFT+3:[19+storage_width-storage_cap_width],BOTTOM+1.7:16" var/startpoint = 0 var/endpoint = 1 @@ -231,11 +231,11 @@ storage_start.overlays += stored_continue storage_start.overlays += stored_end - O.screen_loc = "LEFT+4:[round((startpoint+endpoint)/2)+2-O.pixel_x],BOTTOM+2:[16-O.pixel_y]" + O.screen_loc = "LEFT+3:[round((startpoint+endpoint)/2)+2-O.pixel_x],BOTTOM+1.7:[16-O.pixel_y]" O.maptext = "" O.hud_layerise() - closer.screen_loc = "LEFT+4:[storage_width+19],BOTTOM+2:16" + closer.screen_loc = "LEFT+3:[storage_width+19],BOTTOM+1.7:16" // Sets up numbered display to show the stack size of each stored mineral // NOTE: numbered display is turned off currently because it's broken From 306077056ff7c65d9f954d0569e1002683e33529 Mon Sep 17 00:00:00 2001 From: SierraKomodo Date: Sun, 20 Feb 2022 10:45:05 -0800 Subject: [PATCH 30/45] Allow AltClick to remove ID from wallets --- .../objects/items/weapons/storage/wallets.dm | 14 +++++++ .../changelogs/sierrakomodo-alt-wallet-id.yml | 37 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 html/changelogs/sierrakomodo-alt-wallet-id.yml diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 8ea112c4984..0ca60c4e1cf 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -101,6 +101,20 @@ else return ..() + +/obj/item/storage/wallet/AltClick(mob/user) + if (user != loc || user.incapacitated() || !ishuman(user)) + return ..() + + var/obj/item/card/id/id = GetIdCard() + if (istype(id)) + remove_from_storage(id) + user.put_in_hands(id) + return + + return ..() + + /obj/item/storage/wallet/random/Initialize() . = ..() var/item1_type = pick( /obj/item/cash/c10,/obj/item/cash/c100,/obj/item/cash/c1000,/obj/item/cash/c20,/obj/item/cash/c200,/obj/item/cash/c50, /obj/item/cash/c500) diff --git a/html/changelogs/sierrakomodo-alt-wallet-id.yml b/html/changelogs/sierrakomodo-alt-wallet-id.yml new file mode 100644 index 00000000000..a5a15e7a5a5 --- /dev/null +++ b/html/changelogs/sierrakomodo-alt-wallet-id.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# admin +################################# + +# Your name. +author: SierraKomodo + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "You can now remove ID cards from wallets with AltClick. This only works for human mobs, and only if you're holding or wearing the wallet." From 776f565a8f10cc5d456ebc1dffa20e7070b029fb Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 23 Feb 2022 22:00:06 +1100 Subject: [PATCH 31/45] Automatic changelog generation for PR #2293 [ci skip] --- html/changelogs/AutoChangeLog-pr-2293.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2293.yml diff --git a/html/changelogs/AutoChangeLog-pr-2293.yml b/html/changelogs/AutoChangeLog-pr-2293.yml new file mode 100644 index 00000000000..f2025e9b8ba --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2293.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - tweak: Change the location of the ui_storage, now it is more convenient From 4392137f141a66f480a0616f11a4410a2f06fd34 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Thu, 24 Feb 2022 00:33:18 +0000 Subject: [PATCH 32/45] Automatic changelog generation [ci skip] --- html/changelog.html | 10 +++++ html/changelogs/.all_changelog.yml | 6 +++ html/changelogs/AutoChangeLog-pr-2293.yml | 4 -- .../changelogs/sierrakomodo-alt-wallet-id.yml | 37 ------------------- 4 files changed, 16 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2293.yml delete mode 100644 html/changelogs/sierrakomodo-alt-wallet-id.yml diff --git a/html/changelog.html b/html/changelog.html index ccbde2ff9e2..e02e28f15f0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,16 @@ -->
            +

            24 February 2022

            +

            SierraKomodo updated:

            +
              +
            • You can now remove ID cards from wallets with AltClick. This only works for human mobs, and only if you're holding or wearing the wallet.
            • +
            +

            tag if you want to specify another name or several people. --> updated:

            +
              +
            • Change the location of the ui_storage, now it is more convenient
            • +
            +

            20 February 2022

            tag if you want to specify another name or several people. --> updated:

              diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0d8901c0e2a..573e8965e9a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14096,3 +14096,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. tag if you want to specify another name or several people. -->: - bugfix: Cannot phase onto low walls through solid windows anymore. - bugfix: Shuttle chairs now display their bars in raised state too +2022-02-24: + SierraKomodo: + - rscadd: You can now remove ID cards from wallets with AltClick. This only works + for human mobs, and only if you're holding or wearing the wallet. + tag if you want to specify another name or several people. -->: + - tweak: Change the location of the ui_storage, now it is more convenient diff --git a/html/changelogs/AutoChangeLog-pr-2293.yml b/html/changelogs/AutoChangeLog-pr-2293.yml deleted file mode 100644 index f2025e9b8ba..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2293.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - tweak: Change the location of the ui_storage, now it is more convenient diff --git a/html/changelogs/sierrakomodo-alt-wallet-id.yml b/html/changelogs/sierrakomodo-alt-wallet-id.yml deleted file mode 100644 index a5a15e7a5a5..00000000000 --- a/html/changelogs/sierrakomodo-alt-wallet-id.yml +++ /dev/null @@ -1,37 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# admin -################################# - -# Your name. -author: SierraKomodo - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "You can now remove ID cards from wallets with AltClick. This only works for human mobs, and only if you're holding or wearing the wallet." From 7fd9b6f78e677bc91108b31982a7d33b6c7e3dc4 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Sat, 12 Feb 2022 17:05:08 -0600 Subject: [PATCH 33/45] Fix new linter switch warnings --- code/game/machinery/syndicatebeacon.dm | 2 ++ code/modules/flufftext/TextFilters.dm | 4 ++-- code/modules/mob/mob_helpers.dm | 1 + code/modules/power/singularity/singularity.dm | 4 ++-- code/unit_tests/zas_tests.dm | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index ccc91b16d48..91370c7702d 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -61,6 +61,8 @@ src.updateUsrDialog() spawn(rand(50,200)) selfdestruct() return + if(2) + break if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!") diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index 4feb20f02bd..8805fe92da1 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -14,8 +14,8 @@ if(lowertext(newletter)=="a") newletter="ah" if(lowertext(newletter)=="c") newletter="k" switch(rand(1,7)) - if(1,3,5,8) newletter="[lowertext(newletter)]" - if(2,4,6,15) newletter="[uppertext(newletter)]" + if(1,3,5) newletter="[lowertext(newletter)]" + if(2,4,6) newletter="[uppertext(newletter)]" if(7) newletter+="'" //if(9,10) newletter="[newletter]" //if(11,12) newletter="[newletter]" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 3efc505088e..1a961cf2bc9 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -247,6 +247,7 @@ var/global/list/global/organ_rel_size = list( if(1,3,5,8) newletter="[lowertext(newletter)]" if(2,4,6,15) newletter="[uppertext(newletter)]" if(7) newletter+="'" + if(9 to 14) break //if(9,10) newletter="[newletter]" //if(11,12) newletter="[newletter]" //if(13) newletter="[newletter]" diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index da595b4a36d..6b6735fe3b4 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -352,10 +352,10 @@ var/global/list/singularities = list() var/dir2 = 0 var/dir3 = 0 switch(direction) - if(NORTH||SOUTH) + if(NORTH,SOUTH) dir2 = 4 dir3 = 8 - if(EAST||WEST) + if(EAST,WEST) dir2 = 1 dir3 = 2 var/turf/T2 = T diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm index e1be4a07248..c3ef6698b4d 100644 --- a/code/unit_tests/zas_tests.dm +++ b/code/unit_tests/zas_tests.dm @@ -75,7 +75,7 @@ return test_result - if(UT_NORMAL || UT_NORMAL_COLD) + if(UT_NORMAL, UT_NORMAL_COLD) if(abs(pressure - ONE_ATMOSPHERE) > 10) test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" return test_result From 4fa6783826337a88cb75d586c9d8eec4bc1e1e91 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Fri, 18 Feb 2022 20:24:08 -0600 Subject: [PATCH 34/45] Refactor syndiebeacon code slightly --- code/game/machinery/syndicatebeacon.dm | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 91370c7702d..b5116b8ba5b 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -55,14 +55,11 @@ src.updateUsrDialog() return charges -= 1 - switch(rand(1,2)) - if(1) + if(prob(50)) temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." src.updateUsrDialog() - spawn(rand(50,200)) selfdestruct() + addtimer(CALLBACK(src, selfdestruct), rand(5, 20) SECONDS) return - if(2) - break if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!") From 360295829035bf01eb9a40fd8f7e6451e7c20b19 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Tue, 22 Feb 2022 12:06:41 -0600 Subject: [PATCH 35/45] Refactor more syndiebeacon code --- code/game/machinery/syndicatebeacon.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index b5116b8ba5b..ca24cbf297f 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -56,10 +56,10 @@ return charges -= 1 if(prob(50)) - temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." - src.updateUsrDialog() - addtimer(CALLBACK(src, selfdestruct), rand(5, 20) SECONDS) - return + temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind." + src.updateUsrDialog() + addtimer(CALLBACK(src, .proc/selfdestruct), rand(5, 20) SECONDS) + return if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!") @@ -75,7 +75,7 @@ /obj/machinery/syndicate_beacon/proc/selfdestruct() selfdestructing = 1 - spawn() explosion(src.loc, 1, rand(1,3), rand(3,8), 10) + INVOKE_ASYNC(GLOBAL_PROC, .proc/explosion, src.loc, 1, rand(1, 3), rand(3, 8), 10) //////////////////////////////////////// //Singularity beacon From a403e63e93a7a76385a14cbae28a1cb6a1fcaad6 Mon Sep 17 00:00:00 2001 From: NataKilar Date: Sun, 27 Feb 2022 15:22:46 -0500 Subject: [PATCH 36/45] Fixes wall property transfers --- code/game/turfs/turf_changing.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 6644fd83503..3217b5e4112 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -158,6 +158,12 @@ floor_type = other.floor_type construction_stage = other.construction_stage + damage = other.damage + + // Do not set directly to other.can_open since it may be in the WALL_OPENING state. + if(other.can_open) + can_open = WALL_CAN_OPEN + update_material() return TRUE From 869d64e46ae11783b1a6600d09ee3cf5fe74ece8 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 1 Mar 2022 20:54:51 +1100 Subject: [PATCH 37/45] Automatic changelog generation for PR #2296 [ci skip] --- html/changelogs/AutoChangeLog-pr-2296.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2296.yml diff --git a/html/changelogs/AutoChangeLog-pr-2296.yml b/html/changelogs/AutoChangeLog-pr-2296.yml new file mode 100644 index 00000000000..ed3dc38ea3b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2296.yml @@ -0,0 +1,4 @@ +author: NataKilar +delete-after: true +changes: + - bugfix: Fixed a bug where wall damage would not be retained when moving a shuttle From afe63d751ab090126fc0c75c797618ba9ac6a32e Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 2 Mar 2022 00:36:26 +0000 Subject: [PATCH 38/45] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2296.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2296.yml diff --git a/html/changelog.html b/html/changelog.html index e02e28f15f0..2d703335db9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
              +

              02 March 2022

              +

              NataKilar updated:

              +
                +
              • Fixed a bug where wall damage would not be retained when moving a shuttle
              • +
              +

              24 February 2022

              SierraKomodo updated:

                diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 573e8965e9a..4edce432947 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14102,3 +14102,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. for human mobs, and only if you're holding or wearing the wallet. tag if you want to specify another name or several people. -->: - tweak: Change the location of the ui_storage, now it is more convenient +2022-03-02: + NataKilar: + - bugfix: Fixed a bug where wall damage would not be retained when moving a shuttle diff --git a/html/changelogs/AutoChangeLog-pr-2296.yml b/html/changelogs/AutoChangeLog-pr-2296.yml deleted file mode 100644 index ed3dc38ea3b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2296.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: NataKilar -delete-after: true -changes: - - bugfix: Fixed a bug where wall damage would not be retained when moving a shuttle From 1bf275a986b58a0a3af009d13c686f11c68a84d6 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Mon, 7 Mar 2022 00:34:36 +0000 Subject: [PATCH 39/45] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2d703335db9..99e2093c5d1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -117,12 +117,6 @@

                Gaxeer updated:

                • fix the bug with grab-moving dead mob
                - -

                03 January 2022

                -

                tag if you want to specify another name or several people. --> updated:

                -
                  -
                • fix looping APC power down sound
                • -
              From 41425cf38da50411c49acc0ebcffd8b643ab2ea4 Mon Sep 17 00:00:00 2001 From: keIgaras Date: Tue, 8 Mar 2022 00:53:24 +0300 Subject: [PATCH 40/45] sofa adding --- .../bed.dm | 1 + .../chairs.dm | 26 +++ .../stool_bed_chair_nest_sofa/sofa.dm | 157 ++++++++++++++++++ .../stools.dm | 0 .../wheelchair.dm | 0 .../solids/materials_solid_wood.dm | 3 + code/modules/materials/material_recipes.dm | 1 + code/modules/materials/recipes_furniture.dm | 18 ++ html/changelogs/keigaras-adding-sofa.yml | 38 +++++ icons/obj/furniture.dmi | Bin 35246 -> 50731 bytes nebula.dme | 9 +- 11 files changed, 249 insertions(+), 4 deletions(-) rename code/game/objects/structures/{stool_bed_chair_nest => stool_bed_chair_nest_sofa}/bed.dm (99%) rename code/game/objects/structures/{stool_bed_chair_nest => stool_bed_chair_nest_sofa}/chairs.dm (91%) create mode 100644 code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm rename code/game/objects/structures/{stool_bed_chair_nest => stool_bed_chair_nest_sofa}/stools.dm (100%) rename code/game/objects/structures/{stool_bed_chair_nest => stool_bed_chair_nest_sofa}/wheelchair.dm (100%) create mode 100644 html/changelogs/keigaras-adding-sofa.yml diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm similarity index 99% rename from code/game/objects/structures/stool_bed_chair_nest/bed.dm rename to code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm index 404aa77f9a7..f1562760cdb 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm @@ -86,6 +86,7 @@ C.use(1) if(!isturf(src.loc)) src.forceMove(get_turf(src)) + playsound(src.loc, 'sound/effects/rustle5.ogg', 50, 1) to_chat(user, "You add padding to \the [src].") add_padding(padding_type) return diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm similarity index 91% rename from code/game/objects/structures/stool_bed_chair_nest/chairs.dm rename to code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm index c14bd89cf23..6c8abae1ab7 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/chairs.dm @@ -220,6 +220,32 @@ /obj/structure/bed/chair/office/comfy/yellow reinf_material = /decl/material/solid/cloth/yellow +/obj/structure/bed/chair/rounded + name = "rounded chair" + desc = "It's a rounded chair. It looks comfy." + icon_state = "roundedchair" + +/obj/structure/bed/chair/rounded/brown + reinf_material = /decl/material/solid/leather +/obj/structure/bed/chair/rounded/red + reinf_material = /decl/material/solid/carpet +/obj/structure/bed/chair/rounded/teal + reinf_material = /decl/material/solid/cloth/teal +/obj/structure/bed/chair/rounded/black + reinf_material = /decl/material/solid/cloth/black +/obj/structure/bed/chair/rounded/green + reinf_material = /decl/material/solid/cloth/green +/obj/structure/bed/chair/rounded/purple + reinf_material = /decl/material/solid/cloth/purple +/obj/structure/bed/chair/rounded/blue + reinf_material = /decl/material/solid/cloth/blue +/obj/structure/bed/chair/rounded/beige + reinf_material = /decl/material/solid/cloth/beige +/obj/structure/bed/chair/rounded/lime + reinf_material = /decl/material/solid/cloth/lime +/obj/structure/bed/chair/rounded/yellow + reinf_material = /decl/material/solid/cloth/yellow + /obj/structure/bed/chair/shuttle name = "shuttle seat" desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights." diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm new file mode 100644 index 00000000000..f615b5076c8 --- /dev/null +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/sofa.dm @@ -0,0 +1,157 @@ +/obj/structure/bed/sofa + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with colored cloth." + icon_state = "sofa" + color = "#666666" + buckle_dir = FALSE + buckle_lying = FALSE //force people to sit up in chairs when buckled + obj_flags = OBJ_FLAG_ROTATABLE + material = /decl/material/solid/wood + + var/has_special_overlay = FALSE + +/obj/structure/bed/sofa/do_simple_ranged_interaction(var/mob/user) + if(!buckled_mob && user) + rotate(user) + return TRUE + +/obj/structure/bed/sofa/post_buckle_mob() + update_icon() + return ..() + +/obj/structure/bed/attackby(obj/item/W, mob/user) //made to be able to rotate the sofa + . = ..() + if(.) + return + if(!isWrench(W)) + return + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + if(anchored) + to_chat(user, "You disanchored \the [src].") + else + to_chat(user, "You anchored \the [src].") + +/obj/structure/bed/sofa/on_update_icon() + ..() + var/image/I = image(icon, "[icon_state]_over") + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + I.appearance_flags |= RESET_COLOR + I.color = material.color + add_overlay(I) + I = image(icon, "[icon_state]_armrest") + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + I.appearance_flags |= RESET_COLOR + I.color = material.color + add_overlay(I) + if(reinf_material) + I = image(icon, "[icon_state]_padding_over") + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + I.appearance_flags |= RESET_COLOR + I.color = reinf_material.color + add_overlay(I) + I = image(icon, "[icon_state]_padding_armrest") + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + I.appearance_flags |= RESET_COLOR + I.color = reinf_material.color + add_overlay(I) + if(has_special_overlay && buckled_mob) + I = image(icon, "[icon_state]_special") + I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER + if(material_alteration & MAT_FLAG_ALTERATION_COLOR) + I.appearance_flags |= RESET_COLOR + I.color = material.color + add_overlay(I) + +/obj/structure/bed/sofa/rotate(mob/user) + if(!CanPhysicallyInteract(user) || anchored) + to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + return + + set_dir(turn(dir, 90)) + update_icon() + +/obj/structure/bed/sofa/m/rotate(mob/user) + if(!CanPhysicallyInteract(user) || anchored) + to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) + return + + set_dir(turn(dir, 45)) + update_icon() + +/obj/structure/bed/sofa/m/red + reinf_material = /decl/material/solid/carpet +/obj/structure/bed/sofa/m/brown + reinf_material = /decl/material/solid/leather +/obj/structure/bed/sofa/m/teal + reinf_material = /decl/material/solid/cloth/teal +/obj/structure/bed/sofa/m/black + reinf_material = /decl/material/solid/cloth/black +/obj/structure/bed/sofa/m/green + reinf_material = /decl/material/solid/cloth/green +/obj/structure/bed/sofa/m/purple + reinf_material = /decl/material/solid/cloth/purple +/obj/structure/bed/sofa/m/blue + reinf_material = /decl/material/solid/cloth/blue +/obj/structure/bed/sofa/m/beige + reinf_material = /decl/material/solid/cloth/beige +/obj/structure/bed/sofa/m/lime + reinf_material = /decl/material/solid/cloth/lime +/obj/structure/bed/sofa/m/yellow + reinf_material = /decl/material/solid/cloth/yellow + +/obj/structure/bed/sofa/r + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with colored cloth." + icon_state = "sofa_r" + +/obj/structure/bed/sofa/r/red + reinf_material = /decl/material/solid/carpet +/obj/structure/bed/sofa/r/brown + reinf_material = /decl/material/solid/leather +/obj/structure/bed/sofa/r/teal + reinf_material = /decl/material/solid/cloth/teal +/obj/structure/bed/sofa/r/black + reinf_material = /decl/material/solid/cloth/black +/obj/structure/bed/sofa/r/green + reinf_material = /decl/material/solid/cloth/green +/obj/structure/bed/sofa/r/purple + reinf_material = /decl/material/solid/cloth/purple +/obj/structure/bed/sofa/r/blue + reinf_material = /decl/material/solid/cloth/blue +/obj/structure/bed/sofa/r/beige + reinf_material = /decl/material/solid/cloth/beige +/obj/structure/bed/sofa/r/lime + reinf_material = /decl/material/solid/cloth/lime +/obj/structure/bed/sofa/r/yellow + reinf_material = /decl/material/solid/cloth/yellow + +/obj/structure/bed/sofa/l + name = "sofa" + desc = "A wide and comfy sofa - no one assistant was ate by it due production! It's made of wood and covered with colored cloth." + icon_state = "sofa_l" + +/obj/structure/bed/sofa/l/red + reinf_material = /decl/material/solid/carpet +/obj/structure/bed/sofa/l/brown + reinf_material = /decl/material/solid/leather +/obj/structure/bed/sofa/l/teal + reinf_material = /decl/material/solid/cloth/teal +/obj/structure/bed/sofa/l/black + reinf_material = /decl/material/solid/cloth/black +/obj/structure/bed/sofa/l/green + reinf_material = /decl/material/solid/cloth/green +/obj/structure/bed/sofa/l/purple + reinf_material = /decl/material/solid/cloth/purple +/obj/structure/bed/sofa/l/blue + reinf_material = /decl/material/solid/cloth/blue +/obj/structure/bed/sofa/l/beige + reinf_material = /decl/material/solid/cloth/beige +/obj/structure/bed/sofa/l/lime + reinf_material = /decl/material/solid/cloth/lime +/obj/structure/bed/sofa/l/yellow + reinf_material = /decl/material/solid/cloth/yellow \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/stools.dm similarity index 100% rename from code/game/objects/structures/stool_bed_chair_nest/stools.dm rename to code/game/objects/structures/stool_bed_chair_nest_sofa/stools.dm diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm similarity index 100% rename from code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm rename to code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm diff --git a/code/modules/materials/definitions/solids/materials_solid_wood.dm b/code/modules/materials/definitions/solids/materials_solid_wood.dm index 2ae171c7e83..674dc32c359 100644 --- a/code/modules/materials/definitions/solids/materials_solid_wood.dm +++ b/code/modules/materials/definitions/solids/materials_solid_wood.dm @@ -46,6 +46,9 @@ . += new/datum/stack_recipe/sandals(src) . += new/datum/stack_recipe/tile/wood(src) . += create_recipe_list(/datum/stack_recipe/furniture/chair/wood) + . += new/datum/stack_recipe/furniture/sofa/m(src) + . += new/datum/stack_recipe/furniture/sofa/l(src) + . += new/datum/stack_recipe/furniture/sofa/r(src) . += new/datum/stack_recipe/crossbowframe(src) . += new/datum/stack_recipe/furniture/coffin/wooden(src) . += new/datum/stack_recipe/beehive_assembly(src) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 262a56316a2..588c4faff01 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -70,6 +70,7 @@ . += new/datum/stack_recipe/furniture/chair/office/comfy(src) . += new/datum/stack_recipe/furniture/chair/comfy(src) . += new/datum/stack_recipe/furniture/chair/arm(src) + . += new/datum/stack_recipe/furniture/chair/roundedchair(src) . += new/datum/stack_recipe/lock(src) . += new/datum/stack_recipe/key(src) . += new/datum/stack_recipe/rod(src) diff --git a/code/modules/materials/recipes_furniture.dm b/code/modules/materials/recipes_furniture.dm index 39ef009e977..970045bdf67 100644 --- a/code/modules/materials/recipes_furniture.dm +++ b/code/modules/materials/recipes_furniture.dm @@ -24,10 +24,16 @@ return modifiers ? jointext(modifiers + title, " ") : title // Bypass material /datum/stack_recipe/furniture/chair/office/comfy result_type = /obj/structure/bed/chair/office/comfy + title = "office comfy chair" /datum/stack_recipe/furniture/chair/comfy result_type = /obj/structure/bed/chair/comfy + title = "comfy chair" /datum/stack_recipe/furniture/chair/arm result_type = /obj/structure/bed/chair/armchair + title = "armchair" +/datum/stack_recipe/furniture/chair/roundedchair + result_type = /obj/structure/bed/chair/rounded + title = "rounded chair" /datum/stack_recipe/furniture/chair/wood /datum/stack_recipe/furniture/chair/wood/normal @@ -36,6 +42,18 @@ result_type = /obj/structure/bed/chair/wood/wings modifiers = list("fancy") +/datum/stack_recipe/furniture/sofa/m + result_type = /obj/structure/bed/sofa/m + title = "middle sofa" + +/datum/stack_recipe/furniture/sofa/l + result_type = /obj/structure/bed/sofa/l + title = "left sofa" + +/datum/stack_recipe/furniture/sofa/r + result_type = /obj/structure/bed/sofa/r + title = "right sofa" + /datum/stack_recipe/furniture/door title = "door" result_type = /obj/structure/door diff --git a/html/changelogs/keigaras-adding-sofa.yml b/html/changelogs/keigaras-adding-sofa.yml new file mode 100644 index 00000000000..0f5edbbd8a6 --- /dev/null +++ b/html/changelogs/keigaras-adding-sofa.yml @@ -0,0 +1,38 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# admin +################################# + +# Your name. +author: keIgaras + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: added sofa, rounded chairs and updated armchair sprites + - tweak: fixed names of chairs in the construction panel diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index 98c1f64ca5eeb889f55ca75b61b22f2d9bc44235..5b98322c935c99636ea2a8be106c8584cdae87d9 100644 GIT binary patch literal 50731 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 Date: Thu, 10 Mar 2022 10:48:35 -0800 Subject: [PATCH 41/45] Don't display `hear_sleep` to deaf people --- code/modules/mob/hear_say.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index e2c812c0eb3..fcfc12315da 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -284,6 +284,8 @@ src.show_message(message) /mob/proc/hear_sleep(var/message) + if (is_deaf()) + return var/heard = "" if(prob(15)) var/list/punctuation = list(",", "!", ".", ";", "?") From 1e4fbf447b4055b53a06e0a68f8f36746ade55a6 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 13 Mar 2022 15:14:55 +1100 Subject: [PATCH 42/45] Automatic changelog generation for PR #2297 [ci skip] --- html/changelogs/AutoChangeLog-pr-2297.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2297.yml diff --git a/html/changelogs/AutoChangeLog-pr-2297.yml b/html/changelogs/AutoChangeLog-pr-2297.yml new file mode 100644 index 00000000000..eb8537a322f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2297.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - tweak: fixed names of chairs in the construction panel From 62b9c92e9cbd2610ca09af3ee5986f9ad823a69e Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 13 Mar 2022 15:15:05 +1100 Subject: [PATCH 43/45] Automatic changelog generation for PR #2298 [ci skip] --- html/changelogs/AutoChangeLog-pr-2298.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2298.yml diff --git a/html/changelogs/AutoChangeLog-pr-2298.yml b/html/changelogs/AutoChangeLog-pr-2298.yml new file mode 100644 index 00000000000..a688f74e7ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2298.yml @@ -0,0 +1,4 @@ +author: tag if you want to specify another name or several people. --> +delete-after: true +changes: + - bugfix: Deaf mobs no longer see 'You hear something about' messages while asleep. From 6f41662e7536d0134f89530cb6ef05f4beed5d8d Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Mon, 14 Mar 2022 00:38:02 +0000 Subject: [PATCH 44/45] Automatic changelog generation [ci skip] --- html/changelog.html | 12 +++++++ html/changelogs/.all_changelog.yml | 7 +++++ html/changelogs/AutoChangeLog-pr-2297.yml | 4 --- html/changelogs/AutoChangeLog-pr-2298.yml | 4 --- html/changelogs/keigaras-adding-sofa.yml | 38 ----------------------- 5 files changed, 19 insertions(+), 46 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2297.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2298.yml delete mode 100644 html/changelogs/keigaras-adding-sofa.yml diff --git a/html/changelog.html b/html/changelog.html index 99e2093c5d1..b836e9f9bd0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,18 @@ -->
              +

              14 March 2022

              +

              keIgaras updated:

              +
                +
              • added sofa, rounded chairs and updated armchair sprites
              • +
              • fixed names of chairs in the construction panel
              • +
              +

              tag if you want to specify another name or several people. --> updated:

              +
                +
              • Deaf mobs no longer see 'You hear something about' messages while asleep.
              • +
              • fixed names of chairs in the construction panel
              • +
              +

              02 March 2022

              NataKilar updated:

                diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4edce432947..c7e83e2da4d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14105,3 +14105,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-03-02: NataKilar: - bugfix: Fixed a bug where wall damage would not be retained when moving a shuttle +2022-03-14: + keIgaras: + - rscadd: added sofa, rounded chairs and updated armchair sprites + - tweak: fixed names of chairs in the construction panel + tag if you want to specify another name or several people. -->: + - bugfix: Deaf mobs no longer see 'You hear something about' messages while asleep. + - tweak: fixed names of chairs in the construction panel diff --git a/html/changelogs/AutoChangeLog-pr-2297.yml b/html/changelogs/AutoChangeLog-pr-2297.yml deleted file mode 100644 index eb8537a322f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2297.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - tweak: fixed names of chairs in the construction panel diff --git a/html/changelogs/AutoChangeLog-pr-2298.yml b/html/changelogs/AutoChangeLog-pr-2298.yml deleted file mode 100644 index a688f74e7ce..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2298.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: tag if you want to specify another name or several people. --> -delete-after: true -changes: - - bugfix: Deaf mobs no longer see 'You hear something about' messages while asleep. diff --git a/html/changelogs/keigaras-adding-sofa.yml b/html/changelogs/keigaras-adding-sofa.yml deleted file mode 100644 index 0f5edbbd8a6..00000000000 --- a/html/changelogs/keigaras-adding-sofa.yml +++ /dev/null @@ -1,38 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# admin -################################# - -# Your name. -author: keIgaras - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: added sofa, rounded chairs and updated armchair sprites - - tweak: fixed names of chairs in the construction panel From 2787f4251ef4ea35c6f0efc220a90522064e2d8f Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 15 Mar 2022 00:34:55 +0000 Subject: [PATCH 45/45] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index b836e9f9bd0..614ceb5913f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -123,12 +123,6 @@

                PsyCommando updated:

                • Changes to human mob initialization.
                - -

                11 January 2022

                -

                Gaxeer updated:

                -
                  -
                • fix the bug with grab-moving dead mob
                • -