## About The Pull Request
What it says on the tin. Cargo now has new math for market elasticity,
each parameter and what it does is explained below
**1. Refactor**
1. **k_elasticity**: This is the elasticity as before applied on all
exports except now this is a floating-point value that swings from
`0->1` instead of 10e-10 like is the current case. This in laymen terms
is the percentile of an items actual cost that is sold on cargo [0 means
you get no credits, 0.5 means you get 50% of the items cost, 1 means you
get 100% of the items cost]. Whenever an item is sold on cargo this
value decreases by an amount that is determined by the next variable
2. **k_hit_percentile(default 5%)**: This is the value by which an
export `k_elasticity` decreases whenever an export is successful for
every unit of an item sold. The real formulae by which the exports
elasticity decreases is dependent on the total amount sold and is as
follows
<pre>k_elasticity -= amount sold (1 for most cases except stacks) *
k_hit_percentile</pre>
So subsequent exports yield lesser profits cause the elasticity
decreases. Now the rate at which the elasticity recovers is as follows
3. **k_recovery_time(default 10 minutes)**: This is the time (minimum
unit should be seconds) it takes for the elasticity to rebound back to
100% after it has reached full 0 but recovery process starts immediately
if it decreases at any point. So if elasticity becomes say 50% it means
it would take 5 minutes to reach 100% again
**2. Some Balance changes**
1. Profits earned from exporting gas is linear per mole sold so the more
gas you put in the more profits you get HOWEVER the max number of
credits you can make per canister is 15000 cr
2. Selling fish yields higher prices because it's no longer subject to
the old elasticity formula
3. Selling 50 sheets of anything will decrease future sale price by 10%
and will take 8 minutes to rebound back to 100% if it reaches 0
**3. Improvements:**
- `SSProcessing` subsystem no longer processes more than 180+ export
datums from round start itself but now starts out empty. It instead
processes only those exports whose elasticity has been impacted and
later cancels it after elasticity has reached 100% so performance of
this subsystem has been drastically improved
- export datums now respect `abstract_type` meaning they won't be
created and can be used as a skeleton body for subtypes. So datums like
`datum/material` & `datum/material/market` are not created anymore but
only their subtypes are so we save processing power & memory
- Shaved of a lot of dead exports that went unused
## Changelog
🆑
balance: cargo exports now have different prices with applied elasticity
code: Improved performance of export code
qol: stock blocks can be recycled for materials & show up as stock
blocks in order console sold items
refactor: refactored cargo export code in whole. Report bugs on GitHub
/🆑
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147
full credit to @Kapu1178 for the juice
instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
## About The Pull Request
- Makes shuttle engines no longer use weakrefs, they now use normal
references
- Makes shuttle engines no longer give negative initial engine power on
being unconnected
## Why It's Good For The Game
> Makes shuttle engines no longer use weakrefs, they now use normal
references
- Weakrefs are for when we care about an object but it does not care
about us, shuttles literally have a list of engines. I think they do
kind of care about us and are going to hard-delete if the engines aren't
deleted first. So might aswell ignore the more expensive weakrefs and
use normal ones instead.
> Makes shuttle engines no longer give negative initial engine power on
being unconnected
- So imagine this:
> I wrench in the engine, cool its now connected to the shuttle
> I weld the engine, fun it now provides shuttle power
> I unweld the engine, damn it now does not provide shuttle power
> I unwrench the engine, unsyncing it. It now provides negative power
because unsyncing it made it give less power again
> I cry
> My shuttle now needs twice the engines it needed before
Not fun, so unsyncing no longer takes away engine power.
## Changelog
🆑
fix: shuttle engines no longer provide negative power to your shuttles
if you unwrench them.
/🆑
## About The Pull Request
This PR makes the following changes to code relevant to shuttle
construction.
- (Un)welding shuttle engines now only checks if the tool has 1 fuel,
which is how much is already used in the process.
- Constructed shuttle engines that were built from anchored machine
frames start in the wrenched but unwelded state.
- Fixes a runtime that occurs when expanding shuttles.
- Fixes the incorrect logic in the shuttle blueprint UI responsible for
#92986.
- Makes several changes to the wording of several functions of the
shuttle blueprint UI in the hopes of better conveying what each button
does.
## Why It's Good For The Game
Fixes#92986, as well as some other issues I may not have found in my
brief search.
## Changelog
🆑
fix: You no longer need 40 welding fuel to start welding or unwelding
shuttle engines, despite only consuming 1.
fix: Shuttle engines constructed from anchored machine frames start in
the wrenched-but-unwelded state.
fix: Expanding custom shuttles from shuttle frames is once again
possible without href exploitation.
fix: Shuttle expansion now correctly checks for other shuttle docking
ports the expanded shuttle's footprint would encroach upon.
qol: Tries to make some of the buttons in the custom shuttle UI more
indicative of what they actually do.
/🆑
## About The Pull Request
Fixes#92188
1. The Accounting console now has a new UI
<img width="757" height="486" alt="image"
src="https://github.com/user-attachments/assets/0c6ce73f-ae1c-4a54-b6ba-bcc3b3232d13"
/>
2. The Accounting console can now dish out advances on paychecks, giving
you for full paycheck early. You can give up to 3 advances. This of
course means your next paycheck is not paid out when relevant.
3. The Accounting console can now change paycheck sizes of crewmembers -
up to 1.5x and down to 0.5x.
## Why It's Good For The Game
- Gives the HoP some more duties, now being able to dish out money on
request, reward good behavior, or punish bad behavior.
## Changelog
🆑 Melbert
add: Accounting Console: New UI!
add: Accounting Console: Now can give advances to crewmembers
add: Accounting Console: Can now give pay raises or pay cuts
add: Accounting Console: Now only printable in the security lathe
add: Accounting Console: A spare board is now now found in secure tech
storage.
fix: Fix vending machines adding payments to audit log twice.
fix: Non-crewmembers are no longer shown in the accounting console
/🆑
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
## About The Pull Request
This fixes several bitfield operations that were missing parenthesis
encapsulation. I noticed this problem in:
- #92601
And decided to use regex to search for similar patterns which I came
across in:
- Move loops bypassing the `MOVELOOP_STATUS_RUNNING` status
- Elastic arms mutation bypassing `ABSTRACT` object flags for picking up
objects
- Species radiation bypassing `HEAD_HAIR` hairstyle flags for balding
- Damaged APC board status bypassing `EMAGGED` and `BROKEN` status for
screentips
- Shuttle cleanup code bypassing `MOVE_CONTENTS` for moving old turfs
- Tram crossing signals bypassing `NORTH` and `EAST` direction checks
## Why It's Good For The Game
Code behaves as intended.
## About The Pull Request
Converts as many time vars expressed in deciseconds as I could find to
use time defines.
## Why It's Good For The Game
Makes these values neater and more readable.
## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
# Conflicts:
# code/modules/clothing/head/hat.dm
# code/modules/clothing/shoes/boots.dm
# code/modules/clothing/suits/utility.dm
## About The Pull Request
Converts as many time vars expressed in deciseconds as I could find to
use time defines.
## Why It's Good For The Game
Makes these values neater and more readable.
## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
## About The Pull Request
This adds a `data` argument to the record_feedback used in the cargo
shuttle's `buy()` proc, so that when we parse the data on superset, we
have an additional field to filter by to better represent how some of
these personal orders are being compared against each other.
## Why It's Good For The Game
Namely, I've been trying to get my data together again to start writing
some design docs and get to fixing some issues again, and something's
been bothering me about how the superset data was being collected on
cargo crate purchases, so I've added an extra field to be able to better
sort between the collected data and better represent the different
methods of personal orders available via cargo, so we can make better
decisions about the collected data.
## Changelog
No player facing changes.
## About The Pull Request
This adds a `data` argument to the record_feedback used in the cargo
shuttle's `buy()` proc, so that when we parse the data on superset, we
have an additional field to filter by to better represent how some of
these personal orders are being compared against each other.
## Why It's Good For The Game
Namely, I've been trying to get my data together again to start writing
some design docs and get to fixing some issues again, and something's
been bothering me about how the superset data was being collected on
cargo crate purchases, so I've added an extra field to be able to better
sort between the collected data and better represent the different
methods of personal orders available via cargo, so we can make better
decisions about the collected data.
## Changelog
No player facing changes.
## About The Pull Request
Deletes the knockdown part of "on shuttle move while buckled", leaves
just immobilize.
## Why It's Good For The Game
I added this not long ago but it didn't really end up working as I
expected and causes issues like randomly losing your cigarette during
shuttle launch, so... eh. It can go.
## Changelog
🆑 Melbert
del: If buckled during a violent shuttle launch, you'll no longer be
knocked down + immobilized, instead just immobilized. Unbuckled effects
are unchanged.
/🆑
## About The Pull Request
Deletes the knockdown part of "on shuttle move while buckled", leaves
just immobilize.
## Why It's Good For The Game
I added this not long ago but it didn't really end up working as I
expected and causes issues like randomly losing your cigarette during
shuttle launch, so... eh. It can go.
## Changelog
🆑 Melbert
del: If buckled during a violent shuttle launch, you'll no longer be
knocked down + immobilized, instead just immobilized. Unbuckled effects
are unchanged.
/🆑
## About The Pull Request
- Fixes#82910
Cargo now adjusts the material market quantity & prices when the shuttle
is called from the order console itself instead of adjusting it after
the shuttle arrives 1 minute later. This has 2 implications
- If the market crashes 1 minute after calling the shuttle i.e when it
arrives, the ordered quantities are not affected because it retrieved
those sheets from the market at the time of calling the shuttle from the
order console
- If some orders could not be satisfied because there were not enough
materials at the time of calling the shuttle then instead of arriving
with an empty crate a detailed summary is displayed explaining which
orders could not be delivered & why, even cancelling the order if needed
**a) Order adjusted**

**b) Order adjusted & cancelled**

**c) Order fully cancelled**

## Changelog
🆑
fix: ordering materials from the GMM won't result in empty crates & will
display detailed feedback if there weren't enough sheets in the market
/🆑
## About The Pull Request
**1. Makes the machine creation process from both efficient.**
The machine frame no longer creates & deletes the machines old component
parts before moving in the new parts. It instead now passes its parts
directly to the circuit boards `apply_default_parts()` meaning the old
parts are never created and the new ones get applied directly. This also
mean it does not have to again call `RefreshParts()` as the machines
`Initialize()` proc will do that for us by default so the performance is
just faster now.
Flatpack box also benefits from this and it will need it as stated below
- Fixes#86514. As the circuit board is passed to the machine's
`Initialize()` proc during reconstruction so it sets it's
`all_products_free` from the board both during mapload & when player
constructed from either machine frame & flatpack
**2. Flatpack enhancements**
- The flatpack box now passes its stored circuit board into the machine
meaning any changes made like with a screw driver or such are preserved
in the newly created machine rather than the board getting deleted & the
machine creating the default board
- Flatpacker now accept custom component parts that replaces its stored
circuit board default parts. This implements
https://github.com/tgstation/tgstation/pull/91670#issuecomment-2977259973
meaning instead of the vendor created from the flatpacker starting out
empty it now accepts the refill canister and will package both of them
together. Then during deployment that stored canister is stored back in
the vendor meaning instead of starting out empty you get to carry over
all your previous stock
Depends on https://github.com/tgstation/tgstation/pull/91512 because of
named arg conflict. Keep this drafted till that gets merged
## Changelog
🆑
qol: flatpacker now accepts custom component parts(like vendor refill
canister) along with the circuit board so you can carry over your
previous stock during deployment rather than starting out empty
fix: flatpack boxes now passes its stored circuit board into the machine
thus preserving its properties instead of creating a default board in
the machine
fix: vending machines reconstructed on station from circuits loaded off
station(having free products) will continue to sell free products
code: machine construction via flatpacker/machine frame is faster
performance wise
/🆑
## About The Pull Request
Adds a remote which can be printed with sufficient research, or
auto-linked by mapping the remote ontop of a nav console. Once linked it
can send off or call the shuttle towards a home and away destination.
These destinations can be changed with alt+rmb.
## Why It's Good For The Game
Let people send and call their shuttle without being at the nav
computer. Really useful for antags that arrive on a shuttle, so their
shuttle can be safe in deepspace while they fuck about onstation.
(Should pirates have this?)

## Changelog
🆑 theOOZ, kittysmooch
add: Adds the shuttle remote item unlocked with shuttle engineering
research, it lets you remote control the whiteship or custom shuttles.
/🆑
## About The Pull Request
- Fixes#82910
Cargo now adjusts the material market quantity & prices when the shuttle
is called from the order console itself instead of adjusting it after
the shuttle arrives 1 minute later. This has 2 implications
- If the market crashes 1 minute after calling the shuttle i.e when it
arrives, the ordered quantities are not affected because it retrieved
those sheets from the market at the time of calling the shuttle from the
order console
- If some orders could not be satisfied because there were not enough
materials at the time of calling the shuttle then instead of arriving
with an empty crate a detailed summary is displayed explaining which
orders could not be delivered & why, even cancelling the order if needed
**a) Order adjusted**

**b) Order adjusted & cancelled**

**c) Order fully cancelled**

## Changelog
🆑
fix: ordering materials from the GMM won't result in empty crates & will
display detailed feedback if there weren't enough sheets in the market
/🆑
## About The Pull Request
**1. Makes the machine creation process from both efficient.**
The machine frame no longer creates & deletes the machines old component
parts before moving in the new parts. It instead now passes its parts
directly to the circuit boards `apply_default_parts()` meaning the old
parts are never created and the new ones get applied directly. This also
mean it does not have to again call `RefreshParts()` as the machines
`Initialize()` proc will do that for us by default so the performance is
just faster now.
Flatpack box also benefits from this and it will need it as stated below
- Fixes#86514. As the circuit board is passed to the machine's
`Initialize()` proc during reconstruction so it sets it's
`all_products_free` from the board both during mapload & when player
constructed from either machine frame & flatpack
**2. Flatpack enhancements**
- The flatpack box now passes its stored circuit board into the machine
meaning any changes made like with a screw driver or such are preserved
in the newly created machine rather than the board getting deleted & the
machine creating the default board
- Flatpacker now accept custom component parts that replaces its stored
circuit board default parts. This implements
https://github.com/tgstation/tgstation/pull/91670#issuecomment-2977259973
meaning instead of the vendor created from the flatpacker starting out
empty it now accepts the refill canister and will package both of them
together. Then during deployment that stored canister is stored back in
the vendor meaning instead of starting out empty you get to carry over
all your previous stock
Depends on https://github.com/tgstation/tgstation/pull/91512 because of
named arg conflict. Keep this drafted till that gets merged
## Changelog
🆑
qol: flatpacker now accepts custom component parts(like vendor refill
canister) along with the circuit board so you can carry over your
previous stock during deployment rather than starting out empty
fix: flatpack boxes now passes its stored circuit board into the machine
thus preserving its properties instead of creating a default board in
the machine
fix: vending machines reconstructed on station from circuits loaded off
station(having free products) will continue to sell free products
code: machine construction via flatpacker/machine frame is faster
performance wise
/🆑
## About The Pull Request
Adds a remote which can be printed with sufficient research, or
auto-linked by mapping the remote ontop of a nav console. Once linked it
can send off or call the shuttle towards a home and away destination.
These destinations can be changed with alt+rmb.
## Why It's Good For The Game
Let people send and call their shuttle without being at the nav
computer. Really useful for antags that arrive on a shuttle, so their
shuttle can be safe in deepspace while they fuck about onstation.
(Should pirates have this?)

## Changelog
🆑 theOOZ, kittysmooch
add: Adds the shuttle remote item unlocked with shuttle engineering
research, it lets you remote control the whiteship or custom shuttles.
/🆑
## About The Pull Request
1. Mail is now shipped every 2 SSeconomy ticks, rather than every
SSeconomy ticks. The amount of mail per round will not change.
2. Mail is not shipped during Red or Delta alert. Mail will still
continue to pile up for if the station returns to blue alert.
## Why It's Good For The Game
1. The time between cargo shipments is like five minutes. This means you
get mail practically every cargo shipment, if only a few pieces. I think
it's a bit spammy, so doubling time between shipments means you actually
get substantial shipments of mail and you don't have to pay attention to
mail constantly.
2. In the event of an emergency and the cargo shuttle has to fly back
and forth for emergency supplies (like guns for a blob), being blocked
because of mail is annoying. It's also reasonable from an in character
perspective that they would hold your mail until the emergency is
resolved.
## Changelog
🆑 Melbert
qol: Mail is now shipped every 10 minutes rather than every 5 minutes.
The amount of mail remains unchanged (so you get 1 crate with 6 mail
instead of 2 crates with 3 mail each).
qol: Mail is no longer shipped while the station is on red alert - mail
held will be sent if the station returns to blue alert.
/🆑
(cherry picked from commit 0675ddf6cb)
## About The Pull Request
1. Mail is now shipped every 2 SSeconomy ticks, rather than every
SSeconomy ticks. The amount of mail per round will not change.
2. Mail is not shipped during Red or Delta alert. Mail will still
continue to pile up for if the station returns to blue alert.
## Why It's Good For The Game
1. The time between cargo shipments is like five minutes. This means you
get mail practically every cargo shipment, if only a few pieces. I think
it's a bit spammy, so doubling time between shipments means you actually
get substantial shipments of mail and you don't have to pay attention to
mail constantly.
2. In the event of an emergency and the cargo shuttle has to fly back
and forth for emergency supplies (like guns for a blob), being blocked
because of mail is annoying. It's also reasonable from an in character
perspective that they would hold your mail until the emergency is
resolved.
## Changelog
🆑 Melbert
qol: Mail is now shipped every 10 minutes rather than every 5 minutes.
The amount of mail remains unchanged (so you get 1 crate with 6 mail
instead of 2 crates with 3 mail each).
qol: Mail is no longer shipped while the station is on red alert - mail
held will be sent if the station returns to blue alert.
/🆑
## About The Pull Request
Flatpacks pass an arg into ``on_construction`` which makes vendors wipe
their inventory to prevent duping by repeatedly flatpacking a vendor to
refill its inventory.
Closes#91615
## Changelog
🆑
fix: Flatpacked vendors start empty to prevent duping
/🆑
## About The Pull Request
Makes it so new arrivals automatically unbuckle from the seat when the
arrival shuttle lands on station, this also fixes some logic from #91504
that actually makes the intended "If you're buckled on a shuttle which
has "knockdown" force, you won't be paralyzed - instead, just knocked
down and immobilized for a short period (so you can still use your hands
/ act)." from that PR work
## Why It's Good For The Game
New players should be able to just waddle away from the arrival shuttle
to actually play the game instead of being stuck on their seat trying to
find their seatbelt for 30 minutes (this situation has actually happened
before).
## Changelog
🆑
qol: With Nanotrasen's brand new Auto-Seats™, late crew members will now
automatically unbuckle from their seats when the arrival shuttle arrives
at the destination!
fix: Leaving your seat too early on a shuttle with a knockdown force
will now properly immobilize and knockdown you as intended.
/🆑
## About The Pull Request
Flatpacks pass an arg into ``on_construction`` which makes vendors wipe
their inventory to prevent duping by repeatedly flatpacking a vendor to
refill its inventory.
Closes#91615
## Changelog
🆑
fix: Flatpacked vendors start empty to prevent duping
/🆑
## About The Pull Request
Makes it so new arrivals automatically unbuckle from the seat when the
arrival shuttle lands on station, this also fixes some logic from #91504
that actually makes the intended "If you're buckled on a shuttle which
has "knockdown" force, you won't be paralyzed - instead, just knocked
down and immobilized for a short period (so you can still use your hands
/ act)." from that PR work
## Why It's Good For The Game
New players should be able to just waddle away from the arrival shuttle
to actually play the game instead of being stuck on their seat trying to
find their seatbelt for 30 minutes (this situation has actually happened
before).
## Changelog
🆑
qol: With Nanotrasen's brand new Auto-Seats™, late crew members will now
automatically unbuckle from their seats when the arrival shuttle arrives
at the destination!
fix: Leaving your seat too early on a shuttle with a knockdown force
will now properly immobilize and knockdown you as intended.
/🆑
## About The Pull Request
1. Adds Handrails, currently mapper only. [Sprite ported from
Baystation](https://github.com/Baystation12/Baystation12/blob/dev/icons/obj/structures/handrail.dmi).
This is just a small fluff object designed to be put onto shuttles.
Players can click on it (or mouse drop) to buckle to it (grab it),
keeping them from being thrown around on shuttle launch.

2. Adds Shuttle chair restraints. [Sprite ported from
Aurora](https://github.com/Aurorastation/Aurora.3/blob/master/icons/obj/structure/chairs.dmi),
though altered a decent amount. They flip up with no one seated and flip
down when someone buckles, but they have no gameplay effects (ie, they
don't require a do-after, they don't block hands, etc etc)


3. Some objects now have unique feedback messages for buckling - you sit
on chairs, or lay down on beds. This message will change depending on if
the mob is restrained, so it's a bit more obvious when someone is tied
to a chair vs just sitting down.

4. If you're buckled on a shuttle which has "knockdown" force, you won't
be paralyzed - instead, just knocked down and immobilized for a short
period (so you can still use your hands / act).
## Why It's Good For The Game
1. Gives mappers some additional fluff for shuttles, especially if their
shuttle has knockdown force.
2. Adds muh immersion to shuttle rides. Just a flavor thing.
3. Adds muh immersion to sitting down at the bar. Again just a flavor
thing.
4. I did this to make handrails work, but I can find an alternate
workaround if so desired.
## Changelog
🆑 Melbert, sprites from Baystation / Aurorastation
add: Adds grabbable handrails (mapper only for now)
image: Adds a visual effect to buckling to shuttle seats
qol: Different objects have different chat messages for buckling.
qol: If you're buckled in on a violent shuttle ride, you will be knocked
down and immobilized, but not fully stunned (ie: can still use hands).
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
1. Adds Handrails, currently mapper only. [Sprite ported from
Baystation](https://github.com/Baystation12/Baystation12/blob/dev/icons/obj/structures/handrail.dmi).
This is just a small fluff object designed to be put onto shuttles.
Players can click on it (or mouse drop) to buckle to it (grab it),
keeping them from being thrown around on shuttle launch.

2. Adds Shuttle chair restraints. [Sprite ported from
Aurora](https://github.com/Aurorastation/Aurora.3/blob/master/icons/obj/structure/chairs.dmi),
though altered a decent amount. They flip up with no one seated and flip
down when someone buckles, but they have no gameplay effects (ie, they
don't require a do-after, they don't block hands, etc etc)


3. Some objects now have unique feedback messages for buckling - you sit
on chairs, or lay down on beds. This message will change depending on if
the mob is restrained, so it's a bit more obvious when someone is tied
to a chair vs just sitting down.

4. If you're buckled on a shuttle which has "knockdown" force, you won't
be paralyzed - instead, just knocked down and immobilized for a short
period (so you can still use your hands / act).
## Why It's Good For The Game
1. Gives mappers some additional fluff for shuttles, especially if their
shuttle has knockdown force.
2. Adds muh immersion to shuttle rides. Just a flavor thing.
3. Adds muh immersion to sitting down at the bar. Again just a flavor
thing.
4. I did this to make handrails work, but I can find an alternate
workaround if so desired.
## Changelog
🆑 Melbert, sprites from Baystation / Aurorastation
add: Adds grabbable handrails (mapper only for now)
image: Adds a visual effect to buckling to shuttle seats
qol: Different objects have different chat messages for buckling.
qol: If you're buckled in on a violent shuttle ride, you will be knocked
down and immobilized, but not fully stunned (ie: can still use hands).
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Removes some redundant var definitions from the custom shuttle flight
console.
Also defines the circuit var for custom shuttle flight consoles,
allowing maploaded/adminspawned instances of them to be disassembled.
## Why It's Good For The Game
Cutting down on redundant definitions is generally a good thing.
Also makes maploaded/adminspawned shuttle consoles work like the
constructed ones.
## Changelog
Redundant definition removal isn't a player-facing change.
🆑
fix: If you find a custom shuttle flight control console that was
created by an admin or loaded as part of the map, you can dismantle it
with a screwdriver.
/🆑
## About The Pull Request
Removes some redundant var definitions from the custom shuttle flight
console.
Also defines the circuit var for custom shuttle flight consoles,
allowing maploaded/adminspawned instances of them to be disassembled.
## Why It's Good For The Game
Cutting down on redundant definitions is generally a good thing.
Also makes maploaded/adminspawned shuttle consoles work like the
constructed ones.
## Changelog
Redundant definition removal isn't a player-facing change.
🆑
fix: If you find a custom shuttle flight control console that was
created by an admin or loaded as part of the map, you can dismantle it
with a screwdriver.
/🆑
## About The Pull Request
Custom shuttles introduced a weird edge case in shuttle code where the
flight control console shows the shuttle as able to be launched, despite
a lack of engines making it unable to move. This fixes that edge case by
specifically showing the shuttle as immobile in the console.
## Why It's Good For The Game
I tried to launch a custom shuttle but I couldn't figure out why it
wasn't moving. This fix at least lets players know that it won't launch
when it can't.
## Changelog
🆑
fix: Shuttle flight control computers will show you when the linked
shuttle cannot move.
/🆑
## About The Pull Request
Custom shuttles introduced a weird edge case in shuttle code where the
flight control console shows the shuttle as able to be launched, despite
a lack of engines making it unable to move. This fixes that edge case by
specifically showing the shuttle as immobile in the console.
## Why It's Good For The Game
I tried to launch a custom shuttle but I couldn't figure out why it
wasn't moving. This fix at least lets players know that it won't launch
when it can't.
## Changelog
🆑
fix: Shuttle flight control computers will show you when the linked
shuttle cannot move.
/🆑
## About The Pull Request
When a shuttle moves, usb ports now wait for the shuttle to finish
moving all of its contents to determine whether they should detach from
whatever they are connected to.
This PR also adds a new signal whose registered handlers can affect what
gets moved when part of a shuttle moves, but until a handler for that
signal actually needs to do so, that behavior only really matters in the
sense that it is now exposed to lua scripting.
## About The Pull Request
When a shuttle moves, usb ports now wait for the shuttle to finish
moving all of its contents to determine whether they should detach from
whatever they are connected to.
This PR also adds a new signal whose registered handlers can affect what
gets moved when part of a shuttle moves, but until a handler for that
signal actually needs to do so, that behavior only really matters in the
sense that it is now exposed to lua scripting.
## About The Pull Request
This PR adds four small fixes:
- Custom shuttle docking consoles no longer runtime at the world border
- Custom shuttle docking consoles are no longer blocked by where the
linked shuttle currently is
- Shuttle blueprints don't runtime and bluescreen while on whiteships
- Custom shuttles don't cause a divide-by-zero runtime when installing
engines for the first time (and are calculated correctly)
And one major QOL tweak:
- Shuttle frames are now datums which can track their own size, as well
as track which custom shuttles are adjacent to them. This allows shuttle
blueprints to display the size of the shuttle that will be built or
expanded, as well as much more performantly report issues that would
prevent shuttle construction or expansion.
## Why It's Good For The Game
I've been informed of several issues and nice-to-haves regarding custom
shuttles, and caught several other issues in the process of implementing
the requested changes.
## Changelog
🆑
fix: Shuttle blueprints don't error out when opening them while on
non-custom shuttles.
fix: Custom shuttles calculate their engine count correctly, no longer
lagging behind by one engine (un)installation.
fix: Custom shuttle docking consoles are no longer blocked by where the
linked shuttle currently is.
qol: Shuttle blueprints now show you how large a shuttle frame is, along
with any issues preventing you from building or expanding a shuttle
using said frame.
/🆑
## About The Pull Request
This PR adds four small fixes:
- Custom shuttle docking consoles no longer runtime at the world border
- Custom shuttle docking consoles are no longer blocked by where the
linked shuttle currently is
- Shuttle blueprints don't runtime and bluescreen while on whiteships
- Custom shuttles don't cause a divide-by-zero runtime when installing
engines for the first time (and are calculated correctly)
And one major QOL tweak:
- Shuttle frames are now datums which can track their own size, as well
as track which custom shuttles are adjacent to them. This allows shuttle
blueprints to display the size of the shuttle that will be built or
expanded, as well as much more performantly report issues that would
prevent shuttle construction or expansion.
## Why It's Good For The Game
I've been informed of several issues and nice-to-haves regarding custom
shuttles, and caught several other issues in the process of implementing
the requested changes.
## Changelog
🆑
fix: Shuttle blueprints don't error out when opening them while on
non-custom shuttles.
fix: Custom shuttles calculate their engine count correctly, no longer
lagging behind by one engine (un)installation.
fix: Custom shuttle docking consoles are no longer blocked by where the
linked shuttle currently is.
qol: Shuttle blueprints now show you how large a shuttle frame is, along
with any issues preventing you from building or expanding a shuttle
using said frame.
/🆑
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
Improving old code. And I want to be able to pet mobroaches while
holding them too.
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Space turfs will now assign the nearspace area to themselves whenever
they're replaced, or lattice or catwalks are placed ontop of them. This
fixes lighting missing from player-created space structures until they
create a custom area, and resolves a similar issue with shuttle
ceilings. To track this we had ceilings spawn the "shit be fucked"
marker whenever they were created outside of nearspace, which is now
gone.
Shuttles bypass this autotiler for non-space areas, because they'd
replace it anyways.
**This does not work on mapload to cut down on init times**, mappers
still have to place nearstation areas on their maps where they place
some sort of a structure in space. They do not have to do this for
shuttle landing areas now, however.
Closes#84597
## Why It's Good For The Game
Shit be fucked markers created by ceilings are a god awful solution
because we have player-controlled shuttles with custom positioning, so
every time you moved a shuttle to a bottom level of any multiz map, you
get a bunch of them on your shuttle's roof.
## Changelog
🆑
fix: Fixed "shit be fucked" errors and missing lighting on shuttle
ceilings docked to bottom z levels of multiz maps
/🆑
## About The Pull Request
Continuation of #90365
- Formatted some usages of `set_holdable()` to be more readable
- `exception_hold` list now stores its values inside `
GLOB.cached_storage_typecaches`. This means we don't have to manage a
static typecache list per storage but can share the value across all
storages making memory management slightly more efficient
- Monkey cube boxes now cannot hold gorilla cubes cause that would make
gorilla cube boxes obsolete also now gorilla cube boxes can now only
hold gorilla cubes & not general monkey cubes(which gorilla cubes is a
subtype of) cause that would make monkey cube boxes obsolete. We are
specializing each box for that specific use case
## Changelog
🆑
code: further improved storage code
fix: monkey cube boxes can no longer hold gorilla cubes & vice versa
/🆑
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.
## Changelog
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Fixes#90648
And also fixes that pipes would often make nonsensical connections
during shuttle rotations
Zero/negative volume:
Caused by set_init_directions fighting with code elsewhere for how big
pipes should be. When the shuttle moved, init_directions would get
called again, updating the pipe (but not the pipenet) volume to 140.
Later, update_pipe_icon uses that modified volume as the "old" volume
when calculating how much volume to remove from the pipenet, so
frequently removes too much.
Incorrect connections:
There's two steps when pipes go through a shuttle transition, first
shuttleRotate, then afterShuttleMove, where connections are made.
However, afterShuttleMove is called before shuttleRotate has been called
for every atom, causing connections to happen to devices that have yet
to be rotated away. Changing to use lateShuttleMove seems to fix this
issue, as it is only called once the 'rotate' step has fully completed.
## Why It's Good For The Game
i can't breathe without my air
## Changelog
🆑
fix: Shuttle atmos volumes should no longer become negative
fix: Shuttle atmos devices will no longer make illegal connections
during rotations
/🆑