This PR replaces our current NPC AI with a [behavior tree
system](https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)).
Behavior trees are a common way of creating AI in which you place nodes
in a tree structure to define what actions an AI should take.
AI controllers defined a list of /datum/ai_planning_subtree types in
behavior_nodes. Each subtree was a self-contained unit that could call
queue_behavior() to fire off /datum/ai_behavior actions. The controller
iterated subtrees in order, each one deciding independently whether to
queue something and deciding whether the next subtree would run.
This has a few issues:
1. There's no real structure; you are just defining a list of things to
try in order.
2. There was a loooot of subtrees that were basically the same as
another but with some slight modification
3. It was hard to understand.
Controllers now define a single json file describing a tree of nodes.
The tree is composed of structural composites:
Sequence - do A, then B, then C (and so on)
Selector - try A, if it fails try B, then C (and so on)
Parallel - run A and B simultaneously, with configurable failure/success
policies and or looping behavior
Subplan - loop a child continiously
Along that we also have "Decorators". These are nodes that basically
check a condition (E.g.; do we have a combat target). These decorators
can be used to gate behavior and are re-useable across behavior trees.
They also have a concept known as "Observers". Which lets them cancel
lower priority behavior in case their condition changes (Which we check
whenever a signal fires that fits that specific decorator). This makes
the AI much more responsive to change in environment.
For behaviors, we still use the ai_behavior datums. These are the actual
behaviors such as "Move to X", "Attack X". The only major change is that
these can no longer sleep() since they now run in the ai_controller.
Lastly, we now also have subtrees, except now they are essentially
pieces of behavior tree that can be re-used, or even overriden at
runtime or as a variable. Allowing for making modular AI made out of
several smaller trees.
You can set variables on these nodes directly via the extension (see
below), which should reduce the need to make subtypes of behaviors by a
lot. All of these vars are saved on the JSON and will be applied at
runtime.
If you are using subtrees, you can also assign "bindings" to these
variables, which will allow instances of the subtree to override those
variables.
Since a tree structure with variables becomes hard to parse in a JSON,
I've made a VSCode extension to edit these JSONs:
https://marketplace.visualstudio.com/items?itemName=BehaviorTreeG.behaviortreeghttps://github.com/CabinetOnFire/BehaviorTreeG
<img width="1795" height="1268" alt="image"
src="https://github.com/user-attachments/assets/56aa2f0b-3cf9-449f-bca4-8281fca82db6"
/>
This extension allows you to edit the behavior tree JSONs, and browse
through all the behaviors/decorators/subtrees we have
If you'd like more info on how to build these AI check out the
learn_ai.md. I will also make a tutorial to go over more depth on what
the system offers because I kind of suck at doing technical write-ups.
Targetting has been changed to. I've made a new acquire_targets behavior
that takes a target_source (what am I targetting) and
targetting_strategy (what does the candidate need to fulfill to be
considered a target). This allows us to make composites targetting
combinations to reduce the amount of specific find_and_set esque
behaviors we had before. Not everything is ported to this system but
that would be a longer term goal.
I've added a new build_bt script that converts all the behavior tree
JSONs into compiled versions. Why is this needed? Because I wanted to
keep using defines in behavior trees, so we need a way to convert this
into literal values before we send it to DM. This script runs on compile
and should also run in CI (If I didn't fuck that up!). This saves to a
new build/ folder.
I've ported every single AI in the game to this system (except raptors,
Kobsa is working on those so should be in soon!), so I do expect some
bugs to come out of this. But I also fixed some issues that have
probably been in the game for a long time such as:
- Fixed penguins being unable to fish
- Fixed bileworms not being able to devour people
- Fixes goldgrubs not grubbing gold (they could not mine!)
- Lizards actually eat food they find
Either way, I'd reccomend a long TM on this.
1. (Hopefully) a better development experience for making AI
2. Less copy-paste for behaviors, we should be able to re-use more
pieces to make behavior
3. Behavior trees is a more common pattern in making AI, so it should be
easier to find resources to find out how to do things.
🆑 CabinetOnFire, Iamgoofball, SmartKar, Ben10omintrix
refactor: Replaces our AI system with behavior trees, porting all
datum/ai to it
/🆑
I will add this PR with more details down the line. I think I got the
big picture but its a big PR, so sorry if I missed something important.
---------
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
## About The Pull Request
TRAIT_NODROWN is basically the same thing, so there's no reason to keep
a weird snowflake check from skyrat.
closes#4623
## Why It's Good For The Game
Less bloated code, and fixes an issue
## Proof Of Testing
I ran around with my akula and it all worked, didn't drown in deep
tiles, and I didn't drown in turf liquids either
## Changelog
🆑
fix: Akulas and other waterbreathers no longer drown in deep water
refactor: TRAIT_NODROWN now fully replaces TRAIT_WATER_BREATHING in the
backend for better consistency for when TG changes stuff.
/🆑
Co-authored-by: Maia <maia@punches.cz>
## About The Pull Request
Attempts to balance aggressive healing by slightly cutting back on its
incredible constant healing (which is still doable because I don't have
the heart to kill virology uses) and removes immunosilence because we
already have a chem that does that. Sepsisillin pills are mapped into
virology to take its place.
## Why It's Good For The Game
With immunodeficiency, an aggressive healing virus with high severity
becomes incredibly powerful. The combination of chills and fever to buff
severity while they cancel each other out along with a second symptom
like nocturnal regen (because you have the stats for it) makes
aggressive healing too powerful in the right situation but too weak for
everyone else.
Aggressive healing was given high stats under the assumption that they
were necessary to resist natural recovery in hosts that aren't
immunodeficient. That was probably a mistake since it also makes it a
buffer symptom stronger than any other, so its stats are heavily tuned
down.
Immunosilence was removed (because it's just sepsisillin) and
sepsisillin pills were mapped into virology in order to let people
without immunodeficiency be able to better benefit from aggressive
healing. Immunosilence was rather ineffective at its job because it
still let viruses regress to their first stage, which disables your
healing. Sepsisillin can also be used for testing viruses on monkeys.
Pills were added to virology because sepsisillin is a pain to make and
you can also use it to test on monkeys. The whole bottle should last one
person 23 minutes and 20 seconds.
Also I removed the no_self_cure trait that is now unused (it was given
by immunosilence) and changed the description of the aggressive healing
severity threshold to clarify that it starts scaling with any amount of
positive severity, not just after the first point.
## Changelog
🆑
del: Removed ImmunoSilence and its trait
balance: Aggressive healing has much lower stats
fix: fixed a few things
map: Added sepsisillin pills to virology
spellcheck: Clarified the description of aggressive healing
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
This PR adds a list of 100 1920s English/Welsh names for Maids in the
Mirror. The names have been sourced from and attributed to the United
Kingdom's Office for National Statistics. Admittedly I haven't worked
with licenses much, so please correct me if I've gotten the attribution
wrong. Example names are as follows:
"Mirror Maid Mildred"
"Mirror Maid Gertrude"
"Mirror Maid Gwendoline"
I've attempted to code this such that names only get reused after all
are randomly gone through.
## Why It's Good For The Game
It is currently difficult to distinguish between several Maids in the
Mirror, and this PR attempts to remedy that in a thematically
appropriate way.
Additionally, this PR may address issue #96587. (While this doesn't
provide mob numbers specifically, it does make their names distinct.)
## Changelog
🆑
add: Maids in the Mirror now get random 1920s English/Welsh names.
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
This PR adds three more ethereal colors (Lavender Purple (the existing
purple is pink wtf), Dark Purple, and Burnt Charcoal) as well as
allowing ethereals to choose feminine torsos. Please view the pictures
under Proof Of Testing! (-:
## Why It's Good For The Game
Ethereals are already allowed to choose gendered pronouns and garments
(underwear), and Bubber lore removes the importance of Ethereals being
agender that was brought about upstream. The Bubber lore document refers
to their deity as Him. They have genders despite reproducing asexually.
It's beautiful.
Everyone deserves the chance to make cute ethereal chicks. Or so says I,
the person who quite likes cute ethereal chicks.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
Previews work in the editor, I still point them to the male (old) torso
sprites.
<img width="864" height="280" alt="femalepreviews"
src="https://github.com/user-attachments/assets/b85eef73-6bcb-42f2-a8e9-e5242a251722"
/>
<img width="712" height="272" alt="colorpreviews"
src="https://github.com/user-attachments/assets/09185f5f-24d0-4dcd-8cb7-6003cc6a132a"
/>
</details>
## Changelog
🆑
add: Added feminine torso option for Ethereals
add: Added three new ethereal colors (Lavender Purple, Dark Purple, and
Burnt Charcoal)
/🆑
## About The Pull Request
Allows people to detach a cleaner and vacuum (uses the trash bag) from
janitor borgs. This option uses zero water management and doesn't create
slip tiles.
The module can be locked with alt click.
<img width="342" height="681" alt="image"
src="https://github.com/user-attachments/assets/0fe53f8b-d850-4354-aa70-382ca40dcd37"
/>
<img width="590" height="581" alt="image"
src="https://github.com/user-attachments/assets/70fea653-ad20-479a-8986-fed0e15af4b1"
/>
https://github.com/user-attachments/assets/ff81a214-1bfb-4a33-a660-ccb563e310af
Sounds are from soundsnap and properly licenced.
https://soundsnap.zendesk.com/hc/en-us/articles/115003916431-Legal
## Why It's Good For The Game
I think co-op mechanics are fun. If you manage to get a friend, this is
an option with zero water management. I feel like janitor borgs don't
really have much the way to cooperate with their base mechanics. You can
walk into a department and clean it wordlessly. This gives the option
where you can clean with your friend (or the crime scene you're trying
to scrub)
## Changelog
🆑 StrangeWeirdKitten, Toriate (sprites)
add: Janitor borgs now have a crew operated end that allows their
squishy overlords to do some cleaning themselves.
/🆑
## About The Pull Request
Allows people to detach a cleaner and vacuum (uses the trash bag) from
janitor borgs. This option uses zero water management and doesn't create
slip tiles.
The module can be locked with alt click.
<img width="342" height="681" alt="image"
src="https://github.com/user-attachments/assets/0fe53f8b-d850-4354-aa70-382ca40dcd37"
/>
<img width="590" height="581" alt="image"
src="https://github.com/user-attachments/assets/70fea653-ad20-479a-8986-fed0e15af4b1"
/>
https://github.com/user-attachments/assets/ff81a214-1bfb-4a33-a660-ccb563e310af
Sounds are from soundsnap and properly licenced.
https://soundsnap.zendesk.com/hc/en-us/articles/115003916431-Legal
## Why It's Good For The Game
I think co-op mechanics are fun. If you manage to get a friend, this is
an option with zero water management. I feel like janitor borgs don't
really have much the way to cooperate with their base mechanics. You can
walk into a department and clean it wordlessly. This gives the option
where you can clean with your friend (or the crime scene you're trying
to scrub)
## Changelog
🆑 StrangeWeirdKitten, Toriate (sprites)
add: Janitor borgs now have a crew operated end that allows their
squishy overlords to do some cleaning themselves.
/🆑
## About The Pull Request
In similar fashion to what was done with crafting recipes last year,
this year it's time for techweb designs and printed items to be audited.
This is mostly just about consistency, we've a lot of items that can be
printed by protolathes, autolathes, circuit printers and techfab etc.
However they almost all (except most stacks, mainly) have custom
materials that do not match in one way or another with the materials
used by the design, which is what this PR is for.
"But items printed from lathes etc. already get the mats used to make
them." Yes, they do, however that isn't the case for items of the same
type that were spawned in some other way (cargo shuttle, space/maints
loot, mapped, admins), this create a subtle discrepancy. It isn't a huge
deal (in spite of the size of this PR, ton of designs), but given that I
have done something similar with crafting recipes before, I may as well
give it a second arc of some sort and bring things to completion. And
fix a few possible oversights.
TL;DR consistency and stuff
## Why It's Good For The Game
Consistency, unit test checks to make it harder not to be consistent in
the future. Still has a few TODOs like:
- [x] Fixed newly printed, fully charged RCDs costing less than the RCD
cartridges required to fully charge one. EDIT: I had to tweak the newly
added RDD as well because it suffered from the same fundamental issue.
- [x] Fixed plates being made of iron and yet shattering like ceramic
ones. A new subtype for metallic ones has been made.
## Changelog
🆑
refactor: Refactored a few things with techweb designs (the ones for
autolathes, protolathes, circuit printers, mechfabs etc.) to make sure
that the materials of items that can be made from these designs more
closely match the materials used to make them.
fix: Lizard fries no longer need a plate to be made, like all other
treats that used to require plates in a distant past.
balance: Tweaked the materials cost of RCD, RDD and RCD cartridges.
image: Oven trays now have a more metallic hue.
balance: Plates printed printed from lathes won't shatter like ceramic
ones, in virtue of them being made out of iron instead.
/🆑
## About The Pull Request
Makes a number of changes to blacksmithing to make the role more
appealing, convenient, and special:
<details>
<summary>New Additions</summary>
- [ ] Added a new blacksmith recipe that requires legendary skill and
the skillchip: parts for a classical single-action revolver. High
damage, but finnicky to use; no safety mechanism, can't accept speed
loaders, and the hammer has to be cocked before each shot. Cocking the
hammer is faster if both hands are free, allowing for fanning the
hammer.
- [ ] Smiths can now make new storage options: a cowboy holster that
stores a handgun and multiple ammo boxes, a charging belt that recharges
one energy gun, a botany bag with expanded storage, and multiple types
of scabbards.
- [ ] Added a new skillchip specific to blacksmithing; without the
skillchip, your options on what you can produce via smithing are
reduced. This is to make it so that the smithing job role (or at least,
whoever has been given the skillchip from the QM's locker) is more
special. Currently smithing is just sort of something anyone can do, the
only things unique about spawning in as the blacksmith is that you have
cargo access and smithing-specific bounties.
- [ ] Replaced the water barrel with a new structure: the reagent
quenching trough. This spawns in filled with a new reagent, quenching
oil. Quenching a smithing item in the trough with any reagent will imbue
it for zero reagent use, and heat the trough's reagent.
</details>
<details>
<summary>General direction changes</summary>
- [ ] Perfect hits are no longer probability-dependant; they're based on
the player's timing. Except if the player is max level at blacksmithing,
in which case all hits are perfects.
- [ ] Right-clicking with a hammer on the anvil will allow the player to
automatically forge the item they're working on, with a slower pace
compared to manual forging. This is mostly meant to allow talking to
someone while working on forges.
- [ ] Removed multi-anvil smithing; blacksmithing lacks a dedicated
space on most maps and so must occupy a hallway or something else
instead. "Playing optimally" with multi-anvil smithing means taking up
significantly more space, in addition to looking extremely silly and
bypassing part of the loop with blacksmithing (levelling up the smithing
skills to produce equipment faster); the smithing chip will reduce the
swings needed to finish a job to compensate.
- [ ] Reworked reagent imbued equipment; removed the bonus from leaving
a weapon unimbued. This bonus can now be regained specifically by
imbuing smithing oil (smithing oil is special; imbuing it doesn't
inflict it as a reagent for effects, but makes the armor/weapon/etc.
better by numbers). Also, reagent imbued equipment no longer has a big
damage multiplier but will merely stop applying reagents after a certain
integrity threshold is passed.
- [ ] Significantly reduced the income from smithing cargo bounties. It
honestly kind of sucks that blacksmiths' value to the station is that
they print money and not for the actual quality of their items.
- [ ] Blacksmiths now have weapon access by default. It's honestly kind
of weird that the guy whose whole schtick is making weapons, didn't have
weapon access to start.
- [ ] Moved the crusader belt from the general crafting menu to the
smithing crafting menu; it now requires lv7 smithing and the smithing
chip. This change is because it's highly contingent on blacksmithing
equipment for its main storage so it seems most sensible for a smith to
work it.
- [ ] The leather apron that blacksmiths roundstart with now has
dedicated storage for various smithing and glassblowing tools.
</details>
<details>
<summary>Interactivity changes</summary>
- [ ] Trying to pick up a heated blacksmith item will now burn your
hand.
- [ ] Various quenched smithing items now have associated force values
for dealing damage, but will also (usually) cut the user's hand for
doing so.
- [ ] You can now use water tiles or certain reagent containers (needs
at least 300 units) to quench smithing equipment.
- [ ] The forge now heats up it's surroundings and burns carbon dioxide
while doing so. The wall-mounted heater now auto charges it's cell to
compensate for this.
- [ ] You can now weapon-bash your blacksmithing shields, similar to how
you can slap your baton against your riot shields to intimidate.
</details>
<details>
<summary>Convenience and misc.</summary>
- [ ] Changed the Rapier sprites to match the other smithing weapon
sprites.
- [ ] Added more tutorial tooltips when inspecting blacksmith equipment.
- [ ] The blacksmithing noises are quieter, thank god.
- [ ] Using tongs on a stack now pulls only one item from the stack,
instead of pulling all items in the stack. You never actually want to
have more than one sheet in the tongs so there's no reason to include it
really.
- [ ] Completed blacksmith items can now be picked up with tongs and
placed into the crafting bench with them. This is meant to reduce the
tool-juggling for moving the item from the anvil to the basin, then
moving the item from the basin to the bench.
- [ ] The blacksmith ID trim now has an actual icon
- [ ] Commented out the cortical borer cage recipe. We don't really need
this since we don't run cortical borers.
- [ ] Halved the number of necessary chains and plates for all recipes,
but doubled the time needed to hammer them; this is to reduce how much
item juggling is needed.
- [ ] Cargo guards and cargo secoffs now have blacksmithing access.
- [ ] Ensure that Ashwalkers, Primal Podpeople, and feral nekos have all
the same mechanics as a skillchipped crewie, except cannot make the
revolver
</details>
<details>
<summary>Code refactoring</summary>
- [ ] The reagent clothing and reagent weapon components now come from a
general reagent imbued parent component.
- [ ] Refactored how anvil smithing works; it now relies on an item
component that handles item heat, hammer strikes, and quenching, instead
of all the code being handled within the anvil itself.
- [ ] Removed the skyrat_obj_flags variable that only functioned for the
anvil_repair flag and nothing else. We have different ways to check for
the stuff it relied on so it's not really needed.
- [ ] Removed the in_use code from various forging objects. It's a
really cumbersome system and annoying to manage all the time. Doafters
with interaction_key stand as a replacement.
</details>
Overall, in the hands of blacksmiths, smithing-chipped characters, and
the tribal factions, this should feel like a general buff. For everyone
else, this should feel like a nerf, and they should go to the blacksmith
or get skillchipped so they can make smithing stuff. It should also feel
less 'shallow' and a bit more interactive with the rest of the game.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
<img width="180" height="108" alt="image"
src="https://github.com/user-attachments/assets/fff5bf67-2f6b-42e6-b8a6-920b5ef8bf26"
/>
<img width="399" height="52" alt="image"
src="https://github.com/user-attachments/assets/f7a1f395-d060-49ad-848f-52d0e4303177"
/>
https://youtu.be/hcPZXzCOSIUhttps://youtu.be/V7GeLetcRtkhttps://youtu.be/YEyW9pKidTU
</details>
## Changelog
🆑
add: Way, way too many blacksmith job features & smithing system changes
to list. But here's the highlights:
balance: Forged blacksmith weapons can now be used nonlethally via
striking with pommels, spear shafts, etc. which knocks down victims and
stamina damages them like a weaker baton.
qol: Blacksmith tongs now only pull one item at a time, if used on a
stackable item.
qol: Blacksmiths can now auto-smith at an anvil by right clicking with a
hammer.
qol: Blacksmithing tools now have more tooltips to tutorialize their
usage.
qol: Blacksmithing crafting bench can now store item stacks, forging
plates, and forging chains. Right-click to view what's in it.
balance: Removed multi-anvil smithing. Individual smithing pieces can
now be made faster with the smithing chip and other means to compensate.
add: Blacksmiths can now build a single action revolver if they are
fully levelled.
add: Blacksmiths can build a variety of new equipment at the crafting
bench -- gun-charging holsters, knife belts, multiple types of
scabbards, and even a new expanded-storage botany bag.
add: Replaced the water barrel for smithing with a barrel of smithing
oil; smithing oil is now used to grant the bonuses that was previously
given by leaving the item unimbued. The new barrel can have its contents
changed for reagent imbuing.
add: A new reagent "smithing oil" which gives innate bonuses to any
blacksmith equipment imbued using it.
balance: Material types now affect the quality of resulting items and
how quickly they can be forged.
balance: The reagent smithing hammer now has increased toolspeed if
forged well.
balance: Reagent imbuing's durability penalty has been altered; it
reduces durability for each time an imbue effect procs, and then stops
functioning for such when below a certain durability percentage.
/🆑
---------
Co-authored-by: Mathilde <146444134+ibexgoetia@users.noreply.github.com>
Co-authored-by: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
## About The Pull Request
### Notable changes
Before: When taking suffocation damage, 3 oxyloss damage is dealt, or
0.66 damage if below 0 health (soft crit threshold). If below 0 hp, and
you have `NOCRITDAMAGE`, gets nullified.
After: When taking suffocation damage, 3 oxyloss damage is dealt,
reduced if you had a partially successful breath (i.e. 75% of a breath =
0.25x damage) or are in soft crit or hard crit (0.22x less damage). If
in crit, and you have `NOCRITDAMAGE`, gets nullified.
Before: You skip 1 in every 4 breaths when your health is below 0 (soft
crit threshold), and skip every breath when your health is below -30
(hard crit threshold)
After: You skip 1 in every 4 breaths when in soft crit, and skip every
breath when in hard crit
Before: You don't heal from successful breaths when below 0 health (soft
crit threshold)
After: You don't heal from successful breaths when in soft or hard crit
### Other changes
- Removed `gasp` from losebreath processing, ie removed chance to gasp
twice in one tick when choking.
- Deletes `respiration_type`s
- Deletes `crit_stabilizing_reagent`
- Deletes species `breathid`, replaces it with `get_breath_type` that
checks the species' lungs
## Why It's Good For The Game
- There was a strange inconsistency where being in crit would
drastically reduce the amount of suffocation damage you were dealt, but
only if you were not breathing. If you were somehow breathing, you took
the full damage. I thought this was a little obtuse, so I wanted to
change it to be consistent: Being in crit is just a multiplier.
- Making them check for `stat` instead of `health` means they affect
people with `NO_SOFTCRIT` or `NO_HARDCRIT` nicer.
- See above.
- Really just to be cleaner, handle gasping in one place.
- I'm not sure why we have `respiration_type`. The only time they're
(practically) referred to is in reagent handling, but there are no
reagents that set it anything but `ALL`. All it does is make our oxyloss
handling made more complicated and harder to read for no purpose. So I
decided to axe it - I think anything special handing that should arise
should just have some bespoke checks instead.
- Nothing set this value to anything else. And guess what, if you
changed it, epinephrine still worked because it applies `NO_CRITDAMAGE`.
- Species de-hardcoding. Makes it easier to add new breath types.
## Changelog
🆑 Melbert
balance: Suffocation damage is slightly more consistent now: You take 3
oxyloss per suffocation tick, reduced for partially successful breaths
and or if you are in crit. Alternatively, if you are in crit and you
have epinephrine/atropine in your system, it gets nullified entirely.
code: Cleaned up lungs a bit, particularly relating to abnormal lungs
like plasmamen or fish, report any oddities with them.
del: You no longer have a chance to gasp twice in one suffocation tick.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Every standing overlay layer that wasn't actually a standing overlay
layer is now a "sub-standing layer", denoted with a decimal
Total number of standing overlay layers reduced from 39 to 23
Small refactors to mutation overlay/species handling and cult halo.
## Why It's Good For The Game
Makes it easier to work with mob overlays.
You can see at a glance which layers are applied with standing overlays
and which layers are manually handled, and more importantly you can see
how the layers sort themselves out by just looking at them. Very
convenient.
## Changelog
🆑 Melbert
code: Reorganized human layering, report any oddities with sprites, such
as mislayered equipment.
refactor: Refactored cult halos, report any oddities like them not
appearing when they should.
refactor: Refactored mutation visuals, they're now affected by height!
Report any oddities like them disappearing.
refactor: Refactored mutation species handling, report any oddities like
lizards with hulk.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Adds a new virology symptom:
Agressive Healing - The virus provides a healing effect, scaling with
the severity of the virus, always. However despite being a positive
symptom it has a severity of 1, meaning that unless something is done
about it your positive virus will eventualy be killed by your immune
system.
It also provides medium stat boosts and decreases the stelth value of
the virus.
Also adds a new chem, ImmunoSilence, which prevents viruses from being
cured naturaly while it is being metabolised. It is made from ammonia
and diphenhydramine.
Suggestions for better flavour and more balanced numbers welcome.
## Why It's Good For The Game
It is a symptom that allows for pretty interesting gameplay, as it can
both just work as a stat boost for other symptoms at the cost of having
to use immunosupressing medicine (as alternatively tour virus will die
faster, especialy if it is positive), and/or alternatively provide
strong healing at the cost of having to endure with some negative
symptoms.
The new chem is meant to synergise with this symptom but can be
obviously used for other goals.
## Changelog
🆑
add: Added a new virus symptom
add: A new chem that prevents viruses from being naturaly cured
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
## About The Pull Request
This PR makes it so that all shoes can now be alt + RClicked to shift
their layer above or below any uniform that clips.
<img width="68" height="107" alt="Screenshot 2026-06-14 164345"
src="https://github.com/user-attachments/assets/d56e38b8-57c0-4169-be2b-a054c9f3ba56"
/>
_Jackboots worn under a sec uniform._
## Why It's Good For The Game
It's an easy QOL to better immerse/convenience players.
## Changelog
🆑 Macaroni
add: Alt + Right Click now toggles shoe layers above or below uniforms.
/🆑
---------
Co-authored-by: John F. Kennedy <54908920+Adelphon@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
De-hardcodes food/crafting complexity (the stuff responsible for food
buffs) from food items and gives the var to the edible component, so
that objects crafted with pizza or meat sheets can have it as well.
Renamed TRAIT_FOOD_CHEF_MADE to TRAIT_HANDMADE now that it's also given
to the item when crafted through either the stack recipe UI or crafting
UI.
## Why It's Good For The Game
See title. In all seriousness though, it's more flexible code.
## Changelog
🆑
refactor: Refactored a couple things around food/recipe complexity (what
food buffs depend on). Technically, you can now kiss that pizza toilet,
which you crafted (right?), with the chef kiss skillchip enabled to add
"love" to its reagents.
/🆑
my watch has ended
<img width="401" height="256" alt="ffffff"
src="https://github.com/user-attachments/assets/a539203c-020b-4ad8-b034-f69ec0eafa78"
/>
## Changelog
🆑 Profakos (originally pulled from their branch, did massive chunk of
this), Ben10omintrix
refactor: mulebots have been refactored. please report any bugs
/🆑
## About The Pull Request
Santa Claus can hear prayers that contain the words "santa", "claus",
"christmas" or "xmas". Prayers containing the word "satan" have a 40%
probability to being "erroneously" relayed to Santa instead. Talk about
a terrible typo. I'm toooootally sure nobody will do it on purpose
(totally forced joke ik ik).
Santa cannot know who the person praying is if not told inside the
prayer itself, however he can tell if the person is naughty (either
antag or has the evil trait) or not, so be mindful of that. If tired or
harassed by unwanted prayers, Santa can also click an action button at
any time to silence them. The prayers will still be sent to admins, they
just won't be heard by Mr. Claus.
This PR comes with a new component and a mild refactor of prayers. For
admins, the message from the pray verb is now wrapped in boxed message
spans. This will make prayers a bit easier to notice, since the lack of
message box coupled with lack of sound (for now, unless it's the
chaplain praying) makes them easy to miss.
Also tinfoil hats prevent you from hearing prayers, Santa (redundant
with the action button, this is just a little touch).
## Why It's Good For The Game
Early Christmas PR ! Yeah, I know, headsets exist and Santa Claus is
very capable of wearing one, but he's the same guy who rides a flying
sleight, climb down chimneys (notwithstanding his corpulent body). The
prayer thing makes a bit sense if you think of the more religious roots
of the character, though our Santa Claus is a bit more secular ya know,
and this is more of an excuse to give him something extra.
Oh, yeah, if people will abuse the feature, I guess I could add an
incapacitated check for the praying mob so that Santa won't hear prayers
from people dying or restrained, or remove the tidbit that says if the
person who sent the prayer is naughty or not.
## Changelog
🆑
admin: Prayers from players are now boxed (like examine messages and
some health readouts for example), making them easier to tell apart from
the constant stream of text in your chat tabs.
add: Santa Claus can now hear prayers that mention him or Christmas. He
won't know who's praying unless told, though he can tell if they're
naughty.
/🆑
## About The Pull Request
Adds beef space ramen packets as an uncommon maintenance spawn. These
are small boxes that contain a brick of dehydrated space ramen and a
beef flavour sachet (these are all they can hold). These items can be
used on the soup range to create beef ramen.
## Why It's Good For The Game
The existing option for ramen leaves something to be desired. You just
add water and it magically heats itself. The ramen is treated as a
reagent rather than an object like other noodles.
## Changelog
🆑 cacogen
add: Adds packets of beef ramen as an uncommon maintenance spawn
/🆑
<!-- 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
Brought to you by Team Powercrèpe.(same group of people that delivered
the Heretic Overhaul)
This PR ports the TGMC Tacmaps and grants em to our NukeOps.
Code by Me, @Xander3359, @Arturlang, @Absolucy.
Mapping by @RipGrayson
Sprites by @KillerOrcaCora
Writing bits by @necromanceranne
Tacmaps are essentially dynamically generated minimaps,
<img width="1711" height="1335" alt="Tac map examples"
src="https://github.com/user-attachments/assets/f936fac0-fb7c-4b84-970d-7195b4995ca7"
/>
<img width="1274" height="714" alt="Tac-Maps Icons"
src="https://github.com/user-attachments/assets/0f04e388-af4b-4955-be7a-04650cfd746b"
/>
As you can see from the screenshots above, departments are classified by
color, hovering your cursor over an area or a team mate, will display
their name, the system does allow the user to switch between Multi-Z,
and lastly you can draw and add labels to the map, although the last
option is only available to the NukeOps Leader and OW agents.
The functionality is tied to the Syndicate implants nukies start with,
Cayenne, Syndie borgs and Mechs also have the ability to toggle the map.
Likewise, the tacmaps will display the positioning of the following in
real time!
- Nuke ops agents
- Syndie borgs and Mechs
- Cayenne
- Location of the nuclear fission device (and beer nuke)
- Location of the Nuclear Authentication Disk.
<img width="1274" height="714" alt="SkyBridge OFF"
src="https://github.com/user-attachments/assets/3915e7d7-644a-4e9a-b213-997834dde2ea"
/>
<img width="1274" height="714" alt="SkyBridge ON"
src="https://github.com/user-attachments/assets/13748290-fd16-42ba-a9c4-a6b4f7e69c79"
/>
<img width="566" height="459" alt="Holo table done"
src="https://github.com/user-attachments/assets/1a43c5b7-ee51-4794-9c09-16b4fb50e2ad"
/>
https://github.com/user-attachments/assets/caf38538-ef04-4330-992c-3137a67ea0d0
Lastly The tactiical map implant cannot be be used on the nuke ops
base,If the team wishes to interact with the map they'll have to
Interact with the "Reconnaisance Platform" (Sprite by Orcacora) in the
briefing room, which has seen some mapping changes (Brought to you by
TheLastGrayson).
<!-- 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
Originally this feature was planned for the Upcoming Contractor Rework
our team is currently working on, but given the massive size of it all,
we decided to atomize it.
But without that consideration in mind, I think it makes sense for
Nuclear operatives of all antagonists to have the means to Recon and
plot an assault plan onto the station and actually be able to know the
whereabouts of their teammates.
Obviously this feature has a lot of other potential applications, we
have wanted to have functional Maps for a very long time, if someone
wants to give it a go once the feature is merged, by all means.
<!-- 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 its 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. -->
🆑
add: Tactical Maps have been added to the game!
add: Nuclear Operatives implants now grant the ability to open a
Minimap, this map will display and show the names of various areas of
the station, and the positioning of the Nukeops team,borgs,mechs,Cayenne
and the nuke disk in real time!
add: Nukie leaders and OW agents can also draw and apply labels to the
map.
add: the "Recoinassance Platform" has been added to the Nukie Base, it
allows displaying of the Tactical maps while on the Syndicate Base Z
level.
map: The briefing room in the NukeOps base has been remapped to better
accomodate the new Holographic table.
map: Changed the front shutters on the Syndicate Infiltrator to the more
fitting Syndicate Shutters.
/🆑
<!-- 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. -->
---------
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Co-authored-by: Artur Lang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: RipGrayson <49290523+RipGrayson@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
## About The Pull Request
-Log outcomes of random recipe init
* Whether recipe failed to load, and why
* Whether recipe failed to generate, and why
* Whether recipe regenerated due to conflicts, and how many attempts it
took
-Stop saving random recipe results to the persistence file
* They aren't randomized anyway
-Split recipe loading and recipe generation into separate procs
* It was kind of a mess
* This way, you can regenerate recipe without qdel'ing it and then
reinitializing
-Generate recipe if it failed to load
* We used to qdel it instead
-Consider recipe generation to be a failure if there aren't enough valid
ingredients or catalysts
* We used to only check whether possible ingredient list is empty
* Since the possible ingredient/catalyst lists don't change from round
to round, this could probably be made into a unit test in the future
-Reorganize random recipe conflict checks to make them more streamlined
* I had to do it in order to log regeneration outcomes
-Fix bugs which won't ever matter anyway
* optimal_ph_max no longer rolls above 14
* optimal_ph_max can no longer be below optimal_ph_min + 1 (we used to
check for CHEMICAL_MIN_PH + 1, which is just 1)
## Why It's Good For The Game
Logs help spot&diagnose issues which might not come up when testing
locally, like the issue where timestamps wouldn't update which was fixed
by #95895
## Changelog
🆑
fix: random recipes can no longer have upper pH bound above 14
/🆑
---------
Co-authored-by: l0 <-->
## About The Pull Request
Moves the deep lore proc to the parent for guns.
Adds deep lore to some of the pistols.
Rewrites the deep lore for the stun baton and contractor baton.
Repaths the Liberator pistol to a more sensible path name.
Rechambers the Regal Condor to .45, because I was today years old when I
learned that the Tiger Cooperative are _[radical Christian
extremists](https://github.com/tgstation/common_core/blob/cf1edb9f770e7d3c38ca894e951ab5ac50395a47/Governments%20and%20Organisations/Corporations/The%20Syndicate/The%20Syndicate.md?plain=1#L73)_.
I just thought they were nutso about changelings, I didn't know they
also think they're God's ubermensch. Anyway, that freak who started the
cult would chamber their relic pistol in .45 and you know it.
## Why It's Good For The Game
I love dumping large amounts of text into the code base that will
rarely, if ever, be noticed by the player. It's also the means by which
I can summon forth my good friend Hatterhat to contribute to this
codebase. Like a carrot on a stick.
If I post enough, one day he'll PR flashforge mines like he promised me.
## About The Pull Request
Refactors teleporter interference into an item flag, refactors
teleporter interference checks to check your contents for items with
this flag rather than doing a hard check for a bag of holding. Currently
this flag is only used by BOH and SMOH, replicating current (intended)
behavior
Closes#96170
## About The Pull Request
A few tweaks regarding diamonds and bluespace crystals with regards to
ore vents.
With the quantity of bluespace crystals and diamonds that have been
reintroduced to the game, in an attempt to maintain their status as the
rarest tier of material to obtain for the station, both materials have
been removed from the standard pools of ores that can spawn into
boulders. What this **means** is that it can't roll as a primary
material for a boulder, providing 25-10 sheets worth of material.
**However,** diamonds and BS crystals are now available from all tapped
vents as an artifact boulder spawn. These artifact boulders will spawn
at a flat 7% chance, previously set as a random range of 0-10% randomly
per vent. Because this chance was never communicated to players, I think
it's fine at this point to split the difference, lock it in at 7%
(Considering that we're adding more things onto the artifact boulder
outcomes as is, I've elected to throw it to a slightly higher chance,
based purely on vibes). For clarity, these two artifact boulders add a
flat 1-5 sheets of their respective material to the boulder on spawn,
the same as mining a single tile of their respective ore from a wall.
Additionally, the overlays when scanning an ore vent will now show a
flashing icon to represent the rare chance that these two materials may
spawn. Text has been added to the examine for ore vents to explain this
behavior.
Boss vents may still spawn diamond and bluespace crystals, but at a
lower weighting than all other materials.
Due to diamonds and BS crystals being removed from the standard ore vent
weightings, their distributions within the ore vent mineral distribution
used on roundstart has been shifted, while otherwise keeping a similar
distribution of minerals across vents, according to the rough intent of
what minerals should show up at what rarities.
As previously stated, these two artifact material boulders add their ore
to the boulder itself, meaning that you may also want to pick out
artifact boulders in order to do limited chemical boosting for up to 50%
more materials.
## Why It's Good For The Game
Diamonds and bluespace crystals are intended to be rare, valuable, and
desirable enough to go out of your way to obtain. Ore vents ideally
should have had some sort of built-in scaling that tweaked the amount of
that specific material they produced, but I never got around to
implementing that and as a result they've been really, REALLY common for
the last while. One of the design goals of the new mining PRs that have
been released recently as to try and reintroduce some rarity and
desirability into these high tier minerals by adjusting their
availability while not completely locking them off from the rest of the
game.
This was a compromise to also still provide some utility to doing ore
vents with the reintroduction of ores being more common from
wall-mining. Wall diamonds and bluespace crystals will still exist, but
this way completing a small collection of ore vents will help to supply
the station with materials, where it's the quantity, not the quality of
vents that provides the best value, while noting you're still going to
be recieving these drops somewhat rarely unless optimizing your factory
output.
## Changelog
🆑
balance: Non-boss ore vents may no longer contain bluespace crystals and
diamonds.
balance: All ore vents now have a flat 7% chance to spawn an artifact
boulder.
balance: There are now 2 new artifact boulder types, which may contain
1-5 sheets worth of bluespace crystals or diamonds respectively. These
boulders may have their rare ore boosted via chemical boosting.
balance: ore distribution in vents have been adjusted to accommodate for
bluespace and diamonds being removed from vents accordingly.
spellcheck: Ore vents now explain the artifact boulder mechanic on
examine.
/🆑
## About The Pull Request
Whenever you take damage from an attack while metabolizing synthpax, you
become immune to specifically synthpax's pacification for a number of
seconds equal to the damage taken (max. 5 seconds). Additional instances
of damage add to the immunity timer.
## Why It's Good For The Game
Peacekeeper borgs have largely used synthpax as a way to make sure an
antagonist can't fight back as security arrests them, or, when their
laws permit, as they kill said antag themselves. This seems like a
severe abuse from the cyborgs, and/or any security that ordered the borg
to take this course of action. Synthpax should be used either to
de-escalate conflict between individuals the borg's laws require them to
protect, or to ensure that a threat cannot harm individuals they are
bound to protect until appropriate responders arrive, while leaving
minimal room to weaponize the pacification effect.
## About The Pull Request
This ports changes from
https://github.com/NovaSector/NovaSector/pull/6016 and
https://github.com/NovaSector/NovaSector/pull/6398.
- The quirk no longer automatically applies the Genetics power to the
quirk user. Prior to this PR, communication was mostly anonymized and
only _not_ so when one possessed the gene. This presented a clear
downgrade for individuals who had the genetic variant over the quirk
variant. With this PR, communication through the quirk is not anonymous,
but adding the gene on top of the quirk will allow a user to upgrade it
into being anonymous.
- Every time someone uses the quirk everyone else (in sight) will see
where their attention is sent. This does not add a visual cue besides
the warning in the chat, so it's still somewhat discrete.
- Added a new quirk, Psionic Dampener. This blocks most forms of
telepathic communication.
- Telepathy was made multiline for readability.
## Why It's Good For The Game
Currently, Telepathy as a quirk has a discrepancy where non-synths
receive the mutation Telepathy, while synths receive a different
version. The mechanical differences of these created a problem where,
depending on who was using it, this either did or did not anonymize the
identity of the caster. Additionally, these changes allow the quirk
holder who seeks the genetic variant in-round to properly receive the
benefits of such.
Other changes allow people to opt-out of receiving telepathic messages,
in order to avoid negative interactions from those who abuse it.
Multiline telepathy is a desirable feature for the sake of proof
reading.
## Proof Of Testing
<img width="654" height="279" alt="image"
src="https://github.com/user-attachments/assets/056f4d52-5365-4b5f-a422-40791c5e568d"
/>
## Changelog
🆑
add: Added a new quirk Psionic Dampener, affecting telepathy from
quirks, genetics, slimes, xenomorphs, revenants and so on.
balance: Telepathy (Quirk) no longer automatically gives the gene.
qol: The telepathic communication power granted by the quirk or the
genetic power is only anonymous if the caster has the mutation, not the
target.
qol: Telepathy (Quirk) now shows when the user uses the power and on
whom, but not the contents of the message.
qol: Telepathy is now multiline.
/🆑
## About The Pull Request
Goliaths no longer instantly stun the mobs they hit with their tentacle
for full 10 seconds, instead leashing them to the spot they were grabbed
at or dragging them towards themselves. The ranged tetris-piece attack
has been changed to a full cross which tethers the target preventing
them from moving away more than 1 tile, while the line and the ring
attacks tether the mob directly to the goliath itself and drag them in.
https://github.com/user-attachments/assets/0b566a12-17ae-4a8a-97ac-5734c89c83d4
The tentacles can be manually removed after standing for 6 seconds, or
by hitting them for 75 damage total (3 PKC swings, or 5 bayonet hits).
They also naturally retract after 10/15 (cross/line and ring) seconds
like before.
Goliaths themselves have received a massive speed boost, going from 3
second movement delay to 1.2 seconds (150% buff) and no longer can
friendly fire with their tentacles (and ancient goliaths have their
trophy drop guaranteed)
Brimdemons, lobstrocities, watchers and legions also received some
changes:
- Brimdemons no longer can wound with their beams (they were basically
guaranteed to land a nasty burn wound with the initial blast), but are
now affected by laser armor and their beam DOT (not the initial 25 burn
damage upon firing) has been increased from 5 to 7. Their blasts can now
be interrupted by hitting them from their side or from their back
- Lobstrocities have had their retreat distance decreased from 8 to 6,
making them much less likely to randomly lose aggro on the miner (their
aggro range is 9 tiles, meaning that even a single tile of movement on
miner's part will result in lobsters losing interest in them when on CD)
- Watchers now try to stick to 3-5 (previously 4-6) tiles of distance
between themselves and their target, and legions try to maintain 4-6
tiles of distance as opposed to running away completely. This should
make fighting both of them more interesting and engaging, and make
dealing with them during vents less cancerous.
Sprites for the tentacle item and mob overlay are by thgvr from
https://github.com/shiptest-ss13/Shiptest/pull/2432
## Why It's Good For The Game
Goliaths are extremely outdated in their attack design, 10 second
hardstuns are basically a guaranteed death if there are any other mobs
around and aren't very engaging to fight on their own as they are very
easy to evade with 3 second movement delays.
Change to lobstrocities should just make their AI less jank, and
watcher/legion range changes should make them less slippery when
fighting with PKC or zero range PKA, or during vent defense.
## Changelog
🆑 SmArtKar, thgvr
balance: Goliaths no longer hardstun, but instead bind and drag their
targets in with their tentacles. They are, however, much faster now.
balance: Brimdemon beams can no longer wound, but deal a bit more DOT
damage. Their beams can also be interrupted by hitting them from the
side or back in melee.
balance: Watchers and legions now try to maintain a few tiles of
distance from their targets instead of retreating.
fix: Lobstrocity AI should no longer sometimes flee out of their aggro
range when retreating.
/🆑
## About The Pull Request
There's a few of these that conflict, mostly relating to timing. This
conflicting won't actually break anything but it does muddy "what is
this doing" somewhat and it's good to be clear so here we go
## Why It's Good For The Game
Makes the MC very slightly harder to confuse yourself with
## About The Pull Request
Replaces the space vine check in solar `/process` with a turf trait
## Why It's Good For The Game
Just cleans up this random bespoke interaction for something more
reusable
## Changelog
🆑 Melbert
code: Solar arrays don't check for the pressence of space vines every
process tick
/🆑
## About The Pull Request
Adds a new chaplain sect, the sect of the Dream God
This sect gains favor from dreaming and blessing dreamers.
Their blessing only works on sleeping mobs - hitting a sleeping mob with
your bible will cause it to start dreaming, and if it's already
dreaming, grant favor. Either way, the mob is healed.
For 0 favor, you can **Banish Nightmare** - offering a Nightmare's
corpse rewards favor for banishing bad dreams. If the Nightmare has a
heart, you are rewarded with a special **Sacred Heart** which heals you
while dreaming and sleeping. You can also offer a Nightmare's heart on
its own without the body attached.
For 0 favor, you can **Deaconize Dreamers** - you can deaconize up to 3
dreamers.
For 50 favor, you can have a **Dream Portent** - This rite immediately
makes you fall asleep, and grants you a dream related to something going
on in the round. It may provide insight into something you otherwise
don't know about. If you take damage, the effect ends early.
<img width="374" height="126" alt="image"
src="https://github.com/user-attachments/assets/7c4e12fe-8456-411c-9d39-691e4ac2312d"
/>
For 100 favor, you can **Dream Projection** - this rite allows you to
pick one of your deacons, and forces you to become an imaginary friend
of that deacon. For the duration of the effect you are asleep. If you
are woken up or take damage, the effect ends. If the deacon dies, the
effect ends early.
<img width="492" height="294" alt="image"
src="https://github.com/user-attachments/assets/4e2f6810-15cd-41af-a69f-daa6ddca671a"
/>
For 200 favor, you can give you and your followers **Dream Protection**
- While sleeping and dreaming all damage taken is reduced.
For 200 favor, you can start a **Slumber Party** - All nearby mobs (who
can't block magic and some other asterisks) fall asleep and share a
dream. This form of sleep heals the mob rapidly (also heals holy people
even more).
## Why It's Good For The Game
A new sect for chaplains to sink their teeth into. This one brings a
unique niche, focused around sleeping and fortune telling.
## Changelog
🆑 Melbert
add: Adds the Sect of the Dream God, a new option for chaplains.
/🆑
## About The Pull Request
Removes Station-Time entirely
Server Time is now NST (Nanotrasen Standard Time). SS13 takes place
exactly 540 years in the future of the current day, so every second is 1
second in-game.
Round Time is now PT (Pay-Time), how Nanotrasen keeps track of how long
the current rotation of Employees has been working for.
Telecomms uses NST due to its importance of being the communication to
the blackbox.
Autopsy report, clocks, scientific reports and requisitions use both
timestamps due to them being more official documents that NT may need to
know beyond just the current round (just for flavortext).
Pretty much everything else (Det scanner, PDA, IC logs, Time-of-Death,
AI law changes, Cyborg file downloading) uses PT
PT
<img width="305" height="217" alt="image"
src="https://github.com/user-attachments/assets/cef73025-6292-4f9c-8565-197397bda2ca"
/>
<img width="168" height="59" alt="image"
src="https://github.com/user-attachments/assets/a99db568-045d-45fc-8206-0d9a7b13c7d2"
/>
<img width="308" height="122" alt="image"
src="https://github.com/user-attachments/assets/37ca6f17-8916-4af2-9c91-0f0707038ca5"
/>
https://github.com/user-attachments/assets/29445051-c98b-4af3-a657-812083aab91a
Clock (Literate)
<img width="748" height="292" alt="image"
src="https://github.com/user-attachments/assets/c824e812-91b5-4737-858d-768336e9a7c4"
/>
Clock (Illiterate)
<img width="446" height="94" alt="image"
src="https://github.com/user-attachments/assets/90d5ea0d-eaff-4ced-aa31-ffdf0b4832a5"
/>
New paperwork time working properly
<img width="311" height="190" alt="image"
src="https://github.com/user-attachments/assets/6d048926-db61-4c91-893b-ce93e1ea7775"
/>
NST
<img width="800" height="115" alt="image"
src="https://github.com/user-attachments/assets/35ffde49-13c1-4ce7-ab24-858e48b608bd"
/>
<img width="1288" height="142" alt="image"
src="https://github.com/user-attachments/assets/40c30d16-e0de-4efc-b460-9486eeb901d6"
/>
# Other changes
1. Circuit time checker will now get the value of the given input (Hour,
Minute, Second) rather than the full dedisecond time converted into
hour/minutes/seconds
<img width="270" height="67" alt="image"
src="https://github.com/user-attachments/assets/097440cc-1c45-447f-9976-18de7f9c722c"
/>
2. Turns nightshift into a round event that'll last approximately 22
minutes
3. 12-hour pref (doesn't apply to the stat panel because it's global
info) & removal of "TCT" time
<img width="569" height="440" alt="image"
src="https://github.com/user-attachments/assets/d39083b1-d248-41c0-9a1c-b2398ca203a7"
/>
4. The chocolate pudding negative moodlet is now based on the server's
IRL time.
5. Admins can now use ``class``, ``style`` and ``background`` (they were
already given perms to use ``img`` so hiding background, which was
removed to prevent image embedding, is pointless)
6. Also fixes ``year`` being off on localhost.
## Why It's Good For The Game
Server Time is approximately 1s = 12s converted, not including it
desyncing from lag (I believe?).
This makes it pretty much impossible for people to actually use this as
a unit of measurement for in-game actions.
Different things also uses different timestamps which is a bit more
confusing.
The main change here is for accessibility and, hopefully, using time as
a source of immersion. "20 minutes ago" is no longer OOC, they're just
speaking in PT. There's no timezones in space, Nanotrasen Standard Time
is the closest there is, but Pay Time is how NT considers when you get
your paychecks, so it's what is more commonly used.
It also fixes major inconsistencies between "IC time" and "Station
time", things like breakfast moodlet was the first 15mins of the round
despite the round starting like 7 hours in? Nukies with an L6 SAW firing
down the halls was shooting like 1 bullet every 3 seconds (assuming 4
bullets per second), overall there was just a disconnect between how
long time actually is in the universe.
The secondary reason for this change (though it is what pushed me to
actually get around to making this change) is the greater stat-panel
removal. This hopes to lessen the dependence on the stat panel for
station-time by making it easier to understand, and the end-goal I have
is for this information to be limited to Admins & the AI (AI will get
the IC version with the accurate year), so until that happens I would
like to improve the use of station-time by making it consistent (for
example, you should only care for PT for IC, which is also what your PDA
displays), so that when it gets removed it won't leave players timeless.
If you haven't already, and is interested in helping remove the stat
panel, every entry that needs to be removed can be found here -
https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view
Closes https://github.com/tgstation/tgstation/issues/94988
## Changelog
🆑
del: Removed Station Time, now we use NST (Nanotrasen Standard Time),
which is IRL server time +540 years, and PT (Pay Time), the amount of
time since the round has started.
del: Station nightshift is now a Station event rather than being based
on Server time.
balance: Time circuit's Unit of Measure now tells the amount of time in
hour/minute/seconds rather than giving the whole time translated to
hours/minutes/seconds.
qol: Added a 12-hour clock pref for people who prefer it.
qol: Hovering over NST timestamps on official documents will now
translate how much it is in PT/Shift Time.
admin: Admins can now use style/class/background in their papercode.
/🆑
---------
Co-authored-by: Isratosh <Isratosh@hotmail.com>
## About The Pull Request
Removes broken option from prosthetic organ quirk and add it to organs
tab
## Why It's Good For The Game
The prosthetic brain was bugged and didnt work with the prosthetic organ
option, now you can select surplus brain in organs tab
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
</details>
## Changelog
🆑
fix: prosthetic organ no longer includes option for brain, you can
choose it from organs tab
add: surplus brain now uses more mechanized sprite to match the
description
/🆑
---------
Co-authored-by: Copilot <copilot@github.com>
## About The Pull Request
this PR refactors beepskies and ED209s into basic mobs. ive also added a
few features for the ed209 because i cant keep my hands to myself:
ED bots can now wear hats! a few hats give them some new unique
dialogue. Putting a cowboy's hat on an ED will have it acting like a
town Sherrif
EDs are now rideable when emagged. theyll still be shooting people while
ridden. youll also have the ability to charge at people full throttle
running them over
ive also added a new Nukie variant, purchasable from the uplink. These
versions come fitted with an LMG and will patrol the station and shoot
all walks of life. If emagged, theyll blow up people with (weaker)
rockets (im still working on balancing this). they are rideable but i
highly suggest against it; youll be caught in the crossfire. (i
understand if ud prefer i atomize this feature)
## Why It's Good For The Game
gives some personality to EDs, as well as updating all these bots to the
cool new ai system
## Changelog
🆑
refactor: beepskies, and ed209s have been refactored. please report any
bugs
add: ed209s can now wear hats! some hats give them new dialogue
add: emagged ed209s are now rideable!
add: added evil versions of the ed209s to the syndie uplink
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>