mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-23 15:38:08 +00:00
d7460f97d7da435d629a2fd9be66700695ededab
160 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
778ed9f1ab |
The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request This PR kills the abstract internal and external typepaths for organs, now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds. This PR also fixes fox ears (from #87162, no tail is added) and mushpeople's caps (they should be red, the screenshot is a tad outdated). And yes, you can now use a hair dye spray to recolor body parts like most tails, podpeople hair, mushpeople caps and cat ears. The process can be reversed by using the spray again. ## Why It's Good For The Game Time-Green put some effort during the last few months to untie functions and mechanics from external/internal organ pathing. Now, all that this pathing is good for are a few typechecks, easily replaceable with bitflags. Also podpeople and mushpeople need a way to recolor their "hair". This kind of applies to fish tails from the fish infusion, which colors can't be selected right now. The rest is just there if you ever want to recolor your lizard tail for some reason. Proof of testing btw (screenshot taken before mushpeople cap fix, right side has dyed body parts, moth can't be dyed, they're already fabolous):  ## Changelog 🆑 code: Removed internal/external pathing from organs in favor of a bit flag. Hopefully this shouldn't break anything about organs. fix: Fixed invisible fox ears. fix: Fixed mushpeople caps not being colored red by default. add: You can now dye most tails, podpeople hair, mushpeople caps etc. with a hair dye spray. /🆑 |
||
|
|
9f7d6dea62 |
Outfits that put items in your hand now respect if the outfit is visual only (#87355)
## About The Pull Request On a downstream, we have an antagonist, that is a less competent wizards. This antagonist's preview outfit has a beer bottle in their hand, which has caused runtimes, as the bottle did not have any reagents instantiated, and it tried check its length for sloshing. After putting in a check for the `initial` argument of `on_equip`, I have noticed that the problem goes deeper: the various procs that handle putting something in your hand do not pass along if the items is put in your hand as a preview or not. This PR adds a new optional var to these procs, ensuring that unwanted behaviour during previews won't trigger. I also swapped `visualsOnly` to snake case, as it looked inconsistent with the rest of the code style. ## Why It's Good For The Game Making the argument that ensures avoiding side effects during previews work with all kinds of items is good. ## Changelog 🆑 fix: if an outfit puts a reagent container in the preview dummy's hand, it will not try to slosh code: outfits putting items in your hand will respect the visual_only argument /🆑 |
||
|
|
d4ac95a0e1 |
Nobody expects the span inquisition: replaces most <span>s with macros (#86798)
## About The Pull Request 123 changed files and multiple crashes after writing broken regex, I replaced most remains of direct spans with macros. This cleans up the code and makes it easier to work with in general, see justification for the original PR. I also fixed a bunch of broken and/or unclosed spans here too. I intentionally avoided replacing spans with multiple classes (in most cases) and spans in the middle of strings as it would impact readability (in my opinion at least) and could be done later if required. ## Why It's Good For The Game Cleaner code, actually using our macros, fixes borked HTML in some places. See original PR. ## Changelog Nothing player-facing |
||
|
|
58501dce77 |
Reorganizes the sound folder (#86726)
## 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 /🆑 |
||
|
|
6808a082eb |
Assorted changes to job assignment code and logging. Runtime free, guaranteed or your money back. Price: $£0. (#85947)
## About The Previous Pull Request
#85308 reverted by #85929

~~Causes the round to not start when a player isn't eligible for any
jobs at a specific priority level due to runtimes trying to `pick()`
from an empty list aborting the entire job assignment stack.~~
(Fixed???? by
|
||
|
|
d2ab513332 |
Reintroducing my PRs that were lost in the wallening revert. (#86439)
## About The Pull Request This PR reintroduces #85759, #85892 and #85894. #85892 has post-wallening arrows, but it isn't a big deal because they fit the top-down or 3/4 style we've for a lot of things. ## Why It's Good For The Game Reintroducing lost features and improvements. Remember to remove the 'Lost in the wallening revert' label from those PRs when this is merged. ## Changelog N/A |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
2e0ff48bbb |
Fixing three fishing issues in one PR. (#86042)
## About The Pull Request This will fix #83730, fix #85985 and fix #86033. ## Why It's Good For The Game See above. ## Changelog 🆑 fix: You can no longer pickup closets and crates wrapped in a package with a fishing rod. fix: Fixed a few harddel issues with mob spawns that caused charred corpses fished from lavaland to create an invisible blockade. fix: Fixed being able to fish up mobs that have fallen in totally different z-levels with a rescue hook (i.e. from bitrunning domains to lavaland). /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
ce0a9c932e | Shrunk arrow from pointing at things. Command roles unaffected thanks to id trims (also new skillchip). (#85892) | ||
|
|
4d1639b04c |
Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308  |
||
|
|
1eef540054 |
Assorted changes to job assignment code and logging. (#85308)
## About The Pull Request
This PR does a couple of minor things:
Makes the job debug logging a bit easier to follow.
Minorly brings some SSjob code up to code standards, converting proc
names to snake_case and doing some otherm is cleanup.
Refactored some stuff into different procs, updated some comments.
And some major things:
Changes the job assignment logic.
Old behaviour
> Assign dynamic priority roles
> Force one Head of Staff (if possible)
> Assign all AIs
> Assign overflow roles (bugged in 2 ways)
> Shuffle the available jobs list once, at the start of the random job
assignment loop
> Pick and assign random jobs for random players from High prefs down,
with a priority on Head of Staff roles
> Handle everyone that couldn't be assigned a random job
New behaviour
> Assign dynamic priority roles
> Assign all Head of Staff roles to players with High prefs
> If no Head of Staff was made in the above way, force one Head of Staff
(if possible)
> Assign all AIs
> Assign overflow roles (fixed)
> Prioritise and fill unfilled head roles at each job priority pref
level, from High prefs down.
> Build a list of all jobs that each unassigned player could be eligible
for at the above pref level.
> Pick a job from that list at random and assign it to the player.
> Handle everyone that couldn't be assigned a random job.
In reality there should be little impact on overall job assignment, the
code changes read more as semantics. For example, the priority check for
filling Head slots will have the same candidate pool in both old and new
versions, but in the new version we're more clearly saying that Heads
are important and we want to prioritise filling them for the sake of
round progression even though the outcome in new and old is the same.
A key change will lead to an increase in assistants - Overflow fixes.
Currently the code block to do early assignments to the Overflow role
doesn't work - or works but not as you'd expect. The idea was is that
because enabling the Overflow role in the prefs menu is an On/Off toggle
that sets the job to High priority when enabled and prevents any other
High priority pref, players that have the Overflow role enabled will
**always** get it. It's their highest priority job with infinite slots.
So we do a pass right at the start to give everyone with the Overflow
role enabled that role and save us wasting time later on in random job
code giving them that same role but with more work.
The problem is the code for this only assigns the Overflow role to
people with it set to Low priority in their prefs, resulting in log
readouts like:
```
[2024-07-27 09:49:43.469] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:43.469] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Radioprague, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caluan, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caractaser, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Apsua, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: AC1, Candidates: 0
```
Where nobody gets pre-assigned the overflow role because their prefs are
all set to the High priority from being toggled... Except wait a second,
some people have it at Medium priority when it should just be a No
Role/High Priority Role toggle?
And herein we meet a problem. My hypothesis is that traits and stuff
that change the overflow have allowed players to set the "ordinary"
overflow role of Assistant to Medium and/or Low priority.
This still shows as enabled in the prefs menu, but leads to an outcome
where a player with assistant enabled is assigned Cook instead.
```
[2024-07-27 09:49:47.775] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:47.775] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
...
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
...
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
```
So players with the Overflow job pref set to Low (an unexpected state,
should be disabled or High) would be guaranteed to get that role if none
of the higher priority Head of Staff/AI/Dynamic roles took over via the
bugged "force overflow for people with the pref enabled" proc.
Players with the Overflow job pref set to High would be guaranteed to
get that role if none of the higher priority Head of Staff/AI/Dynamic
roles took over via the random job assignment code giving them their
Highest priority role thanks to the infinite job slots of the Overflow.
And players with the Overflow job pref set to Medium (an unexpected
state, should be disabled or High) would get Assistant if the shuffle
step of the available jobs list put Assisstant before any of the other
jobs they had prefs enabled for at Medium that weren't already filled,
otherwise they'd get another random job.
This code is now changed to ignore the priority the player has set when
looking for people to fill the overflow role. As long as it **is**
enabled, the player will get it unless they're forced into a dynamic
ruleset role (AI when malf rolls) or a Head of Staff role due to their
other prefs (they have RD set to med or low, and no other player has a
Head of Staff at high so they get randomly picked and miss the overflow
role).
This will increase the number of assistants in shifts where their pref
state has Assisstant in the bugged Medium priority, but doesn't change
it for bugged Low and not-bugged High/On priority.
On the other side of the coin, we have how the random jobs are picked.
They're kinda not random, and I noticed this reading the logs then
reading the code.
The list of available jobs to pick from is randomly shuffled - but only
**once**. All players pull from a list of jobs in the same order. So you
end up with a log block like this:
```
[2024-07-27 09:49:47.985] DEBUG-JOB: DO pass, Player: Pierow, Level:3, Job:Botanist
[2024-07-27 09:49:47.985] DEBUG-JOB: Running AR, Player: Pierow, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.985] DEBUG-JOB: Player: Pierow is now Rank: Botanist, JCP:0, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: DO pass, Player: Daddos, Level:3, Job:Botanist
[2024-07-27 09:49:47.986] DEBUG-JOB: Running AR, Player: Daddos, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.986] DEBUG-JOB: Player: Daddos is now Rank: Botanist, JCP:1, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: FOC job filled and not overflow, Player: Bebrus2, Job: /datum/job/botanist, Current: 2, Limit: 2
[2024-07-27 09:49:47.987] DEBUG-JOB: FOC player job not enabled, Player: Bebrus2
[2024-07-27 09:49:47.987] DEBUG-JOB: DO pass, Player: Bebrus2, Level:3, Job:Cook
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
[2024-07-27 09:49:47.988] DEBUG-JOB: Player: Bebrus2 is now Rank: Cook, JCP:0, JPL:1
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC player job not enabled, Player: Redwizz
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC job filled and not overflow, Player: Redwizz, Job: /datum/job/cook, Current: 1, Limit: 1
```
The list is shuffled into an order of something like `list("Scientist",
"Botanist", "Cook", "Sec Officer", ...)` then iterated over for each
player. So every random job selection goes:
> "Does Player1 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player2 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player3 have Scientist enabled and at the right priority? No?
Okay, Botanist has no slots left so we'll remove it from the list. Okay,
Cook? Yes? You get cook."
> "Does Player4 have Scientist enabled and at the right priority? No?
Okay, Cook has no slots left so we'll remove it from the list. Okay, Sec
Officer? ..."
This can lead to stacked individual departments if it gets randomly
rolled to the start of the list in the shuffle, and completely empty
departments if they end up at the end.
On high pop shifts this is probably less of an issue. Player prefs add
noise to this and as departments at the front fill up, those at the back
pick up some of the lower pref players.
But have you ever had a shift where there's just like... No fucking sec
even though there's tons of players? The logging (before I made changes
in this PR) was a bit ass, but my hypothesis there is that sec officer
was shuffled right at the end of the random job list, so every other
department was filled up before sec officers were picked.
To mitigate this, I made the list shuffle every single time the game
picks a random available job for the player. This should lead to a more
balanced selection of available jobs by avoiding situations where the
code is biased towards packing some departments by accident.
## Why It's Good For The Game
Overflow fixes mean people who go to their prefs and see the Overflow
Role is On will all have the same experience - They will be the Overflow
role.
More random random job selection should prevent individual departments
having a jobs be stacked when it would have otherwise been possible for
a more balanced selection but the code unintentially biased random
departments to be overstaffed and understaffed each shift.
## Changelog
🆑
fix: Having the Overflow Role set to On will properly ensure you get
that role at a High priority as intended by the game code.
fix: Job selection is now a little bit more random. Fixes an
unintentional bias in random job assignment that could lead to
feast-or-famine for roles where everyone is assigned one job and nobody
is assigned another job.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
|
||
|
|
d9168e7254 |
Adds a treasure chest to the ocean/beach fishing spot. (#85276)
## About The Pull Request This PR adds a treasure chest that can be fished from the ocean if you're lucky enough (or have enough explosives or lobstrosities to do it for you). The treasure chest is basically a mystery box (like the ones from the deathmatch) with a couple catches; the treasure chest can be opened up to 18 times in total before breaking down, however, it can only be opened up to 3 times per spaceman, encouraging the player to share it with others. Here the possible loot by the by: - A toolbox containing a master fishing rod, all the hooks and reels, fish feed, an experi-scanner, an aquarium kit and a can of super baits - A box containing a lazarus injector, a cup and a bottle of strange reagent which you can use to revive fish now - A circuit board for a pre-emagged fishing portal generator - A master fishing rod - A can of super fishing baits - A fish case containing Tiziran fish - A fish case containing Syndicate fish - An old, yet fairly strong cutlass - An old laser gun which fires only 5 shots before running out - A crank laser musket - A smoothbore disabler - A surplus bolt action rifle - A ration pack - A can of squid ink - A bottle of aged rum that forces you to switch to the piratespeak language - A money bag with some doubloons inside - A piratespeak manual - Pirate armored coat - Pirate armored hat - A pre-loaded cannon - Four trash cannon balls - Four cannon balls ## Why It's Good For The Game Mystery boxes are fun, from the little fanfare they play to the potential loot they can give, and I had an old treasure chest I had sprited for fun years ago around so I've come up with an entertaining idea. If you think the loot list is a bit too hot, I can cool it down a bit. Also yeah, I wanted to make fish revivable with strange reagent, since you can already do it with lazarus injectors even though using a lazarus injector for this would be a severe waste of mining points. ## Changelog 🆑 add: Added a treasure chest you can rarely fish from the ocean/beach, with loot being a mix of fishing and piratey stuff. add: You can revive fish with strange reagent now. /🆑 |
||
|
|
a1366fc905 |
Night Vision Goggles update (#84594)
## About The Pull Request This is a reboot of #84550 but with way less unbearable: mesons are off the table and I've made the night vision tonalities lighter now, while also improving the darkness cutoffs of some of them. Btw, you can also turn night vision googles on/off now. Each pair of departmental night vision goggles now comes with their own tint to boot. As always, this doesn't affect nukies and ninjas. They're almost garaunteed to keep their googles equipped and on at all time, so it would honestly adulterate the overall experience a little. Now, for some pictures... In the dark, **top** row is **old**, **bottom** row is **new**. from left to right: security, science, standard/meson, diagnostic, health:  In the light: security, science, no goggles, standard/meson, diagnostic, health:  The screenshots were taken from varedited goggles on the servers because it's bit faster than booting up a local server, plus I had to finetune a few things. ## Why It's Good For The Game So, I kinda wanted to give a bit of screen colors to goggles that was not some sort of "optional, by default turned off" kind of crap nobody cares about, however my previous PR was met with a lot of criticism, which made me rethink how to do it. I honestly don't want it to be a burden, but I do want to make them a bit fancier tho. Also the the medical NVs (and perhaps sec NVs) were a bit crappier than the rest. ## Changelog 🆑 add: Night vision goggles now subtly tint your screen. add: You can turn your night vision goggles off. Doing so removes the tint and the eye protection malus. /🆑 |
||
|
|
69b673bba6 |
Adds more "curated" version of human randomization (for humonkeys, corpse spawners, and fresh characters) (#84443)
## About The Pull Request Basically, adds a version of `randomize_human` that's a tad more curated, IE, primarily picks results to create a more "coherent" result than full randomization. Shown here: Humans, Lizards, Felinids. Looks a bit boring, but that's the point.  Non-humans I left almost entirely untouched, as they generally form a more "coherent" mob from pure randomization already. ## Why It's Good For The Game Basically just aiming to perform a more "consistent" style for humonkeys and corpses. For monkeys, it doesn't make the most sense when they pop up with a giant red afro. For corpses, it's a bit hard to feel immersed in the ruins when they've all got pink and green mustaches. ## Changelog 🆑 Melbert add: Humonkeys and random corpse spawns now look more... human. /🆑 |
||
|
|
dc5a3a322d |
Adds Perfectly Ordinary Food Truck (#84144)
## About The Pull Request Adds a food truck.   Also, adds a team of MI13 fugitive hunters. There's 3 in a team, and one is pre-equipped with a cunning disguise. ## Why It's Good For The Game So the primary intent here is making a fugitive hunter team that operates stealthily instead of directly. They have less direct combat power than other hunters, but they have a few things that help them infiltrate the crew and assassinate the fugitives. All agents are issued a makarov, a suppressor, a spare clip of 9mm ammo (20% chance to be a subtype), a random melee weapon (flash, e-dagger or combat knife), and a random low-level syndicate gadget (c4 brick, codespeak manual, freedom implant, etc), and a pair of zipties. Every agent also gets a agent ID. Shuttle is equipped with surgery tools (good for plastic surgery), clothing vendors (good for getting disguised), and a bunch of computers for cameras and vitals monitors. Spare cyanide pills and 9mm ammo is provided, as is a single space suit. As an added bonus, you're opereating out of the back of an old food truck giving you bulletproof cover for your operations. Spare food is provided, a functional kitchen is not. ## Changelog 🆑 add: Ghost role food truck merchants may occasionally turn up at the station. add: Adds a new fugitive hunter type, MI13 secret agents. /🆑 --------- Co-authored-by: Afevis <ShizCalev@users.noreply.github.com> |
||
|
|
35484728f1 |
Cigarettes and vapes are no longer subtypes of masks. (#82942)
## About The Pull Request Since non-clothing items can also be worn on several slots, there's no need for cigarettes/vapes to be subtypes of masks anymore, since that comes with a few oddities like #82870. ## Why It's Good For The Game This should fix #82870, with about no side-effect aside them no longer being edible by moths 🤢. |
||
|
|
1116f150eb |
Bitrunning: Tweaks, QoL and removals (#84125)
## 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. /🆑 |
||
|
|
832cecdbb1 | New Slime Sprites (#83891) | ||
|
|
57744f6622 |
Icemoon Comms agent (#83404)
<!-- 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 Adds a comms agent to icemoon, similar to the one that can spawn in space <details> <summary>Image (spoilers, kind of)</summary>  </details> <!-- 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 Icemoon is sorely lacking on ghost roles, this should help with that somewhat. <!-- 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: NT reports indicate that the Syndicate have increased listening activities on Icemoon, crew is advised to watch out for possible communication interference. /🆑 <!-- 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. --> |
||
|
|
707b5ef744 |
Minor Spider Rebalance (#83554)
## About The Pull Request Breacher and Viper player-controlled Spiders have swapped castes; Vipers now come from Abnormal Eggs, while Breachers will now come from Enriched Eggs. This means that Vipers may be seen more, while Breachers require the Nest to acquire at least a single kill to wrap and create an Enriched Egg from. Nurse Spiders also perform their heal action much faster, at the cost of a bit less healing. It was very difficult to heal others due to the long do_after and thus we saw very few Nurse Spiders. Breacher Spiders also are now NOT immune to cold, and will die if they try to space a room or go into space. ## Why It's Good For The Game Breacher Spiders are in kind of a difficult spot, both in theming and balance; their space resistance made them able to vent the station in multiple places by breaking key walls, and they had no need to commit to their sieges because they could escape into space at all times. It also broke part of the dynamic of Spiders wanting to keep the atmosphere in the station, and disincentivizing Breachers from venting the station also makes them more coherently a part of the Nest because they won't reduce the Nest's habitable area. Viper Spiders were seen quite little instead of the other options in the Enriched Egg; now, hopefully we'll see more. Likewise, the Breacher is quite powerful for being an Abnormal Egg, so perhaps now we'll see more focus on cocooning to unlock the powerful Breachers, or just overall less of them, which will help even the odds. Nurse Spiders were VERY underutilized despite their power— the do_after for their healing just felt obnoxiously long, and especially in tense situations, you'd have shuffle and Spiders yelling at one another because two of them have to Space Hulk the hallway for a semi-extended period of time. Now, Nurses will be able to heal and move on a bit faster. I don't believe this will create too many issues, balance-wise, as the time-to-kill on Spiders is still quite low for all but the tankiest against lasers and even welders. ## Changelog 🆑 Jane balance: Spider Breachers and Vipers have swapped castes. Breachers come from Enriched Eggs while Vipers come from Abnormals! Breachers can no longer survive in spaced rooms/temperatures. The Nurse wraps wounds faster, but with less damage healed per wrap. /🆑 |
||
|
|
2c7fe7b8cd |
Returns medical jumpsuits for medical doctors and CMO (#83191)
## About The Pull Request Gives medical doctors and CMOs back their jumpsuits. Additionally removes their surgery cap from their starting gear. Surgical scrubs and surgery caps are still available in vending machines and in other places. Coroner still has their scrubs. ## Why It's Good For The Game The scrubs have never made sense to be as part of a medical doctor's starting gear. Scrubs are meant to be put on for one surgery and replaced afterwards, not to be worn 24/7. Also, in my opinion, they look goofy as hell. Especially when doctors are wearing lab coats over them. [_Being a medical doctor does not inherently mean you're doing surgeries either._](https://www.youtube.com/watch?v=8byiwOY5XM0) ## Changelog 🆑 image: Medical doctors and CMOs now start with their jumpsuits rather than surgery scrubs and caps. /🆑 |
||
|
|
0cc5cfb178 |
Random Name Generation refactor, generate random names based on languages (for species without name lists, like Felinids and Podpeople) (#83021)
## About The Pull Request This PR moves random name generation for species onto their languages. What does this mean? - For species with a predefined name list, such as Lizards and Moths, nothing. - For species without predefined name lists, such as Felinids, their names will now be randomly generated from their language's syllables.   (In the prefs menu:)  Why? - Well, we actually had some dead code that did this. All I did was fix it up and re-enable it. - Generates some pretty believable in-universe names for various languages that are lacking name lists. Obviously defined lists would be preferred, but until they are added, at least. - Moves some stuff off of species, which is always nice. - Also hopefully makes it a tad easier to work with name generation. There's now a standard framework for getting a random name for a mob, and for getting a random name based on a species. Misc: - Adds a generic `species_prototype` global, uses it in a lot of places in prefs code. - Makes `GLOB.species_list` init via the global defines - Deletes Language SS - Alphabetizes some instances of admin tooling using the list of all species IDs - Docs language stuff - Deletes random_skin_tone, it does pretty much nothin ## Changelog 🆑 Melbert refactor: Random Name Generation has been refactored. Report any instances of people having weird (or "Unknown") names. qol: Felinids, Slimepeople, Podpeople, and some other species without defined namelists now automatically generate names based on their primary language(s). qol: More non-human names can be generated in codewords (and other misc. areas) than just lizard names. /🆑 |
||
|
|
b20c982404 |
Converts slimes to basic mobs (#82176)
## About The Pull Request After months of preparation, and further months of work, I am finally done. Please bear with me, as this is a massive refactor, but I have already atomized everything I could. This is now ready for review. General - The hilbert hotel slimes are now a subtype instead of a varedit. - The `use_mob_ability` subtree now also accepts non cooldown abilities. If set_behaviours is set up properly, mobs won't keep continously triggering it as if it were a 0 second cooldown action. The alternative would have been turning the slime abilities into cooldown abilities. - Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND` signal, instead of being part of attack_hand. - Adds datum/ai_controller/controller as a fourth, optional argument to `/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible to access blackboard keys. - Slimes no longer attack windows if they would accidentally move into them (when the conditions are met), since random walk behaviour ignores tiles they can't go in. It was also not worth to keep. Did you know this was the sole override of `ObjBump()`? - Examine was made less snowflaky/bespoke. Also added a new element: `/datum/element/basic_health_examine`, which is a simple bespoke element that prints out a custom message based on how damaged the basic mob it is attached to is. - Slimes only perform knockdown instead of paralysis, as they can attack more often now, and paralysis is not that fun. - LAssailant has been removed due being archaic code. To befriend a slime, you have to spawn a monkey with the slime console, or feed them a sheet of plasma. Simple grabbing the monkey or stuffing them in disposals do not work anymore. Slime console spawned monkeys will have a visible status effect, with pheromones coming off them to make this clearer. Actions - Feeding, reproduction and evolution is no longer a verb. - Slime feeding is no longer an action button. You have to use right click, or as previously, mousedrop. Slimes can always unbuckle from mobs they are attached to. Hunger - Instead randomly changing the starvation and max nutrition values while growing up, evolution costs 200 nutrion. This makes the code more readable, and behaviour more predictable, while still giving the intended time between evolving and splitting. As a result, I could also turn these into defines. - Added a component that handles doing an effect over time while buckled to a mob, until the mob dies or you get unbuckled. - Slimes gained nutrition is no longer randomly multiplied by the damage config value, but rather gain nutrition equal to twice the damage dealt. You'll have to eat one monkey to evolve, just as before. - Slimes do not heal passively. They only heal from eating. It was a rather miniscule value that did not have much effect. - Slimes generate electricity from hunger threshold, instead of the random amount of hunger threshold + 100. Environment - Slimes take 15 damage from cold every second, instead of using a complex formula (that also decreased the damage up to a point?). - Slimes still heal from burn damage, but this is now set on the damage coefficient list. - Slimes instead of getting stunned by the cold, freeze in an ice cube. BZ instead of setting them unconscious, calls the stasis status effect, allowing you to safely stash your hungry slimes for later. They also no longer slow down from the cold, as they are already slowed down by the damage they get. Conversely they no longer get a speed up from a random amount of temperature. I could be convinced to readd this either as part of the basic sensitive component, or a similar one. AI - Removed the attacked_stacks system. Slimes will just perform regular retaliation if you hit them in a harmful manner. - Slimes now use the pet orders component. They will interrupt their feeding when given a command by their master. - Slimes have their own subtrees. I tried to replicate as much as I could from the old code, dividing ancient code artifacts and intentional stuff, so there might be some weirdness. - Slime speech has been almost fully reduced to basic blorbing, as you can not even understand them anymore, and most of them require the slime to loop through all of their surroundings. - Discipline does not have stacks either. Disciplined baby slimes have a chance to clear their attack and hunt blackboard keys. All slimes will stop feeding on the target otherwise. - Since discipline is not a stack, rabidity instead gets removed at a 10% chance per disciplining. - Slimes faces are a bit more randomly picked now. ## Why It's Good For The Game - We want to convert all simple animals to basic mobs. Old slime code was also very strange, and had some systems that have been replicated by components. - Slimes fully paralyzing you is not fun at all. Knockdown should give you a fighting chance when a slime would like to eat you. - Slimes slow down from the heavy damage they get from the cold, so I don't think they need extra slowdown, nor do they need to speed up from warmth, as they are already fast. - Slimes turning into an icecube instead of becoming paralyzed from the cold is more fun for the slimes, as they can break out for a few moments. It is also funny. - Slimes entering proper stasis from BZ is not just a visual indicator of a slime that is safe to approach, but also keeps the slimes's hunger value in check, allowing it to not starve while stopped. They can also look around and blorble, instead of staring at a black screen, if player controlled. - The attack_stack and discipline_stack behaviours were rather overcomplicated, and the xenobio mains I talked with didn't even know it was a thing, so I argue it needed simplification. - The bespoke friendship system of slimes was also too complicated. Slimes slowly gained levels of trust, and at certain levels commands costed friendship, and other levels, they did not. The binary friend/not friend system that everything else in the game uses is much more sensible. - Using right click for feeding is much more sensible than using an action, and then picking someone from a dropdown. - Slime speech was very soulful but not only did it loop through everything in sight, you couldn't even understand it unless you spoke slime. Maybe it can be readded later in a different form. - Slime's passive healing was miniscule, and having them rely on feeding is more interesting. also fixes #81463 ## Changelog 🆑 refactor: Slimes are now basic mobs. Please report any strange behaviours! balance: Slimes only stun you for two seconds when they shock you, the rest of the duration is a knockdown. balance: Slimes are not stunned from the cold, but rather, get frozen in a freon icecube. BZ also puts them in complete stasis, instead of making them unconscious. Their speed is likewise unchanged by temperatures. balance: Slimes do not passively heal, they instead rely on feeding. fix: Slimes can use the buckling screen alert to unbuckle and stop feeding, along with clicking on the mob they are riding /🆑 |
||
|
|
9d9da3a790 |
Spider web graphics (#81839)
## About The Pull Request Here is what webs look like. It looks like pure ass and I hate seeing it.  Here's my attempt at making them look nicer.  Notes: Genetics Power webs now have a slight purple tint to differentiate them from regular spider webs, so spiders aren't confused about why they can't cross these ones. On the backend I condensed a lot of these typepaths to inherit from each other instead of not doing that. In the future I am going to use this to cut down on the excessive amount of action buttons we have for these too. Here's (most of) what the action buttons look like. this screenshot also demonstrating that we have a serious problem with how many buttons we give to spiders.  After this is merged I will embark on two further projects: - Wallening version - Reworking spider web placement to not be a function of having 15 action buttons, it's _so bad_. While I was working on this I noticed that AI spiders would not automatically place webs on certain crossable tiles, because we forgot to pass an argument to a proc. I fixed that too. Oh also final change I almost forgot to document:  I made you jiggle if you get stuck in a web. ## Why It's Good For The Game The previous sprites looked bad and these look less bad. ## Changelog 🆑 fix: AI-controlled spiders can correctly recognise where they can place webs. image: New sprites for most kinds of spider web /🆑 |
||
|
|
af6cabda32 |
Venus Human Traps have an orbit menu category, recieve antag datum on spawn (#81411)
## About The Pull Request Venus Human Traps now have their own category in the orbit menu. It is a pleasant shade of green, just like vines are.  Venus Human Traps are also now given their antagonist datum upon spawning from a flower. The datum isn't really anything special but it's consistent with the other antag spawners. This also makes the spawner piece of the VHT flower bud invisible. It's an abstract object meant to handle the logic for spawning, and only the structure should be visible. This currently manifests as there being two, identical flower buds on the same tile when a flower bud spawns. I did not want to get into untangling the two objects in this PR. ## Why It's Good For The Game Venus human traps being lumped in with the humans in the "Alive" menu is WEIRD. Now ghosts can give a gigantic vine infestation the attention it truly deserves. Fixes a minor visual incongruity found while doing all this. ## Changelog 🆑 Rhials qol: Venus Human Traps are now visible in the orbit menu. Cool! fix: Spawning as a Venus Human Trap now properly gives you an antag datum/objective. fix: Venus human trap flowers no longer have a second, identical flower under themselves. /🆑 |
||
|
|
d0a19bdd92 |
Spider egg radial menus now require proximity (#81209)
## About The Pull Request Spider radial menus now require proximity, and will close if you move away from them.  ## Why It's Good For The Game Clicking the egg and not picking anything leaves the radial open. If you try to use any other eggs the menu will not open until you track down the radial menu and close it properly. If you aren't aware of this, it'll feel like all of the eggs are broken and lead to confusion. This has happened to myself and others. ## Changelog 🆑 Rhials qol: Spider eggs will now close their spawn menu when you move away from them. /🆑 |
||
|
|
0c89bfde44 |
Wendigo Cave Ruin & Domain Aesthetic Refresh + Wendigo Corpse Fix (#80334)
## About The Pull Request Updates the Wendigo Cave ruin on Ice Box and it's domain to be more detailed, without changing the shape of the arena too much. Also fixes the Wendigo attacking corpses,   And the domain!  ## Why It's Good For The Game Makes the Wendigo arena and the surrounding area more varied visually, as well as stopping the Wendigo from attacking the decorative corpses used in the domain. (Previous Arena for reference)  ## Changelog 🆑 qol: Wendigo Cave ruin gets an aesthetic refresh fix: Wendigos (Wendigi?) no longer attack corpses /🆑 |
||
|
|
54ab1e3936 |
Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- 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. --> closes #53931, #70916, #53931 ## About The Pull Request Organs were previously stored in nullspace. Now they are stored in their prospective bodyparts. Bodyparts are now stored in the mob. I've also had to refactor a lot of code concerning organ movement. Previously, organs were only moved into bodyparts once the bodyparts were removed. To accomodate this change, two major distinctions have been made: **Bodypart removal/insertion** Called only when an organ is taken out of a bodypart. Bodypart overlays, damage modifiers or other changes that should affect a bodypart itself goes here. **Mob insertion/removal** Called when an organ is removed from a mob. This can either be directly, by taking the organ out of a mob, or by removing the bodypart that contains the organ. This lets you add and remove organ effects safely without having to worry about the bodypart. Now that we controle the movement of bodyparts and organs, we can fuck around with them more. Summoning someones head or chest or heart will actually kill them now (and quite violently I must say (chest summoning gibs lol)). https://github.com/tgstation/tgstation/assets/7501474/5efc9dd3-cfd5-4ce4-b70f-d0d74894626e I´ve also added a unit test that violently tears apart and reconstructs a person in different ways to see if they get put toghether the right way This will definitely need a testmerge. I've done a lot of testing to make sure interactions work, but more niche stuff or my own incompetence can always slip through. ## Why It's Good For The Game <!-- 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. --> A lot of organ work is quite restricted. You can't C4 someones heart, you cant summon their organs and a lot of exceptions have to be made to keep organs in nullspace. This lets organs (and bodyparts) play more nicely with the rest of the game. This also makes it a lot easier to move away from extorgans since a lot of their unique movement code has been removed and or generalized. I don't like making PRs of this size (I'm so sorry reviewers), but I was in a unique position to replace the entire system in a way I couldn't have done conveniently in multiple PRs ## 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. --> 🆑 refactor: Your organs are now inside your body. Please report any issues with bodypart and organ movement, including exotic organ, on github and scream at me fix: Cases of unexpected organ movement, such as teleporting bodyparts and organs with spells, now invokes a proper reaction (usually violent death) runtime: Fixes HARS runtiming on activation/deactivation fix: Fixes lag when species swapping /🆑 <!-- 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. --> |
||
|
|
f8b41f9442 |
Changes occurrences of recieve in code to receive (#80065)
## About The Pull Request I've stumbled across this enough to finally go through the entire codebase and fix it. I left out changelogs simply because rewriting history logs is bad. ## Why It's Good For The Game I find it pretty annoying because I stumble across words that are misspelled for a few seconds, and I'm likely not the only one who feels like this. Less spelling mistakes in code are better. ## Changelog 🆑 spellcheck: Occurrences of "recieve" has been changed to "receive". /🆑 |
||
|
|
4b4ada0339 |
Slime type datum, and cleans up slime related code (#79852)
## About The Pull Request I have decided to help out with basic mobbing slimes, and found out, that this code is ancient and crusty. So I have decided to refactor and tweak things bit but but, until the moment I will hit AI related stuff. I might have gone a bit overboard, and performed a melange of fixes. I have done the following in order: - Slime colour, core type and mutation list are now held by a single `slime_type datum`. This means the slime's core is no longer spawned using text operations on the slime's colour, and the slime's mutation is no longer a single large switch statement that returns an exactly four element length array. Icons are still based on the slime's colour define, but that is now more changeable. - Autodocced all the slime procs and vars I could find, while also renamed them to be more descriptive. Also made Booleans actual booleans. Also added code to confused code segments. For example, did you know that slimes would forgive all its stacks of Feeling Very Attack Right Now, if it has exactly one level of Discipline? I didn't, and I almost turned the 1 in the check into a TRUE before I had a second look. - Added defines to the slime hunger checks - Cleaned up a lot of single letter vars in all code that referenced the now changed variables. - Large amount of if-chain pyramids have been turned into early returns. More readable. - Made the xenobiology camera shortcuts and actions always do the same thing, though the action buttons still loop through all of the conents. In addition, after seeing a comment lamenting about varied load orders, I have made autolinking the monkey recycler is now done in LateInitialize, which didn't exist when it was made. - I have included an UpdatePath that changes the colours of premapped slimes, but I did not do anything for the other values. - I noticed slimes were unable to attack pacifist humans, due to trait checking the human instead of the attacking slime. This has been fixed. - The slime scanner has an examine block, and it now describes your slimes' "mutation attempt chance", instead of like, performing math in case the slime's current colour is one of the mutations, or hiding it if it has none. This value is needed to breed rainbow slimes. This has been an extremely large scrubbing. I am willing to try rip it up into smaller chunks, even if most of it is just single letter vars and if pyramids. ## Why It's Good For The Game If code is more readable and expandable, it will aid in further refactors. ## Changelog 🆑 refactor: Slimes's colour, core type and mutation list is now held in a slime type datum code: Slime's variables have been documented, and renamed a bit to add clarity. Please report bugs that might stem from renaming. fix: Slimes are not longer prevented from attacking pacifist humans. qol: Slime scans now display the actual amount of genetic instability, instead of hiding it if a slime doesn't mutate further, or tweaking it if it might mutate back into itself. This will make it easier to parse which slime to breed further to get a rainbow slime. /🆑 |
||
|
|
bbe440b3d6 |
More standardization for ghost notifications (READY) (#79596)
## About The Pull Request I'm still not satisfied with how ghost notifications work. This gives every notification with a source (99% of all notifications, in other words) a link to jump/orbit. Currently, notifications with "play" interactions would only get the interact link, so jumping to the source was pretty annoying. It removes posting the entire message in the alert tooltip, as some got pretty lengthy and it didn't seem to fit. To replace this, they will always use headers After:    NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference seems to be whether it's a turf. The result shaves off some redundant lines of code, since most-every usage of notify_ghosts uses NOTIFY_ORBIT. ## Why It's Good For The Game More standardization for the ghost notification system. Adds a few alert headers that never had them. All in all, makes it easier for creators to throw alerts at ghosts ## Changelog 🆑 qol: Nearly every ghost alert should now feature a "VIEW" button, even those with click interaction. del: Ghost alerts no longer show the entire message in the tooltip, instead have been replaced with titles. /🆑 |
||
|
|
3c7005a37c |
Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request This helps clean up my favorite helper proc in the whole codebase, `notify_ghosts()`. The notify_suiciders, ignore_mapload, and flashwindow args are GONE. They have been replaced with the notify_flags bitflag argument. This was intended to make deadchat announcements a bitflag argument too, but those got reverted right before I originally wanted to submit this PR. The on-screen popup now shows the notification body when you hover it with your mouse again. The format is now `[notify_ghosts message] -- [click action (orbit/jump/play)]` Every single `notify_ghosts()` call has been changed to multiline format and has been given trailing commas. Pretty! ## Why It's Good For The Game Cleans up a proc that is very popular and going through a lot of changes at the time. Allows for further flexibility when this proc inevitably gets tweaked or improved. 12 -> 10 args is an improvement, and it doesn't impact the helper's flexibility at all. ## Changelog 🆑 Rhials code: The notify_ghosts proc has been cleaned up. Please report any abnormal changes in deadchat notification behavior. qol: The on-screen deadchat popups now contain the notification blurb when hovered with your mouse again. /🆑 |
||
|
|
07f2214ac4 |
Basic Wizards (#79476)
## About The Pull Request Makes NPC wizard mobs into basic mobs. These aren't actually used anywhere, since their away mission was removed, so I figured I'd have some fun with them.  Noteworthy changes are as follows: - Wizard mobs can now wear any of the four basic colors of wizard robe and hat. Rarely, they will wear the witch ("Marisa") outfit instead. There was going to be a rare Tape Wizard spawn too, but the outfit doesn't work correctly for some reason (see comments below). - Wizard mobs no longer have a set spell loadout. Instead, they always receive a random **targeted, primary spell**, a random **untargeted, secondary spell**, and the spell **Blink**. - Wizard subtypes (or var-edited wizards) can have any of the above specified rather than random. - Wizard AI will try to avoid ever being in melee, and will fire off spells whenever possible with the priority order of primary > secondary > blink. There is a mandatory 1-second waiting period between casts. - Wizard mobs use "lesser" versions of Fireball and Blink. Lesser Fireball does a little less damage and has a smaller explosion, though it is still extremely dangerous. Lesser Blink simply has a smaller blink radius so that wizard mobs don't just decide to leave. Depending on their spell loadout, wizards can be _incredibly_ dangerous mobs - stunning you with tesla blasts, shooting you with fireballs, and more. Even weakened, fireball is the nastiest of these by far, able to set you on fire or remove your limbs if you aren't properly protected. Watch out! The random lists have been kept pretty small, since I only wanted to use spells that I know for sure work. Spell cards is pretty weak in AI hands, since they don't take advantage of the fact that a human player can spam it, but I wanted there to be a little variety in primary attacks. I included an UpdatePaths script here in case a downstream is using these, but I doubt it was necessary. ## Why It's Good For The Game Removes another simplemob. The actual impact of this change is negligible, since this is an unused mob, but it's possible that this lays the groundwork for these actually being used - particularly since mappers can make them as powerful or weak as they want by specifying a spell loadout. Wizards may make for a tough boss challenge for a ruin or away mission, or a very mean surprise for an admin to drop on an unsuspecting station. ## Changelog As this is an unused mob, there are no player-facing changes. |
||
|
|
34e488acf5 |
Spider Infestation Balance Rebalance Expansion Part 2 (#78705)
## About The Pull Request Balances 1. Spiders now slow down equivalent to their health 2. Tarantulas can no longer put web passages or solid webs and destroy walls outside of charge attack 3. Young spiders now cant pull objects do to being too weak and become slower outside of webs as they should be 4. Makes pneumatic airlock seal unable to be destroyed by spiders 5. All Broodmother eggs now have a cooldown timer Normal Eggs: 20 seconds Abnormal Eggs: 180 Seconds Enriched Eggs: 60 seconds Expansions 1. Added a new abnormal egg category 2. Broodmothers can now lay abnormal eggs 3. 2 new spiders added 6. A new web type: Reflective silk screen # Breacher    - Low damaging with High wound bonuses meant to debilitate enemies to take ground for the nest - Has the ability to breach areas by destroying walls with menson vision to map out strategic breachings - Immune to harsh environments with the ability to lay solid webs to protect the nest environment - Can send in warnings for the entire nest to hear Will Help the nest get out of being closed off by small construction attempts and fix some space breaches plus some back up by making enemies slower and scarring them off with some bloodloss # Tank   - Extremely low damaging build to absorb damage to hold ground for the nest - With the ability to lay down silk screen reflectors to protect the nest from missile attacks - Can heal itself at a slow rate Will provide great support to keep the nest at bay from range attacks at some extent and act as a damage absorber in dier situations # Abnormal Eggs   - They can only be made once every 180 Seconds - Hold the two new spider types ## Why It's Good For The Game New spiders to contribute to the general spider antag team dynamic, balances for spiders are always good making them funner to play against and bringing up challenges on their gameplay making them act less like murdering simple mobs and more like an actual nest trying to survive in the station. How? 1. **Cooldown egg laying:** broodmothers now have to be more strategic on where they place their eggs with an average of 3 eggs per minute per broodmother 2. **Spider slowdown on damage:** Spiders now will become slower the longer they stay out of the nest in battle making them have to retreat back to the nest shortening their time out murdering giving incentives to expand the nest 3. **Spider More Brute Damage:** Gives a reason to use melee against spiders although more dangerous it gives more reward due to the higher damage outputs since spiders are pretty much big bugs with delicate bodies no bones no good structural consistency equal more damage to blunt attacks 4. **Tarantula Nerfs:** Tarantulas shouldnt be able to destroy this many walls at this rate and be able to lay so many defensive webs I don't know why they had this abilities but their strong enough as is ## Changelog 🆑 add: Added Abnormal Eggs add: Added Two new spiders del: Some Tarantula abilities balance: Spiders speed are now connected to health balance: Spiders now take more brute damage balance: All egg laying now has a cooldown /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
b65f729901 |
Nanotrasen basic mobs. (#78917)
## About The Pull Request First and foremost, converts all Nanotrasen simplemobs into basic mobs. To avoid messy and redundant code, or god forbid, making Nanotrasen mobs a subtype of Syndicate ones, I've made Syndicate, Russian, and Nanotrasen mobs all share a unified "Trooper" parent. This should have no effect on their behaviors, but makes things much easier to extend further in the future. While most of this PR is pretty cut-and-dry, I've done a couple notable things. For one, all types of ranged trooper will now avoid friendly fire, instead of shooting their friends in the back. Even the Russians have trigger discipline. I've also created a new AI subtree that allows mobs to call for reinforcements. I've hopefully made this easy to extend, but the existing version works as follows: - A mob with this subtree that gains a target that is also a mob will call out to all mobs within 15 tiles. - If they share a faction, mobs receiving the call will have the target added to their retaliate list, and have a new key set targeting the calling mob. - If they have the correct subtree in their AI controller, called-to mobs will then run over to help out. Sadly, this behavior is currently used only by a few completely unused Nanotrasen mobs, so in practice it will not yet be seen. Finally, I've fixed a minor issue where melee Russian mobs punch people to death despite holding a knife. They now use the proper effects for stabbing instead of punching. ## Why It's Good For The Game Removes 8 more simple animals from the list. As said above, making all "trooper" type mobs share a common parent cuts down on code reuse, ensures consistency of behavior, and makes it much easier to add new troopers not affiliated with these groups. I expect that I'll make pirates share this same parent next. The new "reinforcements" behavior, though extremely powerful, opens up exciting new opportunities in the future. There aren't many existing behaviors that allow basic mobs to work _together_ in interesting ways, and I think adding some enemy teamwork could be fun. ## Changelog 🆑 refactor: Hostile Nanotrasen mobs now use the basic mob framework. This should make them a little smarter and more dangerous. Please report any bugs. fix: Russian mobs will now actually use those knives they're holding. /🆑 |
||
|
|
153e06dc04 |
Partially reverts ghost announcements (#79221)
## About The Pull Request #79139 turned out to be quite annoying, it wasn't taken into account that these alerts can stack (ie: spiders). Of course, I poked around the code and found some inconsistencies in the process. For instance, there were usages of Topic for custom action behavior which could've been consolidated. There were other instances where jump (the default action) doesn't give a link at all, which I think it should anyway, since the screen toast gives you this. I've standardized it more, meaning you can use "NOTIFY_PLAY" without writing a custom link and topic handler (for instance, MMIs) ## Why It's Good For The Game Fixes #79198 Fixes #79195 ## Changelog 🆑 fix: Ghost alerts have been tuned down a bit. /🆑 |
||
|
|
847514310d |
Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request Saw this in CI.  ~~Quick fix for it--because turrets are not mobs trying to call this proc on them will runtime. So let's give them their own implementation of the proc.~~ Just kidding, let's refactor faction checking entirely ## Why It's Good For The Game Fixes an issue with basic mob AI targeting and turrets. ## Changelog 🆑 fix: basic mobs will no longer runtime when trying to check the faction of a porta turret refactor: faction checking is now done at the atom/movable level /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
9cf089361e |
Abandoned Domains: Adds two new psyker-oriented virtual domains (#78892)
## 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. /🆑 |
||
|
|
eb28d04f08 |
Watcher Nest Lavaland Ruin (#78790)
## About The Pull Request Adds a small new lavaland ruin, the Watchers' Grave.   You will need to figure out yourself how to find a way through the walls surrounding it (it's not very hard). This is mostly just atmospheric but also serves as a delivery vehicle for a unique item; an orphaned Watcher egg. (That's kind of it in terms of loot, unless you count a handful of lavaland mob corpses and mushrooms). You can either eat this (it's an egg), throw it at someone to spawn an angry watcher, or keep hold of it for a while and see what happens. <details>  That's right it's your very own baby watcher. It orbits your head and shoots at lavaland creatures for unimpressive damage. It won't ever intentionally shoot a player but they might walk in front of it, as it doesn't hurt very much they will probably forgive you. If you die it will continue circling your corpse to guard it against predation. </details> In creating this ruin I also added a new component called "corpse description". It provides some extra examine text to a corpse which is removed permanently if the mob is revived. There's a field you can varedit on corpse spawners (or make a subtype) which will automatically apply it to spawned corpses. You can use it for environmental storytelling. Or admins can use it to make fun of how you died. Also I fixed basic mobs runtiming when examined by ghosts. ## Why It's Good For The Game More variety in map generation. It's cute. Adds a tool that mappers might like. ## Changelog 🆑 add: Adds a new lavaland ruin where you can find a unique egg. /🆑 |
||
|
|
191c9380f4 |
venus human traps are basicmobs + ""balance"" (#78749)
## About The Pull Request theyre basicmobs now, tangling is an ability and also applies a leash for the duration of the beam they now have 100 HP also when theyre not within 2 tiles range of space vines every Life tick they take 20 damage(they have 100 max hp) if they are in range however they heal 10 damage theyre slightly slower too, and they deal 10-20 damage, from the previous guaranteed 20 damage also their attack cooldown is 0.2 seconds slower the tangling does not automatically pull people but for the duration of the tangle the victim is leashed to you which means they cannot go out of range of you, so you can move backwards to pull them closer (as seen in video) https://github.com/tgstation/tgstation/assets/70376633/aed77f81-c564-4fcc-879e-7dd8a9b5c787 ## Why It's Good For The Game basicmob good also fighting these dudes unprepared is a death sentence and being caught unprepared is easy if kudzu decides to spawn in the middle of fucking nowhere and rolls flowering, then absolutely does not listen to the protect kudzu part and goes from the middle of nowhere to medbay to murderbone hopefully this should make them less proficient at shredding people and make them actually defend kudzu instead of murderboning ## Changelog 🆑 refactor: venus human traps are basicmobs now balance: venus human traps have 100 health balance: venus human traps take damage out of range of kudzu, heal near kudzu, are slightly slower, attack slower, and their damage output is slightly more random balance: also venus human trap tangle ability now needs you to actually move backwards to pull victims /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
3e554bdab3 |
Flesh Spiders Regenerate + QoL (#78704)
## About The Pull Request Replaces the Healing Touch component on Changeling-spawned Flesh Spiders with the Regenerator component, as the comment helpfully suggests. Flesh Spiders can no longer touch themselves to heal, instead they automatically begin regenerating their health if they go four seconds without taking damage. It takes 6 seconds to fully regenerate, so 10 seconds to fully heal from the edge of death (less if you're not that injured).  Also I changed the sprite for flesh spider eggs to a different one we already had rather than regular spider eggs tinted red, just because I felt like it. Would be cool to give the spiders their own sprite some time, but that's for another PR.  _Additionally_ the flavour text for flesh spiders was kind of messed up by being shoved into the objectives box and claiming that it was a directive from a spider queen you don't have, so I gave them their own slightly different antag datum to compensate. It also actually mentions how you heal yourself, which previously was down to trial and error or codediving. In the course of doing this I decided to just... move flesh spiders to their own type path. It _sort of_ made sense for them to be part of the giant spider typepath, but they keep being modified by changes targetted at "balancing the Giant Spiders antagonist" which this mob isn't related to and doesn't have any reason to follow. The fact that a mob has similar stats to another one isn't automatically a reason to share a typepath, and now that I have looked a little at this mob I'm sort of interested in branching it further away from "it's a spider mob but spawned a different way" in the future. Finally, this spider egg cluster and the midwife one would prompt ghosts with a radial menu with a single option on it... that's a bit pointless, so we'll bypass that menu if there is only one possible outcome. ## Why It's Good For The Game Currently Flesh Spiders heal by clicking on themselves and standing still for two seconds, restoring 50% of their HP. This means they can fully regenerate over 4 seconds unless you stun them, and with 90 HP you're not _that_ likely to kill one during the channel time. This just feels like an odd way for the creature to operate, regenerating instead gives it a hit-and-run strategy and adds more use to their webs (maybe we should give them meatier or bloody webs at some point? Might be cool). Also clicking yourself to heal is just unintuitive and I suspect several players just didn't realise they could do it in the first place. ## Changelog 🆑 balance: Flesh Spiders heal automatically over time if they go a short time without taking damage, instead of healing large chunks by clicking themselves and waiting two seconds. qol: Spider egg clusters which only hatch into one kind of spider don't ask you to select that one type from a radial menu with one option on it. qol: As a Flesh Spider, the game now tells you how you can heal yourself. /🆑 |
||
|
|
d6f79f4427 |
Refactor gib code to use bitflags and have documentation (#78754)
## About The Pull Request This takes all the gib related procs: - `gib()` - `spawn_gibs()` - `spill_organs()` - `spread_bodyparts()` And adds heavy documentation that communicates what the procs are used for and how the different bitflags affect them. The difference is noticeable: `gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)` The code is now much more legible which is important considering it's used in a lot of places! Another robust change, is that we had several places in the code where there were double negatives like so: ``` /mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!? // do stuff here ``` This is a mindfuck to untangle. I inverted a lot of these parts so we don't lose our sanity. Last thing that was changed was a big `if()` loop in the `spill_organ()` proc. This was refactored to just be a simple `for` loop with `continue` statements where we needed to skip enabled bitflags. It's now shorter and cleaner than before. The only slight gameplay change this affects is that gibbing a mob now guarantees to drop all items unless the `DROP_ITEMS` bitflag is deliberately omitted. Some places like admin gib self, we don't want this to happen. ## Why It's Good For The Game Gib code is very old. (~15 years) People kept adding more arguments to the procs when it should have been a bitflag initially. By doing it this way, there is more flexibility and readability when it comes to adding new code in the future. ## Changelog 🆑 refactor: Refactor gib code to be more robust. qol: Gibbing a mob will result in all items being dropped instead of getting deleted. There are a few exceptions (like admin gib self) where this will not take place. /🆑 |
||
|
|
13cfcdad6b |
Ashwalkers team stores players_spawned via ckeys rather than keys now (#78688)
## About The Pull Request So this just changes some instances of `key` to `ckey`. There is a reason for it I swear! So when ashwalkers get spawned their mob gets added to the `team.players_spawned` list via their `key` var. --- However, we have this as part of sacrifice code: Here the `deliverykey` var is set to `fingerprintslast`, which is a ckey. |
||
|
|
f861532d24 | Basic Legion & Hivelord (#78624) | ||
|
|
d436cf433d |
Gives maint drones random designations (#78573)
## About The Pull Request Right now, drone ghost spawners give all drones the name "drone." This makes it difficult to differentiate drones, both as a drone in drone chat and as a non-drone. This gives all drones a unique identifier like posibrains. Also changes a couple of 1s to TRUEs ## Why It's Good For The Game It's good to be able to identify drones, and for drones to be able to identify each other. ## Changelog 🆑 Tattle qol: drones now have individual names, instead of just "drone" /🆑 Co-authored-by: tattle <article.disaster@gmail.com> |
||
|
|
a3849062b8 |
Feature: bitrunner, a new supply role (READY) (#77259)
## About The Pull Request [Design doc](https://hackmd.io/@shadowh4nd/r1P7atPjn) Adds a new supply role centered on short dungeon-esque runs with a focus on unifying the job with the fun part. Some virtual domains are combat related, some are silly, some focus on "objectives". Avatar health is linked to your physical presence and retries are limited. <details> <summary>Photos, WIP</summary> Net pod stasis  Server loaded  Server cooldown  the quantum console UI  Cyber police antag page  A safehouse  Domain info page, every domain gets this (and sometimes help text)  Me getting steamrolled in one of the missions  Ghost roles getting notified that server is kicking them out  Players enjoying the new combat missions  Players exploring some of the virtual maps  (Not part of the PR, but)  New bitrunner vendor  </details> ## Why It's Good For The Game Content, firstly, and moreso being supply department content. The framework that this implements is a great (preauthorized) replacement for two systems which are collecting dust: BEPIS and the gateway. They integrate into this system and it's a direct upgrade. This adds a way for the players on station to generate materials (if that remains). The nice part about it is that I can throw balance and believability to the wind, as unlike its unrelated predecessor VR or away missions, bitrunning entirely washes its hands of the map and mobs each reboot. It offers a very expandable map framework to add content and it's all fairly well documented. I'd like to add a feature that represents the idea that jobs don't have to be mundane and "external" jobs can stay tied to the main gameplay loop. ## Changelog jlsnow301, kinneb, mmmiracles, ical92, spockye 🆑 add: Adds Bitrunning to supply department- a semi-offstation role that rewards teamwork. add: Adds new machines to complement the job- net pod, quantum server, quantum consoles, and the nexacache vendor. add: Adds several new maps which can be loaded and unloaded at will. add: Some flair for the new bitrunning vendor. add: Adds a new antagonist for the virtual domain only. Short lived ghost role that fights bitrunners. del: Removes the BEPIS machine, moves its tech into the Bitrunning vendor. /🆑 <!-- 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: MMMiracles <lolaccount1@hotmail.com> Co-authored-by: Ical <wolfsgamingtips@gmail.com> Co-authored-by: spockye <79304582+spockye@users.noreply.github.com> Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> |
||
|
|
ff480386cd |
Fixed snow legion corpse spawning. (#78147)
## About The Pull Request Resolves #77973 Due to a pair of oversights, snow legions erroneously drop two corpses when killed, and both of these corpses use the spawnlists for Lavaland legions. The duplicate has been removed, and the snow legion corpse spawner is no longer a subtype of the regular one - which was causing the issue. Now the new corpses will actually spawn. ## Why It's Good For The Game Makes #76898 actually work. ## Changelog 🆑 fix: Snow legions now drop only one corpse, and no longer drop Lavaland corpses. /🆑 |
||
|
|
7f25d8d47e |
[NO GBP] Fixing a small issue with chasm fishing (#78111)
## About The Pull Request The default spawnables from chasms are spawned on top of the chasm rather than on the user's turf, and that can be an issue. ## Why It's Good For The Game This will fix #77982. ## Changelog 🆑 fix: fixed fishing skeleton mob spawners that immediately crumble back into the void of whatever chasm you fished them from. /🆑 |
||
|
|
69f51c6c65 |
Fixes typo 'transfered', olive oil reaction repath (#78064)
## About The Pull Request Transferred. ## Why It's Good For The Game How did this get to be in 71 files?! This bothers me. Also changes 'quality_oil' typepath in the reactions to 'olive_oil' to match its rename post-foodening. ## Changelog N/A |
||
|
|
a56270cb05 |
Fixes issue where role banned players can still play roles they're banned from. (#77738)
## About The Pull Request `is_banned_from(...)` expects a ckey. `/obj/effect/mob_spawn/ghost_role/attack_ghost(...)` checks for role bans by using key instead. This can lead to players whose keys and ckeys are different being able to evade certain ghost role bans; by accident or otherwise. This PR takes a two-pronged approach. The first fixes ghost roles passing in the key instead of the ckey to is_banned_from. This fixes the bug, and makes it consistent with all other cases of `is_banned_from(...)` being called. The second is to redefine the behaviour of `is_banned_from(...)` to accept either a ckey OR a key, since converting from key to canonical key should be a fairly trivial operation. This prevents this specific bug from ever occuring again, by making it intended functionality to pass either key or ckey similar to how the roles param accepts either a string role or a list of roles. ### ***Please review the code carefully, my changes to `is_banned_from(...)` have not been tested. No logical flow should have been changed.*** ## Why It's Good For The Game Ban systems working good. ## Changelog 🆑 fix: Fixes an issue where role banned players would be able to accept certain ghost roles they're meant to be banned from. /🆑 |