Skip to content

Commit

Permalink
Quadruped taurs, rework returns (#3112)
Browse files Browse the repository at this point in the history
* atomize

* dwa'

* why isnt it publishing

* womp

* i am stupid

* womP!!!!!!!!!

* aaaa

* suffix, to avoid confusion

* before refactor

* dasads

* aaaaaah

* we're getting there

* aaa

* this isnt necessary

* aaghhh

* arg

* doc

* Apply suggestions from code review

Co-authored-by: GoldenAlpharex <[email protected]>

* manual review

* changes!

* rename the folder

* ive been meaning to buff saddlebags

* actually no lets just add 4 more storage

* update arg

* this kinda sucks but its not THAT bad

* doc

* manual review

* Apply suggestions from code review

Co-authored-by: Bloop <[email protected]>

* WHY DIDNT I DO THIS BEFORE

* better

* test

* I HATE ARGS

* some manual review

* Apply suggestions from code review

Co-authored-by: Bloop <[email protected]>

* even more manual review

* a

* compile please

* aaaaa

* document the increased storage space

* i should probably make this a clothing flag instead of hardcoding but im making something else atm

* oh my god fucking finally

* offset the sprite just slightly

* safe access

* Apply suggestions from code review

Co-authored-by: FlufflesTheDog <[email protected]>

* this is probably not needed

* fix ci

* canine layering fix

* expands saddlebag hitbox

* fix wiggly bags

* prefer get_organ_slot over locate

* fix hard deletes

* Pretend you didn't see that

* Squashed commit of the following:

commit 9a3f81f078933c49bb3db05a7ec9925073bc27bf
Author: Mal <[email protected]>
Date:   Wed Jun 19 11:38:54 2024 -0400

    lowercase a in accessories

commit 665ffa956168646c8fed7ae3c2987c2df7fc9e06
Author: Mal <[email protected]>
Date:   Wed Jun 19 11:36:56 2024 -0400

    Taur update

commit d3f925443a0202974bbdc6ed36266dd1d91738d2
Merge: aa41b967f802 769ee0717272
Author: Bloop <[email protected]>
Date:   Wed Jun 19 11:36:01 2024 -0400

    Merge branch 'master' into upstream-merge-82847

commit aa41b967f802601b696d7623385d84d9fb443afd
Author: Iajret <[email protected]>
Date:   Wed Jun 19 18:31:32 2024 +0300

    Continuing merging 82847 to Novas codebase (#3136)

    done, i hope??

commit 769ee0717272c093967acef7501aa17e00ed0de5
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 11:10:24 2024 -0400

    Automatic changelog for PR #3134 [ci skip]

commit 34156cb8acb0bb9979023f1d6c436a7bde8ca464
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 11:10:03 2024 -0400

    [MIRROR] Allow mimes to break their vow as an MMI [MDB IGNORE] (#3134)

    * Allow mimes to break their vow as an MMI (#84109)

    ## About The Pull Request
    closes tgstation/tgstation#80967
    closes tgstation/tgstation#84094
    ## Changelog
    🆑 grungussuss
    fix: mimes can now break their vow while borged or an MMI
    /🆑

    * Allow mimes to break their vow as an MMI

    ---------

    Co-authored-by: grungussuss <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 8627d6af631ffa6580ffc0fb86032f8438bf00a0
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:59:20 2024 -0400

    Automatic changelog for PR #3132 [ci skip]

commit 8579db88be04183e1791b112f438b4e83cca868b
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:58:58 2024 -0400

    [MIRROR] Power cell tiers consistency [MDB IGNORE] (#3132)

    * Power cell tiers consistency (#84074)

    ## About The Pull Request

    Tier 3 had both 20 and 30 MJ cells for some reason, while 10 MJ cell was
    considered tier 2.

    Now the scaling is proper: 10 MJ is tier 1, 20 MJ is tier 2, and so
    on...

    Also updated plasma crystal sprite, and gave unique sprites to the
    smallest cells.

    ![image](https://github.com/tgstation/tgstation/assets/3625094/308a88b2-a834-4256-894d-88743311c0b4)

    ## Why It's Good For The Game

    The scaling was off, and the sprites made them look out of place for
    their tier.

    ## Changelog

    🆑
    fix: Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in
    lathes.
    image: Updated cell sprites to correspond to other stock parts of their
    tiers.
    image: Updated plasma cell, 500KJ cell and 2.5MJ cell sprites
    /🆑

    * Power cell tiers consistency

    * Update cell.dmi

    ---------

    Co-authored-by: Andrew <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>
    Co-authored-by: SomeRandomOwl <[email protected]>

commit 5ba675c5810705f32c1dd57efeffa9a70b9f21a4
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:12:10 2024 -0400

    Automatic changelog for PR #3131 [ci skip]

commit 4560bb47d5263d38eb2c4e3dc41874e15b06cbc5
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:11:42 2024 -0400

    [MIRROR] APC channel wires [MDB IGNORE] (#3131)

    * APC channel wires (#84099)

    ## About The Pull Request

    Added wires for toggling channels between Auto and Off to the APC.

    ![image](https://github.com/tgstation/tgstation/assets/3625094/b4986bd1-3c10-4200-bc88-405fe6c40d6a)

    ## Why It's Good For The Game

    Allows for a few interesting setups, such as:

    - Connecting signaller to the lights channel to control lights remotely
    or using proximity sensors/infrared lasers.
    - Connecting signaller to the machinery channel to automatically disable
    machine power usage in an area for power saving with signaller or
    proximity sensors.

    ## Changelog

    🆑
    qol: APC has wires for machinery/lights/environment channels
    /🆑

    * APC channel wires

    ---------

    Co-authored-by: Andrew <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 6487d2ada48d500f821dd4e9c7dfeff592f4eb52
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:06:44 2024 -0400

    Automatic changelog for PR #3133 [ci skip]

commit b9e7724692e073b478655c30cd88fadef07a7857
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 10:06:17 2024 -0400

    [MIRROR] Fixed TechWeb app piling designs issue [MDB IGNORE] (#3133)

    * Fixed TechWeb app piling designs issue (#84104)

    ## About The Pull Request

    Fixes #81478

    ## Why It's Good For The Game

    We had this issue since February.

    ## Changelog

    🆑
    fix: Fixed techweb app showing wrong designs on Details button click
    /🆑

    * Fixed TechWeb app piling designs issue

    ---------

    Co-authored-by: Andrew <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit ac51e5ef53f45e1d4b3826e705cf511c5c4f700f
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 04:16:58 2024 -0400

    Automatic changelog for PR #3130 [ci skip]

commit 982e04d1e21d5b6475401182b097ac75d7dff545
Author: NovaBot <[email protected]>
Date:   Wed Jun 19 04:16:35 2024 -0400

    [MIRROR] Items in your hands can catch fire [MDB IGNORE] (#3130)

    * Items in your hands can catch fire (#83867)

    ## About The Pull Request

    Recently we allowed items held in your hands to catch fire if you catch
    fire.
    This makes sense but the code had a few oversights, then we reverted it.

    This PR reintroduces the feature, but with a few refinements.
    The basic feature is simple: If you are on fire then items you are
    holding will also catch fire, in the same vein as items you are wearing
    on your head or hands.

    There are also a few caveats we forgot about the first time we added
    this:

    - If your gloves cannot catch fire, your held items will not catch fire
    (because your hands aren't on fire).
    - If you are extinguished, your held items will also be extinguished.
    - Stopping, Dropping, and Rolling on top of any items will also
    extinguish those items.

    As part of this change, after an argument about whether or not this is
    an oversight in coding-general, I've made the proc `get_equipped_items`
    take a bitflag instead of a series of booleans as an argument and added
    a new one for "include held items", so that we need no longer argue
    about whether holding something counts as "equipping" it (in all other
    parts of the game than this proc, it does). This is what gives the PR
    most of its code footprint, don't be scared.

    ## Why It's Good For The Game

    Items you are holding in your hands _should_ catch fire if everything
    else on your person is on fire, and taking an item off of your body to
    put it in your hands shouldn't protect it from fire, because those
    things don't make intuitive sense.
    If we want an item to be able to catch fire when worn, then it should do
    so.

    This might expose some issues where we were improperly setting the
    flammability flags on items, but any weapon which will burn in your
    hands now would also have burned if you were wearing it on your belt or
    back, so making those issues more visible should be a bonus (we'll also
    stop them from burning on your back or belt).

    If you see someone holding a piece of paper that you really don't want
    them to read you can now set them on fire to stop them from reading it,
    whereas previously they would deftly hold the very flammable object out
    of reach of their flaming body.

    ## Changelog

    🆑
    balance: Items held in your hands can catch fire.
    balance: Items you are holding won't catch fire if your hands cannot
    catch fire.
    balance: When you stop being on fire so will items you are holding.
    balance: If you roll around on your burning items they will stop being
    on fire.
    /🆑

    * Items in your hands can catch fire

    ---------

    Co-authored-by: Jacquerel <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit bbcfeb5ac30eac7d561629beb6c59d1c290c57ad
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 21:05:45 2024 -0400

    Automatic changelog for PR #3129 [ci skip]

commit 87570b8a47acec76544bbbc0aff0e5ca74422756
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 20:44:13 2024 -0400

    [MIRROR] Activating a lighter or match while covered in flammable liquids now ignites you, even if you're really, really, really ridiculously good looking [MDB IGNORE] (#3129)

    * Activating a lighter or match while covered in flammable liquids now ignites you, even if you're really, really, really ridiculously good looking (#84085)

    ## About The Pull Request

    This pull request adds a couple of lines to the code for matches and
    lighters that has it check to see if its location (which would also be
    its user) is a living mob with flammable liquid on them. If so, they get
    lit on fire.
    ## Why It's Good For The Game

    It adds a goofy interaction for people unfortunate enough to get
    splashed with flammable liquid. Beyond a possible way of making a
    half-assed attempt to assassinate a smoker, it's also a good safety
    lesson. Just look at these poor young men below...

    https://github.com/tgstation/tgstation/assets/49173900/f073f71f-6b37-46ce-8ea3-eb30ec2378a1
    ## Changelog
    🆑 Bisar
    add: The Nanotrasen safety commission reminds employees to properly
    clean themselves of all flammable material before going on smoke breaks.
    /🆑

    * Activating a lighter or match while covered in flammable liquids now ignites you, even if you're really, really, really ridiculously good looking

    ---------

    Co-authored-by: Joshua Kidder <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 66d973a0328a32a2e75e32b6f4e11635d51a9eed
Author: Changelogs <[email protected]>
Date:   Wed Jun 19 00:40:23 2024 +0000

    Automatic changelog compile [ci skip]

commit c49c045073386ff7f1b835675afc0af68b137d78
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 20:39:18 2024 -0400

    Automatic changelog for PR #3128 [ci skip]

commit e6fdb15f4dfec0b8ab73b8a8c25eb810c7e3c434
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 20:38:44 2024 -0400

    Automatic changelog for PR #3127 [ci skip]

commit 2ba46e2ce264c6930f20826ea0a75db970cb612a
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 20:31:16 2024 -0400

    [MIRROR] Hand Tele Fix [MDB IGNORE] (#3128)

    * Hand Tele Fix (#84078)

    ## About The Pull Request

    Fixes #84077

    Self explanatory

    ## Changelog

    🆑 Melbert
    fix: Fixed hand tele portals being forever
    /🆑

    * Hand Tele Fix

    ---------

    Co-authored-by: MrMelbert <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 2059e8f599437e5401b613e01251553c8b324548
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 20:31:05 2024 -0400

    [MIRROR] Fix ambience pref not being toggleable in game [MDB IGNORE] (#3127)

    * Fix ambience pref not being toggleable in game (#84087)

    ## About The Pull Request

    The only time people were added to the ambience SS's list is when you
    log in, meaning if you toggle the preference on/off mid game, it does
    nothing.

    Fixes #61495

    ## Changelog

    🆑 Melbert
    fix: Enabling or disabling ambience mid round will properly enable or
    disable ambience
    qol: Added descriptions differentiating "Ship ambience" from "ambience"
    /🆑

    * Fix ambience pref not being toggleable in game

    ---------

    Co-authored-by: MrMelbert <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 4ad3e599aed0f75358ca8a541f59470b7c8e89c8
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 19:28:24 2024 -0400

    [MIRROR] Revert "remove human requirement for invisible_wall" [MDB IGNORE] (#3126)

    * Revert "remove human requirement for invisible_wall" (#84096)

    Reverts tgstation/tgstation#83751

    The person who added this has been abusing the shit out of it
    relentlessly, so they fail the vibe check.

    * Revert "remove human requirement for invisible_wall"

    ---------

    Co-authored-by: oranges <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 5e293d43e979eab96036e4fd2c0b296525fb39e5
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 16:35:06 2024 -0400

    Automatic changelog for PR #3124 [ci skip]

commit c27a15bf1465bae634c8bab06bebee28b12360ba
Author: lessthanthree <[email protected]>
Date:   Tue Jun 18 13:34:44 2024 -0700

    APC arcing warning effects (#3124)

    * apc overload additional effects

    * Update apc.dm

    * Update apc.dm

    * Update modular_nova/modules/apc_arcing/apc.dm

    Co-authored-by: Bloop <[email protected]>

    * Update modular_nova/modules/apc_arcing/apc.dm

    Co-authored-by: Bloop <[email protected]>

    * Update modular_nova/modules/apc_arcing/apc.dm

    Co-authored-by: Bloop <[email protected]>

    ---------

    Co-authored-by: Bloop <[email protected]>

commit 020c7011d7148858096cff7f48693a75a39df5b0
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 14:16:31 2024 -0400

    Automatic changelog for PR #3122 [ci skip]

commit bf4ab6f828ff96da7a8f8cfee08287bf7bb1bf49
Author: Bloop <[email protected]>
Date:   Tue Jun 18 14:16:09 2024 -0400

    Modular techweb update 2 (#3122)

    * Modular techweb update 2

    * Adds missing cyberimps

    * Missing combat implants, satchel/duffel of holding

    * nv implants their own node

    * adv_mining->mining_adv

    * shrug

    * Whoops

    * What's your secret?

    I'm not sure I'd recommend it

    * Update all_nodes.dm

    * Actually we don't need to do this?

    * Removes this override from 3 years ago that doesn't seem intentional

commit d1e8e1126c4505969548b863d222c4123085445f
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 10:55:59 2024 -0400

    Automatic changelog for PR #3121 [ci skip]

commit fbf754e39583a11821e7984ab01ac18bfb60297e
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 10:55:15 2024 -0400

    Automatic changelog for PR #3120 [ci skip]

commit 157939c3e177ca5cec2971f74ee26871509748e2
Author: GoldenAlpharex <[email protected]>
Date:   Tue Jun 18 07:54:17 2024 -0700

    Fixes APCs not arcing as they should be (#3121)

    Fixes APCs not arcing as they should be.

commit ea7a357eb50a59e14a5a049860a200911589d440
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 10:51:17 2024 -0400

    [MIRROR] Sparks ignite flammable things (including people), welding fuel pools now ignite in response to more things logically [MDB IGNORE] (#3120)

    * Sparks ignite flammable things (including people), welding fuel pools now ignite in response to more things logically (#83673)

    ## About The Pull Request

    Currently, sparks only ignite the air in rooms with
    plasma/tritium/hydrogen in them. This PR changes sparks to ignite
    flammable things they touch, including mobs covered in flammable
    liquids. They also marginally heat containers (40K temp increase from a
    broken light bulb).

    The initial purpose was to make welding fuel pools more responsive to
    flaming things being thrown into them. I have also done that. They now
    respond to hot objects (including flaming mobs) entering their space or
    being thrown onto them. They are also ignited by sparks.

    This PR makes sparks a fire hazard. Keep a fire extinguisher handy.

    ## Why It's Good For The Game

    Safety hazards are fun. Sparks should, logically, set flammable things
    on fire, including YOU. Welding fuel pools should be more hazardous.

    ## Changelog

    🆑 Bisar
    add: Sparks now ignite flammable things. Including you. Keep a fire
    extinguisher handy or stop dousing yourself in welding fuel!
    fix: Fixed a few oversights with welding fuel pools not igniting when
    you throw lit/hot things into them or when you walk into them while on
    fire.
    /🆑

    * Sparks ignite flammable things (including people), welding fuel pools now ignite in response to more things logically

    ---------

    Co-authored-by: Joshua Kidder <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 7d981252d852714aaca3d81df06a8c5e8933cfa3
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 10:46:36 2024 -0400

    Automatic changelog for PR #3117 [ci skip]

commit 1a2a495b9858e1fd5d4f8f5767c445f3e378b5d0
Author: kittysmooch <[email protected]>
Date:   Tue Jun 18 07:46:11 2024 -0700

    adds the mighty mcsqueeb hairstyle (#3117)

    all hail mcsqueeb

commit 8ba15cf5d3dba70cee93bc01502ed9eb2d15f5b6
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 09:14:04 2024 -0400

    Automatic changelog for PR #3049 [ci skip]

commit cc95225fd9b362105d3d1f549c2fd47445f345f3
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 09:13:40 2024 -0400

    [MIRROR] Re-adds bagulo (remastered), 3 max bluespace cores, singulos may collapse if a third BoH is added [MDB IGNORE] (#3049)

    * Re-adds bagulo (remastered), 3 max bluespace cores, singulos may collapse if a third BoH is added

    * Update code/datums/storage/subtypes/bag_of_holding.dm

    * Buffs the max amount of bluespace cores to 16, adds granular config option to disable bagulo + the stationary tear singularity

    ---------

    Co-authored-by: MrMelbert <[email protected]>
    Co-authored-by: GoldenAlpharex <[email protected]>
    Co-authored-by: Mal <[email protected]>

commit f2e3081ee9a197ec446d5f07125bceeb25266750
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 08:56:48 2024 -0400

    Automatic changelog for PR #3119 [ci skip]

commit 567ea96e15a33cfb4e4cf5b8fdbf9ac1c8584640
Author: _0Steven <[email protected]>
Date:   Tue Jun 18 14:56:25 2024 +0200

    Fixes latejoiners not having their general/medical/security records and alt-title prefs show up in the ingame records (#3119)

    hey wait this is my fault-

commit 4f0522e3899b16660371d199bb61e1f3ba1d502c
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 08:08:44 2024 -0400

    Automatic changelog for PR #183 [ci skip]

commit ea9542bac719daf393cfedbc4e00c53734cbf6c7
Author: Name <[email protected]>
Date:   Tue Jun 18 08:08:18 2024 -0400

    [PORT] [SEMI-MODULAR] [de-janked] Ports the lovely Character Directory which was ported from Coyote Bayou (#183)

    * I'm not cooking this anymore

    * obscurity pref time

    * THE NUT MACHINE

    * CONTEXT REMOVAL, EVERYONE IS CONFUSED, ME TOO SO I FALL ASLEEP

    * Updates Character directory

    * Epic fix!

    * obliterates straights AND gays

    * stupid ticker

    * More gloop

    * Reorders gender and attraction

    * resize mooore

    * Pass 1 - code improvement

    * Starting to implement portrait

    * Very early WIP redesign of the character view menu, with portrait

    * Update character_directory.dm

    * Redesign courtesy of LT3

    * Some updates

    * Update NovaCharacterDirectory.jsx

    * Attempts to fix black screen bug, clean up the refs better

    * Update character_directory.dm

    * Update character_directory.dm

    * New color scheme + minor refactor + cyborg previews are functional

    * Updates the lists, rephrasing

    * Does away with obscurity examine pref

    * adds hypnosis 2 directory

    * Update borg preview when they change models

    * Functional sort buttons search function

    * Update NovaCharacterDirectory.jsx

    * Adds color code toggle button, some mild unloudening of colors

    * Fixes state resetting

    * Update NovaCharacterDirectory.jsx

    * Update NovaCharacterDirectory.jsx

    * Improved character previews

    * Fixed color palette (courtesy of LT3)

    * Revert "Improved character previews"

    This reverts commit 92d9f0fd08f309807be78452b9b7a482dd56f0be.

    * Adds better feedback to headshot error

    * Update ticker.dm

    * Ghost role will have previews

    * Adds link to directory when examining mobs who have an ad

    * Adds character directory to the lobby

    * Obscured face = don't show link

    * Documentation, fixes a bug with the 'show in directory' pref

    * opening a char ad from examine autofills the search bar with the examined mob's name

    * Fixes preview view

    * Fixes another bug with the views, whoops

    * Update modular_nova/modules/character_directory/code/character_directory.dm

    * Last minute optimizations

    * We don't actually use exploitables

    * Update character_directory.dm

    ---------

    Co-authored-by: Mal <[email protected]>

commit 4623d664e72ffe824fab36885034078c523d9abe
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:39:34 2024 -0400

    Automatic changelog for PR #3111 [ci skip]

commit 43afddba74ab35590e7fd4b32056686351f0f04a
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:21:14 2024 -0400

    Automatic changelog for PR #3116 [ci skip]

commit 3a9ca3f0bbbc77d6066eee2793662ae39cea536b
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:58 2024 -0400

    [MIRROR] Genetics Rebalance: Negative mutations add stability, standarized instability cost for mutations [MDB IGNORE] (#3111)

    * Genetics Rebalance: Negative mutations add stability, standarized instability cost for mutations

    * Modular

    ---------

    Co-authored-by: carlarctg <[email protected]>
    Co-authored-by: Mal <[email protected]>

commit d6a0ee8acef121ff6be9f7d825da2317d3b9a3f9
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:48 2024 -0400

    Automatic changelog for PR #3114 [ci skip]

commit 868b53a999a5db49ba151a61b505854c00b29851
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:44 2024 -0400

    [MIRROR] the omnitool upgrade for medical cyborgs makes their syringes faster too [MDB IGNORE] (#3116)

    * the omnitool upgrade for medical cyborgs makes their syringes faster too (#83792)

    ## About The Pull Request

    gives medborgs upgraded with the omnitool upgrade TRAIT_FASTMED which
    makes use of syringes quicker

    ## Why It's Good For The Game

    encourages medical cyborgs to use a variety of chemicals with different
    effects they've crafted themselves through the beaker apparatus instead
    of just relying on their infinite hypospray for everything

    ## Changelog
    🆑
    balance: the advanced omnitool upgrade now hastens the mediborg's syringe
    too
    /🆑

    * the omnitool upgrade for medical cyborgs makes their syringes faster too

    ---------

    Co-authored-by: TheRyeGuyWhoWillNowDie <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit dd95a8dab4b9f5e82b01f71ff6374515a01c8de0
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:39 2024 -0400

    Automatic changelog for PR #3113 [ci skip]

commit b197582ab25d1ee1b3477c680498f6ce94cfefe2
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:35 2024 -0400

    [MIRROR] Airlock fireman carry fix [MDB IGNORE] (#3115)

    * Airlock fireman carry fix (#83952)

    <!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
    not be viewable. -->
    <!-- You can view Contributing.MD for a detailed description of the pull
    request process. -->

    ## About The Pull Request

    You know how airlocks still look closed sometimes when you walk into
    them while carrying someone else? Yeah, that shouldn't happen anymore. I
    tried to use flick animations like someone in the issue report
    suggested, but it left some lights floating in the air while the airlock
    opened so it didn't really work. Fixes #56420

    <!-- Describe The Pull Request. Please be sure every change is
    documented or this can delay review and even discourage maintainers from
    merging your PR! -->

    ## Why It's Good For The Game

    Bug fix good.

    <!-- Argue for the merits of your changes and how they benefit the game,
    especially if they are controversial and/or far reaching. If you can't
    actually explain WHY what you are doing will improve the game, then it
    probably isn't good for the game in the first place. -->

    ## Changelog

    <!-- If your PR modifies aspects of the game that can be concretely
    observed by players or admins you should add a changelog. If your change
    does NOT meet this description, remove this section. Be sure to properly
    mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
    and it's effects on PRs in the tgstation guides for contributors. Please
    note that maintainers freely reserve the right to remove and add tags
    should they deem it appropriate. You can attempt to finagle the system
    all you want, but it's best to shoot for clear communication right off
    the bat. -->

    🆑
    fix: Airlocks should no longer appear closed sometimes when fireman
    carrying someone into them.
    /🆑

    <!-- Both 🆑's are required for the changelog to work! You can put
    your name to the right of the first 🆑 if you want to overwrite your
    GitHub username as author ingame. -->
    <!-- You can use multiple of the same prefix (they're only used for the
    icon ingame) and delete the unneeded ones. Despite some of the tags,
    changelogs should generally represent how a player might be affected by
    the changes rather than a summary of the PR's contents. -->

    * Airlock fireman carry fix

    ---------

    Co-authored-by: GPeckman <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit d311c185ddd2064d4527c79d969cfb6654d2a01b
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:23 2024 -0400

    [MIRROR] Gorillas have big fingers [MDB IGNORE] (#3114)

    * Gorillas have big fingers (#83999)

    ## About The Pull Request

    Gives gorillas the big fingers trait

    ## Why It's Good For The Game

    because gorillas have big fingers
    this doesnt actually have a lot of effects because Gorillas already
    can't use guns for unrelated reasons, but as gorillas have hands it
    might come up some day as we expand the number of items which interact
    with this trait

    currently this stops gorillas from using stun batons, and laser pointers
    gorillas dont need to use stun batons because they can just beat you to
    death with their fists

    ## Changelog

    🆑
    balance: Gorillas have big fingers, which mostly just prevents them from
    using laser pointers and stun batons
    /🆑

    * Gorillas have big fingers

    ---------

    Co-authored-by: Jacquerel <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 5776f2fe4580293bc71587080940ea08db0e2a33
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 06:17:16 2024 -0400

    [MIRROR] [no gbp] tgui-say: fixes emotes getting their contents glorfed [MDB IGNORE] (#3113)

    * [no gbp] tgui-say: fixes emotes getting their contents glorfed (#84053)

    ## About The Pull Request
    When read by an innocent bystander, what possibly could this PR title
    mean

    TGUI Say was, for some reason that I totally don't remember, just
    sending all forced messages to say. This now will properly cut out /me
    contents if you get attacked during.

    It also fixes an issue where the channel color would get stuck if you
    were attacked as well
    ## Why It's Good For The Game
    Fixes #84018
    ## Changelog
    🆑
    fix: TGUI say will no longer spill your /me contents when you get
    attacked
    /🆑

    * [no gbp] tgui-say: fixes emotes getting their contents glorfed

    ---------

    Co-authored-by: Jeremiah <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 2a5eaea1b2d03a71b08dae7b726adddcc11182c5
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:27:51 2024 -0400

    Automatic changelog for PR #3101 [ci skip]

commit eb925a68e2e6ce12717acd214d10863109afa783
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:27:33 2024 -0400

    Automatic changelog for PR #3102 [ci skip]

commit 0996233500470228912012de394bcfce46188e61
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:17:53 2024 -0400

    Automatic changelog for PR #3104 [ci skip]

commit ec840d529452791c067a05a9b79d4bc6af18a8fe
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:15:33 2024 -0400

    [MIRROR] Transcendent Olfaction fix: Pesky closets [MDB IGNORE] (#3101)

    * Transcendent Olfaction fix: Pesky closets (#83993)

    ## About The Pull Request

    Change to using the more robust get_turf method to get locations, as all
    pinpointers currently do.

    ## Why It's Good For The Game

    The transcendent olfaction mutation is currently broken. When the target
    is inside a container, its x y z becomes zero, so it will always say the
    target is below you when comparing your z level to it, and it won't even
    point in the right direction. This PR fixes that.

    ## Changelog

    🆑
    fix: Transcendent Olfaction mutation now works properly
    /🆑

    * Transcendent Olfaction fix: Pesky closets

    ---------

    Co-authored-by: Kaostico <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 6995ca6e6fd21ec6a3ab6d1882948ef530cc47ca
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:15:26 2024 -0400

    [MIRROR] [no gbp] you may open the panel of a flatpacker [MDB IGNORE] (#3102)

    * [no gbp] you may open the panel of a flatpacker (#84037)

    ## About The Pull Request

    you may open the panel of a flatpacker with a screwdriver
    so you can upgrade it

    ## Why It's Good For The Game

    bug bad

    ## Changelog
    🆑
    fix: you may now open the panel of a flatpacker with a screwdriver
    /🆑

    * [no gbp] you may open the panel of a flatpacker

    ---------

    Co-authored-by: jimmyl <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 44794b6d68c402a30bc951432dbec991e7ea9cc4
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:15:11 2024 -0400

    Automatic changelog for PR #3106 [ci skip]

commit e694d6007b21d791b3d029c4cfa8024654f11136
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:15:06 2024 -0400

    [MIRROR] Add valve opening sound to manual valve [MDB IGNORE] (#3104)

    * Add valve opening sound to manual valve (#84049)

    ## About The Pull Request
    Adds a squeaky turning sound and hissing sound to opening valve
    ## Why It's Good For The Game

    https://github.com/tgstation/tgstation/assets/92416224/9213a1bd-9bf9-4e49-97b2-0ceb2830a4ad

    ## Changelog
    🆑
    sound: added squeaky turn and gas hissing sound to gas valve
    /🆑

    * Add valve opening sound to manual valve

    ---------

    Co-authored-by: FinancialGoose <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 43c8277762cbdecf28d98ce2ed77119d25fd6e5e
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:14:53 2024 -0400

    Automatic changelog for PR #3107 [ci skip]

commit 78c13849b1dcdf2d22b49174bd92c91b8ac0a7b1
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:14:52 2024 -0400

    [MIRROR] Fixes logging path on civilian bounties [MDB IGNORE] (#3105)

    * Fixes logging path on civilian bounties (#84040)

    ## About The Pull Request

    Oops! The Civilian Bounty logging PR I did last week was runtiming and
    NOT working properly!
    Switches the object that an attempted bounty logs for it's type.

    ## Why It's Good For The Game

    Makes the logging work properly, and pulls the type straight from the
    ID's reserved bounty type.

    ## Changelog

    Once again, no player facing changes.

    * Fixes logging path on civilian bounties

    ---------

    Co-authored-by: ArcaneMusic <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit f592808144e09babe73eaed7038e9ed92ad45b11
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:14:39 2024 -0400

    [MIRROR] Mining borgs can now get multiple copies of a single modkit again [MDB IGNORE] (#3106)

    * Mining borgs can now get multiple copies of a single modkit again (#84052)

    ## About The Pull Request

    A previous pull request cleaned borg upgrade code up a lot, and included
    a check to prevent duplicate upgrades from being installed. Usually this
    is a good thing, but there are some upgrades that are intended to allow
    duplicates. Namely, PKA modkits in mining borgs. This PR just fixes
    that, so mining borgs can have multiple modkits again. This does NOT
    allow borgs to go above the 90% complexity limit on their PKAs, as a
    separate piece of code handles that.
    ## Why It's Good For The Game

    Bugs are bad.
    ## Changelog
    🆑
    fix: Mining borgs can get multiple modkits of the same type installed
    again.
    /🆑

    * Mining borgs can now get multiple copies of a single modkit again

    ---------

    Co-authored-by: GPeckman <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit 1d10329acc987776f5819b4b0a44167af9667731
Author: NovaBot <[email protected]>
Date:   Tue Jun 18 01:14:28 2024 -0400

    [MIRROR] Moves Round Logs Website Message before the sleep in Reboot [MDB IGNORE] (#3107)

    * Moves Round Logs Website Message before the sleep in Reboot (#83914)

    ## About The Pull Request

    Closes #83823

    Move the message about "You can access round logs and statistics at this
    website" up before we actually start the reboot countdown sleep. The
    logs probably won't have posted by that point (depending on how the
    server is set up) but at least it's slightly more useful before the
    links (apparently) invalidate. Also the reboot timer is ~60 seconds on
    /tg/ servers and people are either chatting in OOC or something around
    this time, may as well get the link to save for later in that "cooldown"
    period.
    ## Why It's Good For The Game

    I've actually never seen this message before and I think moving it
    slightly more upwards would be of value.
    ## Changelog
    🆑
    qol: A message with a link to publicly accessible logs (if enabled by
    your server operators) should now be visible far earlier when a world is
    about to reboot.
    /🆑

    * Moves Round Logs Website Message before the sleep in Reboot

    ---------

    Co-authored-by: san7890 <[email protected]>
    Co-authored-by: NovaBot13 <[email protected]>

commit daa4feef71d2aa2b7d35611cf4e21a63e7b199c9
Author: Mal <[email protected]>
Date:   Sat May 11 17:59:32 2024 -0400

    .

commit e4fa4212f47281980e2d9f7340bf8de406268cc1
Merge: a7fe99740849 069c913955e0
Author: Mal <[email protected]>
Date:   Sat May 11 17:59:14 2024 -0400

    Merge branch 'master' into upstream-merge-82847

commit a7fe997408498f6b99d8a58c05f8afe4161dbd99
Author: Mal <[email protected]>
Date:   Thu May 2 11:57:09 2024 -0400

    Ugh

commit b449eb61847b103b5bfca2eb6b4a181a0f908782
Author: san7890 <[email protected]>
Date:   Wed May 1 17:14:18 2024 -0600

    Moves "sprite accessories" (e.g. Hair, Undergarments, Mutant Bits) from `GLOB` to a datasystem

* Revert "Squashed commit of the following:"

This reverts commit a6c6cc93c133a65a4936200dacee903efd33df3b.

* Apply suggestions from code review

Missed signals, tidying up

Co-authored-by: Bloop <[email protected]>

* a whoops

* Apply suggestions from code review

more tidying up, bless our mal

Co-authored-by: Bloop <[email protected]>

---------

Co-authored-by: nikothedude <[email protected]>
Co-authored-by: nikothedude <[email protected]>
Co-authored-by: GoldenAlpharex <[email protected]>
Co-authored-by: Bloop <[email protected]>
  • Loading branch information
5 people authored and Iajret committed Jun 29, 2024
1 parent d5d4245 commit c1526a1
Show file tree
Hide file tree
Showing 21 changed files with 587 additions and 70 deletions.
4 changes: 2 additions & 2 deletions code/__DEFINES/~nova_defines/combat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@
#define HEADSMASH_BLOCK_ARMOR 20
#define SUPLEX_TIMER 3 SECONDS

// alt-clicking a human as another human while grappling them tightly makes you try for grappling-based maneuvers.
/// alt-clicking a human as another human while grappling them tightly makes you try for grappling-based maneuvers.
/mob/living/carbon/human/click_alt(mob/user)
if(!ishuman(user))
return ..()
var/mob/living/carbon/human/human_user = user
if(human_user == src || !human_user.combat_mode || !human_user.dna.species.try_grab_maneuver(user, src))
if(human_user != src && human_user.combat_mode && !human_user.dna.species.try_grab_maneuver(user, src))
return CLICK_ACTION_BLOCKING

/// State check for grab maneuver - because you can't logically suplex a man if you've stopped grappling them.
Expand Down
4 changes: 4 additions & 0 deletions code/__DEFINES/~nova_defines/item.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/// From base of /obj/item/mob_can_equip. (mob/living/M, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
#define COMSIG_ITEM_MOB_CAN_EQUIP "item_mob_can_equip"
/// Forces mob_can_equip to return FALSE.
#define COMPONENT_ITEM_CANT_EQUIP (1<<10) // high to avoid flag conflict
21 changes: 21 additions & 0 deletions code/__DEFINES/~nova_defines/vehicles.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Defines for the vehicle component

/// For use in ride_check_flags. Prevents the piggyback slowdown, causes the riding offsets to be applied.
#define RIDING_TAUR (1<<10) // high, to avoid flag conflict with tg)

// Vehicle offset defines

/// Applied when the ridee is oversized. Applied to front offsets.
#define OVERSIZED_OFFSET 18
/// Applied when the ridee is oversized. Applied to side offsets.
#define OVERSIZED_SIDE_OFFSET 11
/// Applied when the ridee is normal sized. Applies to front offsets.
#define REGULAR_OFFSET 6
/// Applied when the ridee is normal sized. Applies to side offsets.
#define REGULAR_SIDE_OFFSET 4

/// Sent when a mob attempts to ride our saddle. Should return a bitfield containing riding flags, ex. RIDER_NEEDS_ARMS (mob/living/carbon)
#define COMSIG_HUMAN_SADDLE_RIDE_ATTEMPT "human_saddle_ride_attempt"

/// If true, the saddled mob can have someone clickdragged onto them to be ridden.
#define TRAIT_SADDLED "trait_saddled"
31 changes: 20 additions & 11 deletions code/datums/components/riding/riding_mob.dm
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
// For any mob that can be ridden

//NOVA EDIT START: Human Riding Defines
#define OVERSIZED_OFFSET 18
#define OVERSIZED_SIDE_OFFSET 11
#define REGULAR_OFFSET 6
#define REGULAR_SIDE_OFFSET 4
//NOVA EDIT END
/datum/component/riding/creature
/// If TRUE, this creature's movements can be controlled by the rider while mounted (as opposed to riding cyborgs and humans, which is passive)
var/can_be_driven = TRUE
Expand Down Expand Up @@ -219,9 +213,13 @@
/datum/component/riding/creature/human/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE)
. = ..()
var/mob/living/carbon/human/human_parent = parent
human_parent.add_movespeed_modifier(/datum/movespeed_modifier/human_carry)
//human_parent.add_movespeed_modifier(/datum/movespeed_modifier/human_carry) // NOVA EDIT REMOVAL
// NOVA EDIT ADDITION START - Taur saddles
if (!(ride_check_flags & RIDING_TAUR))
human_parent.add_movespeed_modifier(/datum/movespeed_modifier/human_carry)
// NOVA EDIT ADDITION END

if(ride_check_flags & RIDER_NEEDS_ARMS) // piggyback
if(ride_check_flags & RIDER_NEEDS_ARMS || (ride_check_flags & RIDING_TAUR)) // NOVA CHANGE - ORIGINAL: if(ride_check_flags & RIDER_NEEDS_ARMS) // piggyback
human_parent.buckle_lying = 0
// the riding mob is made nondense so they don't bump into any dense atoms the carrier is pulling,
// since pulled movables are moved before buckled movables
Expand Down Expand Up @@ -304,7 +302,13 @@

/datum/component/riding/creature/human/get_offsets(pass_index)
var/mob/living/carbon/human/H = parent
//NOVA EDIT BEGIN - Oversized Overhaul
/* NOVA EDIT REMOVAL START
if(H.buckle_lying)
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(0, 6), TEXT_WEST = list(0, 6))
else
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4))
*/ // NOVA EDIT REMOVAL END
// NOVA EDIT ADDITION BEGIN - Oversized Overhaul, Taur riding
if(H.buckle_lying)
return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list(
TEXT_NORTH = list(0, OVERSIZED_OFFSET),
Expand All @@ -317,7 +321,7 @@
TEXT_EAST = list(0, REGULAR_OFFSET),
TEXT_WEST = list(0, REGULAR_OFFSET),
)
else
else if (!(ride_check_flags & RIDING_TAUR)) // NOVA EDIT CHANGE - ORIGINAL: else
return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list(
TEXT_NORTH = list(0, OVERSIZED_OFFSET),
TEXT_SOUTH = list(0, OVERSIZED_OFFSET),
Expand All @@ -329,7 +333,12 @@
TEXT_EAST = list(-REGULAR_OFFSET, REGULAR_SIDE_OFFSET),
TEXT_WEST = list(REGULAR_OFFSET, REGULAR_SIDE_OFFSET)
)
//NOVA EDIT END
if (ride_check_flags & RIDING_TAUR)
var/obj/item/organ/external/taur_body/taur_body = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)
return taur_body.get_riding_offset(oversized = HAS_TRAIT(H, TRAIT_OVERSIZED))

// NOVA EDIT ADDITION END

/datum/component/riding/creature/human/force_dismount(mob/living/dismounted_rider)
var/atom/movable/AM = parent
AM.unbuckle_mob(dismounted_rider)
Expand Down
4 changes: 2 additions & 2 deletions code/datums/storage/storage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -884,12 +884,12 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)


/// Opens the storage to the mob, showing them the contents to their UI.
/datum/storage/proc/open_storage(mob/to_show)
/datum/storage/proc/open_storage(mob/to_show, can_reach_target = parent) // NOVA EDIT CHANGE - ORIGINAL: /datum/storage/proc/open_storage(mob/to_show)
if(isobserver(to_show))
show_contents(to_show)
return FALSE

if(!to_show.CanReach(parent))
if(!to_show.CanReach(can_reach_target)) // NOVA EDIT CHANGE - ORIGINAL: if(!to_show.CanReach(parent))
parent.balloon_alert(to_show, "can't reach!")
return FALSE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ GLOBAL_LIST_INIT(nova_cloth_recipes, list(
new/datum/stack_recipe("eyepatch wrap", /obj/item/clothing/glasses/eyepatch/wrap, 2, category = CAT_CLOTHING),
new/datum/stack_recipe("eyepatch", /obj/item/clothing/glasses/eyepatch, 2, category = CAT_CLOTHING),
new/datum/stack_recipe("xenoarch bag", /obj/item/storage/bag/xenoarch, 4, category = CAT_CONTAINERS),
new/datum/stack_recipe("saddlebags", /obj/item/storage/backpack/saddlebags, 5, category = CAT_CONTAINERS),
))

/obj/item/stack/sheet/cloth/get_main_recipes()
Expand All @@ -122,6 +123,10 @@ GLOBAL_LIST_INIT(nova_leather_belt_recipes, list(
new/datum/stack_recipe("gear harness", /obj/item/clothing/under/misc/nova/gear_harness, 6, category = CAT_CLOTHING),
new/datum/stack_recipe("ammo pouch", /obj/item/storage/pouch/ammo, 4, category = CAT_CONTAINERS),
new/datum/stack_recipe("cowboy belt (thigh holster)", /obj/item/storage/belt/holster/cowboy, 3, crafting_flags = NONE, category = CAT_CONTAINERS),
new/datum/stack_recipe_list("saddles", list(
new/datum/stack_recipe("riding saddle (normal)", /obj/item/riding_saddle/leather, 5, category = CAT_CLOTHING),
new/datum/stack_recipe("riding saddle (peacekeeper)", /obj/item/riding_saddle/leather/peacekeeper, 5, category = CAT_CLOTHING),
)),
))

/obj/item/stack/sheet/leather/get_main_recipes()
Expand Down
Binary file modified modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
var/alt_taur_mode = NONE

/datum/sprite_accessory/taur/is_hidden(mob/living/carbon/human/target)
var/obj/item/organ/external/taur_body/taur_body = locate(/obj/item/organ/external/taur_body) in target.organs
var/obj/item/organ/external/taur_body/taur_body = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)
if (taur_body?.hide_self)
return TRUE

Expand Down Expand Up @@ -86,6 +86,7 @@
icon_state = "deer"
taur_mode = STYLE_TAUR_HOOF
alt_taur_mode = STYLE_TAUR_PAW
organ_type = /obj/item/organ/external/taur_body/horselike/deer

/datum/sprite_accessory/taur/drake
name = "Drake"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,46 @@
/// If true, our sprite accessory will not render.
var/hide_self

/// If true, this taur body allows a saddle to be equipped and used.
var/can_use_saddle = FALSE

/// If true, can ride saddled taurs and be ridden by other taurs with this set to TRUE.
var/can_ride_saddled_taurs = FALSE

/// When being ridden via saddle, how much the rider is offset on the x axis when facing west or east.
var/riding_offset_side_x = 12
/// When being ridden via saddle, how much the rider is offset on the y axis when facing west or east.
var/riding_offset_side_y = 2

/// When being ridden via saddle, how much the rider is offset on the x axis when facing north or south.
var/riding_offset_front_x = 0
/// When being ridden via saddle, how much the rider is offset on the y axis when facing north or south.
var/riding_offset_front_y = 5

/// Lazylist of (TEXT_DIR -> y offset) to be applied to taur-specific clothing that isn't specifically made for this sprite.
var/list/taur_specific_clothing_y_offsets

/// When considering how much to offset our rider, we multiply size scaling against this.
var/riding_offset_scaling_mult = 0.8

/obj/item/organ/external/taur_body/horselike
can_use_saddle = TRUE

/obj/item/organ/external/taur_body/horselike/synth
organ_flags = ORGAN_ROBOTIC

/obj/item/organ/external/taur_body/horselike/deer

/obj/item/organ/external/taur_body/horselike/deer/Initialize(mapload)
. = ..()

taur_specific_clothing_y_offsets = list(
TEXT_EAST = 3,
TEXT_WEST = 3,
TEXT_NORTH = 0,
TEXT_SOUTH = 0,
)

/obj/item/organ/external/taur_body/serpentine
left_leg_name = "upper serpentine body"
right_leg_name = "lower serpentine body"
Expand All @@ -51,6 +86,8 @@
left_leg_name = null
right_leg_name = null

can_ride_saddled_taurs = TRUE

/datum/bodypart_overlay/mutant/taur_body
feature_key = "taur"
layers = ALL_EXTERNAL_OVERLAYS | EXTERNAL_FRONT_UNDER_CLOTHES | EXTERNAL_FRONT_OVER
Expand Down Expand Up @@ -106,7 +143,7 @@

/obj/item/organ/external/taur_body/Remove(mob/living/carbon/organ_owner, special, moving)
if(QDELETED(owner))
return
return ..()

var/obj/item/bodypart/leg/left/left_leg = organ_owner.get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/right_leg = organ_owner.get_bodypart(BODY_ZONE_R_LEG)
Expand Down Expand Up @@ -142,3 +179,14 @@

if(old_right_leg)
QDEL_NULL(old_right_leg)

/obj/item/organ/external/taur_body/proc/get_riding_offset(oversized = FALSE)
var/size_scaling = (owner.dna.features["body_size"] / BODY_SIZE_NORMAL) - 1
var/scaling_mult = 1 + (size_scaling * riding_offset_scaling_mult)

return list(
TEXT_NORTH = list(riding_offset_front_x, round((riding_offset_front_y + taur_specific_clothing_y_offsets?[TEXT_NORTH]) * scaling_mult, 1)),
TEXT_SOUTH = list(riding_offset_front_x, round((riding_offset_front_y + taur_specific_clothing_y_offsets?[TEXT_SOUTH]) * scaling_mult, 1)),
TEXT_EAST = list(round(-riding_offset_side_x * scaling_mult, 1), round((riding_offset_side_y + taur_specific_clothing_y_offsets?[TEXT_EAST]) * scaling_mult, 1)),
TEXT_WEST = list(round(riding_offset_side_x * scaling_mult, 1), round((riding_offset_side_y + taur_specific_clothing_y_offsets?[TEXT_WEST]) * scaling_mult, 1)),
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Any item with this component can have its storage accessed by alt clicking the wearer.
/datum/component/accessable_storage

/datum/component/accessable_storage/Initialize()
if (!isitem(parent))
return COMPONENT_INCOMPATIBLE

/datum/component/accessable_storage/RegisterWithParent()
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(parent_equipped))
RegisterSignal(parent, COMSIG_STORAGE_STORED_ITEM, PROC_REF(parent_stored_item))
RegisterSignal(parent, COMSIG_STORAGE_REMOVED_ITEM, PROC_REF(parent_removed_item))

/datum/component/accessable_storage/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_STORED_ITEM, COMSIG_STORAGE_REMOVED_ITEM))

/// Signal handler for COMSIG_ITEM_EQUIPPED. Handles registering signals.
/datum/component/accessable_storage/proc/parent_equipped(datum/signal_source, mob/equipper, slot)
SIGNAL_HANDLER

if (isliving(equipper) && !(equipper.get_slot_by_item(parent) & (ITEM_SLOT_HANDS|ITEM_SLOT_POCKETS)))
RegisterSignal(equipper, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(mob_unequipped_item))
RegisterSignal(equipper, COMSIG_CLICK_ALT, PROC_REF(mob_alt_clicked_on))

/// Signal handler for COMSIG_CLICK_ALT. Handles the actual opening of storage.
/datum/component/accessable_storage/proc/mob_alt_clicked_on(mob/signal_source, mob/clicker)
SIGNAL_HANDLER

var/obj/item/item_parent = parent
item_parent.atom_storage?.open_storage(clicker, signal_source)
animate_target(signal_source)

/// Signal handler for COMSIG_MOB_UNEQUIPPED_ITEM. Handles unregistering signals.
/datum/component/accessable_storage/proc/mob_unequipped_item(mob/signal_source, obj/item/item, force, atom/newloc, no_move, invdrop, silent)
SIGNAL_HANDLER

if (item == parent)
UnregisterSignal(signal_source, list(COMSIG_MOB_UNEQUIPPED_ITEM, COMSIG_CLICK_ALT))

/// Signal handler for COMSIG_STORAGE_STORED_ITEM. Handles animating our parent's wearer.
/datum/component/accessable_storage/proc/parent_stored_item(obj/item/signal_source, obj/item/inserted, mob/user, force)
SIGNAL_HANDLER

if (isliving(signal_source.loc))
animate_target(signal_source.loc)

/// Signal handler for COMSIG_STORAGE_REMOVED_ITEM. Handles animating our parent's wearer.
/datum/component/accessable_storage/proc/parent_removed_item(obj/item/signal_source, obj/item/thing, atom/remove_to_loc, silent)
SIGNAL_HANDLER

if (isliving(signal_source.loc))
animate_target(signal_source.loc)

/// Gives a spiffy animation to the target to represent opening and closing. Copy pasted from storage.dm, please change if that proc ever changes
/datum/component/accessable_storage/proc/animate_target(atom/target = parent)
var/matrix/old_matrix = target.transform
animate(target, time = 1.5, loop = 0, transform = target.transform.Scale(1.07, 0.9))
animate(time = 2, transform = old_matrix)
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/mob/living/carbon/human/mouse_buckle_handling(mob/living/buckling, mob/living/user)
. = ..()

if (.)
return // we already had something happen

return ride_saddle(buckling, user)

/// The amount of time it takes to mount a mob with a saddle on.
#define SADDLE_MOUNTING_TIME 1.5 SECONDS
/// The mult to be applied to SADDLE_MOUNTING_TIME if the user is mounting someone else onto the saddled mob.
#define SADDLE_MOUNTING_OTHER_MULT 3

/// Attempts to have buckling ride on our saddle, if we have one.
/mob/living/carbon/human/proc/ride_saddle(mob/living/buckling, mob/living/user)
if (!can_be_ridden_by(buckling, user))
return FALSE

var/delay = SADDLE_MOUNTING_TIME
var/ridee_string = ""
var/list/mobs_with_special_messages = list(src)
if (buckling != user)
ridee_string = " [buckling] onto"
mobs_with_special_messages += buckling
delay *= SADDLE_MOUNTING_OTHER_MULT

user.visible_message(span_warning("[user] starts to mount[ridee_string] [src]..."), span_notice("You start to mount[ridee_string] [src]..."), ignored_mobs = mobs_with_special_messages)
to_chat(src, span_warning("[user] starts to mount[ridee_string] you!"))
if (buckling != user)
to_chat(buckling, span_boldwarning("[user] starts to mount you onto [src]!"))

if (!do_after(user, SADDLE_MOUNTING_TIME, target = src))
user.visible_message(span_warning("[user] fails to mount[ridee_string] [src]!"), span_warning("You fail to mount[ridee_string] [src]!"), ignored_mobs = mobs_with_special_messages)
to_chat(src, span_warning("[user] fails to mount[ridee_string] you!"))
if (buckling != user)
to_chat(buckling, span_warning("[user] fails to mount you onto [src]!"))
return FALSE

if (!can_be_ridden_by(buckling, user)) // because we slept
return FALSE // no feedback. this already gives some

var/saddle_flags = SEND_SIGNAL(src, COMSIG_HUMAN_SADDLE_RIDE_ATTEMPT, buckling)
if (!saddle_flags)
saddle_flags = RIDER_NEEDS_ARMS

return buckle_mob(buckling, force = TRUE, check_loc = TRUE, buckle_mob_flags = saddle_flags)

#undef SADDLE_MOUNTING_TIME
#undef SADDLE_MOUNTING_OTHER_MULT

/**
* Determines if src can be ridden by to_buckle.
*
* Args:
* * to_buckle: The mob trying to mount us. Non-nullable.
* * user: The mob mounting to_buckle onto us, most likely to_buckle itself. Non-nullable.
* * silent = FALSE: If FALSE, we do not send feedback messages. Boolean.
* Returns:
* * FALSE if we have no saddle, if we're trying to mount ourself, or if to_buckle can't be mounted. TRUE otherwise.
*/
/mob/living/carbon/human/proc/can_be_ridden_by(mob/living/to_buckle, mob/living/user, silent = FALSE)
if (!HAS_TRAIT(src, TRAIT_SADDLED))
return FALSE // no feedback as its very very common

if (user == src) // would open the inventory screen otherwise
return FALSE // no feedback as you get your answer via the inventory screen

/// Conditions that prevent riding, with a balloon alert
var/cant_buckle_message
if (to_buckle == src)
cant_buckle_message = "can't ride self!"
else if (body_position == LYING_DOWN)
cant_buckle_message = "can't ride resting!"
else if (incapacitated())
cant_buckle_message = "can't mount incapacitated mobs!"
else if (user.incapacitated())
cant_buckle_message = "you are incapacitated!"
else if (to_buckle.incapacitated())
cant_buckle_message = "rider incapacitated!"
else if (length(buckled_mobs))
cant_buckle_message = "already being ridden!"

if (cant_buckle_message)
if (!silent)
balloon_alert(user, cant_buckle_message)
return FALSE

if (!ishuman(to_buckle))
return TRUE // no more checks need to be made

var/mob/living/carbon/human/human_target = to_buckle

var/obj/item/organ/external/taur_body/taur_body = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)
var/obj/item/organ/external/taur_body/other_taur_body = human_target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)

if (isnull(taur_body) || isnull(other_taur_body))
return TRUE

if (!other_taur_body.can_ride_saddled_taurs) // no stacking, sorry
return FALSE

return TRUE
Loading

0 comments on commit c1526a1

Please sign in to comment.