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
Heretic rusted tiles do not apply any effects to things which are
jaunting or inside vents.
They also don't apply any _negative_ effects to things that are flying
(but they do apply positive ones, just because flight is a cool thing to
have earned and it would be sad to lose your bonuses because you have
wings).
I also renamed the element so that it isn't named after the rust passive
(in fact, the rust heretics with that passive don't use the element) and
simply describes what it does, and removed a subtype in favour of just
passing in some arguments.
I also added a trait which bypasses the negative effects of standing in
rust, in case an admin creates a non-heretic creature and gives it rust
healing. They shouldn't have _both_ healing _and_ gain disgust and minor
damage from starting in rust (possibly the heretical harvester was being
effected by this?)
Finally I adjusted the `rust_heretic_act` and `rust_turf` procs to
remove a footgun I saw a developer fall into recently where they didn't
realise that the generically named "rust turf" proc actually assumes a
wizard did it, now if we add anything else that wants to non-magically
rust a turf then it will work the way you expect.
As a side effect this changes the two item sources of rust that heretics
get to actually use rust resistance rather than rusting every turf, I
set them to effect all inorganic turfs as a default.
And finally I noticed that rust heretic ascension was passing
"RUST_RESISTANCE_ABSOLUTE" as a value into its proc which reads `Should
not be rustable. EVER.` in its comment, which smelled like a bug. So I
changed it to just "things which should be rustable ever".
## Why It's Good For The Game
It is the logical way you would expect these things to work;
Heretics crawling in vents or (for instance) using space crawl should
not be healed for touching rust that they aren't touching, as they are
not readily accessible to other players. The idea of the rust healing is
that it's a tradeoff for exposing yourself in a visible "territory", so
you shouldn't be able to avoid it by being in that territory but
untouchable and invisible.
Similarly, players who have gained the ability to fly would not expect
to get sick from flying over rusty flooring. They're out of range.
## Changelog
🆑
balance: Eldritch rusted tiles don't apply their effects to anyone who
is jaunted or in vents, and don't apply negative effects to people who
are flying.
balance: Heretic items which apply rust (grenades and eldritch reagent)
check the rust resistance level of the turf rather than always rusting
it.
fix: Rust Heretics ascending don't rust unrustable turfs, like space
tiles.
/🆑
## About The Pull Request
Floppy disks received a sprite upgrade, as well as unique wraps:
<img width="364" height="150" alt="image"
src="https://github.com/user-attachments/assets/0ac433e3-7432-4c06-bec2-aeae00b6852f"
/>
<img width="786" height="527" alt="image"
src="https://github.com/user-attachments/assets/0f36bd0d-0362-4431-8131-49060a2fe348"
/>
You can now stack floppy disks! They also scatter around when thrown.
The video also showcases new styling options with a selection of
stickers! You can also write something on the disk instead of selecting
an icon:
https://github.com/user-attachments/assets/ff0a8542-9d79-4108-ae46-672ca5d620a2
MOST disks now inherit the `/item/disk` type to properly stack and do...
stuff. An updatepaths script included.
## Why It's Good For The Game
Old school is cool. Stacking disks makes them feel more authentic, while
styling allows for more crearivity!
## Changelog
🆑
add: New unique wraps for floppy disks
qol: Floppy disks can now be stacked
image: New sprites and stickers for floppy disks
map: Added and ran an updatepaths script
refactor: Most disks are now under the base disk item type
/🆑
---------
Co-authored-by: The-Tyrant <tyrantofgaming@gmail.com>
## About The Pull Request
`create_from_ghost` can be called from stuff like... dynamic executing a
ruleset, so putting a sleep/user input within it causes problems
So I refactored ghost spawns a fair bit, creating a clear delineation
between where you can and can't put user input
## Changelog
🆑 Melbert
fix: Pirates will no longer randomly spawn as human
fix: Servant Golems have numbered names again
refactor: Refactored ghost spawns (like spider eggs or pirate spawners),
report any oddities
/🆑
## About The Pull Request
1. Adds `Heretical Hunt`, an easy difficulty domain that tasks you with
killing and sacrificing simulated crew members. The domain has a few
ways to conquer it, as you don't need to kill all the simulated crew
members and there's some hidden loot to make use of
It's an easy domain because
- You have quite decent armor,
- The mobs are pretty unintelligent,
- You can always fall back and heal passively on the rust tiles
- There are many ways to tackle it
Though it's not a complete pushover, the mobs can still overwhelm you if
you're not careful.
<img width="440" height="347" alt="image"
src="https://github.com/user-attachments/assets/a3f30204-0200-4197-80bb-aee083059164"
/>
2. Virtual beings are given a minor positive moodlet for killing people
instead of a negative one
## Why It's Good For The Game
1. I thought it'd be kinda fun if we had antag-themed domains which
soft-explains the gameplay loops or mechanics of certain antags, in this
case, heretics sacrificing people
2. You don't feel remorse for killing people in video games, right anon?
## Changelog
🆑 Melbert
add: Added a new easy difficulty bitrunning domain, "Heretical Hunt"
add: Digital mobs receive positive moodlets for killing people rather
than negative
fix: Madness Mask no longer affects corpses
fix: Fixed some heretic runtimes
/🆑
## About The Pull Request
Completing a combat bitrunning domain grants 0.8 score bonus per player
that escaped without being hit
## Why It's Good For The Game
I figured it be a fun challenge to try to nohit these things, especially
the megafauna ones. For a bonus.
## Changelog
🆑 Melbert
add: Nohitting a combat bitrunning domain rewards a higher score.
/🆑
## About The Pull Request
a spooky special possession pr for october appears~~
(This is just some code cleanup)
Before, some procs had the `mob_possessor` arg, and some didn't. Which
made it a nightmare to add more positional args to it down the line.
This PR just ensures that all positional args are present in all the
instances of the proc.
## Why It's Good For The Game
Makes this proc chain slightly less of a mess to deal with.
## Changelog
N/A
## About The Pull Request
This replaces the hardcoded atmos strings for these turfs with the
actual icebox atmos defines.
## Why It's Good For The Game
Hardcoding values is bad.
## About The Pull Request
Replaces the mini-UZI beach battle domain reward with a ballistic
chameleon gun.
Also added a separate possible reward for an uzi bitrunning disk.
## About The Pull Request
This swaps out the pirate spawner on the Meta Central VDOM with the
subtype specifically meant for virtual domains. That thing wasn't
actually a virtual domain spawner, it was just a regular one.
This applies the necessary restrictions/roles being applied to pirates
who spawn on that map. It will also make #86794 work on the Metastation
Central map, rather than only affect the Corsair Cove map (which used
the correct spawner type).
This also adds the Announce to Ghosts flag to Meta Central, as is
uniform for maps with ghost roles. Doing so also enables the VDOM
selector UI indicator that ghost roles can spawn on the map.
This whole thing started as an attempt to fix#86785 but I was too slow
and someone beat me too it. Darn.
## Why It's Good For The Game
Ensures #86785 will be closed properly.
## Changelog
🆑 Rhials
fix: The Meta Central Virtual Domain now uses the proper ghost role
spawner, meaning you can't eavesdrop on syndie comms using their
headset.
/🆑
## About The Pull Request
Title. Adds two new maps:
- Grasslands Hunt (peaceful)
- Meta Central (easy)
These maps add a new basic revolutionary mob and significantly upgrades
the ai of basic deer.
This fixes an issue where modular maps were not correctly spawning mobs
or adding them to the "mutable candidates" for antagonists.
There's also some balance changes to bitrunning vendor prices, which are
generally now lower. This change is unrelated to the PR as a whole so
I'm okay with removing it if there's concern
### photos
<details>
<summary>expand</summary>


</details>
### todo
- [x] Fix the revolutionary death anim
- [x] Make deer run when injured
## Why It's Good For The Game
New maps as a general positive for bitrunning
Bug fixes
Makes vendor choices for bitrunning-exclusive items generally less of a
chore to get
## Changelog
jlsnow301, MMMiracles, KikoWen0, Ben10Omintrix
🆑
add: Added two new bitrunning maps: Grasslands Hunt and Meta Central.
add: Deer are now more complex animals, granting them enhanced ability
to run amok and chew your favorite plants.
balance: Reduced the cost of most BR vendor items.
fix: Fixes an issue where modular virtual domains spawned less mobs than
intended.
fix: These modular spawns are now valid mutation targets to become an
antagonist.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request

Tin, just aims to fix this hard del by releasing the refs when the
spawners get qdeleted.
## Why It's Good For The Game
Fixes a hard del---also, there were some issues with this domain not
clearing itself properly under certain cases and this may resolve that.
## Changelog
Nothing player facing
<!-- 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
Finally dusts off this project to make a deathmatch style bitrunning
map.
Don't be too intimidated by the file diff, lots of code organization +
resized a large map.
Changes:
1. Reuses the gateway beach map as a combat zone (99% of the file diff)
(maptainers: i just added spawners and areas)
2. Alters how bitrunning handles spawning: Custom spawns are now
available, which can be anything
Misc organization:
- Splits netpod.dm into separate files.
- Fixes some wording in vdom map documentation.
- Organizes vdom variables a bit.
- Adds a permanent hololadder spawn.
How bitrunning deathmatch works:
- Temporary spawners are offered to both ghosts and bitrunners.
- Runners spawn in like usual. Ghost can use the spawner menu.
- Ghosts work to prevent avatars from collecting side objectives or try
to cause mass brain damage.
- The domain completes after a number of deaths accrue. Any faction.
Blood for the blood god, etc.
- This map can be played solo. ANY deaths.
<!-- 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
I've been toying with the idea of a deathmatch style map for some time.
I liked syndicate assault, the spawners were intentionally left there,
and the possibility of player-controlled players made the experience
more tense and challenging.
This PR leans into this idea: The virtual world is dangerous. Players
get a chance to compete on both sides here. It offers a lot of variety
to bitrunning other than "run for box". It's also very lucrative if
ghosts join in.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
add: Added a bitrunning deathmatch map: Island Brawl. Both ghosts and
runners get many more spawns than normal.
fix: Lowered the static vision time in domain load in.
/🆑
<!-- 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. -->
## About The Pull Request
Fixes#84283 by just adding actual bounties for Bitrunner, giving them
something more interesting to do than random bounties for jobs they
don't have access to. These bounties revolve around optionally turning
in the special rewards from each of the bitrunning domains (a bike horn,
the abductor plush, beach ball, etc) for a credit reward. I considered
the idea of making each one drop a specific bounty chit that you turned
in for a reward, but at that point it's just "paying you per domain" and
I'm not sure how that would balance with economy.
This is more just meant to be a framework for others to add things that
might be a little more interesting.
This also adds a special drop from the Pizzeria domain because I thought
it was funny.
## About The Pull Request
See changelog for shortlist
1. **Threat changes.** I was a bit unsatisfied with the rate of antag
spawns. These have been increased considerably. The clamped probability
has been increased from 1-10 to 5-15. The probability increases from 5
to 15 as domains are completed. Generally, in a standard round, the
chance of spawning at least one antag should be around ~50% at 7 domains
completed. Emagging a server doubles this rate.
2. **Map changes.** Starfront saloon was a cool idea on paper: A totally
modular map. However, it looked very uninspired and was so much of a
chore on the map loading system that it prompted players to admin help
how long it took, thinking it was broken. I've removed the map. I have
others I want to implement that don't look so bad.
3. **QoL changes**. Ghost observer experience is improved. Previously,
you could click netpods to view their avatar, and now you can click the
hololadder to return. I've included examine text to show this. The
server's examine text will now also give you clues that it's emagged
(ghost only). The examine text on hololadders has also been improved.
4. **Bitrunning antags.** These were designed as temporary, but they
were everything but. Spawning as one would prevent your revival, which
just isn't a good tradeoff for something that's going to get deleted in
a minute. Now, this system uses temp bodies just like CTF, so you can
return once you're dead. (exception: coming station side)
5. **Maps**: Syndicate assault is still one of my favorites, but there's
cheesy exploits like instantly breaking the display case to lock down
the ship, turning on turrets which are EXTRA lethal, etc. I've added
some pistols to the closets and removed some of these exploits.
6. **Cooldown**: Yes, no one seems to upgrade these ever, and it proved
a poor technique to encourage bitrunners to leave their rooms. I had
other plans to encourage this, not included here, so I think lowering
the cooldown time is beneficial. 3min -> 2min
> [!NOTE]
> File diff: removed a map
## Why It's Good For The Game
Closes#83787
General updates and QoL for bitrunning to keep it fresh. I was quite
disappointed with the scaling of threat, and most players haven't even
seen bitrunning antags except when I admin spawn them. These numbers
aren't hard set in my mind, and could be adjusted.
I generally want bitrunning easier to access and more "temporary" which
is in keeping with its design doc.
## Changelog
🆑
fix: Bitrunning made more illegal: Increased the rate at which antags
spawn.
fix: "Temporary" bitrunning antagonists and spawners are made actually
temporary. You will return to your original body after death, just like
CTF.
add: Added more examine text for ghosts to bitrunning equipment.
balance: Server cooldown reduced by 1 minute at base level.
add: As an observer, you can now switch views between station and
virtual domain by clicking the hololadder and netpod respectively.
del: Removed the starfront saloon BR map.
fix: Syndicate assault map: Added pistols, reduced exploits.
/🆑
## About The Pull Request
This PR adds a new virtual domain for bitrunners! The new domain
includes the belowed pizzeria from FNAF and some bears (scary and
strong).
## Why It's Good For The Game
So there hasn't been any virtual domains being added and it can get
boring playing the same domains over and over again. In my own opinion
we need more maps or some of them changing with new ones! I also thinks
its a funny idea to have such a domain and people will enjoy it.
## Changelog
🆑
add: added a new virtual domain
🆑

## About The Pull Request
This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.
Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.
## Why It's Good For The Game
The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.
## Changelog
🆑
refactor: Gondolas (including gondola pods) are now basic mobs.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Added secondary objective lockboxes to bitrunning. These pull from a
list of secondary objective loot on the domain, with a limited quantity
of items. Once there are no items left to pull, the secondary objective
disappears. If multiple secondary objective markers are placed, they
will be placed until all markers have been used, or all the items in the
loot pool are already spoken for.
To support this functionality, adds SSbitrunning, which stores all
domains as instances, instead of checking the hardcoded types as
previously. SSbitrunning manages listing domains for the quantum
console, and rolling secondary loot.
As an example of this functionality, added a side path to Glacier Grind
with a polar bear and some loot.
## Why It's Good For The Game
Secondary objectives give mappers ways to encourage players to venture
into a wider range of domains by offering non-trivial loot beyond the
fluff items given in the main caches. The absolute limit on the number
of items available ensures these items can't be farmed.
As well as supporting secondary objectives, SSbitrunning allows for
future support of features relying on mid-round modification of domains,
for instance adding custom domains.
## Changelog
🆑
add: Added secondary objectives to bitrunning!
add: Pick up encrypted curiosities and return them to the safehouse to
claim their contents.
add: Glacier Grind has been given a secondary objective, look out for
the limited edition hat.
add: Bitrunning domains can now be modified during the round by admins.
/🆑
## About The Pull Request
Adds in a new Bitrunner domain called Abductor Ship which is an
assault-type domain themed as an abductor mothership. It adds in a new
Abductor simplemob, gives them enemy AI almost identical to the
Syndicate Assault mobs and then sets them up in a new modular Domain map
fit with a custom Safehouse and multiple enemy types.
The domain is the same reward and difficulty level as the Syndicate
Assault mission and can be easily compared to it, while also being fresh
and having a cool themed map to run around in and blast aliens. I don't
know, I think it's cool...
## Why It's Good For The Game
Fun alien destruction, more Bitrunner content. Can you really go wrong
with that? It seems like bitrunning becomes dry when you've exhausted
all your domain options and have gotten used to them.
## Changelog
🆑
add: Added new modular Assault-Type domain "Abductor Ship"
add: Added new simple mob abductor agents team
/🆑
## About The Pull Request
Fixes a typo in one of the outfits used in the Pipe Dream domain.
Factory Quatermaster -> Factory Quartermaster
## Why It's Good For The Game
Quatermaster...
## Changelog
🆑 Rhials
spellcheck: Fixes a typo in the Factory Quartermaster outfit name.
/🆑
## About The Pull Request
Reopened#78997
Larger patch for bitrunning that addresses a few issues.
- Two new antagonists: cyber tac and netguardian
- Quantum server emag opportunity
- Modular mob packs: Like random spawners, but for groups
- Antag spawning fixed: vdom antags now have up to a 10% chance to spawn
based on domains loaded
- Virtual domains are no longer all fullbright by default, only the
outdoorsy ones
- Actually deletes legion map file, since it was removed in #79424
<details>
<summary>images</summary>
The netguardian prime


The glitch effect - this mob is being mutated

Cyber tac (t2 antagonist)

</details>
## Why It's Good For The Game
- Bitrunning antagonists are so incredibly rare that it's underwhelming
to play as one for the solid second they offer if you even get the role
- Bitrunners had basically no traitor route to follow, they became
assistants with black outfits
Fixes#79465
<details>
<summary>More info</summary>
Bitrunners don't have any type of traitor options. If they're made into
traitors, there's nothing bitrunner related they can do, and their
access is particularly bad so it's like they're a worse assistant. I've
coupled this with the bitrunning antagonist system, which is now
fixed.\. Bitrunners can now attempt to coax these entities to come onto
the station, however they are not given any form of allegiance for doing
so (and are quite counterable).
Previously, vdom antagonists relied on so many factors to spawn that it
basically wouldn't happen. Now, it runs on the server each time there is
a map loaded, with increasing probability as the round progresses. This
builds up the list of spawnable antagonists, of which two are new,
including an entirely new giant mech megafauna. This is the first
"megafauna-esque" basic mob in the game. Its AI is bad, it's really only
meant to be player controlled, but this does mean an admin can spawn
them. Being mech, they are very counterable with ion rifles and the
like.
Several refactors, rewrites, and overall bug fixes are included in this
PR.
Lastly, I added a framework for making bitrunner maps more random, the
modular mob spawning system, which works in conjunction with random
crate locations.
</details>
## Changelog
jlsnow301, infraredbaron
🆑
add: Bitrunning Patch 1 features a host of changes!
add: Added randomized mobs to virtual domains, which will be indicated
with a unique icon.
add: New emag interaction with the quantum server. Antags will spawn
more frequently, and they can hack themselves onto the station. You have
been warned.
add: Both living and dead players can now see which mob is going to
spawn an antagonist in the vdom.
add: Two new vdom antagonists: Cyber Tac and the NetGuardian. These
unlock at specific thresholds.
balance: You can no longer stack copies of the same ability with
bitrunning disks.
balance: Some of the disk items have been replaced with stronger
versions.
fix: You can no longer spy on crew using the advanced camera console on
syndicate assault.
fix: Fixed the spawning mechanism of virtual domain antagonists. You
should now have a chance of playing as one. This chance increases as
more domains are completed.
fix: Vdom antagonists shouldn't spawn at the end of the run any longer.
fix: The preference for vdom antagonists has been changed to factor in
the new types. Check your preferences!
fix: The quantum server will now show its balloon alerts to all
observers.
fix: Random domains should be fully random again.
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Changed how loot signals work with bitrunning entirely, which allows map
creators to attach functionality to objects without creating subtypes of
the item
As a bonus I added a fishing minigame map which uses it
## Why It's Good For The Game
It's a messy solution to need to create subtypes just for the one-off
map that needs them
## Changelog
🆑
add: Added a new fishing map to bitrunning.
add: You are no longer limited to pina coladas on the beach bar domain.
Cheers!
/🆑
## About The Pull Request
Another atomization of the content patch-
Let's not subtype everything into virtual variants
This also fixes some bugs that were present with vdom boss maps
- Made the bubblegum map larger so he wouldn't teleport out
- Legion is just far too annoying to have to fix code wise, given that
few if anyone tries it with the base virtual equipment
<details>
<summary>what do you mean too annoying?</summary>
Legion doesn't handle dying like the standard megafauna - each time it
"dies" it looks to see if there's another legion in the entire game
world. Given the real one very likely exists, this basically means it
won't drop anything. I'd have to modify legion's death proc specifically
for the virtual domain. No other megafauna has this level of weirdness
(nor splitting behavior) and coupled with the fact I think no one tries
the domain, I'm just removing it.
</details>
## Why It's Good For The Game
Cleans up megafauna subtypes that were specific for the virtual domain.
Now, we won't need to keep adding to the list if there's ever a new one
Fixes#79203Fixes#79200
## Changelog
🆑
fix: Bubblegum should no longer teleport out of the simulation when
threatened
del: Chamber of Echoes map removed as it conflicts with the actual
Legion
/🆑
## About The Pull Request
_Really? Bitrunning maps are so simple you could do them with your eyes
closed? Hmmmmm..._
This adds two new medium-difficulty virtual domains to the pool -- Crate
Chaos and Infected Domain.
These two domains take you to neglected corners of the virtual world.
These are unstable, bizarre locales that do not support the bitrunning
machine's visual display, and must be traversed using echolocation.
**_These domains have been designed around you being a psyker, and will
turn your bitrunner avatar into a psyker until they leave the domain._**
_**Crate Chaos:** Low cost, medium reward._
Sneak into an abandoned virtual domain, where they store all of the loot
crates. There's about 40-ish crates in this space, and one of them
(RANDOM) is the encrypted cache we're looking for. The crates must be
manually inspected, requiring you to drop your weapon for a few moments,
but that shouldn't be a problem. There's no hostiles, just a bunch of
crates... right?
This one has very few shenanigans or threats in it. It's meant to be an
introductory experience to interfacing with things as a psyker, and
getting the rhythm down for moving between visual pulses.
_**Infected Domain:** Medium cost, high reward._
Enter another abandoned virtual domain. This one was sealed off from the
digital world after the cyber-police failed to contain a virus that
zombified its inhabitants, leaving it to grow unstable and full of
holes. Fortunately, you're provided with the single best tool for arming
yourself against zombies in any video game, ever -- Your very own
Mystery Box. Get armed with (basically) whatever gun you want, and go
put those wacky psyker abilities to use against those zombies.
This one is a lot meaner. Many chasms, landmines, and zombies. Walk
slowly, stay with your fellow bitrunners, and if it's too hard, there's
no shame in going back and rolling for a better gun!
The domains themselves are VERY simple, since there's little need for
decor or particularly complex layouts. The idea is that you should be
able to see everything you need to see in a given room/area with a
single vision pulse. Here's what one of the maps looks like:

Err, uh, I mean... This is what the maps look like:
<details>
<summary>SPOILERS BEWARE</summary>
<br>


(You wanna find out if there's something cool under those red lines? Go
there yourself!)
</details>
These two psyker maps come with their own psyker safehouse too -- The
Bathroom. It's gross, the medical supplies are kind of just sitting
there on the floor... It looks a little bit better when you're blind, I
guess.

## Why It's Good For The Game
I like psykers a lot more than I'm willing to admit. Unfortunately, the
jankiness of echolocation provides such a disadvantage at times, that
any "real" conflict is usually over before the psyker is even aware
they're taking damage.
Fortunately, the controlled environments that bitrunning maps are
perfect for psykers. They give the opportunity to craft an experience
around the player being blind, rather than forcing them to play blind
through a seeing mans world.
These two domains should present players with a unique challenge that is
designed around playing as a psyker, with slightly higher-than-usual
rewards for their trouble. More importantly -- They're fun!
## Changelog
🆑 Rhials
add: Two new psyker-oriented virtual domains -- Crate Chaos and Infected
Domain.
add: Map helper for cyber-police corpse spawn.
add: Map helper for swapping the encrypted crate in an area with a
random crate from that same area.
/🆑
## About The Pull Request
Instead of having a copy-pasted snowflake function for virtual gondola
mutation toxin, lets just move the difference to a variable.
Fixes the "Be unable to push the crate" part of #78804, because it was
applying both versions of the gondola disease, and the slower one could
finish first if you got unlucky.
## Why It's Good For The Game
Bugs bad, duplicate code bad.
## Changelog
🆑
fix: Virtual domain gondola meat will no longer have a small chance to
turn you into a weaker gondola variant
/🆑
## About The Pull Request
This drinking glass subtype was runtiming like crazy because it didn't
have `base_container_type` set, meaning it ~failed the vibe check~
couldn't properly update its sprite according to the glass styles.

Swapped it out for a subtype of `filled`. Because it's a glass that
starts filled.
## Changelog
🆑 Melbert
fix: Virtual Drink Glasses now look correct.
/🆑
<!-- 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
small tweaks for bitrunning
- ability disks grant a huge power spike which should let me balance
megafauna health more closely to the real thing
- added a check for bit avatars to skip dynamic midround checks
- more info for netpods mostly
<!-- 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
fixes#78513fixes#78575
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
add: Netpods and quantum servers now have more examination info
fix: You no longer lose antag status if you receive it in the vdom.
fix: Beach bar shouldn't have visible atmos piping anymore.
fix: Adds more lighting to the vaporwave vdom level.
balance: Buffed vdom megafauna health to compensate for new ability
disks.
/🆑
<!-- 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. -->