## About The Pull Request
This PR adds the ability to install a B.O.R.I.S. in a circuit that
contains an MMI component. These circuits can then be remotely connected
to by an AI by clicking on them or anything they are inside of. To
indicate that a circuit allows remote AI connection, an indicator is
given to the circuit and anything containing it.
Additionally:
- Refactors the MMI component to use `item_interaction`, since it was
pertinent.
- You cannot insert an MMI/B.O.R.I.S. into a locked circuit.
- You can no longer hotswap MMIs/B.O.R.I.S.es - you must manually eject
the inserted one.
Let me know what changelog labels I should use for the hotswap removal
and the prevention of insertion into locked circuits.
## Why It's Good For The Game
If you can put an MMI or posibrain in a circuit, why not allow an AI to
use it using a B.O.R.I.S.?
## Changelog
🆑
add: B.O.R.I.S.es can be installed inside of integrated circuits with
MMI components, allowing an AI to remotely interface with them the same
way an MMI or posibrain could.
refactor: The MMI component now uses item interaction behavior for
inserting MMIs/B.O.R.I.S.es.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Noticed that bitrunning virtual spawners were runtiming if the server
was already emagged. Basically, the guardrail component is added
(virtual_entity), then immediately deleted because it's emagged, leading
to a race condition in `JoinParent()` where parent is null. I still want
to keep this "valid, but delete me" state for components, so I made
`COMPONENT_REDUNDANT` (thx @LemonInTheDark).
I can't say for certain because I couldn't repro, but this /probably/
fixes#89992
## Why It's Good For The Game
Fixes a runtime
Allows devs to add components that execute an arbitrary amount of logic
while still qdeling themselves due to some in-game incompatibility issue
## Changelog
N/A
## About The Pull Request
Currently patches are a subtype of pills, and while they have the
``dissolveable`` var set to FALSE, barely anything checks it (because
people don't expect patches to be pills in disguise) so we end up
patches being dissolveable and implantable, which is far from ideal.
Both have been moved into an ``/obj/item/reagent_containers/applicator``
class, which handles their common logic and helps handling cases where
either one fits. As for gameplay changes:
* Pills no longer dissolve instantly, instead adding their contents to
your stomach after 3 seconds (by default). You can increase the timer by
dropping sugar onto them to thicken their coating, 1s per 1u applied, up
to a full minute. Coating can also be dissolved with water, similarly
-1s per 1u applied. Pills with no coating will work like before.
* Patches now only take half as long to apply (1.5s), but also slowly
trickle in their reagents instead of instantly applying all of them.
This is done via embedding so you could theoretically (if you get lucky)
stick a ranged patch at someone, although they are rather quick to rip
off. The implementation and idea itself are separate, but the idea for
having a visual display has been taken from
https://github.com/Monkestation/Monkestation2.0/pull/2558.

* In order to support the new pill mechanics, stomachs have received
contents. Pills and items that you accidentally swallow now go into your
stomach instead of your chest cavity, and may damage it if they're
sharp, requiring having them surgically cut out (cut the stomach open
with a scalpel, then cauterize it to mend the incision). Or maybe you
can get a bacchus's blessing, or a geneticist hulk to gut punch you,
that may also work. Alien devour ability also uses this system now. If
you get a critical slashing wound on your chest contents of your cut
apart stomach (if a surgeon forgot to mend it, or if you ate too much
glass shard for breakfast) may fall out. However, spacemen with the
strong stomach trait can eat as much glass cereal as they want.
Pill duration can also be chosen in ChemMaster when you have a pill
selected, 0 to 30 seconds.

## Why It's Good For The Game
Patches and pills are extremely similar in their implemenation, former
being a worse version of sprays and pills, with only change being that
pills cannot be applied through helmets while patches and sprays ignore
both. This change makes them useful for separate cases, and allows
reenactment of some classic... movie, scenes, with the pill change. As
for stomach contents, this was probably the sanest way of implementing
pill handling, and everything else (item swallowing and cutting stomachs
open to remove a cyanide pill someone ate before it dissolves) kind of
snowballed from there. I pray to whatever gods that are out there that
this won't have some extremely absurd and cursed interactions (it
probably will).
## Changelog
🆑
add: Instead of dissolving instantly, pills now activate after 4
seconds. This timer can be increased by using a dropper filled with
sugar on them, 1s added per 1u dropped.
add: Patches now stick to you and slowly bleed their reagents, instead
of being strictly inferior to both pills and sprays.
add: Items that you accidentally swallow now go into your stomach
contents.
refactor: Patches are no longer considered pills by the game
refactor: All stomachs now have contents, instead of it being exclusive
to aliens. You can cut open a stomach to empty it with a scalpel, and
mend an existing incision with a cautery.
/🆑
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
## About The Pull Request
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).
Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.
## Why It's Good For The Game
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
## About The Pull Request
Where I forget about a pr for 5 months.
This started because there was a pr that made it so skills transfer
between the real and the digital, and so I thought it'd be really funny
if I could train boxing in virtual reality... but there's no easy way to
get boxing gloves or anything like it in the virtual world...
So! I decided to make a disk for it, but then thought about fishing and
gaming and-
Anyhow it all went downhill from there and here we are now: Gimmick
Disks. (And a refactor of disk loading)
This implements a new type of bitrunning disk that instead of a single
item or ability, grants a full set of thematic items/abilities!
Unhelpfully cosplay as a wizard! Game inside your game! Down a digital
protein shake and box some simplemobs!
As the name "Gimmick" implies, these are primarily intended to help
shake up the sometimes stale bitrunner gameplay.
By letting you invoke, if you so desire, what to me is the most
enjoyable gaming experience: doing stupid shit with your buddies.
To facilitate the new type of disk I had to refactor disk loading, as it
was hardcoded to the item types.
Instead, we make disk loading send a signal to the bitrunner, and
register for this when held in their inventory.
This allows us to do things like making the lead acid battery give you
shock touch when held, without needing to make an explicit typecheck or
iterate over every item in the bitrunner's nested contents to see if
they have a loadable item.
## Why It's Good For The Game
I think it'd be really funny if you could train your boxing in the
digital realm.
As said above, I feel the bitrunner gameplay can get stale sometimes,
and this is how I hope to help people shake it up for themselves
sometimes. By giving them more stupid shit to do.
Doing stupid extended bits with other people is one of the things I
enjoy most out of ss13, and this is there to let the bitrunners do
exactly that with each other.
And sometimes you just have to roleplay as Gamers™️ entering virtual
reality to fight the virtual syndicate in bad cosplay while roleplaying
as a wizard smoking his magic weed, an overly edgy rogue, and the healer
desperately trying to keep them from exploding into a million pieces.
## Changelog
🆑
refactor: Bitrunning item/ability loading has been refactored. Please
report any issues.
add: Added Bitrunning gimmick loadout disks. These disks contain full
sets of equipment for all your digital cosplay needs, each including
questionably helpful equipment. Currently includes Sports (Boxer,
Skater, Archer, Fisher, Gamer) and Dungeon Crawling (Alchemist, Rogue,
Healer, Wizard).
add: Taking a lead acid battery into the netpod with you now gives your
bit avatar shock touch.
/🆑
## About The Pull Request
Since #87866 PostTransfer now has it's parent set to nil, and instead
has a `datum/new_parent` argument supplied to it.
Why does the ***post*** transfer proc not have it's parent set yet? Not
sure, but some procs (and the documentation) haven't been adjusted yet
and this PR fixes that
also:
fixes#88156fixes#88325
## Why It's Good For The Game
Fix man good...
## Changelog
🆑
fix: /datum/component/PostTransfer() procs that didn't have their
new_parent arguments have now been fixed
fix: This means that turning into a Domain gondola shouldn't RR people
anymore
/🆑
## About The Pull Request
`boldannounce` is NOT for use ICly it's only for OOC stuff. `bolddanger`
is identical it just doesn't carry the same baggage
## Changelog
🆑 Melbert
fix: Stuff like the SM exploding will no longer output to your OOC tab
/🆑
## About The Pull Request
So currently there's this incredibly incredibly niche records bug with
bitrunning.
Where if a generated bitrunner avatar has the exact same name as anyone
currently on the records, when it applies the hacker alias it then
proceeds to update the records to match.
This seems to be because it uses
`avatar.fully_replace_character_name(avatar.real_name, alias)`, which as
an old name is given then calls `replace_records_name(avatar.real_name,
alias)`, which proceeds to override the first record named
`avatar.real_name` with `alias`.
It also potentially screws with people's objectives for anyone with that
name.
As the documentation for this proc says:
https://github.com/tgstation/tgstation/blob/7b9d4d0f94d4447c04097066168d099ac19be686/code/modules/mob/mob.dm#L1123-L1125
we instead just call it without supplying an `oldname`, such that it
doesn't try to update the records nor objectives.
This fixes our issues.
However, this _theoretically_ would've also updated our net avatar's ID!
But in practice, it never actually did so, as it would have required the
ID to already have been set to the `oldname` previously.
To make it actually update the ID, we instead just manually update the
avatar's ID after setting the alias.
## Why It's Good For The Game
Fixes jank.
It's nicer to have the IDs use the actual names rather than being
generic.
## Changelog
🆑
fix: A bitrunner avatar spawning with the exact same name as a name
currently on the records no longer updates that record to match when the
hacker alias gets applied.
qol: Net avatar ID cards use the net avatar's name instead of being
generic.
/🆑
## About The Pull Request
fixes https://github.com/tgstation/tgstation/issues/87419
When the avatar is qdel'd, the player returns to original body
## Why It's Good For The Game
Less bugs good
## Changelog
🆑
fix: Bitrunning: falling into chasms and other ways of destroying your
virtual body instead of killing it, WILL now return you to your body
/🆑
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
* Skills are passed down to bitrunning avatars and then back to the original body. (#85442)
## About The Pull Request
Skills are now passed down to the mind of the bitrunning avatar, and
then back to the real body once disconnected, allowing for skills to be
leveled up (and theorically down) in the simulation.
## Why It's Good For The Game
Skills improved in a simulation should be passed back to the real body.
## Changelog
🆑
qol: Skills are passed down to bitrunning avatars and then back to the
original body.
/🆑
* Skills are passed down to bitrunning avatars and then back to the original body.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Skills are now passed down to the mind of the bitrunning avatar, and
then back to the real body once disconnected, allowing for skills to be
leveled up (and theorically down) in the simulation.
## Why It's Good For The Game
Skills improved in a simulation should be passed back to the real body.
## Changelog
🆑
qol: Skills are passed down to bitrunning avatars and then back to the
original body.
/🆑
## About The Pull Request
Loadouts load again, gamer names have been replaced by character names.
## Why It's Good For The Game
This is intended by what I created with the original bitrunning prefs
## Changelog
🆑
fix: Loadouts in bitrunning work again
fix: Names in bitrunning work again
/🆑
* Fix hacker alias name preference not working (#84695)
## About The Pull Request
So recently bitrunner avatars were made to use stereotypical gamertag
names, which introduced a new preference for 'hacker alias'.
This, however, didn't seem to actually work, and would always select a
random gamertag.
Looking into it, this seemed to be because it uses `old_body.client`:
https://github.com/tgstation/tgstation/blob/bd14e92d04f3dc4fd7aa06a9c49b04ec05bcc172/code/modules/bitrunning/components/avatar_connection.dm#L63-L64
Which at this point in the code would return `null`.
Making it use `avatar.client` instead seems to fix our issue.
## Why It's Good For The Game
Fixes hacker alias name preference not working.
## Changelog
🆑
fix: Fixes hacker alias name preference not working.
/🆑
* Fix hacker alias name preference not working
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
## About The Pull Request
So recently bitrunner avatars were made to use stereotypical gamertag
names, which introduced a new preference for 'hacker alias'.
This, however, didn't seem to actually work, and would always select a
random gamertag.
Looking into it, this seemed to be because it uses `old_body.client`:
https://github.com/tgstation/tgstation/blob/bd14e92d04f3dc4fd7aa06a9c49b04ec05bcc172/code/modules/bitrunning/components/avatar_connection.dm#L63-L64
Which at this point in the code would return `null`.
Making it use `avatar.client` instead seems to fix our issue.
## Why It's Good For The Game
Fixes hacker alias name preference not working.
## Changelog
🆑
fix: Fixes hacker alias name preference not working.
/🆑
* Bitrunning: Combat domain [READY] (#84196)
<!-- 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. -->
* Bitrunning: Combat domain [READY]
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
<!-- 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. -->
* Bitrunning: Avatars get silly hacker names (#84279)
## About The Pull Request
Bit avatars now get corny names while spawning in to the virtual domain.
You can change your alias in prefs or have it randomized for s0meth1ng
1337.
Added sechud icons (and thereby orbit ui icons) for bit avatars since
"Cyb3rHaxx0r" might be confusing to find in the living players section.
## Why It's Good For The Game
This was done as a request and after discussion in the code channel.
A little bit of character persistence across simulations.
## Changelog
🆑
add: Bitrunning: You can now choose your hacker alias in prefs.
add: Bit avatars get orbit icons.
/🆑
* Bitrunning: Avatars get silly hacker names
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
## About The Pull Request
Bit avatars now get corny names while spawning in to the virtual domain.
You can change your alias in prefs or have it randomized for s0meth1ng
1337.
Added sechud icons (and thereby orbit ui icons) for bit avatars since
"Cyb3rHaxx0r" might be confusing to find in the living players section.
## Why It's Good For The Game
This was done as a request and after discussion in the code channel.
A little bit of character persistence across simulations.
## Changelog
🆑
add: Bitrunning: You can now choose your hacker alias in prefs.
add: Bit avatars get orbit icons.
/🆑
## 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
I was looking at sounds (as you do) and I noticed this

These sounds don't exist
We have `portal_open_1`, not `portal_open1`.
This wasn't caught on compile because they used `""` and not `''`.
So I went through and audited a bunch of playsound uses that don't use
`''`. Only one error, fortunately
Likewise there was a ton of places running `get_sfx` pointlessly
(because `playsound` does it for you) so I clened that up.
However while auditing the portal stuff I noticed a few oddities, so I
cleaned it up a bit.
Also also I added the portal sounds to the wormholes event and gave it a
free ™️ optimization because it was an in-world loop
## Changelog
🆑 Melbert
sound: Portals made by portal guns now make sounds as expected
sound: Wormholes from the wormhole event now make sounds when formed
/🆑
* Virtual Domains now have certain areas protected from ghost role interference (#82960)
## About The Pull Request
This touches up on the bitrunning ghost roles that come with some maps,
namely Corsair Cove and Syndicate Assault.
The gist of it is: Ghost role spawners and Digital Anomalies (the random
event boss mobs) are now restricted from entering the VDOM safehouse,
and other areas where critical equipment is stored.
Here's an example from Syndicate Assault -- The X-ed out area is
considered "out of bounds" for digital anomalies/ghost roles:

Additionally, this also fixes the matter of pirate ghost role spawns
creating their own antag datum/pirate team, which would carry into the
roundend report. Since these are no longer legitimate pirate spawners
and are now specifically designed spawners for virtual domains.
Naturally, emagging the server jailbreaks all of these restrictions and
notifies any virtual entities.
The new subtype of spawners should also be scalable enough that new
VDOMs should be able to implement new ghost role spawners with ease.
## Why It's Good For The Game
It's one thing to have sentient mobs to fight, which can shake up the
otherwise somewhat static nature of bitrunning maps, but when players
are tossing equipment, spawncamping, or otherwise making it impossible
for the runners to fight them it ends up being unfun for everyone
involved. You can't get into a good fight with a bitrunner avatar if
their only recourse is to wipe the map and everything (YOU) in it.
This ensures a level of fairness between the (typically vindictive)
ghost roles of a VDOM and the players.
Also, pirate spawns don't make a new pirate team/datum. That's one of
the fixes I was aiming for with this.
## Changelog
🆑 Rhials
balance: Virtual domain ghost roles can no longer enter the
safehouse/"equipment" areas of a domain.
fix: Pirate virtual domain ghost roles will no longer make a pirate team
antag datum.
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com>
* Virtual Domains now have certain areas protected from ghost role interference
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com>
## About The Pull Request
This touches up on the bitrunning ghost roles that come with some maps,
namely Corsair Cove and Syndicate Assault.
The gist of it is: Ghost role spawners and Digital Anomalies (the random
event boss mobs) are now restricted from entering the VDOM safehouse,
and other areas where critical equipment is stored.
Here's an example from Syndicate Assault -- The X-ed out area is
considered "out of bounds" for digital anomalies/ghost roles:

Additionally, this also fixes the matter of pirate ghost role spawns
creating their own antag datum/pirate team, which would carry into the
roundend report. Since these are no longer legitimate pirate spawners
and are now specifically designed spawners for virtual domains.
Naturally, emagging the server jailbreaks all of these restrictions and
notifies any virtual entities.
The new subtype of spawners should also be scalable enough that new
VDOMs should be able to implement new ghost role spawners with ease.
## Why It's Good For The Game
It's one thing to have sentient mobs to fight, which can shake up the
otherwise somewhat static nature of bitrunning maps, but when players
are tossing equipment, spawncamping, or otherwise making it impossible
for the runners to fight them it ends up being unfun for everyone
involved. You can't get into a good fight with a bitrunner avatar if
their only recourse is to wipe the map and everything (YOU) in it.
This ensures a level of fairness between the (typically vindictive)
ghost roles of a VDOM and the players.
Also, pirate spawns don't make a new pirate team/datum. That's one of
the fixes I was aiming for with this.
## Changelog
🆑 Rhials
balance: Virtual domain ghost roles can no longer enter the
safehouse/"equipment" areas of a domain.
fix: Pirate virtual domain ghost roles will no longer make a pirate team
antag datum.
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
* Fixes netpod healing exploit (#80717)
## About The Pull Request
This PR addresses an issue where netpod healing effects persisted under
certain conditions (Issue #80715). Specifically, when a netpod is
destroyed with a player inside, the embryonic stasis effect improperly
continued. This adds another cases where the user is teleported out by
other means (not currently a known issue).
## Why It's Good For The Game
Fixes an in game exploit / bug
Fixes#80715
## Changelog
🆑
fix: Having a netpod destroyed will no longer grant you permanent
healing.
/🆑
* Fixes netpod healing exploit
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
## About The Pull Request
This PR addresses an issue where netpod healing effects persisted under
certain conditions (Issue #80715). Specifically, when a netpod is
destroyed with a player inside, the embryonic stasis effect improperly
continued. This adds another cases where the user is teleported out by
other means (not currently a known issue).
## Why It's Good For The Game
Fixes an in game exploit / bug
Fixes#80715
## Changelog
🆑
fix: Having a netpod destroyed will no longer grant you permanent
healing.
/🆑
* Micro-optimize qdel by only permitting one parameter (#80628)
Productionizes #80615.
The core optimization is this:
```patch
- var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
+ var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
```
We avoid a heap allocation in the form of copying the args over to a new
list. A/B testing shows this results in 33% better overtime, and in a
real round shaving off a full second of self time and 0.4 seconds of
overtime--both of these would be doubled in the event this is merged as
the new proc was only being run 50% of the time.
* Micro-optimize qdel by only permitting one parameter
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Productionizes #80615.
The core optimization is this:
```patch
- var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
+ var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
```
We avoid a heap allocation in the form of copying the args over to a new
list. A/B testing shows this results in 33% better overtime, and in a
real round shaving off a full second of self time and 0.4 seconds of
overtime--both of these would be doubled in the event this is merged as
the new proc was only being run 50% of the time.
* Changes the 'red pill' signal into a more generic 'living pill consumed' (#80428)
## About The Pull Request
I've been reminded to do that by Mothblocks.
## Why It's Good For The Game
Who would have thought that an oddly specific signal that is only sent
when the pill is red was bad design.
## Changelog
N/A
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Changes the 'red pill' signal into a more generic 'living pill consumed'
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
## About The Pull Request
I've been reminded to do that by Mothblocks.
## Why It's Good For The Game
Who would have thought that an oddly specific signal that is only sent
when the pill is red was bad design.
## Changelog
N/A
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* consuming a red pill will now eject you from the Matrix (#79533)
## About The Pull Request
If your bitrunning avatar somehow acquires and consumes a red pill, they
will be disconnected from the Matrix.
Note that this, like the 5% chance to receive a red pill message, only
happens with pills with the fully red pill sprite (pill4). As far as I'm
aware, only custom pills dispensed from a ChemMaster can have this
sprite.
## Why It's Good For The Game
hehe funny reference
proof of testing:

I also tested consuming normal and red pills in the non-bitrunning world
to ensure that they still transfer chems, that red pill messages still
work, and that they don't break anything.
## Changelog
🆑 ATHATH
add: If your bitrunning avatar somehow acquires and consumes a red pill,
they will be disconnected from the Matrix.
/🆑
* consuming a red pill will now eject you from the Matrix
---------
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
## About The Pull Request
If your bitrunning avatar somehow acquires and consumes a red pill, they
will be disconnected from the Matrix.
Note that this, like the 5% chance to receive a red pill message, only
happens with pills with the fully red pill sprite (pill4). As far as I'm
aware, only custom pills dispensed from a ChemMaster can have this
sprite.
## Why It's Good For The Game
hehe funny reference
proof of testing:

I also tested consuming normal and red pills in the non-bitrunning world
to ensure that they still transfer chems, that red pill messages still
work, and that they don't break anything.
## Changelog
🆑 ATHATH
add: If your bitrunning avatar somehow acquires and consumes a red pill,
they will be disconnected from the Matrix.
/🆑
<!-- 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
Does what it says on the tin. We don't have any "special" sources of
clone damage left in the game, most of them are rather trivial so I
bunched them together into this PR.
Notable things removed:
- Clonexadone, because its entire thing was centered around clone damage
- Decloner gun, it's also centered around cloning damage, I couldn't
think of a replacement mechanic and nobody uses it anyways
- Everything else already dealt clone damage as a side (rainbow knife
deals a random damage type for example), so these sources were removed
<!-- 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
Consider the four sources of normal damage that you can get: Brute,
Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very
well put together and it's no surprise that they are in the game, as you
can fit any way of damaging a mob into them. Getting beaten to death by
a security officer? Brute damage. Running around on fire? Burn damage.
Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn
and oxygen damage. Technically there's also stamina damage but that's
its own ballpark and it also makes sense why we have a damage number for
it.
Picture this now: We have this cool mechanic called "clone pods" where
you can magically revive dead people with absolute ease. We don't want
it to be for free though, it comes at a cost. This cost is clone damage,
and it serves to restrain people from abusing cloning.
Fast forward time a bit and cloning is now removed from the game. What
stays with us is a damage number that is intrinsically tied to the
context of a removed feature. It was a good idea that we had it for that
feature at the time, but now it just sits there. It's the odd one out
from all the other damage types. You can easily explain why your blade
dealt brute damage, but how are you going to fit clone damage into any
context without also becoming extremely specific?
My point is: **clone damage is conceptually a flawed mechanic because it
is too specific**. That is the major issue why no one uses it, and why
that makes it unworthy of being a damage stat.
Don't take my word for it though, because a while ago we only had a
handful of sources for this damage type in the game. And in most of the
rounds where you saw this damage, it came from only one department. It's
not worthwhile to keep it around as a damage number. People also didn't
know what to do with this damage type, so we currently have two ways of
healing clone damage: Cryotubes as a roundstart way of healing clone
damage and Rezadone, which instantly sets your clone damage to 0 on the
first tick. As a medical doctor, when was the last time you saw someone
come in with clone damage and thought to yourself, "Oh, this person has
clone damage, I cannot wait to heal them!" ?
Now we have replacements for these clone damage sources. Slimes? Slime
status effect that deals brute instead of clone. Cosmic heretics? Random
organ damage, because their mechanics are already pretty fleshed out.
Decloning virus? The virus operated as a "ticking timebomb" which used
cloning damage as the timer, so it has been reworked to not use clone
damage. What remains after all this is now a basically unused damage
type. Every specific situation that used clone damage is now relying on
another damage type. Now it's time to put clone damage to rest once and
for all.
Sure, you can technically add some form of cellular degradation in the
future, but it shouldn't be a damage number. The idea of your cells
being degraded is a cool concept, don't get me wrong, but make it a
status effect or maybe even a wound for that matter.
<!-- 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. -->
🆑
del: Removed clone damage.
del: Removed the decloner gun.
del: Removed clonexadone.
/🆑
<!-- 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. -->
* Reworks transformation sting to be temporarily in living mobs, forever in dead mobs
* Modular updates
* Recaches the icons generated in the `changeling` unit test
* Pain
* More tweaks
* Disable unit test
* Let's see if we can pass test temporarily
* Makes transformation sting unobtainable more cleanly
* Unit test
* Cursed proc
* Kill the unholy copy pasta
Seriously this stuff is just awful. This is not maintainable.
* test this
* Update comments
* Fixing the screenshot test, maybe?
* grrr
* Update changeling.dm
* Attempt to fix this nonsense
* Update changeling.dm
* Update changeling.dm
* Update changeling.dm
* Update dna.dm
* Fixes it?
* Screenshot test
* Update _traits.dm
* Update _traits.dm
* Fix this
* Update dna.dm
* Update dna.dm
* Hmm
* This proc needs a new name
* I want to scream but I have no mutant parts
* Fix
* Update species.dm
* Update species.dm
* Update species.dm
* Update species.dm
* Some touch ups
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Jolly <70232195+Jolly-66@users.noreply.github.com>
## 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>
* Removes virtual-specific subtypes of drinking glass + adds a new fishing map (#79423)
## 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!
/🆑
* Removes virtual-specific subtypes of drinking glass + adds a new fishing map
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@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!
/🆑
* Removes virtual-specific megafauna, fixes boss map issues [NO GBP] (#79424)
## 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
/🆑
* Removes virtual-specific megafauna, fixes boss map issues [NO GBP]
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>