mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 18:14:22 +01:00
docker-container
1069 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f601a6ddaf | Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 | ||
|
|
f3283799e7 | Reworks lavaland tendrils into minibosses (#96186) | ||
|
|
e68c1edad1 |
Streamlines Life() a little (#96215)
## About The Pull Request Main changes - `handle_mutations` is gone, DNA Injectors are now managed via a status effect - `handle_diseases` is gone, disease stages are just handled via life signal - `handle_bodyparts` is gone, it was unused and in the future any implementations should use a life signal - `spec_life` is gone, the main content of it is now in `human/Life`, most children implementations now use life signal, zombie tongues now handle zombie groans - Life signal was split in two (pre and active) Other changes - DNA injector code was cleaned up considerably - HARS now alerts admins when you inject someone else with it like Monkey - `COPY_DNA_SE` is no longer mistakenly unused (meaning stuff like transformation sting no longer copies "active mutations") ## Why It's Good For The Game Across the course of a full round we spend the same amount of time doing literally nothing in life as we spend on handling human breathing. Now in the context of a full round this is 8 seconds. Which in the grand scheme of things, not a whole lot, but if we can get a tiny performance gain from... not doing literally nothing (especially when we can do these things cleaner with signals) that's a win in my book ## Changelog 🆑 Melbert refactor: Refactored dna injectors (both the ones that change appearance and activate mutations), report any oddities with them like failing to revert your appearance or mutations not applying correctly code: Ever so slightly changed how diseases tick, report any oddities code: Ever so slightly changed how some species mechanics tick, like golems and slimes, report any oddities code: The code behind printing appearance modifying dna injectors from genetics has changed, report any oddities code: Some backend transformation sting code changed slightly, report any oddities code: Zombie "idle" groaning is now tied to the tongue rather than the species itself admin: Force-injecting someone with HARS give an admin alert, the same as force-injecting someone with Monkey fix: Several methods of copying DNA (including transformation sting) mistakenly copied "active mutations", this has been fixed /🆑 --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
d49c825f8e |
Bitrunning glitches take much longer to escape their simulation if there are remaining active bitrunners (#95934)
## About The Pull Request For every living, connected bit avatar remaining in the simulation, the `do_after()` for leaving the simulation as a bitrunning glitch ghost role is multiplied by 5. The base timer remains at it was, two seconds. Additionally, there is an exception in place for the "Island Brawl" domain, which is the FFA with infinite respawns. It still multiplies by 5 for each active bitrunner, but that multiplier is reduced by 1 for each death, so you likely only have to kill one wave of bitrunners for normal escape time. Additionally, because of necessity for the exception and also basic good sense, bitrunning points are no longer component-based on specific turfs in the domain, and are held in the server. It never should have been a component, it had no reason to be one. This, as a consenquence, also fixes that you could completely softlock any domain using points by simply crowbarring the turf that the crate was yet to spawn on. ## Why It's Good For The Game Yesterday, I saw one of the lamest things I've ever seen in the game. A bitrunning glitch spawns in, walks literally right by two bitrunners as they ask who he is, and leaves the simulation to go on a killing spree unburdened. There was extenuating circumstances in that situation, but it still was a miserable breakdown of what I think the intended gameplay of a bitrunning glitch is, and shows how ridiculously easy it is to simply not engage with the intended hurdle in your path. The primary(and, really, only) job of a glitch is to kill bit avatars, and this PR makes it significantly more difficult to just... walk by them to go on your killing spree on station. Work, then play. ## Changelog 🆑 balance: For every living, connected bitrunner remaining in a domain, bitrunning glitches will take five times longer to escape. fix: You can no longer softlock any virtual domain that uses points by crowbarring the reward turf before the crate spawns. /🆑 |
||
|
|
7cf1670987 |
Mirrors can trap dormant revenants (#95942)
## About The Pull Request If glimmering residue (revenant ectoplasm) is scattered in the vicinity of a mirror, the revenant will be trapped inside it instead. -When mirrors are cursed in this way, the reflections are shifty and distorted, like the revenant's reflection when it's alive. -In this state, the revenant may only communicate via telepathy with people reflected in the mirror (it's more like "standing close to it", but that's probably ok). -If the mirror is broken, the revenant will reform. If it's catatonic, a new candidate will be pulled, much like with ectoplasm reforming. -If the mirror is destroyed in another way, the revenant will be destroyed as well. -There is a 1/500 chance that a mirror will be haunted roundstart ## Why It's Good For The Game You can now torment the revenant by eternally trapping it if it really pissed you off ## Changelog 🆑 add: you can now trap dormant revenants in mirrors add: haunted mirrors may very rarely appear roundstart /🆑 --------- Co-authored-by: l0 <--> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
e861304e67 |
Omnitool fix & Engi Omnitool qol (#95752)
## About The Pull Request - Large tank welding tool is now merged with engi omnitool. The welding tank is shared across both omnitools so no extra fuel or such. Gives you greater versatility in switching between tools without requiring you to return the welding tool back to storage or bringing another omnitool into an extra module slot and frees up a storage slot in storage. Plus it just makes sense, completes the full set of tools an engi omnitool should be having. - Examining an omnitool also displays the examine of the internal tool it is using. So examining the engi-omnitool with the multitool selected will reveal what's in its buffer & examining it with the welding tool will display how much welding fuel is left etc ## Changelog 🆑 qol: merged large welding tool tank with engi omnitool for engiborg fix: examining the omnitool will reveal details about its internal tool such as multitool buffer, welding fuel left etc /🆑 |
||
|
|
8c45d65c4a |
State based digi and snout bodyshape (#96030)
## About The Pull Request Digi and snout bodyshape are added and removed if digi or snout is hidden There now also exists a digitigrade bodytype which is not removed if the bodyshape his Bodyshape is solely used for determining how the body is shaped for rendering Bodytype is used for checking stuff like "can digis wear shoes" This lets us clean up rendering code a bit, allowing us to pass around bodyshape rather than needing to check our wearer for digi and whatnot Digi itself is now a component for legs that tracks - on item equip or unequip - if said items squish the legs. ## Why It's Good For The Game Right now we do some super jank stuff like updating body every time we update our jumpsuit which is obviously a bit wasteful This should make things easier to manage and work with (and maybe more performant?) ## Changelog 🆑 Melbert refactor: Refactored how digitigrade and snouts render, report any oddities with that /🆑 |
||
|
|
f9da025c38 |
Fixes custom pizzas having broken sprites and not preserving their ingredients when sliced (#96106)
## About The Pull Request - Closes #95030 - Closes #96081 Removed raw pizza subtype as it is unused and does not function properly anyways Also makes pizzas preserve their fillings when sliced ## Changelog 🆑 fix: Fixed custom pizzas having broken sprites and not preserving their ingredients when sliced /🆑 |
||
|
|
ea0859d5fe | Bane refactor (now uses damage multipliers) (#96003) | ||
|
|
21b4095dfd |
[MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026 fixes https://github.com/Bubberstation/Bubberstation/issues/5549 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: loganuk <fakeemail123@aol.com> Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com> Co-authored-by: Isratosh <Isratosh@hotmail.com> Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com> Co-authored-by: Alexander V. <volas@ya.ru> Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Tim <timothymtorres@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com> Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com> Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com> Co-authored-by: Josh <josh.adam.powell@gmail.com> Co-authored-by: Josh Powell <josh.powell@softwire.com> Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com> Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com> Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com> |
||
|
|
af8f69da13 |
Adds "Event Logging", or EVLogging, A new debug system that allows us to track individual datums and log events on a timeline (#96035)
## About The Pull Request This Pull Request adds a new logging system that uses a timeline to track and visualize important events for specific datums. This is done via a new window in which you can select a datum for tracking, which adds it to the timeline. If this datum implements the EVLOGGING macros, it can track important events onto this timeline. As an example, we can log whenever an AI is deciding to make a new path, if it decides to generate a new decisionmaking plan, it finishes an action, or it decides to target someone/something. We can select these events to see more information, and optionally get a snapshot of important variables at the time this event was logged (like the blackboard and current plan for AI controllers). You can also filter out specific events / track info, which is done via categories. Each event / piece of track info is given a category and if you disable a category all events / track info in that category is hidden. This lets you filter out things you might not care about. <img width="2346" height="1209" alt="image" src="https://github.com/user-attachments/assets/0763077c-e349-4c7c-b017-23d29e1d089b" /> _whoever thinks we didnt need advanced cleanbot logging is a noob_ In the video below I showcase how this works; https://file.house/7nsOiqdvmSTxlsk3fs-e8g==.mp4 A cleanbot is roaming the halls, I turn on the event logger, click the "pick target" button and click on the datum I'd like to track (the cleanbot). This results in the cleanbot now tracking its events. I spawn some dirt and the cleanbot decides to clean it, and I go through the events; You can see theres different events being listed, such as when the cleanbot starts targetting the dirt, when it cleans plan, when it makes it JPS path and every time it moves over it. The macros I've currently implemented are as follows: **EVLOG_TEXT(DATUM, CATEGORY, INFO)** Only adds text to the event logger window, no world-visuals EVLOG_LOCATION(DATUM, CATEGORY, INFO, TURF) Adds text to the event logger and adds an image to where that turf is. EVLOG_TURFS(DATUM, CATEGORY, INFO, TURFS) Adds text to the event logger and adds an image to each turf in the TURFS list EVLOG_LINES(DATUM, CATEGORY, INFO, TURF_A, TURF_B) Adds text to the event logger and adds a line from turf_a to turf_B EVLOG_PATH(DATUM, CATEGORY, INFO, TURFS) Adds text to the event logger and visualizes a path from A to B (same way as the pathfinding debugger, of which I moved the visualization before to SSPathfinder) In terms of performance, the logger is a singleton, and events are ONLY logged if 1. The logger is running 2. The datum has the DF_EVLOGGING flag. This means most of the time, logging an event is a single var lookup (Since the runner is off by default). The DF_EVLOGGING flag is off by default as well and has to be enabled by the event logger, or set temporarily by a dev in code. This system can easily be extended with more event types / visualization types as well. (I'm thinking of datumizing the ones I have now) The TGUI is still a bit of a mess, I would love some pointers because I'm not really good at react so I just kind of hit it with a hammer until it did what I wanted 😎 Also, all of this is based on VisLogging from Unreal Engine, so it will have some likeness https://unreal-garden.com/tutorials/visual-logger/ ## Why It's Good For The Game This system allows us to debug more complex systems (like basic AI) in an understandable and clear way. While the implementation cases are not super common right now, extending this system could make debugging these systems much more comprehensible, and hopefully lets more developers help us with improving these systems. (plus, we LOVE timelines) ## Changelog 🆑 CabinetOnFire refactor: Implements "Event Logging" an improved way for programmers to debug specific datums. /🆑 --------- Co-authored-by: Lucy <lucy@absolucy.moe> |
||
|
|
479ac46740 |
Reworks goliaths, slightly changes watchers/legions/brimdemons/lobstrocities (#96028)
## About The Pull Request Goliaths no longer instantly stun the mobs they hit with their tentacle for full 10 seconds, instead leashing them to the spot they were grabbed at or dragging them towards themselves. The ranged tetris-piece attack has been changed to a full cross which tethers the target preventing them from moving away more than 1 tile, while the line and the ring attacks tether the mob directly to the goliath itself and drag them in. https://github.com/user-attachments/assets/0b566a12-17ae-4a8a-97ac-5734c89c83d4 The tentacles can be manually removed after standing for 6 seconds, or by hitting them for 75 damage total (3 PKC swings, or 5 bayonet hits). They also naturally retract after 10/15 (cross/line and ring) seconds like before. Goliaths themselves have received a massive speed boost, going from 3 second movement delay to 1.2 seconds (150% buff) and no longer can friendly fire with their tentacles (and ancient goliaths have their trophy drop guaranteed) Brimdemons, lobstrocities, watchers and legions also received some changes: - Brimdemons no longer can wound with their beams (they were basically guaranteed to land a nasty burn wound with the initial blast), but are now affected by laser armor and their beam DOT (not the initial 25 burn damage upon firing) has been increased from 5 to 7. Their blasts can now be interrupted by hitting them from their side or from their back - Lobstrocities have had their retreat distance decreased from 8 to 6, making them much less likely to randomly lose aggro on the miner (their aggro range is 9 tiles, meaning that even a single tile of movement on miner's part will result in lobsters losing interest in them when on CD) - Watchers now try to stick to 3-5 (previously 4-6) tiles of distance between themselves and their target, and legions try to maintain 4-6 tiles of distance as opposed to running away completely. This should make fighting both of them more interesting and engaging, and make dealing with them during vents less cancerous. Sprites for the tentacle item and mob overlay are by thgvr from https://github.com/shiptest-ss13/Shiptest/pull/2432 ## Why It's Good For The Game Goliaths are extremely outdated in their attack design, 10 second hardstuns are basically a guaranteed death if there are any other mobs around and aren't very engaging to fight on their own as they are very easy to evade with 3 second movement delays. Change to lobstrocities should just make their AI less jank, and watcher/legion range changes should make them less slippery when fighting with PKC or zero range PKA, or during vent defense. ## Changelog 🆑 SmArtKar, thgvr balance: Goliaths no longer hardstun, but instead bind and drag their targets in with their tentacles. They are, however, much faster now. balance: Brimdemon beams can no longer wound, but deal a bit more DOT damage. Their beams can also be interrupted by hitting them from the side or back in melee. balance: Watchers and legions now try to maintain a few tiles of distance from their targets instead of retreating. fix: Lobstrocity AI should no longer sometimes flee out of their aggro range when retreating. /🆑 |
||
|
|
e8d87d2578 |
Block two people cuffing to one item (#96050)
## About The Pull Request Fixes #96042 Fixes #96041 Simply stops two people from cuffing to the same item We could add support for this behavior later, but we'd need to sort out how that behavior should work ## Changelog 🆑 Melbert fix: Blocks two people cuffing to one item /🆑 |
||
|
|
18947edfac | Cuffing items to you now chains you to the item rather than give you nodrop (shields can be cuffed again) (#95991) | ||
|
|
b3770614c1 | Makes invisimins actually invisible to regular ghosts, plus qol improvements (#95856) | ||
|
|
cee225fecb | Moves hair and eyes into standing overlays (#95781) | ||
|
|
79db8d75de | Update hierophant club sprite (#95924) | ||
|
|
901a1d4450 |
Add USB ports to emitters/temperature pumps/temperature machines (#95497)
## About The Pull Request This PR adds USB functionality to temperature pumps, emitters and temperature control unit machines. <img width="1082" height="340" alt="working" src="https://github.com/user-attachments/assets/25e40c17-33ab-4159-b431-b3ccbe83626d" /> ### New USB Components <img width="139" height="101" alt="emitter" src="https://github.com/user-attachments/assets/66580351-6cca-4dfe-9de4-3813cf62678c" /> * Emitter New exposed controls allow you to manually fire a single beam, and get signals whenever it is toggled on/off/fired. It doesn't allow a player to toggle it on/off (must be done physically). ID locking the emitter will also lock out the ability to fire the emitter via USB. <img width="303" height="226" alt="temp pump" src="https://github.com/user-attachments/assets/4d0e6758-d653-4ac1-a080-d8e31d64408d" /> * Temperature Pump This works exactly the same as the other USB controlled pumps, with the addition of setting the heat rate. <img width="267" height="151" alt="temperature control" src="https://github.com/user-attachments/assets/6fff5148-bd70-4a1c-9899-10c997279669" /> * Temperature Control Unit The USB interface now allows this to be remotely turned off and on like the other USB pump interfaces. ## Why It's Good For The Game These three parts are crucial to engineering/atmos projects, and gives experienced players more depth to toy with circuits. ## Changelog 🆑 add: Added USB interface to emitters, temperature pumps and temperature control unit machines /🆑 |
||
|
|
aae24b1ab2 |
Sect of the Dream God (#95643)
## About The Pull Request Adds a new chaplain sect, the sect of the Dream God This sect gains favor from dreaming and blessing dreamers. Their blessing only works on sleeping mobs - hitting a sleeping mob with your bible will cause it to start dreaming, and if it's already dreaming, grant favor. Either way, the mob is healed. For 0 favor, you can **Banish Nightmare** - offering a Nightmare's corpse rewards favor for banishing bad dreams. If the Nightmare has a heart, you are rewarded with a special **Sacred Heart** which heals you while dreaming and sleeping. You can also offer a Nightmare's heart on its own without the body attached. For 0 favor, you can **Deaconize Dreamers** - you can deaconize up to 3 dreamers. For 50 favor, you can have a **Dream Portent** - This rite immediately makes you fall asleep, and grants you a dream related to something going on in the round. It may provide insight into something you otherwise don't know about. If you take damage, the effect ends early. <img width="374" height="126" alt="image" src="https://github.com/user-attachments/assets/7c4e12fe-8456-411c-9d39-691e4ac2312d" /> For 100 favor, you can **Dream Projection** - this rite allows you to pick one of your deacons, and forces you to become an imaginary friend of that deacon. For the duration of the effect you are asleep. If you are woken up or take damage, the effect ends. If the deacon dies, the effect ends early. <img width="492" height="294" alt="image" src="https://github.com/user-attachments/assets/4e2f6810-15cd-41af-a69f-daa6ddca671a" /> For 200 favor, you can give you and your followers **Dream Protection** - While sleeping and dreaming all damage taken is reduced. For 200 favor, you can start a **Slumber Party** - All nearby mobs (who can't block magic and some other asterisks) fall asleep and share a dream. This form of sleep heals the mob rapidly (also heals holy people even more). ## Why It's Good For The Game A new sect for chaplains to sink their teeth into. This one brings a unique niche, focused around sleeping and fortune telling. ## Changelog 🆑 Melbert add: Adds the Sect of the Dream God, a new option for chaplains. /🆑 |
||
|
|
c9bcef2197 |
Spacers get pos mood for achieving nograv on planets (#95818)
## About The Pull Request Spacers who manage to get nograv on a planet are given a positive moodlet, and are considered in space for their buffs/debuffs ## Why It's Good For The Game I don't remember if I was opposed to this in the past or why I didn't make it work this way in the first place. It's sensible that, if you manage to disable your own gravity, all of the negative effects (which are tied to you feeling heavy gravity) would be lifted. ## Changelog 🆑 Melbert add: Spacers who manage to get nograv while on a planet are given a positive moodlet, and are considered in space for the purpose of their buffs/debuffs /🆑 |
||
|
|
d68efbbf45 |
Fixes transforming items getting their force incorrectly modified when metalgenned multiple times (#95739)
## About The Pull Request Transforming weapons could change their sharpness which would break material force modification as materials modify the force differently based on item sharpness. Also the force was hard reset every time you switched it on or off, which would also break the math. I've rewritten the transforming component to preserve force and sharpness, and account for different sharpness of the item when switched on/off. Additionally, I've updated the two-handed component to use the new system to make it easier to work with/less prone to breaking. ## Why It's Good For The Game <img width="557" height="218" alt="image" src="https://github.com/user-attachments/assets/59cfb21a-e97e-4843-9c11-c87ed32384a9" /> ## Changelog 🆑 fix: Transforming items like eswords should no longer get absurd stats when metalgenned multiple times in a row /🆑 |
||
|
|
039a0a8180 |
Wizard Wand blind box & wand bandolier (#95563)
## About The Pull Request  This PR adds 16 more wands to the game, try and guess what they all do! I finished coding this PR 6 weeks ago but it turns out I had to sprite 16 wands after that before I could PR it. <details> **Wand of Animation**- It's like the Staff of Animation but doesn't recharge itself, obviously. **Rod of Babel**- Grants victims a new random spoken language and then removes all of their other languages. **Shearing Rod**- It renders you bald. If you are covering your hair with a helmet, it pops the helmet off (possibly its most useful effect). If you're already bald, your bald head will shine brightly and blind nearby people. **Party Wand**- Fires projectiles that are incredibly alcoholic. Two of them will destroy the livers of most targets and kill them (although it gives them a good leadup time to get that fixed before dying of alcohol toxicity), so try one at a time if you're just there to have fun. **Wand of Ice**- Freezes people temporarily, making them really cold and unable to move. It also spawns slippery ice on impacted tiles. **Wand of Chaos**- Forces targets to hallucinate from a curated list of hallucinations. It looks and is named sort of like the Staff of Chaos just in the hopes that people are more likely to believe that the wizard did actually just instantly kill them, set them on fire, or turn them into a demon. Even if it doesn't, a lot of these cause you to stop moving or be temporarily knocked down or in some other way disoriented. **Lifting Rod**- Removes gravity from a target for two minutes, which funcionally immobilises them if they're in the middle of a room or you can use on yourself to cross big pits. **Rod of Compassion**- Heals you and your target a little bit, and also gives you both Pacifism for 30 seconds. This gives you time to talk out your problems, or deliver a monologue. **Wand of Snacking**- Turns things into pizza. If fired at a mob, will put some pizza in their hands and force them to start eating it. Unlikely to be deadly, but it might spawn mouldy pizza, a food they are allergic to, ethereal battery acid pizza, or pizza which dismembers you. **Pestilent Wand**- Confers a transmissible plague which causes you to periodically cough out vermin of various degrees of danger and hostility depending on disease level, treated via traditional methods of exorcism. **Wand of Pratfalls**- Slips and pies the target as well as creating small amounts of lube foam. **Wand of Rebellion**- Removes a limb from the target, then animates that limb. Stop hitting yourself. **Rod of Repulsion**- Throws things you shoot away from you. **Switching Rod**- Swap places with the hit atom, as with the spell Swap. **Restraining Rod**- Summons a tentacle from the ground to grasp the target, immobilising them for 20 seconds or until someone helps them. **Wand of Zapping**- Briefly locks up the target's nerves with lightning (it's secretly a classic ss13 taser). </details> They are available to wizards via the new option "Wand Assortment (Bargain Bin)" which only costs a single spellbook point, but gives you an assortment of 6 wands picked at random from this list of new wands and some of the existing ones. If you buy two or more sets of wands (and are wearing the wand belt from the first one) then instead of spawning wands in a belt it will spawn them in a bandolier, which fits into your backpack or can be worn on a suit slot. Wand bandoliers in a suit slot will automatically replace an empty wand you try to fire with a wand that still has ammo in it. Several of these wands' projectiles are now also possibilities from firing the Staff of Chaos (making it more chaotic) and some of them also have their own Magicarp types. Also I made it so that if you animate an animating weapon then it focuses on animating more things instead of shooting its animating bolts at mobs that are already animate. I could do this for more specialty wands too at some point (door wand projectiles don't exactly hurt anyone) but if I do that it'll probably be in a different PR. ## Why It's Good For The Game A good number of these wands come from a downstream antagonist that's essentially a lower-threat wizard. I thought these were all fun or funny effects to have in the game upstream but also not ones that people would typically want to buy as a dedicated spell (or alternately, that would be pretty good as a dedicated spell but quite boring), so instead they're limited use spells that you get in bulk for cheap. I didn't think we'd really want to bulk up the spellbook with several different kinds of themed bundle though (and frankly, they don't share themes), so it's a blind box instead. The bandolier was added to compensate people for buying random wands multiple times, so they can have more of a wand-based playstyle. Now you can spend all of your points on 60 wands (maybe more if you take the gambling trait...) and be a sort of wizard cowboy, or split them among your apprentices, or just leave them everywhere like candy and see whether the crew fuck things up for themselves with their new power I guess. ## Changelog 🆑 add: Adds 16 more wizard wands to the game, which wizards can buy cheaply but randomly, or are available via Summon Magic. add: If a wizard buys more than one set of wands they will receive a "Wand Bandolier" holster which fits in the backpack or, if worn in the suit slot, will automatically exchange an expended wand for a full one. balance: Staffs (and wands) of animation that are animated will try to animate other objects instead of firing at living mobs, which are already animated. balance: Animating a wand of nothing will turn it into a wand of animation (and animate it). balance: The staff of chaos can now do more things. balance: Magicarp now additionally come in Babbling, Frigid, Quantum, and Weightless varieties. Collect them all! /🆑 |
||
|
|
3454171051 |
Visual and balance changes to style meters (#95631)
<!-- 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 Style HUD now renders the events top to bottom rather than bottom to top, meaning that new events appear at the top which is more intuitive than what we have now. ``ROCK MINED`` action has been removed as it filled pretty much the entire list whenever you were digging, or even fighting with an AOE tool (PKA/crusher with worm trophy) and was an extremely easy way to constantly keep SPACED! rank up without doing anything. A new 125/250/375 ``VENT TAPPED`` action has been added, given to all surrounding miners upon vent completion and based on its richness (and thus, difficulty) Both megafauna kills and vent taps now give permanent point gain multipliers, +10% for megafauna kills and +5/10/15% for vents of varying sizes. ## Why It's Good For The Game Bottom-to-top listing of events was extremely unintuitive and hard to read. ``ROCK MINED`` kept anyone with mining AOE at constant SPACED! rank and cleared all other actions from the queue as soon as the user fired their PKA once, which isn't ideal Vent taps are quite difficult and are worthy of being acknowledged by style meter in my opinion, and both they and megafauna kills are somewhat permanent achievements fitting of a bigger boon than an extremely short-lived point boost (350 for megafauna takes about 50 seconds to completely decay if you don't have any other point gains, otherwise relatively it decays even faster as the speed ramps up the more points you have) ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and its effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: Style meters now award you for clearing vents based on vent richness and difficulty balance: Megafauna kills and vent taps grant a permanent 10% / 5/10/15% (based on difficulty) permanent style boost respectively del: Style meters no longer grant points for mining empty rocks qol: Style meter actions now list top-to-bottom rather than bottom-to-top /🆑 <!-- 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. --> |
||
|
|
3103f9c413 |
Adds a Tactical IFF Visor and slightly refactors eye rendering (#95547)
## About The Pull Request A new cybernetic eye implant, the tactical IFF visor, has been added to the game, available in the combat implants research node. Its main features are a cool LED display, dynamic color correction to make distinguishing important objects easier, and inbuilt IFF systems capable of distinguishing and highlighting allies and potential threats. They also give flash/welding protection and mild night-vision capabilities. However, this comes at a downside of making the user completely unable to distinguish appearances or voices, or even examine others. Everyone will simply show up as Unknown and be completely covered in static, bar the threat assessment outline. Examining will only display their threat status according to threat settings in the visor. The parameters for threat assessment (both ID access and security flag-based), as well as the visor display, can be configured by the user at any time. When emagged, the visor will instead completely hide and mute all mobs except the user themselves, leaving them completely "alone" on the station. Deathsquads get an unmodifiable version, configured to treat anyone but CentCom personnel as hostiles. Settings can also be adjusted before installation with a multitool, and locked using a screwdriver, preventing users from accessing them when installed. --- Eye rendering has been slightly refactored in order to support the monovisor, as well as to get rid of duplicate code (and missing features) on dismembered heads. Also moth eyes once again should block emissives properly. ## Why It's Good For The Game New content for both gameplay and roleplay, and fits deathsquad's purpose very well. |
||
|
|
93ea8085cb | Datumizes material effects, slots, and material spears (#95341) | ||
|
|
0f95e041e2 |
Disjointed eyes such as AI eyes, advanced camera consoles, & looking up properly show HUDs (#95526)
## About The Pull Request Revival of #92846, without which I would have no idea how to do this Adds a new proc within `/datum/atom_hud` that changes what Z level huds an atom is seeing without changing what Z level that atom's own hud exists on, and hooks it into the new `COMSIG_LIVING_LOOK_Z_CHANGE`, sent by `/mob/living/on_look_z_level_change()`, which is called when a mob looks up, stops looking up(not when it looks down, it doesn't need to), or by any z level change done by an `/eye/` that's just the window for an actual mob(camera consoles, AI eye). ## Why It's Good For The Game fixes #92370 fixes #92622 fixes the same HUD issue with looking up a floor as any other mob ## Changelog 🆑 fix: HUDs are now visible when looking up a floor, as well as by AIS and camera consoles on lower floors. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
442ad835bc |
Reverts inertia based space movement (#95536)
## About The Pull Request Reverts space movement being affected by inertia What is kept: - Items have a varying force on your drift speed, ie heavier items will move you faster through space, and smaller items, slower. - Jetpacks can have varying force of impulse - the effect is applied directly to the mob's `inertia_move_multiplier` - Tethers are unreverted - they still stop you from drifting too far from the tether point, however you can no longer 'swing' with them. What is removed: - Multiple impulses in the same angle/direction no longer speeds you up. Only the fastest impulse in 1 direction is accounted for. - An impulse in a different angle/direction will completely override any existing impulses, even if they are faster. - Jetpack stabilizers are once again perfectly capable of immediately stopping any active impulses. TL;DR If you point yourself in a direction you will now go that direction ## Why It's Good For The Game The concept was fun and had potential but the fight between impulses vs tiles was very, very clunky and janky. Multiple fixes were attempted to reduce the jank but it ultimately nograv still acts very cumbersome and jetpacks are still very unappealing to use. Smartkar gave the go-ahead to revert this a while back so, o7. ## Changelog 🆑 Melbert del: Zero-gravity drifting is no longer affected by inertia, ie it has been reverted to what it once was. /🆑 |
||
|
|
0064d94b1f | Hallucination delusions copy lighting underlays (#95496) | ||
|
|
72f65a06b6 |
Vended glasses in the Beach Bar virtual domain count towards domain completion when drank (#95466)
## About The Pull Request Previously, when one drank out of a glass of booze that the virtual bartender graciously offered, one would not get any closer to domain completion, because said bartender got his glasses new out of a vending machine. These glasses never were registered on domain creation, due to not existing on domain creation. This pr registers the vending machines within the domain with a new signal that allows newly created glasses to also be registered, and count towards domain completion. ## Why It's Good For The Game A bitrunner dying of liver failure due to the obtuse distinction between glasses that were in a vending machine and glasses that were on the table sounds very annoying. Also, you could very easily make the domain not completable within seconds by spawning as a ghostrole and breaking the table glasses. You can still do that, but you have to break an entire vending machine's worth of glasses too. ## Changelog 🆑 fix: Glasses that were in the vending machine now still count for the completion of the Beach Bar virtual domain /🆑 |
||
|
|
6734968a57 |
Adds a 0 point quirk that turns your body into a recovered crewmember (effectively) on DNRing (#95469)
## About The Pull Request Adds `Thanatorenasia`, a 0 point neutral quirk Those with `Thanatorenasia`, upon DNRing, their body will be made into a "recovered crewmember" - meaning when the body is revived, ghosts will be polled and allowed to take control over it The body will retain `Thanatorenasia` after the fact, so the new controller can DNR as well, continuing the cycle ## Why It's Good For The Game A random idea I had based on a recent interaction that I thought could be cool character gimmick. Every time someone dies, they get revived with a different player, so they act differently, think differently, and don't remember the rest of the round. ## Changelog 🆑 Melbert add: Adds Thanatorenasia, a 0 point neutral quirk that turns your body into a "recovered crewmember" if you choose to DNR - meaning if revived, any ghost could take control of it refactor: Refactored "ghostrol on revive" behavior a fair bit, report any oddities with it / the spawners menu /🆑 |
||
|
|
9d14e327b5 |
Begins Improving Sparks/Flares Somewhat, Adds Animatable Light Overlays (#95362)
## About The Pull Request [Adds a visual tick helper, integrates it into SSmove and such](https://github.com/tgstation/tgstation/commit/e97035f9f74fad5c67c5bf19d8d5d3bb4bd476b4) Basically, if we do "stuff" during verb time then the next chance clients have to actually see it is on the next visual tick (rather then the normal "this tick"). This is cause clients get their next frame during maptick, and maptick runs before verbs. We want to be able to handle this properly because if you say, create an object and then move it on the same VISUAL tick (NOT game tick), it will just teleport instead of playing out the move. I don't want this for stuff like sparks, so we need a way to work around it. [Moves most users of the _FAST flag to _INSTANT](https://github.com/tgstation/tgstation/commit/6f96daac00519c69adc7554f52114798a65f3ad5) These are the kids that don't immediately spawn something and the move it, and we want to allow them to move actually as soon as possible (important for stuff like space) [Improves basic effect systems, makes their products delete when they stop moving](https://github.com/tgstation/tgstation/commit/172cb25d80ed34e1ec523172a1677fb524239fba) Moves some stuff out to getters or vars so children can better decide how long effects should last/how fast they should move. Uses this to clean up weird dupe code used by explosions. Makes all these effects delete on contact with something that stops them. I'm doing this because an effect just hanging in the air looks really really odd. Does have consequences for sparks that are already moving at a wall though, might need a better way to handle that. Makes all these effects use _FAST loops so they don't just hang in the air for a second on spawn Adds a setter proc on sparks for their duration, gonna use this to improve their effects some [Refactors overlay lights, adds support for animating their images](https://github.com/tgstation/tgstation/commit/3ad0083cf2b536df51a6d93dca40eac20c1d62d1) Implements light_render_source and relevant setters, this allows us to replace the components of an overlay light with basically whatever we want Refactors overlay lighting to handle its images more consistently, allowing us to hook into an image being modified Combining the two of these will allow us to consistently copy a light's image, modify it in some way, and then relay that modification back down. Allowing us to animate it or do more advanced effects painlessly Also, fixes ranges of 1 or less not rendering at all on initial set (thank you kapu) [In which I get fed up and add a macro helper for UID generation](https://github.com/tgstation/tgstation/commit/aab48b03d407104d4f9cf9acb034494237def911) [adds vv hooking for all existing lighting vars](https://github.com/tgstation/tgstation/commit/b81c6200a0d74c36b440aa3f4c1f22c422090a2d) [Upgrade effect system's dir picking to avoid duplicates when possible](https://github.com/tgstation/tgstation/commit/18b622586b509c6be4c4bca4e3e7c175ad75fe91) [Uses the technique described above to animate spark's lights out as they move](https://github.com/tgstation/tgstation/commit/67ba177982213799984a70e89536c5efb3d17e14) This is a decently nice effect imo, it allows us to bump their power (read, alpha) since it'll get animated away. I try to sync the animation to the actual icon state's flow (it's 0.7s long). I also sped them up somewhat to hopefully have a nicer looking effect? we'll see. [Abstracts away intercepting overlay lights into a holder datum](https://github.com/tgstation/tgstation/pull/95362/commits/b3f1fe74f2c3bab1d8912ab8a666bd05677ad032) This should make it far easier to reuse this pattern! [Fixes overlay lights flashing to double intensity when picked up off the ground](https://github.com/tgstation/tgstation/pull/95362/commits/1d83f2031fa2b33312b2aea4359c0c37c9d04ac7) We needed to clear out their underlays BEFORE the animation [Adds a flickering effect to flares and their children](https://github.com/tgstation/tgstation/pull/95362/commits/b7a858e04a607c58b6c7fbe1476ffe2239e63bde) I'm still not 100% happy with this, I was trying to avoid it feeling like a heartbeat with random noise and I.. THINK it worked? it's honestly quite hard to tell [Adds the same flickering to lighters, welding tools and life candles](https://github.com/tgstation/tgstation/pull/95362/commits/3ec44027e17835ae96702cec5f0b12d1f4deb32b) Also, updated light candles to mirror the appearance of normal candles and use overlay lighting EDIT: I realized while working on flares that I accidentally double applied color, so if you saw the sparks animations before now it was different (less vibrant). IDK if I like this better or worse but it is RIGHT and that's what matters. ## Why It's Good For The Game I got mad about how bad these looked, and this is a start at improving them. Also, adds a framework for more dynamic effects applied to overlay lights (you could use this to apply a sort of "emergency rotating" effect, or flicker/buzz for example). <details> <summary>Before</summary> https://github.com/user-attachments/assets/66437f27-ee3c-4f14-a7ee-4a1c3e68533a https://github.com/user-attachments/assets/ed14fff8-a7eb-47fe-bab5-9a490ac96629 </details> <details> <summary>After</summary> https://github.com/user-attachments/assets/fb24ff2e-c745-42a5-8e11-c8a1eeef35a5 https://github.com/user-attachments/assets/fd8c2116-cb92-4fe6-ad3e-786a6538e52a </details> ## Changelog 🆑 add: Reworks how sparks render. They're now a bit brighter, will fade out as they move/if they hit something, will stack with each other less and also won't start hang in the air on spawn. add: Added a flickering effect to lighters, welding tools, flares, torches and candles (since they're flames). fix: Overlay based lights (think flashlights) will no longer flash to double intensity while being picked up. refactor: Reworked how some effects (explosion particles, sparks, some reagent stuff) function, report any bugs! /🆑 |
||
|
|
3729ee3ef3 |
Getting Mad at Parallax (Includes Boomerspace!) (#95382)
## About The Pull Request I want to do stuff with parallax (like placing stuff in the backdrop and moving it around), but I'm in my not doing 100 things in one pr arc so we're doing this piecemeal. To start, I wanted to try adding oldspace back as a parallax layer. This is something I was considering when it was first removed but never got around to, so here we are. I started by [writing a rust program](https://github.com/LemonInTheDark/old_space_gen) to fabricate the required icon state, then realized that all the different parts of space have their own animation delays. There's no way I could make one icon state with all them looping, so instead I split them up into multiple components and then overlayed them together. This works, but is infeasible (my gpu died) at the scale required for parallax (17 480x480 sets, 15 unique delays per 1 set) so I used render targets to render one copy, then mirror it to the rest of the overlays. This works wonderfully, and gets us down to (on my machine) a gpu cost comprable with about medium parallax intensity. I'm open to making these tile bound but I thought making them look "far away" feels better. In the process of all this I got very mad at the existing parallax code, soooooooo Parallax layers are no longer stored on the client, they are stored on and managed by the parallax home atom that holds them for display. Said atom also tracks all the information about how they are selected. Parallax layers no longer take a hud as input, instead expecting a client. (we were just swapping them back and forth and I thought it was dumb). Parallax no longer tries to support passing in a mob that does not actually own the hud it is displayed on. This feature wasn't even being used anymore because it was fully broken, so all it was doing was making the code worse. Parallax no longer has to do a full refresh anytime something about WHAT layers are displayed might have changed. We cache based off the variables we care about, and use the change in state to determine what should happen (this is improved by moving "rendering the layers" fully to the control of the home datum). Parallax no longer directly modifies the hud's plane masters, instead relying on trait based signals to manipulate them (this avoids wasted time in the common event of a needless parallax prefs check). Parallax no longer has 2 procs that are only called together to "remove/readd/update" the layers, instead doing both in a new check() proc. Cleans up some plane master cruft to do with tracking/managing huds (might break, tested, think it's fine). ## Why It's Good For The Game https://github.com/user-attachments/assets/79138a0f-9f6d-447d-843e-0d237db13276 ## Changelog 🆑 add: Added an option for rendering space parallax with old space sprites (the ones from before we invented parallax), they're animated and I feel quite pretty. fix: Space parallax should hopefully behave a little more consistently now refactor: Rewrote a lot of how space parallax handled itself, please yell at me if any bugs make themselves known /🆑 |
||
|
|
7403600454 |
Lavaland relics from boulders now have more appropriate effects (#95261)
## About The Pull Request ### Main changes Lavaland relics from boulders have a (mostly) unique suite of random effects, differentiating them from normal station relics <Details> <Summary>Spoiler Effect list</Summary> - Dimensional shift (same as normal) - Summon monsters (Summon animals, but Lavaland/Cult creatures, has a high chance of deleting itself.) - Explode (same as normal) - Low potency shield (When holding the relic, you get a shield that blocks three normal attacks.) - High potency shield (When holding the relic, you get a shield that blocks one normal or overpowering attack.) - Random teleport (same as normal) - Random AOE teleport (Cult themed version of normal teleport that affects all nearby objects/mobs. Blocked by antimagic, has a low chance of deleting itself) - Recharge (same as normal) - Rockfall (Places rock turfs over nearby open turfs. These are weak, ie they can be hand-mined. Stuns anyone caught in it, has a chance of deleting itself) - Blood spray (Consumes a chunk of the user's blood and sprays blood around. Has a chance of swapping to Blood suck) - Blood suck (Consumes a chuck of all nearby mob's blood and transfers it to the user. Blocked by antimagic. Has a chance of swapping to Blood spray) - Cleaning foam (same as normal) - Acid cleaning foam (spawn an ez-clean grenade, has a high chance of deleting itself.) </Details> ### Other changes Relics spawned from gifts (ie Christmas) auto-reveal themselves Blood sprays won't merge with each other Better documentation, and relics now uses `deconstruct` when terminating itself ## Why It's Good For The Game - The flavor behind these cursed and cultish relics doing the same thing as the cobbled together electronics found in maint is kinda weak. 90% of the time I see them abandoned in a pile in mining. More flavorful and potent effects may make people decide to investigate them more. - The gift thing was just a fun random idea I had. Allows people to play with their new toy immediately. ## Changelog 🆑 Melbert add: Relics found from cracking boulders now have a (mostly) unique set of mining and cultish related effects. add: Relics found in gift boxes no longer need to be discovered first in science. /🆑 |
||
|
|
7b8eb2c7c7 |
Intelligent vendors may deny usage if you are poor (or outright if they are active/moving) (#95311)
## About The Pull Request When brand intelligence triggers, infected vending machines have a 50% chance to deny you from using them unless you are moderately wealthy (>=1000 cr) When the vending machines activate/start moving, they outright deny usage from everyone ## Why It's Good For The Game We have some very good vendor deny icons but they are almost completely impossible to trigger in game (with the exception of booze vendors and some very edge cases) Someone gave me the idea to use them in the brand intelligence event and it feels pretty appropriate. Also helps you identify infected vendors (whereas right now you can only tell by the occasional message). Maybe it'll even incentivize people to actually hunt down the origin rather than just wait it out. ## Changelog 🆑 Melbert add: Intelligence vendors (from the event) have a 50% chance to deny users who are not wealthy. When the vendors awake and start moving, they instead get a 100% chance to deny anyone. /🆑 |
||
|
|
0a61cce996 |
Refactor revenant abilities / they now indicate if they are unlocked (#95380)
## About The Pull Request Refactors Revenant abilities into a component Revenant abilities now indicate if they are locked <img width="419" height="185" alt="image" src="https://github.com/user-attachments/assets/7223f025-d99c-4c09-883b-b53f29947c36" /> <img width="337" height="97" alt="image" src="https://github.com/user-attachments/assets/321bf64f-df57-4da5-9951-a2795637cea3" /> They also more accurately update if they are un/usable (ie, if you enter a wall, they turn red.) Also, Revenants are no longer affected by gravity. They already weren't affected by gravity (as far as I could tell) this just prevents them from getting the no-grav alert. ## Why It's Good For The Game - Not all future Revenant abilities need to be an AOE spell - It makes them easier to parse at a glance (what powers you have / don't have / can use) ## Changelog 🆑 Melbert qol: Revenant abilities indicate if they are locked, and better indicate if they are currently usable qol: Revenants are no longer alerted that they have no gravity (they always have gravity) refactor: Refactored Revenant abilities, report any oddities with them. /🆑 |
||
|
|
2eb0776ebe |
Chem scanning removes achievements from maint pills (#95397)
## About The Pull Request Chem scanning a maint pill now removes the achievement for eating it. ## Why It's Good For The Game cheater. You can still scour maints for pills with stuff you'd like, but you lose the achievement for doing so. ## Changelog 🆑 fix: Chem scanning a maintenance pill removes the achievement value. /🆑 |
||
|
|
065c9eb763 |
Revenants are always visible in mirrors (#95379)
## About The Pull Request Revenants, even while invisible, can be seen in the reflection of mirrors <img width="231" height="254" alt="image" src="https://github.com/user-attachments/assets/135341b8-192c-4f9b-b9c3-0da2c96c6fac" /> They have an ethereal, ghostly effect applied to their reflection while invisible (it's an animation so you can't see it in the picture), this effect is removed if they become visible. It also doesn't apply when reflecting in a magic mirror. Additionally, "Defile" will now break mirrors, though not magic mirrors. Also, Revenants no longer elevate over tables. They're ghosts after all. ## Why It's Good For The Game It's a thematically appropriate way for a Revenant to reveal themselves to the crew without, well, outright revealing themselves. Also there's a hypothetical world where Medbay puts mirrors everywhere to catch a Revenant. ## Changelog 🆑 Melbert add: Revenants are always visible in mirror reflections, even while invisible. add: Revenant "Defile" now shatters mirrors. qol: Revenants no longer elevate over tables. /🆑 |
||
|
|
9a87ffeb6f | Removes Spells tab (#95293) | ||
|
|
be5931cf8e |
Adds USB to vitals monitor (#95079)
## About The Pull Request Vitals monitors have a USB port, allowing you to read patient status <img width="238" height="448" alt="image" src="https://github.com/user-attachments/assets/e056a76b-52fe-4278-955d-4726694c4d69" /> Collects patient stats every 4 seconds, with a 1 second delay before its initial reading is recorded. `Status update` triggers every time stats are collected, so every 4 seconds. Basically a clock provided for convenience `Patient change` triggers when a mob is bucked or unbuckled. `Defib status` checks if the patient can be defibbed and outputs "Possible" if they are, or a reason if they aren't. The rest of the outputs are self explanatory. ## Why It's Good For The Game Someone talked about this before the original PR was merged and I thought it was a fun idea. Allows for stuff like "Trigger a bomb when a certain patient is revived" or "creating a BCI for a blind doctor". ## Changelog 🆑 Melbert add: Vitals monitors have USB ports, allowing circuits to read patient status /🆑 |
||
|
|
07138d5445 |
Adds some special case interactions with the mail counterfitter device (#95180)
## About The Pull Request Adds some type specific interactions to the mail produced by the GLA-2 mail counterfit device. Currently, it applies `attack_self()` to all items when armed. The new interactions are, currently: - Facehuggers jump on your face - Flashes flash you - Boxing gloves uppercut you - Syringes prick you with poison - Sprays spray you - Signallers signal - Monkey cubes/other cubes expand - Guns shoot you in the head There'll be more, probably. Leave your ideas(only good ones though). ## Why It's Good For The Game First of all, none of these are strenuous from a balance perspective. The primary use of this device is an instant bomb, and none of these things are bombs. Easy delineation, I doubt this will become a problem. As said already, the primary use of this device is a bomb. I've seen it used for another thing once ever, and while that thing was incredibly cool, the counterfit device is still a one-trick pony for the most part. While none of these can compete with the lethality of the bomb, the hope is that they will collectively help bring variety to an item that feels built for variety. ## Changelog 🆑 add: Several items have been given special interactions when placed inside counterfit mail. /🆑 |
||
|
|
9ceeb187b7 |
Spraying items with lube can make them slip out of people's hands (#95224)
## About The Pull Request If you coat an item with lube, it becomes slippery. Not "clown pda" slippery but "harder to handle" slippery. Trying to pick up or use a slippery item has a chance of it falling out of your hands (Though there is another chance that you catch it, if you have an empty hand) "Use" includes arming grenades or firing guns. So if you try to arm a lubed grenade it might slip right to your feet! ## Why It's Good For The Game The clown can coat security's batons in lube. That's basically all I need to say ## Changelog 🆑 Melbert add: Spraying items with lube makes them slippery, causing them to fall out of people's hands who try to pick them up or use them. /🆑 |
||
|
|
a3498fdcd7 | Material Science 1: A bunch of math (#95090) | ||
|
|
e9d964789b |
Swags out the roundstart report (#95149)
## About The Pull Request The roundstart report has been dripped out with a logo and some additional flavor <img width="585" height="916" alt="image" src="https://github.com/user-attachments/assets/d0dab027-24e4-4d4a-a5ad-59616b3bf33d" /> The flavor messages are just some randomly selected lore tidbits or filler text Other changes: - Paper now updates to your writing implement immediately, rather than on process ticks. - Adds a config to hide the dynamic report for cutting down the length of the roundstart report. Disabled by default - Footnotes now requires `R_FUN` rather than `R_ADMIN` ## Why It's Good For The Game Makes the command report look a ton more official while introducing some fun worldbuilding. ## Changelog 🆑 Melbert qol: Paper UI now updates immediately when you pick up or drop a writing tool. qol: The roundstart command report has had its style updated, and now contains some bonus lore. admin: Changes the perms needed to add command report footnotes to "Fun" rather than "Admin" admin: Adds a verb for changing the command report main contents (Requiring "Fun") config: Adds a config for hiding the dynamic report, disabled by default (disabled meaning you still get the report) /🆑 |
||
|
|
0d5a1f6e22 |
Tram Maintenance: Fixes/signal cleanup (#94938)
## About The Pull Request - Removes some unused tram signals that have been replaced with COMSIG_TRANSPORT_ACTIVE. - Renames COMSIG_TRANSPORT_ACTIVE to COMSIG_TRANSPORT_UPDATED to better reflect what it now does, and commonality with other x_UPDATED named signals - Tram door fixes - Fixes admins varediting tram speed not working. Introduces a new var "tram_max_speed" with 100 being the fastest. Easier to understand at a glance and not having to worry about movement delay vars, etc. Admins can just set a value 1-100 and it will change the appropriate internal vars. ## Why It's Good For The Game Fixes, remove unused code ## Changelog 🆑 LT3 fix: Admins can now actually adjust the speed of the tram fix: Fixed tram doors repeating multiple varied copies of their audio fix: Fixed tram doors emergency release sound/animation code: Cleaned up some tram signal code /🆑 |
||
|
|
ef28e00690 |
[MDB Ignore] Refactors gauze, adds Tourniquets (#95041)
## About The Pull Request 1. Refactors gauze Removes gauze var from `/stack`, adds a shared parent between tape and gauze. Behavior of "sticking thing on limb" is now a bit more generic, with there being a component to facilitate it and a framework on `/bodypart` Closes #92990 2. Adds Tourniquets A first aid item, when attached to a limb it reduces blood loss from that limb by 90%. However while attached you walk slower (if on a leg), interact slower (if on a arm), and yes, you rapidly die if you put it on your head Paramedic belts have their starting equipment changed again for the 500th time. Surgical tape -> Tourniquet Bone gel -> Bonesetter <img width="604" height="224" alt="image" src="https://github.com/user-attachments/assets/443dd5c0-44a3-4ccb-9f6a-c561bbf2fba9" /> ## Why It's Good For The Game Adds some more variety for field treatment of bleeding wounds, and in the future we can add things like "improvised tourniquets" or "improvised splints" with wooden planks. ## Changelog 🆑 Melbert add: Adds Tourniquets. While attached to a limb, reduces blood loss from that limb by 90%, but makes you walk / interact slower. (Or if you put it on your head, you die.) add: You can purchase Tourniquets from the premium section of the medical vendor add: Paramedic belt setup has changed yet again: Surgical tape replaced with Tourniquet, Bone gel replaced with Bonesetter. add: You can use all forms of tape as splint - like Gauze. Will secure a fracture but won't stop your blood from exiting. refactor: Refactored gauze entirely, report any strangeness with it (or tape, or tourniquets) /🆑 |
||
|
|
00ccf0c6b5 |
Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts: # .github/CODEOWNERS # .github/workflows/compile_changelogs.yml # .github/workflows/stale.yml # SQL/database_changelog.md # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/__DEFINES/atom_hud.dm # code/__DEFINES/inventory.dm # code/__DEFINES/mobs.dm # code/__DEFINES/species_clothing_paths.dm # code/__DEFINES/subsystems.dm # code/__DEFINES/surgery.dm # code/__HELPERS/global_lists.dm # code/_globalvars/lists/maintenance_loot.dm # code/_globalvars/traits/_traits.dm # code/controllers/subsystem/minor_mapping.dm # code/controllers/subsystem/processing/quirks.dm # code/controllers/subsystem/shuttle.dm # code/datums/components/palette.dm # code/datums/components/surgery_initiator.dm # code/datums/diseases/advance/advance.dm # code/datums/hud.dm # code/datums/mood.dm # code/datums/mutations/chameleon.dm # code/datums/quirks/negative_quirks/nyctophobia.dm # code/datums/status_effects/debuffs/debuffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/slime/slime_leech.dm # code/datums/weather/weather.dm # code/game/data_huds.dm # code/game/objects/items.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/frog_statue.dm # code/game/objects/items/rcd/RLD.dm # code/game/objects/items/robot/items/hypo.dm # code/game/objects/items/stacks/medical.dm # code/game/objects/items/stacks/wrap.dm # code/game/objects/items/storage/garment.dm # code/game/objects/items/tools/medical/defib.dm # code/game/objects/items/weaponry.dm # code/game/objects/items/weaponry/melee/misc.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/game/objects/structures/curtains.dm # code/game/objects/structures/dresser.dm # code/game/objects/structures/girders.dm # code/game/objects/structures/maintenance.dm # code/game/objects/structures/mirror.dm # code/modules/admin/greyscale_modify_menu.dm # code/modules/admin/verbs/light_debug.dm # code/modules/antagonists/ashwalker/ashwalker.dm # code/modules/antagonists/heretic/knowledge/starting_lore.dm # code/modules/antagonists/ninja/ninjaDrainAct.dm # code/modules/art/paintings.dm # code/modules/client/preferences.dm # code/modules/client/verbs/ooc.dm # code/modules/clothing/head/wig.dm # code/modules/events/disease_outbreak.dm # code/modules/holodeck/holo_effect.dm # code/modules/jobs/job_types/head_of_security.dm # code/modules/jobs/job_types/security_officer.dm # code/modules/library/skill_learning/generic_skillchips/point.dm # code/modules/mining/lavaland/ash_flora.dm # code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/basic/guardian/guardian.dm # code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm # code/modules/mob/living/carbon/carbon.dm # code/modules/mob/living/carbon/human/human.dm # code/modules/mob/living/carbon/human/human_defines.dm # code/modules/mob/living/carbon/life.dm # code/modules/mob/living/living.dm # code/modules/mob/living/living_defines.dm # code/modules/mob/mob.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mod/mod_control.dm # code/modules/mod/modules/modules_general.dm # code/modules/modular_computers/computers/item/computer_ui.dm # code/modules/paperwork/paper.dm # code/modules/paperwork/paperbin.dm # code/modules/power/lighting/light.dm # code/modules/projectiles/guns/energy/kinetic_accelerator.dm # code/modules/projectiles/projectile.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/food_reagents.dm # code/modules/reagents/chemistry/reagents/other_reagents.dm # code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm # code/modules/research/xenobiology/crossbreeding/_clothing.dm # code/modules/research/xenobiology/crossbreeding/prismatic.dm # code/modules/surgery/advanced/brainwashing.dm # code/modules/surgery/advanced/lobotomy.dm # code/modules/surgery/amputation.dm # code/modules/surgery/blood_filter.dm # code/modules/surgery/bodyparts/_bodyparts.dm # code/modules/surgery/brain_surgery.dm # code/modules/surgery/cavity_implant.dm # code/modules/surgery/coronary_bypass.dm # code/modules/surgery/gastrectomy.dm # code/modules/surgery/healing.dm # code/modules/surgery/limb_augmentation.dm # code/modules/surgery/organ_manipulation.dm # code/modules/surgery/revival.dm # code/modules/surgery/sleeper_protocol.dm # code/modules/surgery/surgery_helpers.dm # code/modules/surgery/surgery_step.dm # code/modules/unit_tests/_unit_tests.dm # code/modules/unit_tests/designs.dm # code/modules/unit_tests/icon_state_worn.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png # code/modules/unit_tests/screenshots/screenshot_husk_body.png # code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png # icons/map_icons/clothing/head/_head.dmi # icons/map_icons/clothing/shoes.dmi # icons/map_icons/items/_item.dmi # icons/mob/huds/hud.dmi # icons/mob/inhands/64x64_lefthand.dmi # icons/mob/inhands/64x64_righthand.dmi # icons/obj/machines/computer.dmi # tgui/packages/tgui/interfaces/OperatingComputer.jsx # tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx # tgui/packages/tgui/interfaces/PreferencesMenu/types.ts # tgui/packages/tgui/interfaces/SurgeryInitiator.tsx # tools/icon_cutter/check.py |
||
|
|
6f37db300b |
Gives non-standard nullrods the rest of the features common to regular null rods (#94980)
## About The Pull Request Non-standard null-rods (the skateboard, bow, revolver, carpsie plush, and eswords) did not receive all the common characteristics of regular null rods in #93394. In particular, they were not given the `UNIQUE_RENAME` obj flag, and they did not receive the ability to track how many cultists they've crit/killed and be turned into cult weapons when sacrificed. This PR corrects that by extracting the cult kill tracking behavior to a component, while doing the following refactors to ensure complete compatibility: - Skateboard items now move themselves into the skateboard vehicle they spawn on use, instead of deleting themselves. This was necessary for the holy board to keep its custom name/desc and cultist kill count. - Guns (which the bow technically is) will track cultists killed/crit with bullets fired from them by a mob with a holy role. - A signal can now be used for an item to provide an arbitrary response when an offer rune underneath it is activated. ## Why It's Good For The Game I just wanted the holy eswords to be renameable for chaplains to provide plausible deniability for the possession of actual eswords, but after I discovered this consistency issue, and felt the need to fix it. ## Changelog 🆑 fix: The holy energy swords and the carp-sie plushie can once again be renamed fix: The holy energy swords and the carp-sie plushie can once again be sacrificed by cultists to spawn different weapons based on how many unique cultists the chaplain has crit or killed with them qol: The holy skateboard can be renamed like other null rod variants can fix: Unusual null rod variants like the holy skateboard and bow can now be sacrificed by cultists to spawn different weapons based on how many unique cultists the chaplain has crit or killed with them. The bow and the burdened chaplain's revolver, in particular, also count cultists crit or killed by arrows/bullets fired from them by the chaplain. /🆑 |
||
|
|
5efeedbad9 |
[TM First] Paint Canvas Refactor (powered by the Universal Icon Editing Framework) (#94797)
## About The Pull Request This PR adds a universal framework for editing sprites, and adds an example implementation by way of porting paint canvases to it. This should have no impact on serializing paintings in the database. As part of this canvas refactor, zooming in and out of a canvas is now handled entirely on the client side. The paint palette component has also been refactored to allow a variable number of colors up to the specified maximum, instead of populating all color slots to start out with. Some features of the sprite editing framework are unused in this PR, as they were not necessary for feature parity with the current implementation of paintings. However, they remain present for use in future PRs, such as a PDA painting app that was separated out of this branch for atomicity. These features include: - Eraser tool - Undo history - Layers - Multi-dir icon support Support for animated icons is not present, but planned to be added when a new feature needs it. ### New Painting UI Screenshot: <img width="1210" height="596" alt="NewCanvasUiDemo" src="https://github.com/user-attachments/assets/4181745b-716b-4068-b3a2-d2491e5abf09" /> ## Why It's Good For The Game This framework opens the possibility for a wide variety of new features, such as Goofball's planned tailoring mechanic. Additionally, the consolidation of all the controls into a single window should make painting more user-friendly. ## Changelog 🆑 refactor: Painting has been significantly refactored with a new UI that should provide every painting control you need without having to unfocus the UI window. Please report any issues. refactor: Items that can store paint palettes now start with no colors. Colors can be added to and removed from the item's palette, up to the number of colors they previously stored. /🆑 --------- Co-authored-by: Jordan Dominion <dominion@tgstation13.org> |
||
|
|
61b16ade51 |
Updates the DB_MINOR_VERSION (#94970)
## About The Pull Request It was forgotten ## Why It's Good For The Game ## Changelog 🆑 fix: fixes the sql schema revision being wrong in the code /🆑 --------- Co-authored-by: Jordan Dominion <jordanhcbrown+github@gmail.com> |
||
|
|
8c534a521e |
Maintenance PDA themes are added to roundstart PDAs on future rounds as well once installed (#92983)
## About The Pull Request I'm making the ordeal of finding a maint disk (or buying blackmarket bootleg disk) with a theme in it a slightly more rewarding experience, while sticking to the concept that it's something you've to find, unlike default PDA themes. This PR also proves to be an opportunity to put the progress tab that I coded a year ago for the 'Fishdex' to good use. TODO: ~~Refactor preferences to allow specific choices to be shown/hidden depending on whether the player meets a defined criteria, otherwise you'll have to do it manually every round, which is lame~~ - [x] Make some simple ui icons associated with each unlockable theme to be shown in the cheevo progress tab - [x] Code to validate deserialized DB values, in the remote case that any theme is removed in the future, as well as unit test code for any non-abstract theme without ID - [x] Add sound cue and chat feedback when unlocking a theme (or when fishing a new kind of fish for the first time, like, the code's similar) - [x] Test all of this ## Why It's Good For The Game These themes are basically an end in itself, and I understand the reason behind their existence is to make for some cute, little maint loot, but relegating it to chance of finding a disk somewhere in maintenance, **every single round** really rots whatever little substance this purely cosmetic feature already has. ## Changelog 🆑 add: Once installed, special PDA themes from maintenance disks will be present on your roundstart PDA on future rounds (Sadly I couldn't figure out a way to add those to the preferences UI yet). You can check which PDA themes you've unlocked in the Progress tab of the achievements UI. /🆑 |