From b733752034274e9dff55dfc41863c20def3a90db Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 17 Sep 2020 00:51:16 +0000 Subject: [PATCH 01/39] Automatic changelog compile [ci skip] --- html/changelog.html | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index b1a10867b5..70aa5f79ef 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1076,22 +1076,6 @@
  • fixes a small pickle related issue
  • recent culinary and scientific advancements have brought forth new pickle related technologies
  • - -

    16 July 2020

    -

    DeltaFire15 updated:

    - -

    Sneakyrat6 updated:

    - -

    timothyteakettle updated:

    - GoonStation 13 Development Team From 49c5bffb163b684a62431a3b688f1d8a7762d192 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 19 Sep 2020 00:51:23 +0000 Subject: [PATCH 02/39] Automatic changelog compile [ci skip] --- html/changelog.html | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 70aa5f79ef..9e91d56a62 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1059,23 +1059,6 @@
  • martial arts twenty minpop
  • records
  • - -

    17 July 2020

    -

    ShizCalev, Fikou updated:

    - -

    timothyteakettle updated:

    - GoonStation 13 Development Team From abc147e52a60f9a030f19d6f1c0c9228f01e602c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 20 Sep 2020 00:54:06 +0000 Subject: [PATCH 03/39] Automatic changelog compile [ci skip] --- html/changelog.html | 47 --------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9e91d56a62..0c2b1c65da 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1012,53 +1012,6 @@
  • Service borgs now have synthesizers instead of a violin and guitar.
  • borg RSF
  • - -

    19 July 2020

    -

    Arturlang updated:

    -
      -
    • TGUI 3.0 and enables all the UIs, plus the smart asset cache, and all the things required for them
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Adds a pool to Delta Station
    • -
    • Adds light fixtures to specified areas
    • -
    • Relocates objects in impacted areas of Delta's starboard maintenance
    • -
    -

    MrJWhit updated:

    -
      -
    • Adds a small light next to the kitchen counter
    • -
    -

    Putnam3145 updated:

    -
      -
    • Pen uplinks no longer broken
    • -
    -

    TheObserver-sys updated:

    -
      -
    • Adds a new reaction: Slime Extractification. Take 30u Slime Jelly, 5u Frost Oil, and 5u plasma to generate a fresh grey slime extract.
    • -
    -

    Yakumo Chen updated:

    -
      -
    • Hierophant club now checks for friendly fire by default.
    • -
    -

    b1tt3r1n0 updated:

    -
      -
    • Added the updated circle game
    • -
    -

    silicons updated:

    -
      -
    • Unarmed parry is now a thing.
    • -
    -

    timothyteakettle updated:

    -
      -
    • plushies in the loadout have been replaced with a box that lets you choose one instead
    • -
    • wrestling should no longer have the ability to permanently rotate people
    • -
    • you can now select to wear a snail shell as your backpack in the customization menu
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • martial arts twenty minpop
    • -
    • records
    • -
    GoonStation 13 Development Team From eaa14502d8ca68e9d609017a072ecac65a362dcb Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 21 Sep 2020 00:53:27 +0000 Subject: [PATCH 04/39] Automatic changelog compile [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 0c2b1c65da..60e38bfa87 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1005,13 +1005,6 @@
  • new fried component used for frying objects
  • various frying bugs fixed such as being able to unfry items and frying turfs with cold cooking oil
  • - -

    20 July 2020

    -

    lolman360 updated:

    -
      -
    • Service borgs now have synthesizers instead of a violin and guitar.
    • -
    • borg RSF
    • -
    GoonStation 13 Development Team From 03ce6fbbfa90a420c984d214d5598d3b7a7ac6b6 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 22 Sep 2020 00:52:44 +0000 Subject: [PATCH 05/39] Automatic changelog compile [ci skip] --- html/changelog.html | 56 --------------------------------------------- 1 file changed, 56 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 60e38bfa87..a5dfbbefa0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -949,62 +949,6 @@
    • brainwashing disk has lost its cost buffs (3->5) and is role restricted once more (medical doctor/roboticist)
    - -

    21 July 2020

    -

    Arturlang updated:

    -
      -
    • Decal painter ui now works, yay?
    • -
    -

    CameronWoof updated:

    -
      -
    • Adds aloe, a new growable plant
    • -
    • Adds medicated sutures and advanced regenerative meshes
    • -
    • Polypyrylium oligomers and liquid electricity now correctly populate
    • -
    -

    Chiirno updated:

    -
      -
    • Alt-click pill bottles places top-most pill into active hand.
    • -
    • Moved dice bags from pill_bottle/dice to box/dice to avoid dice bags being affected from medical specific pill bottle changes.
    • -
    -

    DeltaFire15 updated:

    -
      -
    • Swarmers can once again eat items as long as there's nothing living in them.
    • -
    -

    Funce updated:

    -
      -
    • Genetics spiderwebs are no longer impassable walls
    • -
    -

    Kraseo updated:

    -
      -
    • Damp rags no longer instantly apply their chemicals onto someone.
    • -
    -

    SiliconMain updated:

    -
      -
    • Geigers can no longer be contaminated
    • -
    -

    TheSpaghetti updated:

    -
      -
    • new snowflake trait
    • -
    -

    kappa-sama updated:

    -
      -
    • advanced surgery duffel bag no longer comes with a nukie medkit. it costs 4 less telecrystals to make up for this colossal nerf.
    • -
    • quartered the weight of the stray cargo pod event from 2x normal to 1/2 normal
    • -
    -

    silicons updated:

    -
      -
    • survivalists (from summon guns/magic) are proper objective'd pseudoantagonists again
    • -
    • summon guns/magic can only be used once each
    • -
    • summon guns/magic now only cost one point each
    • -
    • :dsmile: :dfrown: :dhsmile: :dpog: :dneutral:
    • -
    • gravity should update for mobs a fair bit faster
    • -
    • voting can now be done from the stat panel if the system is plurality and approval
    • -
    -

    timothyteakettle updated:

    -
      -
    • new fried component used for frying objects
    • -
    • various frying bugs fixed such as being able to unfry items and frying turfs with cold cooking oil
    • -
    GoonStation 13 Development Team From 7f718bb092a422a93baafeae6819d2cbea192b61 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 23 Sep 2020 00:52:27 +0000 Subject: [PATCH 06/39] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index a5dfbbefa0..2d2717150b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -939,16 +939,6 @@
    • fetish content
    - -

    22 July 2020

    -

    Ludox updated:

    -
      -
    • You can no longer be brainwashed into giving birth to a fake baby
    • -
    -

    kappa-sama updated:

    -
      -
    • brainwashing disk has lost its cost buffs (3->5) and is role restricted once more (medical doctor/roboticist)
    • -
    GoonStation 13 Development Team From 1a6584e9dccc5cf86469724d1cb5d9559a85911f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 24 Sep 2020 00:53:59 +0000 Subject: [PATCH 07/39] Automatic changelog compile [ci skip] --- html/changelog.html | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2d2717150b..7645436b8c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -921,24 +921,6 @@
    • rad and kravglove sprites
    - -

    23 July 2020

    -

    DeltaFire15 updated:

    -
      -
    • Traits are no longer fucked
    • -
    -

    Putnam3145 updated:

    -
      -
    • Slight optimization in chat code.
    • -
    -

    kappa-sama updated:

    -
      -
    • tendril chests being empty
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • fetish content
    • -
    GoonStation 13 Development Team From 102c9981d489531460cf4aca0ae1cfe706913b46 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 25 Sep 2020 00:53:27 +0000 Subject: [PATCH 08/39] Automatic changelog compile [ci skip] --- html/changelog.html | 50 --------------------------------------------- 1 file changed, 50 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 7645436b8c..9c3a646f3a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -871,56 +871,6 @@
    • beepsky replaces the word THREAT_LEVEL with the actual threat level
    - -

    24 July 2020

    -

    EmeraldSundisk updated:

    -
      -
    • Adds a CMO office, along with Virology and Genetics labs to Omega Station
    • -
    • Adds a second chemistry station to the chemistry lab
    • -
    • Adjusts the locations of some objects in medical to accommodate these new additions
    • -
    • Relocates the morgue
    • -
    • Relocates items in impacted areas of maintenance as well as the library
    • -
    • Fixes an air line Bartholomew somehow knocked out
    • -
    -

    Linzolle updated:

    -
      -
    • wounds now have a description on examine
    • -
    -

    Owai-Seek updated:

    -
      -
    • Meatball Sub, Meatloaf + Meatloaf Slices, Bear Chili, Mashed Potatoes
    • -
    • Buttered Potatoes, Fancy Cracker Pack, Spiral Soup, Sweet and Sour Chicken
    • -
    • Organised the Food DMI a bit.
    • -
    • Deleted some stray pixels on some sprites.
    • -
    • Nuggie boxes are now centered correctly.
    • -
    • Icons for the the food items in this PR.
    • -
    -

    Sneakyrat6 updated:

    -
      -
    • Fixes dressers not giving you undies
    • -
    • Fixes Snaxi not loading properly because of typos
    • -
    • You can now burn photos
    • -
    -

    Zandario updated:

    -
      -
    • Murdered **tipes** and gave birth to **is**.
    • -
    -

    silicons updated:

    -
      -
    • sanitization now doesn't cut off 15.7 or something million possible colors from character preferences (instead of only allowing 16 values for R G and B, it now allows 256 each)
    • -
    • projectiles are by default 17.5 tiles per second instead of 12.5
    • -
    -

    timothyteakettle updated:

    -
      -
    • due to recent innovative research in the medical field, you now have bones
    • -
    • zombie claws are now sharp and do less damage, but can destroy non-lifeforms far faster
    • -
    • zombies now take less stamina damage
    • -
    • beepsky can now wear hats
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • rad and kravglove sprites
    • -
    GoonStation 13 Development Team From 0411072ec295c34a7c7fa1966ce3d5ccd3861c08 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 26 Sep 2020 00:53:09 +0000 Subject: [PATCH 09/39] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9c3a646f3a..ee2f5959d7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -861,16 +861,6 @@
    • removed legacy public mining shuttle area and remade lounge
    - -

    25 July 2020

    -

    CameronWoof updated:

    -
      -
    • Aloe now has an icon.
    • -
    -

    timothyteakettle updated:

    -
      -
    • beepsky replaces the word THREAT_LEVEL with the actual threat level
    • -
    GoonStation 13 Development Team From fc0066a2384fc54790a5493db2407cabe86ad746 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 27 Sep 2020 00:56:15 +0000 Subject: [PATCH 10/39] Automatic changelog compile [ci skip] --- html/changelog.html | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index ee2f5959d7..749fecfe49 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -846,21 +846,6 @@
    • modern pickle technology now allows people who have been turned into pickles, to be retrieved through the medical course of dying
    - -

    26 July 2020

    -

    DeltaFire15 updated:

    -
      -
    • Organs now decay again.
    • -
    -

    Iatots updated:

    -
      -
    • Licking wounds now may cause you to spit out a hairball once in a while!
    • -
    • You can now craft a catgirl plushie with 3 of a new ingredient occasionally found in medbay!
    • -
    -

    dapnee updated:

    -
      -
    • removed legacy public mining shuttle area and remade lounge
    • -
    GoonStation 13 Development Team From a464157a054b3350992cef858f0b5b1bab3a26b3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 28 Sep 2020 00:55:08 +0000 Subject: [PATCH 11/39] Automatic changelog compile [ci skip] --- html/changelog.html | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 749fecfe49..2a7974a480 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -831,21 +831,6 @@
    • Black Box theft objective
    - -

    27 July 2020

    -

    Hatterhat updated:

    -
      -
    • Training bokkens! Make 'em from wood, use 'em in-hand to toggle between harmful and not-so-harmful, practice your parrying with them!
    • -
    • Marker beacons should have a sprite again.
    • -
    -

    silicons updated:

    -
      -
    • clownops and clown mobs now share the same faction. HONK!
    • -
    -

    timothyteakettle updated:

    -
      -
    • modern pickle technology now allows people who have been turned into pickles, to be retrieved through the medical course of dying
    • -
    GoonStation 13 Development Team From c064e323ebbd1ddf9b656cf5960abca67eb44eff Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 29 Sep 2020 00:54:35 +0000 Subject: [PATCH 12/39] Automatic changelog compile [ci skip] --- html/changelog.html | 62 --------------------------------------------- 1 file changed, 62 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2a7974a480..7b9a9299ba 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -769,68 +769,6 @@
    • Flannel jackets and bartender winter coat
    - -

    28 July 2020

    -

    Cacogen updated:

    -
      -
    • OSHA has more pull than anyone could have expected. All armor provided by Nanotrasen and the syndicate now have tags that accurately lists defenses and resistances of a piece of clothing.
    • -
    -

    CameronWoof updated:

    -
      -
    • Exotic seed crates now contain a spaceman's trumpet seed packet.
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Renovates Snow Taxi's northeast bathroom to have multiple non-urinal toilets and showers
    • -
    • Adds signage/labeling to improve map readability
    • -
    • Adds a bathroom to the northwest station
    • -
    • Adds a filing cabinet to the cargo department
    • -
    • Area designation adjustments to account for the above changes
    • -
    • Adds a missing airlock cyclelink near medical
    • -
    -

    Ludox235 updated:

    -
      -
    • Makes the flavour text that appears when you become a zombie tell you to act like one.
    • -
    -

    MrJWhit updated:

    -
      -
    • Decluttered toxins and hid the yellow mix line in atmos, for metastation
    • -
    -

    SiliconMain updated:

    -
      -
    • Paramedic heirloom is now a zippo
    • -
    • Durathread belts now protect their contents from radiation, and can hold full sized extinguishers
    • -
    -

    Sishen1542 updated:

    -
      -
    • removed zoomba
    • -
    -

    dapnee updated:

    -
      -
    • added a fan to the listening outpost
    • -
    • added two missing r-walls near the SM, removed random light and wire node below the engine, and fixed the missing cable in the courtroom on Kilo
    • -
    -

    kappa-sama updated:

    -
      -
    • Stimpaks cost 5tc once more, up from 3tc.
    • -
    -

    silicons updated:

    -
      -
    • polychromatic cloaks to loadout
    • -
    • no more self healing with medibeam guns
    • -
    • oh no, taser buff. alt fire delay dropped to 0.4 seconds.
    • -
    • you can now shoot yourself by disarm-intenting yourself with a gun.
    • -
    -

    timothyteakettle updated:

    -
      -
    • species code is now slightly less messy
    • -
    • slight tweak to how material crafting works
    • -
    • changed up pet carriers / bluespace jars a bit so you can't fit certain things inside them and also the text shown for resist times is accurate
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • Black Box theft objective
    • -
    GoonStation 13 Development Team From 1b75ccb39dc46ab19ef55df6b724b6ebebae2e88 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 29 Sep 2020 18:38:25 +0100 Subject: [PATCH 13/39] puddle --- .../mob/living/carbon/human/species.dm | 4 + .../carbon/human/species_types/jellypeople.dm | 37 +- .../mob/living/carbon/human/update_icons.dm | 829 +++++++++--------- icons/mob/actions/actions_slime.dmi | Bin 4717 -> 5093 bytes icons/mob/mob.dmi | Bin 288041 -> 293284 bytes tgstation.dme | 4 +- 6 files changed, 455 insertions(+), 419 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index d433ca1821..70c8f1322d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1926,6 +1926,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(HAS_BONE in species_traits) . |= BIO_JUST_BONE +//a check for if you should render any overlays or not +/datum/species/proc/should_render(mob/living/carbon/human/H) + return TRUE + ///////////// //BREATHING// ///////////// diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 43f5ca5526..54cfce54c0 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -16,7 +16,8 @@ exotic_blood_color = "BLOOD_COLOR_SLIME" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs - var/datum/action/innate/slime_change/slime_change //CIT CHANGE + var/datum/action/innate/slime_change/slime_change + var/datum/action/innate/slime_puddle/slime_puddle liked_food = TOXIC | MEAT disliked_food = null toxic_food = ANTITOXIC @@ -35,12 +36,13 @@ desc = "A slimey membranous mass from a slime person" icon_state = "brain-slime" - /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) regenerate_limbs.Remove(C) - if(slime_change) //CIT CHANGE - slime_change.Remove(C) //CIT CHANGE + if(slime_change) + slime_change.Remove(C) + if(slime_puddle) + slime_puddle.Remove(C) C.faction -= "slime" ..() C.faction -= "slime" @@ -50,8 +52,10 @@ if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) - slime_change = new //CIT CHANGE - slime_change.Grant(C) //CIT CHANGE + slime_change = new + slime_change.Grant(C) + slime_puddle = new + slime_puddle.Grant(C) C.faction |= "slime" /datum/species/jelly/handle_body(mob/living/carbon/human/H) @@ -59,6 +63,12 @@ //update blood color to body color exotic_blood_color = "#" + H.dna.features["mcolor"] +/datum/species/jelly/should_render() + if(slime_puddle && slime_puddle.is_puddle) + return FALSE + else + return ..() + /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers return @@ -641,6 +651,21 @@ else return +/datum/action/innate/slime_puddle + name = "Puddle Transformation" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimepuddle" + icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + var/is_puddle = FALSE + +/datum/action/innate/slime_puddle/Activate() + if(!is_puddle) + is_puddle = TRUE + owner.cut_overlays() + else + is_puddle = FALSE + owner.regenerate_icons() ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index cfb35fbb00..caf0189483 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -50,19 +50,21 @@ There are several things that need to be remembered: //HAIR OVERLAY /mob/living/carbon/human/update_hair() - dna.species.handle_hair(src) + if(dna.species.should_render()) + dna.species.handle_hair(src) //used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. /mob/living/carbon/human/proc/update_mutant_bodyparts() - dna.species.handle_mutant_bodyparts(src) - + if(dna.species.should_render()) + dna.species.handle_mutant_bodyparts(src) /mob/living/carbon/human/update_body(update_genitals = FALSE) - remove_overlay(BODY_LAYER) - dna.species.handle_body(src) - ..() - if(update_genitals) - update_genitals() + if(dna.species.should_render()) + remove_overlay(BODY_LAYER) + dna.species.handle_body(src) + ..() + if(update_genitals) + update_genitals() /mob/living/carbon/human/update_fire() ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") @@ -71,381 +73,385 @@ There are several things that need to be remembered: /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - - if(!..()) - icon_render_key = null //invalidate bodyparts cache - update_body(TRUE) - update_hair() - update_inv_w_uniform() - update_inv_wear_id() - update_inv_gloves() - update_inv_glasses() - update_inv_ears() - update_inv_shoes() - update_inv_s_store() - update_inv_wear_mask() - update_inv_head() - update_inv_belt() - update_inv_back() - update_inv_wear_suit() - update_inv_pockets() - update_inv_neck() - update_transform() - //mutations - update_mutations_overlay() - //damage overlays - update_damage_overlays() + if(dna.species.should_render()) + if(!..()) + icon_render_key = null //invalidate bodyparts cache + update_body(TRUE) + update_hair() + update_inv_w_uniform() + update_inv_wear_id() + update_inv_gloves() + update_inv_glasses() + update_inv_ears() + update_inv_shoes() + update_inv_s_store() + update_inv_wear_mask() + update_inv_head() + update_inv_belt() + update_inv_back() + update_inv_wear_suit() + update_inv_pockets() + update_inv_neck() + update_transform() + //mutations + update_mutations_overlay() + //damage overlays + update_damage_overlays() /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/carbon/human/update_inv_w_uniform() - remove_overlay(UNIFORM_LAYER) + if(dna.species.should_render()) + remove_overlay(UNIFORM_LAYER) - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] - inv.update_icon() + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] + inv.update_icon() - if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - U.screen_loc = ui_iclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += w_uniform - update_observer_view(w_uniform,1) + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = w_uniform + U.screen_loc = ui_iclothing + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += w_uniform + update_observer_view(w_uniform,1) - if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) - return + if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) + return - var/target_overlay = U.icon_state - if(U.adjusted == ALT_STYLE) - target_overlay = "[target_overlay]_d" + var/target_overlay = U.icon_state + if(U.adjusted == ALT_STYLE) + target_overlay = "[target_overlay]_d" - var/alt_worn = U.mob_overlay_icon || 'icons/mob/clothing/uniform.dmi' - var/variant_flag = NONE + var/alt_worn = U.mob_overlay_icon || 'icons/mob/clothing/uniform.dmi' + var/variant_flag = NONE - if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) - alt_worn = U.anthro_mob_worn_overlay || 'icons/mob/clothing/uniform_digi.dmi' - variant_flag |= STYLE_DIGITIGRADE + if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_worn = U.anthro_mob_worn_overlay || 'icons/mob/clothing/uniform_digi.dmi' + variant_flag |= STYLE_DIGITIGRADE - var/mask - if(dna.species.mutant_bodyparts["taur"]) - var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] - var/clip_flag = U.mutantrace_variation & T?.hide_legs - if(clip_flag) - variant_flag |= clip_flag - mask = T.alpha_mask_state + var/mask + if(dna.species.mutant_bodyparts["taur"]) + var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] + var/clip_flag = U.mutantrace_variation & T?.hide_legs + if(clip_flag) + variant_flag |= clip_flag + mask = T.alpha_mask_state - var/mutable_appearance/uniform_overlay + var/mutable_appearance/uniform_overlay - var/gendered = (dna?.species.sexes && dna.features["body_model"] == FEMALE) ? U.fitted : NO_FEMALE_UNIFORM - uniform_overlay = U.build_worn_icon( UNIFORM_LAYER, alt_worn, FALSE, gendered, target_overlay, variant_flag, FALSE, mask) + var/gendered = (dna?.species.sexes && dna.features["body_model"] == FEMALE) ? U.fitted : NO_FEMALE_UNIFORM + uniform_overlay = U.build_worn_icon( UNIFORM_LAYER, alt_worn, FALSE, gendered, target_overlay, variant_flag, FALSE, mask) - if(OFFSET_UNIFORM in dna.species.offset_features) - uniform_overlay.pixel_x += dna.species.offset_features[OFFSET_UNIFORM][1] - uniform_overlay.pixel_y += dna.species.offset_features[OFFSET_UNIFORM][2] - overlays_standing[UNIFORM_LAYER] = uniform_overlay - - apply_overlay(UNIFORM_LAYER) - update_mutant_bodyparts() + if(OFFSET_UNIFORM in dna.species.offset_features) + uniform_overlay.pixel_x += dna.species.offset_features[OFFSET_UNIFORM][1] + uniform_overlay.pixel_y += dna.species.offset_features[OFFSET_UNIFORM][2] + overlays_standing[UNIFORM_LAYER] = uniform_overlay + apply_overlay(UNIFORM_LAYER) + update_mutant_bodyparts() /mob/living/carbon/human/update_inv_wear_id() - remove_overlay(ID_LAYER) + if(dna.species.should_render()) + remove_overlay(ID_LAYER) - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] - inv.update_icon() + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] + inv.update_icon() - var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] + var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] - if(wear_id) - wear_id.screen_loc = ui_id - if(client && hud_used && hud_used.hud_shown) - client.screen += wear_id - update_observer_view(wear_id) + if(wear_id) + wear_id.screen_loc = ui_id + if(client && hud_used && hud_used.hud_shown) + client.screen += wear_id + update_observer_view(wear_id) - //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', override_state = wear_id.item_state) - if(OFFSET_ID in dna.species.offset_features) - id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] - id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] - overlays_standing[ID_LAYER] = id_overlay - apply_overlay(ID_LAYER) + //TODO: add an icon file for ID slot stuff, so it's less snowflakey + id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', override_state = wear_id.item_state) + if(OFFSET_ID in dna.species.offset_features) + id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] + id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] + overlays_standing[ID_LAYER] = id_overlay + apply_overlay(ID_LAYER) /mob/living/carbon/human/update_inv_gloves() - remove_overlay(GLOVES_LAYER) + if(dna.species.should_render()) + remove_overlay(GLOVES_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] - inv.update_icon() + if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] + inv.update_icon() - if(!gloves && bloody_hands) - var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER, color = blood_DNA_to_color()) - if(get_num_arms(FALSE) < 2) - if(has_left_hand(FALSE)) - bloody_overlay.icon_state = "bloodyhands_left" - else if(has_right_hand(FALSE)) - bloody_overlay.icon_state = "bloodyhands_right" + if(!gloves && bloody_hands) + var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER, color = blood_DNA_to_color()) + if(get_num_arms(FALSE) < 2) + if(has_left_hand(FALSE)) + bloody_overlay.icon_state = "bloodyhands_left" + else if(has_right_hand(FALSE)) + bloody_overlay.icon_state = "bloodyhands_right" - overlays_standing[GLOVES_LAYER] = bloody_overlay + overlays_standing[GLOVES_LAYER] = bloody_overlay - var/mutable_appearance/gloves_overlay = overlays_standing[GLOVES_LAYER] - if(gloves) - gloves.screen_loc = ui_gloves - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += gloves - update_observer_view(gloves,1) - overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/clothing/hands.dmi') - gloves_overlay = overlays_standing[GLOVES_LAYER] - if(OFFSET_GLOVES in dna.species.offset_features) - gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] - gloves_overlay.pixel_y += dna.species.offset_features[OFFSET_GLOVES][2] - overlays_standing[GLOVES_LAYER] = gloves_overlay - apply_overlay(GLOVES_LAYER) + var/mutable_appearance/gloves_overlay = overlays_standing[GLOVES_LAYER] + if(gloves) + gloves.screen_loc = ui_gloves + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += gloves + update_observer_view(gloves,1) + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/clothing/hands.dmi') + gloves_overlay = overlays_standing[GLOVES_LAYER] + if(OFFSET_GLOVES in dna.species.offset_features) + gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] + gloves_overlay.pixel_y += dna.species.offset_features[OFFSET_GLOVES][2] + overlays_standing[GLOVES_LAYER] = gloves_overlay + apply_overlay(GLOVES_LAYER) /mob/living/carbon/human/update_inv_glasses() - remove_overlay(GLASSES_LAYER) + if(dna.species.should_render()) + remove_overlay(GLASSES_LAYER) - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] - inv.update_icon() - - if(glasses) - glasses.screen_loc = ui_glasses //...draw the item in the inventory screen - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open ... - client.screen += glasses //Either way, add the item to the HUD - update_observer_view(glasses,1) - if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/clothing/eyes.dmi', override_state = glasses.icon_state) - var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] - if(glasses_overlay) - if(OFFSET_GLASSES in dna.species.offset_features) - glasses_overlay.pixel_x += dna.species.offset_features[OFFSET_GLASSES][1] - glasses_overlay.pixel_y += dna.species.offset_features[OFFSET_GLASSES][2] - overlays_standing[GLASSES_LAYER] = glasses_overlay - apply_overlay(GLASSES_LAYER) - - -/mob/living/carbon/human/update_inv_ears() - remove_overlay(EARS_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] - inv.update_icon() - - if(ears) - ears.screen_loc = ui_ears //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += ears //add it to the client's screen - update_observer_view(ears,1) - - overlays_standing[EARS_LAYER] = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') - var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] - if(OFFSET_EARS in dna.species.offset_features) - ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] - ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] - overlays_standing[EARS_LAYER] = ears_overlay - apply_overlay(EARS_LAYER) - - -/mob/living/carbon/human/update_inv_shoes() - remove_overlay(SHOES_LAYER) - - if(get_num_legs(FALSE) <2) - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] - inv.update_icon() - - if(dna.species.mutant_bodyparts["taur"]) - var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] - if(T?.hide_legs) //If only they actually made shoes unwearable. Please don't making cosmetics, guys. + if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated return - if(shoes) - var/obj/item/clothing/shoes/S = shoes - shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += shoes //add it to client's screen - update_observer_view(shoes,1) + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] + inv.update_icon() - var/alt_icon = S.mob_overlay_icon || 'icons/mob/clothing/feet.dmi' - var/variation_flag = NONE - if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE && !(S.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) - alt_icon = S.anthro_mob_worn_overlay || 'icons/mob/clothing/feet_digi.dmi' - variation_flag |= STYLE_DIGITIGRADE + if(glasses) + glasses.screen_loc = ui_glasses //...draw the item in the inventory screen + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open ... + client.screen += glasses //Either way, add the item to the HUD + update_observer_view(glasses,1) + if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/clothing/eyes.dmi', override_state = glasses.icon_state) + var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] + if(glasses_overlay) + if(OFFSET_GLASSES in dna.species.offset_features) + glasses_overlay.pixel_x += dna.species.offset_features[OFFSET_GLASSES][1] + glasses_overlay.pixel_y += dna.species.offset_features[OFFSET_GLASSES][2] + overlays_standing[GLASSES_LAYER] = glasses_overlay + apply_overlay(GLASSES_LAYER) - overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(SHOES_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, S.icon_state, variation_flag, FALSE) - var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] - if(OFFSET_SHOES in dna.species.offset_features) - shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] - shoes_overlay.pixel_y += dna.species.offset_features[OFFSET_SHOES][2] - overlays_standing[SHOES_LAYER] = shoes_overlay - apply_overlay(SHOES_LAYER) +/mob/living/carbon/human/update_inv_ears() + if(dna.species.should_render()) + remove_overlay(EARS_LAYER) -/mob/living/carbon/human/update_inv_s_store() - remove_overlay(SUIT_STORE_LAYER) + if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated + return - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] - inv.update_icon() + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] + inv.update_icon() - if(s_store) - s_store.screen_loc = ui_sstore1 - if(client && hud_used && hud_used.hud_shown) - client.screen += s_store - update_observer_view(s_store) - var/t_state = s_store.item_state - if(!t_state) - t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.mob_overlay_icon) ? s_store.mob_overlay_icon : 'icons/mob/clothing/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) - var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_STORE_LAYER] - if(OFFSET_S_STORE in dna.species.offset_features) - s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] - s_store_overlay.pixel_y += dna.species.offset_features[OFFSET_S_STORE][2] - overlays_standing[SUIT_STORE_LAYER] = s_store_overlay - apply_overlay(SUIT_STORE_LAYER) + if(ears) + ears.screen_loc = ui_ears //move the item to the appropriate screen loc + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += ears //add it to the client's screen + update_observer_view(ears,1) + overlays_standing[EARS_LAYER] = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') + var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] + if(OFFSET_EARS in dna.species.offset_features) + ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] + ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] + overlays_standing[EARS_LAYER] = ears_overlay + apply_overlay(EARS_LAYER) -/mob/living/carbon/human/update_inv_head() - remove_overlay(HEAD_LAYER) +/mob/living/carbon/human/update_inv_shoes() + if(dna.species.should_render()) + remove_overlay(SHOES_LAYER) - if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated - return + if(get_num_legs(FALSE) <2) + return - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] - inv.update_icon() + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] + inv.update_icon() - if(head) - head.screen_loc = ui_head - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += head - update_observer_view(head,1) - remove_overlay(HEAD_LAYER) - var/obj/item/clothing/head/H = head - var/alt_icon = H.mob_overlay_icon || 'icons/mob/clothing/head.dmi' - var/muzzled = FALSE - var/variation_flag = NONE - if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None") - muzzled = TRUE - else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None") - muzzled = TRUE - if(muzzled && H.mutantrace_variation & STYLE_MUZZLE && !(H.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) - alt_icon = H.anthro_mob_worn_overlay || 'icons/mob/clothing/head_muzzled.dmi' - variation_flag |= STYLE_MUZZLE - - overlays_standing[HEAD_LAYER] = H.build_worn_icon(HEAD_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, H.icon_state, variation_flag, FALSE) - var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] - - if(OFFSET_HEAD in dna.species.offset_features) - head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1] - head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2] - overlays_standing[HEAD_LAYER] = head_overlay - apply_overlay(HEAD_LAYER) - update_mutant_bodyparts() - -/mob/living/carbon/human/update_inv_belt() - remove_overlay(BELT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] - inv.update_icon() - - if(belt) - belt.screen_loc = ui_belt - if(client && hud_used && hud_used.hud_shown) - client.screen += belt - update_observer_view(belt) - - overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = 'icons/mob/clothing/belt.dmi') - var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] - if(OFFSET_BELT in dna.species.offset_features) - belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] - belt_overlay.pixel_y += dna.species.offset_features[OFFSET_BELT][2] - overlays_standing[BELT_LAYER] = belt_overlay - apply_overlay(BELT_LAYER) - - -/mob/living/carbon/human/update_inv_wear_suit() - remove_overlay(SUIT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] - inv.update_icon() - - if(wear_suit) - var/obj/item/clothing/suit/S = wear_suit - wear_suit.screen_loc = ui_oclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += wear_suit - update_observer_view(wear_suit,1) - - var/worn_icon = wear_suit.mob_overlay_icon || 'icons/mob/clothing/suit.dmi' - var/worn_state = wear_suit.icon_state - var/center = FALSE - var/dimension_x = 32 - var/dimension_y = 32 - var/variation_flag = NONE - var/datum/sprite_accessory/taur/T if(dna.species.mutant_bodyparts["taur"]) - T = GLOB.taur_list[dna.features["taur"]] + var/datum/sprite_accessory/taur/T = GLOB.taur_list[dna.features["taur"]] + if(T?.hide_legs) //If only they actually made shoes unwearable. Please don't making cosmetics, guys. + return - if(S.mutantrace_variation) + if(shoes) + var/obj/item/clothing/shoes/S = shoes + shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += shoes //add it to client's screen + update_observer_view(shoes,1) - if(T?.taur_mode) - var/init_worn_icon = worn_icon - variation_flag |= S.mutantrace_variation & T.taur_mode || S.mutantrace_variation & T.alt_taur_mode - switch(variation_flag) - if(STYLE_HOOF_TAURIC) - worn_icon = 'icons/mob/clothing/taur_hooved.dmi' - if(STYLE_SNEK_TAURIC) - worn_icon = 'icons/mob/clothing/taur_naga.dmi' - if(STYLE_PAW_TAURIC) - worn_icon = 'icons/mob/clothing/taur_canine.dmi' - if(worn_icon != init_worn_icon) //worn icon sprite was changed, taur offsets will have to be applied. - if(S.taur_mob_worn_overlay) //not going to make several new variables for all taur types. Nope. - var/static/list/icon_to_state = list('icons/mob/clothing/taur_hooved.dmi' = "_hooved", 'icons/mob/clothing/taur_naga.dmi' = "_naga", 'icons/mob/clothing/taur_canine.dmi' = "_paws") - worn_state += icon_to_state[worn_icon] - worn_icon = S.taur_mob_worn_overlay - center = T.center - dimension_x = T.dimension_x - dimension_y = T.dimension_y - - else if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE && !(S.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) //not a taur, but digitigrade legs. - worn_icon = S.anthro_mob_worn_overlay || 'icons/mob/clothing/suit_digi.dmi' + var/alt_icon = S.mob_overlay_icon || 'icons/mob/clothing/feet.dmi' + var/variation_flag = NONE + if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE && !(S.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_icon = S.anthro_mob_worn_overlay || 'icons/mob/clothing/feet_digi.dmi' variation_flag |= STYLE_DIGITIGRADE - overlays_standing[SUIT_LAYER] = S.build_worn_icon(SUIT_LAYER, worn_icon, FALSE, NO_FEMALE_UNIFORM, worn_state, variation_flag, FALSE) - var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] - if(OFFSET_SUIT in dna.species.offset_features) - suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] - suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] - if(center) - suit_overlay = center_image(suit_overlay, dimension_x, dimension_y) - overlays_standing[SUIT_LAYER] = suit_overlay - update_hair() - update_mutant_bodyparts() + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(SHOES_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, S.icon_state, variation_flag, FALSE) + var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] + if(OFFSET_SHOES in dna.species.offset_features) + shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] + shoes_overlay.pixel_y += dna.species.offset_features[OFFSET_SHOES][2] + overlays_standing[SHOES_LAYER] = shoes_overlay + apply_overlay(SHOES_LAYER) - apply_overlay(SUIT_LAYER) +/mob/living/carbon/human/update_inv_s_store() + if(dna.species.should_render()) + remove_overlay(SUIT_STORE_LAYER) + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] + inv.update_icon() + + if(s_store) + s_store.screen_loc = ui_sstore1 + if(client && hud_used && hud_used.hud_shown) + client.screen += s_store + update_observer_view(s_store) + var/t_state = s_store.item_state + if(!t_state) + t_state = s_store.icon_state + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.mob_overlay_icon) ? s_store.mob_overlay_icon : 'icons/mob/clothing/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) + var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_STORE_LAYER] + if(OFFSET_S_STORE in dna.species.offset_features) + s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] + s_store_overlay.pixel_y += dna.species.offset_features[OFFSET_S_STORE][2] + overlays_standing[SUIT_STORE_LAYER] = s_store_overlay + apply_overlay(SUIT_STORE_LAYER) + +/mob/living/carbon/human/update_inv_head() + if(dna.species.should_render()) + remove_overlay(HEAD_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + inv.update_icon() + + if(head) + head.screen_loc = ui_head + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += head + update_observer_view(head,1) + remove_overlay(HEAD_LAYER) + var/obj/item/clothing/head/H = head + var/alt_icon = H.mob_overlay_icon || 'icons/mob/clothing/head.dmi' + var/muzzled = FALSE + var/variation_flag = NONE + if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None") + muzzled = TRUE + else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None") + muzzled = TRUE + if(muzzled && H.mutantrace_variation & STYLE_MUZZLE && !(H.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_icon = H.anthro_mob_worn_overlay || 'icons/mob/clothing/head_muzzled.dmi' + variation_flag |= STYLE_MUZZLE + + overlays_standing[HEAD_LAYER] = H.build_worn_icon(HEAD_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, H.icon_state, variation_flag, FALSE) + var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] + + if(OFFSET_HEAD in dna.species.offset_features) + head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1] + head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2] + overlays_standing[HEAD_LAYER] = head_overlay + apply_overlay(HEAD_LAYER) + update_mutant_bodyparts() + +/mob/living/carbon/human/update_inv_belt() + if(dna.species.should_render()) + remove_overlay(BELT_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] + inv.update_icon() + + if(belt) + belt.screen_loc = ui_belt + if(client && hud_used && hud_used.hud_shown) + client.screen += belt + update_observer_view(belt) + + overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = 'icons/mob/clothing/belt.dmi') + var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] + if(OFFSET_BELT in dna.species.offset_features) + belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] + belt_overlay.pixel_y += dna.species.offset_features[OFFSET_BELT][2] + overlays_standing[BELT_LAYER] = belt_overlay + apply_overlay(BELT_LAYER) + +/mob/living/carbon/human/update_inv_wear_suit() + if(dna.species.should_render()) + remove_overlay(SUIT_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] + inv.update_icon() + + if(wear_suit) + var/obj/item/clothing/suit/S = wear_suit + wear_suit.screen_loc = ui_oclothing + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += wear_suit + update_observer_view(wear_suit,1) + + var/worn_icon = wear_suit.mob_overlay_icon || 'icons/mob/clothing/suit.dmi' + var/worn_state = wear_suit.icon_state + var/center = FALSE + var/dimension_x = 32 + var/dimension_y = 32 + var/variation_flag = NONE + var/datum/sprite_accessory/taur/T + if(dna.species.mutant_bodyparts["taur"]) + T = GLOB.taur_list[dna.features["taur"]] + + if(S.mutantrace_variation) + + if(T?.taur_mode) + var/init_worn_icon = worn_icon + variation_flag |= S.mutantrace_variation & T.taur_mode || S.mutantrace_variation & T.alt_taur_mode + switch(variation_flag) + if(STYLE_HOOF_TAURIC) + worn_icon = 'icons/mob/clothing/taur_hooved.dmi' + if(STYLE_SNEK_TAURIC) + worn_icon = 'icons/mob/clothing/taur_naga.dmi' + if(STYLE_PAW_TAURIC) + worn_icon = 'icons/mob/clothing/taur_canine.dmi' + if(worn_icon != init_worn_icon) //worn icon sprite was changed, taur offsets will have to be applied. + if(S.taur_mob_worn_overlay) //not going to make several new variables for all taur types. Nope. + var/static/list/icon_to_state = list('icons/mob/clothing/taur_hooved.dmi' = "_hooved", 'icons/mob/clothing/taur_naga.dmi' = "_naga", 'icons/mob/clothing/taur_canine.dmi' = "_paws") + worn_state += icon_to_state[worn_icon] + worn_icon = S.taur_mob_worn_overlay + center = T.center + dimension_x = T.dimension_x + dimension_y = T.dimension_y + + else if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE && !(S.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) //not a taur, but digitigrade legs. + worn_icon = S.anthro_mob_worn_overlay || 'icons/mob/clothing/suit_digi.dmi' + variation_flag |= STYLE_DIGITIGRADE + + overlays_standing[SUIT_LAYER] = S.build_worn_icon(SUIT_LAYER, worn_icon, FALSE, NO_FEMALE_UNIFORM, worn_state, variation_flag, FALSE) + var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] + if(OFFSET_SUIT in dna.species.offset_features) + suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] + suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] + if(center) + suit_overlay = center_image(suit_overlay, dimension_x, dimension_y) + overlays_standing[SUIT_LAYER] = suit_overlay + update_hair() + update_mutant_bodyparts() + + apply_overlay(SUIT_LAYER) /mob/living/carbon/human/update_inv_pockets() if(client && hud_used) @@ -471,55 +477,57 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_wear_mask() - remove_overlay(FACEMASK_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] - inv.update_icon() - - if(wear_mask) - wear_mask.screen_loc = ui_mask - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += wear_mask - update_observer_view(wear_mask,1) - var/obj/item/clothing/mask/M = wear_mask + if(dna.species.should_render()) remove_overlay(FACEMASK_LAYER) - var/alt_icon = M.mob_overlay_icon || 'icons/mob/clothing/mask.dmi' - var/muzzled = FALSE - var/variation_flag = NONE - if(head && (head.flags_inv & HIDEMASK)) + + if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated return - if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None") - muzzled = TRUE - else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None") - muzzled = TRUE - if(muzzled && M.mutantrace_variation & STYLE_MUZZLE && !(M.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) - alt_icon = M.anthro_mob_worn_overlay || 'icons/mob/clothing/mask_muzzled.dmi' - variation_flag |= STYLE_MUZZLE - var/mutable_appearance/mask_overlay = M.build_worn_icon(FACEMASK_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, wear_mask.icon_state, variation_flag, FALSE) + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + inv.update_icon() - if(OFFSET_FACEMASK in dna.species.offset_features) - mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] - mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] - overlays_standing[FACEMASK_LAYER] = mask_overlay - apply_overlay(FACEMASK_LAYER) - update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout + if(wear_mask) + wear_mask.screen_loc = ui_mask + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += wear_mask + update_observer_view(wear_mask,1) + var/obj/item/clothing/mask/M = wear_mask + remove_overlay(FACEMASK_LAYER) + var/alt_icon = M.mob_overlay_icon || 'icons/mob/clothing/mask.dmi' + var/muzzled = FALSE + var/variation_flag = NONE + if(head && (head.flags_inv & HIDEMASK)) + return + if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None") + muzzled = TRUE + else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None") + muzzled = TRUE + if(muzzled && M.mutantrace_variation & STYLE_MUZZLE && !(M.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) + alt_icon = M.anthro_mob_worn_overlay || 'icons/mob/clothing/mask_muzzled.dmi' + variation_flag |= STYLE_MUZZLE + + var/mutable_appearance/mask_overlay = M.build_worn_icon(FACEMASK_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, wear_mask.icon_state, variation_flag, FALSE) + + if(OFFSET_FACEMASK in dna.species.offset_features) + mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] + mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] + overlays_standing[FACEMASK_LAYER] = mask_overlay + apply_overlay(FACEMASK_LAYER) + update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout /mob/living/carbon/human/update_inv_back() - ..() - var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] - if(back_overlay) - remove_overlay(BACK_LAYER) - if(OFFSET_BACK in dna.species.offset_features) - back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] - back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] - overlays_standing[BACK_LAYER] = back_overlay - apply_overlay(BACK_LAYER) + if(dna.species.should_render()) + ..() + var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] + if(back_overlay) + remove_overlay(BACK_LAYER) + if(OFFSET_BACK in dna.species.offset_features) + back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] + back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] + overlays_standing[BACK_LAYER] = back_overlay + apply_overlay(BACK_LAYER) /proc/wear_alpha_masked_version(state, icon, layer, female, alpha_mask) var/mask = "-[alpha_mask]" @@ -710,8 +718,6 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if ..() update_hair() - - /mob/living/carbon/human/proc/update_observer_view(obj/item/I, inventory) if(observers && observers.len) for(var/M in observers) @@ -735,47 +741,48 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if if (!dna.species) return - var/obj/item/bodypart/HD = get_bodypart("head") + if(dna.species.should_render()) + var/obj/item/bodypart/HD = get_bodypart("head") - if (!istype(HD)) - return + if (!istype(HD)) + return - HD.update_limb() + HD.update_limb() - add_overlay(HD.get_limb_icon()) - update_damage_overlays() + add_overlay(HD.get_limb_icon()) + update_damage_overlays() - if(HD && !(HAS_TRAIT(src, TRAIT_HUSK))) - // lipstick - if(lip_style && (LIPS in dna.species.species_traits)) - var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER) - lip_overlay.color = lip_color - if(OFFSET_LIPS in dna.species.offset_features) - lip_overlay.pixel_x += dna.species.offset_features[OFFSET_LIPS][1] - lip_overlay.pixel_y += dna.species.offset_features[OFFSET_LIPS][2] - add_overlay(lip_overlay) + if(HD && !(HAS_TRAIT(src, TRAIT_HUSK))) + // lipstick + if(lip_style && (LIPS in dna.species.species_traits)) + var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER) + lip_overlay.color = lip_color + if(OFFSET_LIPS in dna.species.offset_features) + lip_overlay.pixel_x += dna.species.offset_features[OFFSET_LIPS][1] + lip_overlay.pixel_y += dna.species.offset_features[OFFSET_LIPS][2] + add_overlay(lip_overlay) - // eyes - if(!(NOEYES in dna.species.species_traits)) - var/has_eyes = getorganslot(ORGAN_SLOT_EYES) - if(!has_eyes) - add_overlay(mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER)) - else - var/mutable_appearance/left_eye = mutable_appearance('icons/mob/human_face.dmi', "left_eye", -BODY_LAYER) - var/mutable_appearance/right_eye = mutable_appearance('icons/mob/human_face.dmi', "right_eye", -BODY_LAYER) - if((EYECOLOR in dna.species.species_traits) && has_eyes) - left_eye.color = "#" + left_eye_color - right_eye.color = "#" + right_eye_color - if(OFFSET_EYES in dna.species.offset_features) - left_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] - left_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] - right_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] - right_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] - add_overlay(left_eye) - add_overlay(right_eye) + // eyes + if(!(NOEYES in dna.species.species_traits)) + var/has_eyes = getorganslot(ORGAN_SLOT_EYES) + if(!has_eyes) + add_overlay(mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER)) + else + var/mutable_appearance/left_eye = mutable_appearance('icons/mob/human_face.dmi', "left_eye", -BODY_LAYER) + var/mutable_appearance/right_eye = mutable_appearance('icons/mob/human_face.dmi', "right_eye", -BODY_LAYER) + if((EYECOLOR in dna.species.species_traits) && has_eyes) + left_eye.color = "#" + left_eye_color + right_eye.color = "#" + right_eye_color + if(OFFSET_EYES in dna.species.offset_features) + left_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] + left_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] + right_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] + right_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] + add_overlay(left_eye) + add_overlay(right_eye) - dna.species.handle_hair(src) + dna.species.handle_hair(src) - update_inv_head() - update_inv_wear_mask() + update_inv_head() + update_inv_wear_mask() diff --git a/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi index acf7a31c6ed9f353ddd8c63149619c3c4d8ff8b6..59840650a58f79f515178d2c6da2c39311be9209 100644 GIT binary patch literal 5093 zcmVV=-0C=2@&an!EFcbyQIr)l*?xotUS&C8|^cN(USMzETLlW!ncW^5dv)u~^ z?k(ZbKDz;$zT+PZkyZx+?w2cPJE^2Wz^&#?Bh5M;B_^2=1QgMb#pn&Cf-^-Sf`E#% zSCAHu{6lx?^W+@XJx`*{9M>pKp7fhi2J`H+y13a)jBlJW-)<4BY+0X6bZWHZ)Ty-O zlp(jALPKsDqeq#vcB`#+si3qVL_ix+ zgsN&~s)f)j-LP!QmI=EoG6IT2f)nDzX6?bxi9H_A>(1P{{o~FZ&y44BU-NK$zaz_@ z$2q^_`F-#2p8Gq$^Sy${v&JU6~oGCL~~h6vCd@0B0iv!5>*20%c-eef>XYUgyvdu4#X{L@GIf?;H2 z+z0QH0h!5oQIKW_DhYT|c{)Fj4r4ub5Iu3N>KB1frY#4{G2;iTb zWfcvDKQt+s8BYoW3^K_~-uJB{+j7KXZub)6KjZNjin_W8aIE#P(9zc|1Gszc%7_H# z4!jS5=iBd?4*!~n1{q{?H||b-DV~Mn7vj}{`?PK;xV^d z{^+Cca(tmj*Z;125~#xcvpX_a=y~v0mVW6S-flUYWa&8f*(p31UdynVP68+m5jwox za_y?RC9jJMA*9(jo*R#rjC_x|-LmR@;pXkgAAOwq{rnGJ;y>Qj9|<%OK+n--)sfiY z%^hi=aI`5E3HH}NA_Ht|-+@E|35hytkx))UP8_(X;}?Ce14^{C!frYqbGv2Ve{CW@ zI}f#KB#em!rbC1#WZvo0cOVudfYC40N+-B~bEnLBT6d0wrqhg7L{uH$-oBFuxQm~1 zgeW2s37j|x5=KH|HLGw@hZ6@4)bnQF&j9O)&>im`1-S3p&Nf%A#Ol?H1PBI2LNRD) zyL9Z|55G)!Y#z_HqZ_sKo0kA)omh@=taS`VZSSvtMBdeYJ5fXc;z)!D6C_NG7!Dl7 zS)7MBP|Vch0w6+^6MerkMFQ3FU3#>9+Vpkd}IhT56C;FcnlHP-A=R*aj}g ziIboF^jV}cBA$-73lbqG0j!)*8STs6xLdB2ZBU&5t@eFLB-qDpUg0(3NCa3QfsBNN z6KBS66;7Oph{%8de9`x@Arjm(_t5Bfy8eVP5$2fp?(Dy+{gc)2Ard1&0tXHvM3Ina zpq|-aE%ohJ^fyq?m0ZyZ@WQjt;@SRYUJ?|{16Xm?nhO6}QKX!<7pCV^&VPyj#7_V} z0b<0Fk`ED)I1*7rLWDDZqKK*YjiAHZJ$h?b2N#%Qj(Kmif3p3P=HD_Fj1j7dCL>V@ zkr=U>1m}YxYMbYo>_6K+!8D(6()&9;X5066;U4PDn@L+j0JC3uAsFeq5+vx3_sX~5 zy$>I=yuxclh!Rga9H5pO>Tywz3$=5J1R^m+VuXog{N2{`4cxJA&HqPtym$28o(EaS zT575FKEPds91)^okcH4Zj`<*tP#9+@LQN<_{k%wGCIV5Bct|9qL=3`2y&@vl|Jg0L zhr4o;Aa4Y)@|?XKuge1ji6SB+ryb!DLWEgJ9^(>lott8JYiJ`vOW*&tyeM7>c&<#ghRBL~8q^@{{Mn~sWNl(-l}5@W=OlMv%< zzwLH@?+1qnLP*I?s1Zm)@`}VDzBF~dBo$oBBej%$m$G)CjylBTwZEieQYRzhV~!Rs zfflExHvY+35+n!`0&q$sq%~_|v^6wwB?&$qsOxOLY3Gu5XU?8s=Qo=HNKE)SpM2ek zlSDFE#Z&^W$ZVH)Ex>HWj};X|o`vIrmZLwrc0fozIu3LL7+Ru^5T${7^$613PG;$F zCzt`B1e>(m77$tm1TTOrO9X3cnH=?lt1)l8kqJLvTfYX;<;WO^M50whgqfxPM@|Bm zt@tTL#gLY~fK{~v>Y~@Ko;#69u!@F^$(~#!51>LoKqSWa_x}&i9fec015YU{e9r(s z3LazYpLdRdl2r0Hc?da8YF$GZ16{noqdlXtzW`}$QlaF8Iu^x1Q?HA@WbTzga; z@OO@GZSGIEA0fi*KM&!#ZE1FJ$s8biEq;VCh8bngf%`SBzng8Jjbd|wQq~UCP(uyQ zREAH5>g@F2&g26~5+XsE2p9bMm$X%=&fogDN7(wfvY1mp9crtgrd72+wdIn2XaD@J zXp@t5Z7|_IML7YC{~6>OtCunDljVH045 z!zREAhouDQZ`n~*ORzSILl*&_{J^`!!B2kRm5)rj=%px>F4+KbA0xBUj6-df7p7_g@3(YsL@)+O4-*n2grAhFE%$= zt}t^nTM-G$Vc*UJXn+w1R(fBB);78bkZ+P#Y;w39VdV~~O6-Wz+LtZ@3=W+y{vjL7 z3c8nrpZvfpUw8E%0EQ6sWoz{0r?!QZem$( zB+yI%RVrm~&%H}Da>idD;9K9h9~X6~RkWqh$SF7U9_6`6pmleX7W+o~C}h7V0di^N z#EB;>;AMg+=l&28BogfHxt9j&FDfEj%qU2JY>k{(`ER0#OEhu@htA_CkfD*Yqvtjv zMCs`3maQOxTKNl5NT#i(r5><`cvj2QRHOa81W4D&xtETD8ab1XznT(c~ps%ufG2Yp6zcMa)e$dSX~lUYWq3o0F}_l$vwCl1SHK8E$M%Y z#E20i;P>k_y99b1S!s<$z4i-c0xRi&baf8MROnDs(Xgn{5hR>nq2mriLs$_gSP#(Q z?UwKC`6EPP%y0oefz(2fBYE~vRjU)pwE;Ct7)4}Za+dguQ+W3L(wgen-{?^2u%QV> z3qsT!e5OWDc*zlHMkB{Y*>!7Cg#0aiF{0<3V@1X$s)baUv%3ioiAl8*?) zs^*U6R;aOqO@M+Z{@FcKb3g53=t;kd0#p4_AZ)>4Mxca!QbU6K(wZ;2XNf zWLX3#*Ug)=?UdTCRresU0@-Tp=}4)u>x={?nFN;N)^qO0-EyveJqyQ$^g2B&Y?tyL z1ZJU1OpHm_;en*e#6!r657B>f2(wbIjT|at{KP zbfvuU=CRhpf~W5-zU=#q&1BvN;M{@tId|ZF-Qw6Kn*>@_CvUVLvvY$EuZDXNTzIV@ z;Y&IfvPg}+q*noENnobES!Wo%2SF)FP)d=gl3xaz+1_M!Ym_Cm^#<=jV0B%;o__SS zD+>XN4Z_NHrRt~Lw#`Not?f&`7GPCXteHNnaDW-;?JGNa7~NN(WkPH(1{FXhZe4F> zdo6wBC4iMjK&55Y%x=*(W7}-#wi3DeuG$Dt>TBw1N4azc3lg9j9AI_~)$l*)b!IvD z7UU(sa^3Hq3uaG2)j*Oq1=u;`>)T+wKegK*Eaq2-x@ypN1l5+ zWBjpr4PXD8?-lH?&=_)kheh)M)o>kc#C|#R2&$v@ckbf&$HVO2z8PV4BXV$oSC77z z`kWRrq&t0o=dM&gYQJiK*?k!ugJuG#C^r%GlECWm7PEiy$NwZ>apl+O+P4kQd!OO% zyafXD$iW51#=UI3K~YnceKWjz^u2;47?Xfw{iOa+9FgT7M}cRUr~Y!a*j#JkQ3fujTR$>j7xn(8}1j7uh$1u>Q)_ zbKk5FNu17ULlUR)&H5M{_bNyI`YVxrGpXkQmv30l#;dPo^2_r?!a+;Mpt&S0pE_1K zk&6WRWLryRI~xlDKc~Jpg_KCpcGWd}H9W+uf0i|kYZT`}>We=yc!J5P+7#>wNe3)^*)-l)-pu~9R z;oekO*5XXPpEo-On*b{ux+j5FwP67?6F|*1Kh%{Y*PNEWHbVv*<%cE$ z6w5XDJaj*h%r!svv}}`L`9SkkfED>}8`TF*5gR)c!7=Tg(d>*J@m4m zY%w0TOuWEGbwF1HQ0o4y5ihV&9nicOq&izI0JWWeap3;}aeAC6qS{E<00000NkvXX Hu0mjfZ&I*y literal 4717 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 diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 23f0e2cc13f147cda16bd16959c7c384109b03b3..ca67926a22a4e34b48e52b438ac6f233d7e8025d 100644 GIT binary patch delta 13006 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 Z4ZW=8FIT diff --git a/tgstation.dme b/tgstation.dme index 143f66a656..9291d1c2b8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -808,8 +808,6 @@ #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\navbeacon.dm" #include "code\game\machinery\PDApainter.dm" -#include "code\game\machinery\poweredfans\fan_assembly.dm" -#include "code\game\machinery\poweredfans\poweredfans.dm" #include "code\game\machinery\quantum_pad.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" @@ -887,6 +885,8 @@ #include "code\game\machinery\porta_turret\portable_turret.dm" #include "code\game\machinery\porta_turret\portable_turret_construct.dm" #include "code\game\machinery\porta_turret\portable_turret_cover.dm" +#include "code\game\machinery\poweredfans\fan_assembly.dm" +#include "code\game\machinery\poweredfans\poweredfans.dm" #include "code\game\machinery\shuttle\custom_shuttle.dm" #include "code\game\machinery\shuttle\shuttle_engine.dm" #include "code\game\machinery\shuttle\shuttle_heater.dm" From 79d75a991d356b0861afcfc7066eb5ef91dd6611 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 30 Sep 2020 00:54:32 +0000 Subject: [PATCH 14/39] Automatic changelog compile [ci skip] --- html/changelog.html | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 7b9a9299ba..dff9c06723 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -734,41 +734,6 @@
  • some crafted crates won't contain items now, and thus have stopped breaking the laws of physics
  • beepskys hats now follow the laws of gravity and move up/down when he bobs up and down
  • - -

    29 July 2020

    -

    DeltaFire15 updated:

    -
      -
    • The 'Naked' outfit is no longer broken.
    • -
    -

    Ghommie updated:

    -
      -
    • fixed cremator trays, paleness examination strings, chat message for stamping paper, looping sounds, load away missions/VR admin verb, access requirements for using the sechuds.
    • -
    • Alt-Clicking a cigarette packet should pull the lighter out first if present, then cigarettes.
    • -
    -

    Hatterhat updated:

    -
      -
    • Directional windows can now be rotated counterclockwise properly again.
    • -
    -

    NecromancerAnne, Sirich96 updated:

    -
      -
    • Stunbaton sprites by Sirich96.
    • -
    • New sprites for the stunsword.
    • -
    -

    necromanceranne updated:

    -
      -
    • Adds some in-hands for the rapier sheath.
    • -
    -

    timothyteakettle updated:

    -
      -
    • tail wagging should work in all cases now
    • -
    • bluespace jars work as intended now
    • -
    • aliens can remove embeds now
    • -
    • bloodsuckers are not affected by bloodloss
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • Flannel jackets and bartender winter coat
    • -
    GoonStation 13 Development Team From ccb774b8f233193b350abdef6834100e764ea960 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 02:15:34 +0100 Subject: [PATCH 15/39] puddles --- .../temporary_visuals/miscellaneous.dm | 9 ++++ .../carbon/human/species_types/jellypeople.dm | 39 +++++++++++++++--- icons/mob/mob.dmi | Bin 293284 -> 294018 bytes 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 8d5458333c..44fa231c07 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -515,3 +515,12 @@ /obj/effect/temp_visual/dir_setting/space_wind/Initialize(mapload, set_dir, set_alpha = 255) . = ..() alpha = set_alpha + +/obj/effect/temp_visual/slime_puddle + icon = 'icons/mob/mob.dmi' + duration = 12 + icon_state = "to_puddle" + +/obj/effect/temp_visual/slime_puddle/reverse + icon_state = "from_puddle" + duration = 7 diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 54cfce54c0..7bab7546a3 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -658,14 +658,41 @@ icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" var/is_puddle = FALSE + var/in_transformation_duration = 12 + var/out_transformation_duration = 7 + var/puddle_into_effect = /obj/effect/temp_visual/slime_puddle + var/puddle_from_effect = /obj/effect/temp_visual/slime_puddle/reverse + var/puddle_icon = 'icons/mob/mob.dmi' + var/puddle_state = "puddle" + var/tracked_overlay /datum/action/innate/slime_puddle/Activate() - if(!is_puddle) - is_puddle = TRUE - owner.cut_overlays() - else - is_puddle = FALSE - owner.regenerate_icons() + if(isjellyperson(owner)) + var/mob/living/carbon/human/H = owner + var/mutcolor = "#" + H.dna.features["mcolor"] + if(!is_puddle) + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") + is_puddle = TRUE + owner.cut_overlays() + var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) + puddle_effect.color = mutcolor + H.Stun(in_transformation_duration, ignore_canstun = TRUE) + sleep(in_transformation_duration) + var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) + puddle_overlay.color = mutcolor + tracked_overlay = puddle_overlay + owner.add_overlay(puddle_overlay) + else + owner.cut_overlay(tracked_overlay) + var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) + puddle_effect.color = mutcolor + H.Stun(out_transformation_duration, ignore_canstun = TRUE) + sleep(out_transformation_duration) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") + REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") + is_puddle = FALSE + owner.regenerate_icons() ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index ca67926a22a4e34b48e52b438ac6f233d7e8025d..10b733bae4e6221e36ab95f79ddda19526221b65 100644 GIT binary patch delta 14613 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

    rQi8R*f9 zIdqE2{cg+!U~O$JxH`Ol3oQ!OYYuU~HK-D+d=sDDBc7D)WN2u}*1|gE_1ewN&BM#9 z*t@GY4GUSX~fZ)d1RxWb*9=YL*@2Yf{Ws>l1&ZRKYT96l(v3n>Ub zwq=zY8y-#z74sy07!V9u^SWJdjxEZ~t)OS-We^-#SV}K5t+>#Hsd5cifOHb&be$H$ z-R81jck|!Nr_S?Q;nYc<-8rEs9+Em^{M>iRZF{+4r9R$oCO%pbJ2LhZ%TV=Y^|PkI zOhuU%QP_p*!(iAR^u(|hOt(o!CAz!0wM8Vt9OAh1F3EZLlY9Z;3Y0O7jm`p2Cm zcc7GEzig-p1hUwx1I7G4v*gtGi&P9g+<_NTacWzmT=tyAly#^jrG*qI>OyO2)4;y#1u$8jq2W>7nFZ5sXds{0aaG6i(el zoLkl22uPXvQ6R!i%6jd*ySBEZUT^wT<7lq`RoDjk`3gk&@@(0Fr6HBv{5D!IQ%=HZ zKmyjEI@!@r9(sMIv}N#CPtNnbO9;Aab6ZGa*<2<}JFmBXIqt-P73HUTJiIA11Ugd{ za&|DX!hmU9GptNESe2;@c)zf=x%@)HQ{=!AVgUa@1=5nNRdAb{+Uz$;{ud&Tgo0V@ zMM>7X*m7fo_QHY!R-wz*3GyLT&z*)8x>ws0$>KK@YHDg44CpR5b#LAY&)jyaeABgb zpRJ(JBlu)16|J;5F%A!@;6D^qy(Vy!+6wLv3cJsIRDMXSn&}acNvR$O1u9WHi}pc8WsFf)5h}z2Hm4 zLcfx zm+*pL6efG8va%$xx?$~D$|MwBlt(l+{5sSJEC+WbyVK1>emrcftN8v^vM9=8xh#aQ zLpL$1P#Mx50+yKBUw>X+(%>&aQ;53r!hC`qSOPg>W1<~b__}*?;Zp+hL{sF1M_!bC z`)9UzZIH0^a*_-tHk;4dNLmr#SmKLMmJ-?MMtpCGThV?!Sf5ta*l42HfomhKm0fMK z-40KG_in8?!xsjl?U;cD0F9$QiJkeypT2%uF6k4GUg0N|wVck2a5;H972{t!_6A7G zCV?;Jtl=Bf5?_{gNKi83Z%4RMPMFQBv8Ui0hoOtdq4`8?=lY2F&ju#cyCdgPh|Jdb z5CWL;7YHvoV#%2Qt&1% zWM%MU7Wd1#pAO7m5mSX=G$NaI z<+lP#q{YG_JM^MrVbI=!QP?2E*b43RlKYZmQsY!7F2_7Mxal^$ggMJi>K4v<8+6aH zx}X(YvhP*uMT(ShS=!WXK&(W4!jro27FvRL@S=ua->%IE-9!ab$dh=GD@yVN2S^Nh zRbS)h=dS{t<}eVeAQWvV=6iwTd`ez>LE;0;|3xM)9x%uV8SPxN1}W-doPr}oLisk` zsg3xo$V9NDxEa5n2^yNJ&@>2SqUJ)aMd1X8VY4-A1GMCpf)rc)NfvQ@F zaT>-;nd{ghGMRfj%~79vJFyDpA0W%;YylRg`;muP+iy6z^y_dx)lyYu4|*JcxU8-& zl!nujX2Ee(ID%qxUc#8NcpM>(f6V0c3MZyBL1M)~(L$zO`Ujw`y>MPnd|xq0az^1!mPNRmNg1U+dqCeEYvOkIOW@W2n3n_%c|YajBgOUkEsU_!pzz=8f- zZv&cT+iIoO;PT>nYUj8I&=lOXN@@r_!-*vpIhKPVN+n;y=Bl9Ml2jjqbVNS5%9s6M zp%57sx7aRFnRo)#K1WAKmpzFLjF%5>7{Zo;e(tPDKuE|D>uf8Sh^YsI@>Ecr6p&>I2r9t)R6xC4An; zFnXK}>iEUIn!_E;U+ScmuM`b=y}I>J-jHLdjHB)i+g(hdhf)rDG1fQNE4zC4@&5y2 CMw65P delta 13873 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 KT6)Iq!T$lXfgX?m From f9cf7429e1b141f7ef4090133a6923bcc8c022be Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 02:49:21 +0100 Subject: [PATCH 16/39] icons and traits --- .../living/carbon/human/species_types/jellypeople.dm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 7bab7546a3..1c9c1390e3 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -655,7 +655,7 @@ name = "Puddle Transformation" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "slimepuddle" - icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' + icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" var/is_puddle = FALSE var/in_transformation_duration = 12 @@ -671,13 +671,18 @@ var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) + //traits used here to disable their arms ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") + ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") is_puddle = TRUE owner.cut_overlays() var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.Stun(in_transformation_duration, ignore_canstun = TRUE) + H.KnockToFloor(TRUE, TRUE, TRUE) sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor @@ -691,6 +696,9 @@ sleep(out_transformation_duration) REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") + REMOVE_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") + REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") + REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") is_puddle = FALSE owner.regenerate_icons() From d783eb58bd55b473b80041435bcb2a78e26c56ce Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 02:58:58 +0100 Subject: [PATCH 17/39] more traits --- code/__DEFINES/traits.dm | 2 ++ .../carbon/human/species_types/jellypeople.dm | 19 ++++++++++--------- code/modules/mob/living/living_mobility.dm | 11 ++++++----- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 674cc16980..5294d88ec2 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -218,6 +218,8 @@ #define TRAIT_MOBILITY_NOPICKUP "mobility_nopickup" /// Disallow item use #define TRAIT_MOBILITY_NOUSE "mobility_nouse" +///Disallow resting/unresting +#define TRAIT_REST_LOCKED "mobility_notogglerest" #define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 1c9c1390e3..e21da3100c 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -671,18 +671,18 @@ var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) - //traits used here to disable their arms - ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") - ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") - ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") - ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") - ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") is_puddle = TRUE owner.cut_overlays() var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.Stun(in_transformation_duration, ignore_canstun = TRUE) - H.KnockToFloor(TRUE, TRUE, TRUE) + H.KnockToFloor(TRUE, TRUE, TRUE) //disarms and you cant pickup after + ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") + ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") + ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") + ADD_TRAIT(H, TRAIT_REST_LOCKED, "SLIME_PUDDLE_CANNOT_STAND") sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor @@ -694,11 +694,12 @@ puddle_effect.color = mutcolor H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") - REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") REMOVE_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") + REMOVE_TRAIT(H, TRAIT_REST_LOCKED, "SLIME_PUDDLE_CANNOT_STAND") is_puddle = FALSE owner.regenerate_icons() diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 654a979445..51b264d52d 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -10,11 +10,12 @@ //Force-set resting variable, without needing to resist/etc. /mob/living/proc/set_resting(new_resting, silent = FALSE, updating = TRUE) - if(new_resting != resting) - resting = new_resting - if(!silent) - to_chat(src, "You are now [resting? "resting" : "getting up"].") - update_resting(updating) + if(!HAS_TRAIT(src, TRAIT_REST_LOCKED)) + if(new_resting != resting) + resting = new_resting + if(!silent) + to_chat(src, "You are now [resting? "resting" : "getting up"].") + update_resting(updating) /mob/living/proc/update_resting(update_mobility = TRUE) if(update_mobility) From 2223cfeb2870a0e29ad99be69ae505556af6d609 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 18:41:30 +0100 Subject: [PATCH 18/39] better --- code/__DEFINES/traits.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 8 ++++++-- code/modules/mob/living/living_mobility.dm | 14 +++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 5294d88ec2..a930c44b7f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -219,7 +219,7 @@ /// Disallow item use #define TRAIT_MOBILITY_NOUSE "mobility_nouse" ///Disallow resting/unresting -#define TRAIT_REST_LOCKED "mobility_notogglerest" +#define TRAIT_MOBILITY_NOSTAND "mobility_nostand" #define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index e21da3100c..acd44565b9 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -665,6 +665,7 @@ var/puddle_icon = 'icons/mob/mob.dmi' var/puddle_state = "puddle" var/tracked_overlay + var/datum/component/squeak/squeak /datum/action/innate/slime_puddle/Activate() if(isjellyperson(owner)) @@ -682,7 +683,8 @@ ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") - ADD_TRAIT(H, TRAIT_REST_LOCKED, "SLIME_PUDDLE_CANNOT_STAND") + ADD_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor @@ -699,8 +701,10 @@ REMOVE_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") - REMOVE_TRAIT(H, TRAIT_REST_LOCKED, "SLIME_PUDDLE_CANNOT_STAND") + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") is_puddle = FALSE + if(squeak) + squeak.RemoveComponent() owner.regenerate_icons() ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 51b264d52d..25d70573ac 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -5,17 +5,17 @@ RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOMOVE), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOPICKUP), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOUSE), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOSTAND), .proc/update_mobility) //Stuff like mobility flag updates, resting updates, etc. //Force-set resting variable, without needing to resist/etc. /mob/living/proc/set_resting(new_resting, silent = FALSE, updating = TRUE) - if(!HAS_TRAIT(src, TRAIT_REST_LOCKED)) - if(new_resting != resting) - resting = new_resting - if(!silent) - to_chat(src, "You are now [resting? "resting" : "getting up"].") - update_resting(updating) + if(new_resting != resting) + resting = new_resting + if(!silent) + to_chat(src, "You are now [resting? "resting" : "getting up"].") + update_resting(updating) /mob/living/proc/update_resting(update_mobility = TRUE) if(update_mobility) @@ -85,7 +85,7 @@ else mobility_flags &= ~MOBILITY_RESIST - var/canstand_involuntary = conscious && !stat_softcrit && !knockdown && !chokehold && !paralyze && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying) && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) + var/canstand_involuntary = conscious && !stat_softcrit && !knockdown && !chokehold && !paralyze && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying) && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && !(HAS_TRAIT(src, TRAIT_MOBILITY_NOSTAND)) var/canstand = canstand_involuntary && !resting var/should_be_lying = !canstand From 6b46fdbc325fa8cf8eba102f37fe6995171c9276 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 21:16:09 +0100 Subject: [PATCH 19/39] fine --- .../mob/living/carbon/human/species_types/jellypeople.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index acd44565b9..dba5f0094e 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -677,7 +677,10 @@ var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.Stun(in_transformation_duration, ignore_canstun = TRUE) + H.rotate_on_lying = FALSE H.KnockToFloor(TRUE, TRUE, TRUE) //disarms and you cant pickup after + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") @@ -694,8 +697,11 @@ owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor + H.rotate_on_lying = FALSE H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") + REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") REMOVE_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") From 16735e01906e98139cf8c22bd25f863d7a5c95a5 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 30 Sep 2020 21:40:42 +0100 Subject: [PATCH 20/39] silent paralysis --- code/modules/mob/living/carbon/carbon.dm | 4 +- .../carbon/human/species_types/jellypeople.dm | 8 +++- code/modules/surgery/bodyparts/_bodyparts.dm | 8 ++-- code/modules/surgery/bodyparts/parts.dm | 38 ++++++++++--------- 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 1706763f6b..6f435a6294 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -999,10 +999,10 @@ var/obj/item/organ/I = X I.Insert(src) -/mob/living/carbon/proc/update_disabled_bodyparts() +/mob/living/carbon/proc/update_disabled_bodyparts(silent = FALSE) for(var/B in bodyparts) var/obj/item/bodypart/BP = B - BP.update_disabled() + BP.update_disabled(silent) /mob/living/carbon/vv_get_dropdown() . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index dba5f0094e..b074b5a778 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -666,9 +666,11 @@ var/puddle_state = "puddle" var/tracked_overlay var/datum/component/squeak/squeak + var/transforming = FALSE /datum/action/innate/slime_puddle/Activate() - if(isjellyperson(owner)) + if(isjellyperson(owner) && !transforming) + transforming = TRUE var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) @@ -687,12 +689,14 @@ ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") ADD_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") + H.update_disabled_bodyparts(silent = TRUE) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor tracked_overlay = puddle_overlay owner.add_overlay(puddle_overlay) + transforming = FALSE else owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) @@ -708,10 +712,12 @@ REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") REMOVE_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") + H.update_disabled_bodyparts(silent = TRUE) is_puddle = FALSE if(squeak) squeak.RemoveComponent() owner.regenerate_icons() + transforming = FALSE ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index e90f86bf1c..6a010f5b0f 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -481,12 +481,12 @@ //Checks disabled status thresholds //Checks disabled status thresholds -/obj/item/bodypart/proc/update_disabled() +/obj/item/bodypart/proc/update_disabled(silent = FALSE) if(!owner) return - set_disabled(is_disabled()) + set_disabled(is_disabled(silent), silent) -/obj/item/bodypart/proc/is_disabled() +/obj/item/bodypart/proc/is_disabled(silent = FALSE) if(!owner) return if(HAS_TRAIT(owner, TRAIT_PARALYSIS)) @@ -498,7 +498,7 @@ if(can_dismember() && !HAS_TRAIT(owner, TRAIT_NODISMEMBER)) . = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled if(get_damage(TRUE) >= max_damage * (HAS_TRAIT(owner, TRAIT_EASYLIMBDISABLE) ? 0.6 : 1)) //Easy limb disable disables the limb at 40% health instead of 0% - if(!last_maxed) + if(!last_maxed && !silent) owner.emote("scream") last_maxed = TRUE if(!is_organic_limb() || stamina_dam >= max_damage) diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 5a887ee6b7..86288564ae 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -75,11 +75,11 @@ return BODYPART_DISABLED_PARALYSIS return ..() -/obj/item/bodypart/l_arm/set_disabled(new_disabled) +/obj/item/bodypart/l_arm/set_disabled(new_disabled, silent = FALSE) . = ..() if(!.) return - if(owner.stat < UNCONSCIOUS) + if(owner.stat < UNCONSCIOUS && !silent) switch(disabled) if(BODYPART_DISABLED_DAMAGE) owner.emote("scream") @@ -136,11 +136,11 @@ return BODYPART_DISABLED_PARALYSIS return ..() -/obj/item/bodypart/r_arm/set_disabled(new_disabled) +/obj/item/bodypart/r_arm/set_disabled(new_disabled, silent = FALSE) . = ..() if(!.) return - if(owner.stat < UNCONSCIOUS) + if(owner.stat < UNCONSCIOUS && !silent) switch(disabled) if(BODYPART_DISABLED_DAMAGE) owner.emote("scream") @@ -196,16 +196,17 @@ return BODYPART_DISABLED_PARALYSIS return ..() -/obj/item/bodypart/l_leg/set_disabled(new_disabled) +/obj/item/bodypart/l_leg/set_disabled(new_disabled, silent = FALSE) . = ..() if(!. || owner.stat >= UNCONSCIOUS) return - switch(disabled) - if(BODYPART_DISABLED_DAMAGE) - owner.emote("scream") - to_chat(owner, "Your [name] is too damaged to function!") - if(BODYPART_DISABLED_PARALYSIS) - to_chat(owner, "You can't feel your [name]!") + if(!silent) + switch(disabled) + if(BODYPART_DISABLED_DAMAGE) + owner.emote("scream") + to_chat(owner, "Your [name] is too damaged to function!") + if(BODYPART_DISABLED_PARALYSIS) + to_chat(owner, "You can't feel your [name]!") /obj/item/bodypart/l_leg/digitigrade name = "left digitigrade leg" @@ -253,16 +254,17 @@ return BODYPART_DISABLED_PARALYSIS return ..() -/obj/item/bodypart/r_leg/set_disabled(new_disabled) +/obj/item/bodypart/r_leg/set_disabled(new_disabled, silent = FALSE) . = ..() if(!. || owner.stat >= UNCONSCIOUS) return - switch(disabled) - if(BODYPART_DISABLED_DAMAGE) - owner.emote("scream") - to_chat(owner, "Your [name] is too damaged to function!") - if(BODYPART_DISABLED_PARALYSIS) - to_chat(owner, "You can't feel your [name]!") + if(!silent) + switch(disabled) + if(BODYPART_DISABLED_DAMAGE) + owner.emote("scream") + to_chat(owner, "Your [name] is too damaged to function!") + if(BODYPART_DISABLED_PARALYSIS) + to_chat(owner, "You can't feel your [name]!") /obj/item/bodypart/r_leg/digitigrade name = "right digitigrade leg" From 27c5897c4d44b35296507e871828afc6fdf99ee7 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 00:17:17 +0100 Subject: [PATCH 21/39] update button icon and stand up --- .../living/carbon/human/species_types/jellypeople.dm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index b074b5a778..f55f53083b 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -668,9 +668,16 @@ var/datum/component/squeak/squeak var/transforming = FALSE +/datum/action/innate/slime_puddle/IsAvailable() + if(!transforming) + return ..() + else + return FALSE + /datum/action/innate/slime_puddle/Activate() - if(isjellyperson(owner) && !transforming) + if(isjellyperson(owner) && IsAvailable()) transforming = TRUE + UpdateButtonIcon() var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) @@ -702,6 +709,7 @@ var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.rotate_on_lying = FALSE + H.set_resting(0, TRUE, TRUE) // yes, it's 0, not FALSE H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") From 00e9c338bd7a4f8dee28aefb804f1b22d840ba62 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 1 Oct 2020 00:56:55 +0000 Subject: [PATCH 22/39] Automatic changelog compile [ci skip] --- html/changelog.html | 481 +-------------------- html/changelogs/.all_changelog.yml | 5 + html/changelogs/AutoChangeLog-pr-13416.yml | 5 - 3 files changed, 8 insertions(+), 483 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-13416.yml diff --git a/html/changelog.html b/html/changelog.html index ff47eda1c3..264f32ef3f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,420 +50,11 @@ -->

    -

    30 August 2020

    -

    raspy-on-osu updated:

    -

    29 September 2020

    -

    timothyteakettle updated:

    -
      -
    • fixed a typo causing your right eye colour to save as the left eye colour
    • -
    - -

    28 September 2020

    -

    ArchieBeepBoop updated:

    -
      -
    • Craftable Micro Powered Fans
    • -
    -

    Degirin2120 updated:

    -
      -
    • Added engineering hazard jumpsuits, can be found in the engidrobe, comes in 3 varieties.
    • -
    -

    Putnam3145 updated:

    -
      -
    • Added a brute-force check-every-single-tile step to SSair when it has enough time to run.
    • -
    • G fuid production is now much lower.
    • -
    • Supermatter sabotage objective's gone.
    • -
    • Subterfuge objectives are now all equally likely.
    • -
    • Replaced a "(hopefully) 1" with a "2"
    • -
    • Cryoing no longer unwins already-won objectives.
    • -
    -

    SiliconMain updated:

    -
      -
    • Minor adjustment to material cost of long range atmos analyzer
    • -
    -

    Trilbyspaceclone updated:

    -
      -
    • Most drinks now have some animation in them, from basic soda bubbles fizzing around to ice cubes bobbing just a bit.
    • -
    -

    Tupinambis updated:

    -
      -
    • Ghost poly's color value is now a hex value instead of an oct value. This has been a thing for OVER FIVE YEARS
    • -
    • Updates TEG, Antimatter, Jetpack sprites (CO2 and Oxy from Eris).
    • -
    • Replaced old chair sprites with new ones ported and modified from eris.
    • -
    • Beds can now be placed both right and left.
    • -
    • Subtle changes to stool legs to give them more of a shine.
    • -
    -

    raspy-on-osu updated:

    -
      -
    • TEG power generation
    • -
    -

    thakyZ updated:

    -
      -
    • Added the ability to print the Light Replacer at the Engineering Protolathe
    • -
    -

    timothyteakettle updated:

    -
      -
    • turrets can once again be broken
    • -
    • you can now have heterochromia and select individual eye colours
    • -
    - -

    27 September 2020

    -

    SiliconMain updated:

    -
      -
    • Holograms made from projectors (atmos, engi, sec, medical, ect...) can no longer be contaminated by radiation
    • -
    - -

    26 September 2020

    -

    CoreFlare updated:

    -
      -
    • IPC's can have hair. Why wasn't this added earlier. Use the bald hairstyle for no hair.
    • -
    - -

    25 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Removed a non-working proc that already had its functionality implemented in another proc in the same file.
    • -
    - -

    24 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Atmos is free.
    • -
    - -

    22 September 2020

    -

    Arturlang updated:

    -
      -
    • TGUI Statpanel
    • -
    -

    YakumoChen updated:

    -
      -
    • Mechsuits, robotics jumpsuits added to RoboDrobe
    • -
    -

    timothyteakettle updated:

    -
      -
    • character previews should be more consistent now
    • -
    - -

    20 September 2020

    -

    DeltaFire15 updated:

    -
      -
    • Sutures work on simplemobs again.
    • -
    • Attacking dismembered bodyparts now targets the chest instead, for weapons aswell as unarmed attacks.
    • -
    -

    MrJWhit updated:

    -
      -
    • New sprites for chess pieces! You can craft them in-game with metal sheets.
    • -
    -

    silicons updated:

    -
      -
    • hulks can smash again (walls no longer break their hands)
    • -
    • acid no longer degrades armor
    • -
    - -

    17 September 2020

    -

    DeltaFire15 updated:

    -
      -
    • Failing the plushmium reaction can now create peculiar plushies, depending on reaction volume.
    • -
    • The mood-buff from petting a plushie now works properly again.
    • -
    • Fixed wacky necropolis loot chest behavior
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Adds the Research Director's office to Omega Station
    • -
    • Adds 2 new solar arrays (and control rooms)
    • -
    • Adds some action figures that weren't there previously
    • -
    • The CMO's office now has a light switch
    • -
    • Slight readjustments to impacted areas
    • -
    • Readjusts the toxins air supply line to (ideally) be easier to service
    • -
    • Department camera consoles should now be able to actually check appropriate cameras
    • -
    • Xenobiology can now be locked down (by the Research Director)
    • -
    -

    MrJWhit updated:

    -
      -
    • Adds a brain damage line
    • -
    -

    Putnam3145 updated:

    -
      -
    • Your balls finally feel full, again.
    • -
    -

    timothyteakettle updated:

    -
      -
    • due to changes in policy, and several lawsuits, Nanotrasen has been forced to allow disabled people to sign up
    • -
    - -

    16 September 2020

    -

    timothyteakettle updated:

    -
      -
    • fixed an icon path
    • -
    - -

    12 September 2020

    +

    01 October 2020

    BlueWildrose updated:

      -
    • The Polychromic winter coat's hoodie will now polychrome, alongside any other new polychromic items with toggleable headwear.
    • -
    • Minesweeper will no longer blow up the player's ears when they select "Play on the same board"
    • -
    • Slimepeople will find warm donk pockets among other toxin healing items even more repulsive, as they are anti-toxic.
    • -
    • Slimepeople are now neutral to gross foods.
    • -
    -

    DeltaFire15 updated:

    -
      -
    • AIs can no longer qdel() the gravity generator
    • -
    -

    Putnam3145 updated:

    -
      -
    • Added some unit tests for reactions.
    • -
    • replaced handle_changeling and handle_bloodsucker with signal registration
    • -
    -

    Sonic121x updated:

    -
      -
    • Fixed pill button on chemical press
    • -
    -

    TheObserver-sys updated:

    -
      -
    • Brass now has a proper datum. Aspiring Forgetenders rejoice!
    • -
    -

    Trilbyspaceclone updated:

    -
      -
    • Race based drinks will no longer stay inside your blood for ever.
    • -
    -

    Tupinambis updated:

    -
      -
    • Redid Cogstation atmos pipes to make it less cluttered.
    • -
    • Removed a few doors from the main hallway to mitigate chokepoint issues
    • -
    • All belt hell conveyers are now on by default, so that belt hell actually works.
    • -
    • IDs for poddoors and belts and the like. Everything is now properly hooked and should work as expected (except for the pressure triggered mass drivers)
    • -
    • addresses most if not all roundstart active turfs.
    • -
    • Issue where wires were connected to the SMES improperly, and SMES were not properly precharged, resulting in power failure earlier than intended.
    • -
    • various rogue turfs and wirings.
    • -
    • security office APC being hooked to maintenance for some reason.
    • -
    • TEG is now directly wired to the SMES.
    • -
    • adds a subtype of mass drivers that is triggered by things being on it. TODO: Make these mass drivers trigger poddoors, to make belt hell fully functional.
    • -
    -

    lolman360 updated:

    -
      -
    • glaives now work again
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • Revolver is now poplocked down to fifteen people.
    • -
    - -

    11 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Superconducting turfs now can't go below 0 celsius.
    • -
    - -

    09 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Made superconductivity work for the first time literally ever.
    • -
    -

    timothyteakettle updated:

    -
      -
    • accents work better
    • -
    - -

    08 September 2020

    -

    Ghommie updated:

    -
      -
    • fixed names of the Electrical Toolbox goodie pack and green croptop christmas suit.
    • -
    • Fixed turf visuals for real. Original PR by AnturK on tgstation.
    • -
    -

    KeRSedChaplain updated:

    -
      -
    • added borg_deathsound.ogg and android_scream.ogg
    • -
    -

    silicons updated:

    -
      -
    • meteor waves now have a static 5 minute timer.
    • -
    - -

    07 September 2020

    -

    DeltaFire15 updated:

    -
      -
    • fixed a typo causing a span not to show.
    • -
    -

    Putnam for debugging ammo loading! Thx!! updated:

    -
      -
    • Removed spell blade, diamond picaxe, and fire wand from lava land loot tables
    • -
    • Each mini boss now has its own type of crate.
    • -
    • Each spike has its own type of crate that it pulls its now smaller loot table from
    • -
    • Moved god eye from spike loot table to hard spawn collosses fight
    • -
    • Moved holoparasight from spike loot table to bubble gum
    • -
    • Moved magic meat hook from spike loot table to drake
    • -
    • 2 more crates to Arena Shuttle as well as 4-4-4 of each new type of chest
    • -
    • Replaced the diamond pick loot with a better one
    • -
    • Replaced the cursted katana with a non cursted verson that deals half the damage and has less block!
    • -
    • Three new potions, blue heals the mind like a mama potion, Green heals the soul aka the organs! Lastly Red heals the body, by 100 damage of each main types. Best not to waste them!
    • -
    • Four more "wands" Spellbooks! These fun little guys shoot out its own pages to do the affect, one will set the target on fire like a bullet, one will harm them a bit, one will heal the target a small bit - How nice! Last one will give them a few statis affects like a taser bolt but without as much power or tasing affect
    • -
    - -

    06 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Dynamic no longer pushes events.
    • -
    • Made spontaneous brain trauma a good deal less annoying.
    • -
    -

    lolman360, NecromancerAnne updated:

    -
      -
    • The ancient art of blacksmithing, now in pixels.
    • -
    • cool swords and shit (thanks anne)
    • -
    -

    raspy-on-osu updated:

    -
      -
    • thermomachine examine text
    • -
    - -

    05 September 2020

    -

    Bhijn updated:

    -
      -
    • Readded the old method of temperature notifications in the form of a new pair of shivering/sweating notifications.
    • -
    -

    Putnam3145 updated:

    -
      -
    • Hilbert hotel flavor text for one particular snowflake hotel changed.
    • -
    • admins can now actually reduce threat level in dynamic
    • -
    • Made owo.ogg smaller.
    • -
    • Character saving unit test is now more verbose on failure.
    • -
    • Added an extools proc hook alternative to rust_g logging.
    • -
    -

    raspy-on-osu updated:

    -
      -
    • supermatter shard examine text
    • -
    • protolathe item categories
    • -
    - -

    04 September 2020

    -

    timothyteakettle updated:

    -
      -
    • ipcs can speak
    • -
    - -

    03 September 2020

    -

    Ghommie updated:

    -
      -
    • Jaunters should now work with magic mirror chasming.
    • -
    • The photocopier can now print more than one copy at a time.
    • -
    • Alkali perspiration infos don't crash the Pandemic UI anymore.
    • -
    • Windoors can be actually tinted now.
    • -
    - -

    02 September 2020

    -

    Putnam3145 updated:

    -
      -
    • Added a unit test for character saving.
    • -
    • Plastitanium rapier no longer silently sleeps with no chance at counterplay when used by pacifists.
    • -
    • Fusion scan is now actually useful.
    • -
    -

    Tupinambis updated:

    -
      -
    • moved the dakis, genital growth pills, and genital autosurgeons out of the maintenance loot table and into kinkmates.
    • -
    -

    raspy-on-osu updated:

    -
      -
    • pyroclastic anomaly client spam
    • -
    -

    timothyteakettle updated:

    -
      -
    • you can hide your ckey now from the roundend report
    • -
    - -

    01 September 2020

    -

    BlueWildrose updated:

    -
      -
    • fixed slimes starting off hungry
    • -
    - -

    31 August 2020

    -

    Arturlang updated:

    -
      -
    • Slimes can now damage structures, don't leave them unfed!
    • -
    -

    Chiirno updated:

    -
      -
    • Moves pill_bottles/dice to box/dice on CogStation.
    • -
    -

    Couls, ported by NecromancerAnne updated:

    -
      -
    • cleans up mech backstabbing code
    • -
    -

    DeltaFire15 updated:

    -
      -
    • teleport-to-ark ability of the eminence, commented out
    • -
    • teleport-to-obelisk ability for the eminence
    • -
    -

    Detective-Google updated:

    -
      -
    • plasmamen have no more slowdown
    • -
    • object reskins now use very nice and cool radials
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Adds a pool to MetaStation
    • -
    • Slight readjustments to the surrounding area
    • -
    • Fixes a handful of external airlocks
    • -
    -

    ForrestWick updated:

    -
      -
    • removes wall walking boots from nukie uplink
    • -
    -

    Ghommie updated:

    -
      -
    • e-gun overlays and some floor decals should have been fixed.
    • -
    -

    LetterN updated:

    -
      -
    • tgchat
    • -
    -

    Lynxless updated:

    -
      -
    • Changed anatomic panacea into a direct buff, instead of a chem injection
    • -
    • Changed the values of anatomic panacea
    • -
    • Added a new icon for panacea's buff alert
    • -
    -

    Putnam3145 updated:

    -
      -
    • Pref for genital/vore examine text
    • -
    • Fixed a couple events having ghost roles eligible.
    • -
    • Buffed slaughter demon: gets stronger as it eats people
    • -
    • Nerfed slaughter demon: no longer permanently round-removes all who are eaten by it, instead releasing their now-heartless bodies
    • -
    • Dynamic storytellers now calculate property weights properly.
    • -
    -

    Sonic121x updated:

    -
      -
    • Fix the four type of new tea that will stuck inside your vein.
    • -
    • drinking glass sprite for those tea.
    • -
    -

    kappa-sama updated:

    -
      -
    • miners can no longer acquire funny antag item
    • -
    -

    lolman360 updated:

    -
      -
    • shuttle engine/heater sprites now face the right way
    • -
    -

    raspy-on-osu updated:

    -
      -
    • TEG power output
    • -
    • tesla movement priorities
    • -
    • tesla counterplay
    • -
    • tesla containment check (containment variable now usable)
    • -
    -

    silicons updated:

    -
      -
    • brooms now sweep objects on MOVABLE_PRE_MOVE rather than MOVABLE_MOVED
    • -
    • firedoors no longer automatically open on touch when there's no pressure differences.
    • -
    -

    timothyteakettle updated:

    -
      -
    • buzz, buzz2 and ping are now all unrestricted emotes and can be used by anyone
    • -
    • the drake credit and pickle credit sprites have been removed
    • -
    • tongue speech handling is now done by accent datums
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • waffleco
    • +
    • Slimepeople are given unique laughs and screams.
    • +
    • Adds "warbles", "chimpers", and "puffs" to the customizable speech verbs for character.

    30 August 2020

    @@ -474,33 +65,6 @@
  • 5 new explosion related sounds
  • -

    28 August 2020

    -

    EmeraldSundisk updated:

    -
      -
    • Adds more paper to the library
    • -
    • The law office now has a desk window
    • -
    • Expands most of CogStation's exterior airlocks. Slightly adjusts surrounding areas to accommodate this.
    • -
    • Updates some of CogStation's paperwork
    • -
    • The rat in the morgue turned themselves into a possum. Funniest shit I've ever seen.
    • -
    • Adjusts some area designations so cameras should receive power properly
    • -
    • Cleans up an errant decal
    • -
    -

    Hatterhat updated:

    -
      -
    • Traitor holoparasites can now only be bought once, because apparently you can only have one active holopara.
    • -
    • PDA bombs can now only be bought once per uplink.
    • -
    -

    lolman360 updated:

    -
      -
    • atmos = radiation = chemistry.
    • -
    -

    shellspeed1 updated:

    -
      -
    • new explosion echoes
    • -
    • explosion echo range
    • -
    • 5 new explosion related sounds
    • -
    -

    28 August 2020

    timothyteakettle updated:

      @@ -1138,45 +702,6 @@
      • monkeys no longer continuously bleed everywhere
      - -

      30 July 2020

      -

      Adelphon updated:

      -
        -
      • Created a Cosmetic version of the camo.
      • -
      -

      Arturlang updated:

      -
        -
      • Bloodsucker LifeTick runs from BiologicalLife now
      • -
      -

      Ryll-Ryll ported by silicons updated:

      -
        -
      • Shoelaces are now a thing. You can untie them by laying down next to someone.
      • -
      • shoes now have lace delays and some can't be laced at all
      • -
      • do after now tracks who's interacting with who, meaning some actions now break when the target moves away.
      • -
      -

      SiliconMain updated:

      -
        -
      • Ported the long range atmos analyzer from sk*rat, credit to NotRanged
      • -
      -

      silicons updated:

      -
        -
      • energy sword perfect parries now reflect projectiles back at their shooters.
      • -
      • any mob can now parry if they have the right item
      • -
      • beam rifles now go into emitters properly
      • -
      • clickdelay has been refactored into an experimental hybrid system. Check code/modules/mob/clickdelay.dm for more information.
      • -
      • Resisting no longer checks clickdelay, but is standardized to a 2 second per resist system for most forms of resisting. It still sets clickdelay, though.
      • -
      • Meters have been added for estimating time until next attack/resist. Won't be that useful due to our clickdelay currently being very short, though. They're visible from your hand and resist HUD elements. experimental: Most attacks and forms of attacking (minus unarmed because it's too much of a pain to refactor how hugs/gloves of the north star works) now check for time-since-last-attack rather than making it so you can't attack for said time. This means you can very quickly switch to a gun from a melee weapon, whereas in the old system a melee weapon would put you on lockout for 0.8 seconds, in the new system all the gun cares about is that you did not attack for at least 0.4 seconds.
      • -
      • All clickdelay setting/reading are now procs, so it should be trivial to implement another system where drawing/switching to a weapon requires you to have it out for x seconds before using it. I am not personally doing it at this point in time though because it will likely just annoy everyone with no real gain unless we do something like putting a 0.8 second switch-to cooldown for guns (which I did not, yet)
      • -
      • attack_hand has been refactored to on_attack_hand remove: sexchems no longer impact click delay
      • -
      • turrets now automatically stagger their shots. Happy parrying/blocking.
      • -
      • turrets now speed_process, they were shooting slower than they should be
      • -
      • anything can now block with the right items
      • -
      -

      timothyteakettle updated:

      -
        -
      • some crafted crates won't contain items now, and thus have stopped breaking the laws of physics
      • -
      • beepskys hats now follow the laws of gravity and move up/down when he bobs up and down
      • -
    GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f0ff6a3c32..afb405e756 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -27112,3 +27112,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: new explosion echoes - tweak: explosion echo range - soundadd: 5 new explosion related sounds +2020-10-01: + BlueWildrose: + - soundadd: Slimepeople are given unique laughs and screams. + - tweak: Adds "warbles", "chimpers", and "puffs" to the customizable speech verbs + for character. diff --git a/html/changelogs/AutoChangeLog-pr-13416.yml b/html/changelogs/AutoChangeLog-pr-13416.yml deleted file mode 100644 index 03e0dbb73a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-13416.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "BlueWildrose" -delete-after: True -changes: - - soundadd: "Slimepeople are given unique laughs and screams." - - tweak: "Adds \"warbles\", \"chimpers\", and \"puffs\" to the customizable speech verbs for character." From 57733473fe15d966b5aef489f4b51285d0627c75 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:23:17 +0100 Subject: [PATCH 23/39] TRAIT SOURCE DEFINE --- code/__DEFINES/traits.dm | 1 + .../carbon/human/species_types/jellypeople.dm | 32 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index a930c44b7f..f8f686c679 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -312,6 +312,7 @@ #define CLOWNOP_TRAIT "clown-op" #define MEGAFAUNA_TRAIT "megafauna" #define DEATHSQUAD_TRAIT "deathsquad" +#define SLIMEPUDDLE_TRAIT "slimepuddle" /// This trait is added by the active directional block system. #define ACTIVE_BLOCK_TRAIT "active_block" /// This trait is added by the parry system. diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index f55f53083b..1cf36499b9 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -688,14 +688,14 @@ H.Stun(in_transformation_duration, ignore_canstun = TRUE) H.rotate_on_lying = FALSE H.KnockToFloor(TRUE, TRUE, TRUE) //disarms and you cant pickup after - ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") - ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") - ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") - ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") - ADD_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") - ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") - ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") - ADD_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOSTAND, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) @@ -712,14 +712,14 @@ H.set_resting(0, TRUE, TRUE) // yes, it's 0, not FALSE H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, "SLIME_PUDDLE_PARALYSIS_L_ARM") - REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, "SLIME_PUDDLE_PARALYSIS_R_ARM") - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, "SLIME_PUDDLE_NO_PICKUP") - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, "SLIME_PUDDLE_NO_ITEMUSE") - REMOVE_TRAIT(H, TRAIT_PASSTABLE, "SLIME_PUDDLE_TABLE_PASS") - REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, "SLIME_PUDDLE_SPRINT_LOCK") - REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, "SLIME_PUDDLE_COMBAT_LOCK") - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOSTAND, "SLIME_PUDDLE_CANNOT_STAND") + REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOSTAND, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) is_puddle = FALSE if(squeak) From b73770c3bcd08257b33cce40adf63d540b62a394 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 22:03:15 +0100 Subject: [PATCH 24/39] fuck --- .../mob/living/carbon/human/species_types/jellypeople.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 1cf36499b9..e5eec6aeba 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -704,6 +704,7 @@ tracked_overlay = puddle_overlay owner.add_overlay(puddle_overlay) transforming = FALSE + UpdateButtonIcon() else owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) @@ -724,8 +725,10 @@ is_puddle = FALSE if(squeak) squeak.RemoveComponent() + H.rotate_on_lying = TRUE owner.regenerate_icons() transforming = FALSE + UpdateButtonIcon() ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// From 03ad9eb052b5baa75fe5400686c4f4f30eb142ee Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 22:51:40 +0100 Subject: [PATCH 25/39] experimental test --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index e5eec6aeba..40df70d24a 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -710,9 +710,9 @@ var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.rotate_on_lying = FALSE - H.set_resting(0, TRUE, TRUE) // yes, it's 0, not FALSE H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) + H.set_resting(0, TRUE, TRUE) // yes, it's 0, not FALSE REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -725,8 +725,8 @@ is_puddle = FALSE if(squeak) squeak.RemoveComponent() - H.rotate_on_lying = TRUE owner.regenerate_icons() + H.rotate_on_lying = TRUE transforming = FALSE UpdateButtonIcon() From 121ec996cf0f976f9670a9007ea78d724afa57b2 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:09:20 +0100 Subject: [PATCH 26/39] fuck it no resting --- code/__DEFINES/traits.dm | 2 +- .../living/carbon/human/species_types/jellypeople.dm | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index f8f686c679..ad1dc90071 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -219,7 +219,7 @@ /// Disallow item use #define TRAIT_MOBILITY_NOUSE "mobility_nouse" ///Disallow resting/unresting -#define TRAIT_MOBILITY_NOSTAND "mobility_nostand" +#define TRAIT_MOBILITY_NOREST "mobility_norest" #define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 40df70d24a..07474cc1a8 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -657,6 +657,7 @@ button_icon_state = "slimepuddle" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" + required_mobility_flags = MOBILITY_USE | MOBILITY_STAND var/is_puddle = FALSE var/in_transformation_duration = 12 var/out_transformation_duration = 7 @@ -686,8 +687,6 @@ var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor H.Stun(in_transformation_duration, ignore_canstun = TRUE) - H.rotate_on_lying = FALSE - H.KnockToFloor(TRUE, TRUE, TRUE) //disarms and you cant pickup after ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -695,10 +694,10 @@ ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOSTAND, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) + H.pass_flags &= PASSMOB var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor tracked_overlay = puddle_overlay @@ -709,10 +708,9 @@ owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor - H.rotate_on_lying = FALSE H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) - H.set_resting(0, TRUE, TRUE) // yes, it's 0, not FALSE + H.pass_flags ^= PASSMOB REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -720,15 +718,15 @@ REMOVE_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOSTAND, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) is_puddle = FALSE if(squeak) squeak.RemoveComponent() owner.regenerate_icons() - H.rotate_on_lying = TRUE transforming = FALSE UpdateButtonIcon() + else + to_chat(owner, "You need to be standing up to do this!") //just assume they're a slime because it's such a weird edgecase to have it and not be one (it shouldn't even be possible) ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// From c602ad1cab7c00e56a4000bc4463d8a93308f702 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:13:53 +0100 Subject: [PATCH 27/39] yes --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 ++ code/modules/mob/living/living_mobility.dm | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 07474cc1a8..5c1ef7a0a4 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -694,6 +694,7 @@ ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) @@ -718,6 +719,7 @@ REMOVE_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) is_puddle = FALSE if(squeak) diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 25d70573ac..92de711c27 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -5,13 +5,15 @@ RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOMOVE), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOPICKUP), .proc/update_mobility) RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOUSE), .proc/update_mobility) - RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOSTAND), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOREST), .proc/update_mobility) //Stuff like mobility flag updates, resting updates, etc. //Force-set resting variable, without needing to resist/etc. /mob/living/proc/set_resting(new_resting, silent = FALSE, updating = TRUE) if(new_resting != resting) + if(resting && HAS_TRAIT(src, TRAIT_MOBILITY_NOREST)) //forcibly block resting from all sources - BE CAREFUL WITH THIS TRAIT + return resting = new_resting if(!silent) to_chat(src, "You are now [resting? "resting" : "getting up"].") @@ -85,10 +87,10 @@ else mobility_flags &= ~MOBILITY_RESIST - var/canstand_involuntary = conscious && !stat_softcrit && !knockdown && !chokehold && !paralyze && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying) && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && !(HAS_TRAIT(src, TRAIT_MOBILITY_NOSTAND)) + var/canstand_involuntary = conscious && !stat_softcrit && !knockdown && !chokehold && !paralyze && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying) && !(combat_flags & COMBAT_FLAG_HARD_STAMCRIT) var/canstand = canstand_involuntary && !resting - var/should_be_lying = !canstand + var/should_be_lying = !canstand && !HAS_TRAIT(src, TRAIT_MOBILITY_NOREST) if(buckled) if(buckled.buckle_lying != -1) should_be_lying = buckled.buckle_lying From 203246ece74e69b231101dab8b81901d2243fd19 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:40:57 +0100 Subject: [PATCH 28/39] FUCK --- .../mob/living/carbon/human/species_types/jellypeople.dm | 6 +++++- code/modules/movespeed/modifiers/innate.dm | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 5c1ef7a0a4..5fb6fe2b53 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -657,7 +657,7 @@ button_icon_state = "slimepuddle" icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" - required_mobility_flags = MOBILITY_USE | MOBILITY_STAND + required_mobility_flags = MOBILITY_STAND var/is_puddle = FALSE var/in_transformation_duration = 12 var/out_transformation_duration = 7 @@ -695,6 +695,7 @@ ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.update_disabled_bodyparts(silent = TRUE) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) @@ -721,6 +722,7 @@ REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) + H.remove(/datum/movespeed_modifier/slime_puddle) is_puddle = FALSE if(squeak) squeak.RemoveComponent() @@ -747,6 +749,8 @@ var/extract_cooldown = 0 /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) + if(slime_puddle && slime_puddle.is_puddle) + slime_puddle.Activate() ..() if(current_extract) current_extract.forceMove(C.drop_location()) diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm index a0357ddf0f..946d93e96b 100644 --- a/code/modules/movespeed/modifiers/innate.dm +++ b/code/modules/movespeed/modifiers/innate.dm @@ -18,3 +18,7 @@ blacklisted_movetypes = (FLOATING|CRAWLING) variable = TRUE flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/slime_puddle + multiplicative_slowdown = 2 + flags = IGNORE_NOSLOW From 13f1b59133b06b9246ad6e810fc14f2e8c3665ca Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:41:54 +0100 Subject: [PATCH 29/39] typo --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 5fb6fe2b53..866b865404 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -722,7 +722,7 @@ REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) - H.remove(/datum/movespeed_modifier/slime_puddle) + H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) is_puddle = FALSE if(squeak) squeak.RemoveComponent() From eb31434b7b09f0049101a134499fa08492c13f86 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:54:50 +0100 Subject: [PATCH 30/39] final fix --- .../carbon/human/species_types/jellypeople.dm | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 866b865404..5a0150f13a 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -668,6 +668,7 @@ var/tracked_overlay var/datum/component/squeak/squeak var/transforming = FALSE + var/last_use /datum/action/innate/slime_puddle/IsAvailable() if(!transforming) @@ -682,30 +683,31 @@ var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) - is_puddle = TRUE - owner.cut_overlays() - var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) - puddle_effect.color = mutcolor - H.Stun(in_transformation_duration, ignore_canstun = TRUE) - ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) - H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - H.update_disabled_bodyparts(silent = TRUE) - squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) - sleep(in_transformation_duration) - H.pass_flags &= PASSMOB - var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) - puddle_overlay.color = mutcolor - tracked_overlay = puddle_overlay - owner.add_overlay(puddle_overlay) - transforming = FALSE - UpdateButtonIcon() + if(CHECK_MOBILITY(H, MOBILITY_USE)) + is_puddle = TRUE + owner.cut_overlays() + var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) + puddle_effect.color = mutcolor + H.Stun(in_transformation_duration, ignore_canstun = TRUE) + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + H.update_disabled_bodyparts(silent = TRUE) + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) + sleep(in_transformation_duration) + H.pass_flags &= PASSMOB + var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) + puddle_overlay.color = mutcolor + tracked_overlay = puddle_overlay + owner.add_overlay(puddle_overlay) + transforming = FALSE + UpdateButtonIcon() else owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) From 26cfac8988c11bf50afbae8b31080af6772ada2d Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 23:57:01 +0100 Subject: [PATCH 31/39] brrr --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 5a0150f13a..08cc7905c5 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -37,6 +37,8 @@ icon_state = "brain-slime" /datum/species/jelly/on_species_loss(mob/living/carbon/C) + if(slime_puddle && slime_puddle.is_puddle) + slime_puddle.Activate() if(regenerate_limbs) regenerate_limbs.Remove(C) if(slime_change) @@ -751,8 +753,6 @@ var/extract_cooldown = 0 /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) - if(slime_puddle && slime_puddle.is_puddle) - slime_puddle.Activate() ..() if(current_extract) current_extract.forceMove(C.drop_location()) From 3fc016e19dcee2013b7a23fc34a63f78e4aac36b Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 2 Oct 2020 02:32:10 +0100 Subject: [PATCH 32/39] better movement --- code/modules/mob/living/carbon/human/human_movement.dm | 5 +++++ code/modules/mob/living/carbon/human/species.dm | 4 ++++ .../living/carbon/human/species_types/jellypeople.dm | 10 ++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index bcb658eab8..ffa0df0cca 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -101,3 +101,8 @@ if(dna.species.space_move(src)) return TRUE return ..() + +/mob/living/carbon/human/CanPass(atom/movable/mover, turf/target) + if(human_owner.dna.species.species_pass_check()) + return TRUE + return ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 70c8f1322d..7bb39d03be 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1930,6 +1930,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/should_render(mob/living/carbon/human/H) return TRUE +//a check for if you want to forcibly make CanPass return TRUE for the mob with this species +/datum/species/proc/species_pass_check() + return FALSE + ///////////// //BREATHING// ///////////// diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 08cc7905c5..f02b498628 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -71,6 +71,12 @@ else return ..() +/datum/species/jelly/species_pass_check() + if(slime_puddle && slime_puddle.is_puddle) + return TRUE + else + return ..() + /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers return @@ -701,9 +707,9 @@ ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.update_disabled_bodyparts(silent = TRUE) + H.layer -= 1 //go one layer down so people go over you squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) - H.pass_flags &= PASSMOB var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor tracked_overlay = puddle_overlay @@ -716,7 +722,6 @@ puddle_effect.color = mutcolor H.Stun(out_transformation_duration, ignore_canstun = TRUE) sleep(out_transformation_duration) - H.pass_flags ^= PASSMOB REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -727,6 +732,7 @@ REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + H.layer += 1 //go one layer back above! is_puddle = FALSE if(squeak) squeak.RemoveComponent() From 32f32d7e6247a78042a597b5f426fb61343a4ea4 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 2 Oct 2020 02:33:33 +0100 Subject: [PATCH 33/39] compile --- code/modules/mob/living/carbon/human/human_movement.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index ffa0df0cca..5ced11e35a 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -103,6 +103,6 @@ return ..() /mob/living/carbon/human/CanPass(atom/movable/mover, turf/target) - if(human_owner.dna.species.species_pass_check()) + if(dna.species.species_pass_check()) return TRUE return ..() From 418cd44bbebc129444c9fd80a0763698f8850ee3 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 2 Oct 2020 16:31:33 +0100 Subject: [PATCH 34/39] SQUISH --- code/datums/components/squeak.dm | 6 +++--- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index df44aef4de..36faba256e 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -11,11 +11,11 @@ // This is to stop squeak spam from inhand usage var/last_use = 0 var/use_delay = 20 - + // squeak cooldowns var/last_squeak = 0 var/squeak_delay = 5 - + /// chance we'll be stopped from squeaking by cooldown when something crossing us squeaks var/cross_squeak_delay_chance = 33 // about 3 things can squeak at a time @@ -25,7 +25,7 @@ RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak) if(ismovable(parent)) RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak) - RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED), .proc/play_squeak_crossed) + RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED, COMSIG_MOVABLE_CROSS), .proc/play_squeak_crossed) RegisterSignal(parent, COMSIG_CROSS_SQUEAKED, .proc/delay_squeak) RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react) if(isitem(parent)) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index c70bd6bd5c..8d29a55d07 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -712,6 +712,7 @@ H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.update_disabled_bodyparts(silent = TRUE) H.layer -= 1 //go one layer down so people go over you + H.pass_flags &= PASSMOB squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) @@ -737,6 +738,7 @@ H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.layer += 1 //go one layer back above! + H.pass_flags ^= PASSMOB is_puddle = FALSE if(squeak) squeak.RemoveComponent() From ab83185ffc651ceed13e6416eddf3d0c37f28a9c Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 2 Oct 2020 16:40:34 +0100 Subject: [PATCH 35/39] oh no --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 8d29a55d07..dbcf798cf1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -712,7 +712,7 @@ H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.update_disabled_bodyparts(silent = TRUE) H.layer -= 1 //go one layer down so people go over you - H.pass_flags &= PASSMOB + ENABLE_BITFIELD(H.pass_flags, PASSMOB) squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) sleep(in_transformation_duration) var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) @@ -738,7 +738,7 @@ H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.layer += 1 //go one layer back above! - H.pass_flags ^= PASSMOB + REMOVE_BITFIELD(H.pass_flags, PASSMOB) is_puddle = FALSE if(squeak) squeak.RemoveComponent() From 6533d850c2e73cc42b3b271170bcee705b474762 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 2 Oct 2020 16:42:06 +0100 Subject: [PATCH 36/39] compile --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index dbcf798cf1..b88c68f386 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -738,7 +738,7 @@ H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.layer += 1 //go one layer back above! - REMOVE_BITFIELD(H.pass_flags, PASSMOB) + DISABLE_BITFIELD(H.pass_flags, PASSMOB) is_puddle = FALSE if(squeak) squeak.RemoveComponent() From 9d99061ff54b0739f3e7f466ea292b1ff5d7e92d Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 7 Oct 2020 23:40:59 +0100 Subject: [PATCH 37/39] what the fuck git --- code/modules/mob/living/carbon/human/update_icons.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a393fa8906..f81fd7ba49 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -742,9 +742,9 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if return if(dna.species.should_render()) - return - - var/obj/item/bodypart/HD = get_bodypart("head") + return + + var/obj/item/bodypart/HD = get_bodypart("head") if(!istype(HD)) return From d37d7bddae0af4436d14e6b25fe7b0ea2d138cc4 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 8 Oct 2020 04:20:42 +0100 Subject: [PATCH 38/39] Update jellypeople.dm --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 4c488aae74..6193172f06 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -730,7 +730,6 @@ ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) @@ -756,7 +755,6 @@ REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_PASSTABLE, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) From a1ccc31877b7786458e17a82cdb0da209ad62f5a Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 10 Oct 2020 18:05:31 +0100 Subject: [PATCH 39/39] fuck you travis --- code/modules/mob/living/carbon/human/update_icons.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f81fd7ba49..71833d22a3 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -742,9 +742,9 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if return if(dna.species.should_render()) - return + return - var/obj/item/bodypart/HD = get_bodypart("head") + var/obj/item/bodypart/HD = get_bodypart("head") if(!istype(HD)) return