mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-07 23:31:38 +01:00
2b651c1141d014e33b4ca42bedc8e2e4c19fb395
2044 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
aacc85964a |
Adds a unit test that all roundstart spawnable jobs have a landmark to spawn at (#74995)
## About The Pull Request https://github.com/tgstation/tgstation/pull/74985#issuecomment-1523773626 Tests that all jobs that have `spawn_position > 0` at roundstart have a location to spawn at. Also changes the failure message for `get_default_roundstart_spawn_point` to send to `log_mapping` rather than `log_world`, as it is a map error and log world doesn't really help anyone. This would've been sufficient for the existing unit test `log_mapping`, but that unit test expects that the log has an areacoord supplied, which we can't really do, given we're reporting a _lack_ of something. ## Why It's Good For The Game Stops maps from regressing and dumping people on the latejoin shuttle roundstart. ## Changelog ~~Not necessary unless I find a map which forgot a landmark~~ 🆑 Melbert fix: Tramstation Robotics and RD now spawn in their departments roundstart fix: Birdboat detective now spawns in their office /🆑 |
||
|
|
1b5c0489a4 |
ex_act() will work on basic mobs again (lol) + Unit Test (#74953)
basically ex_act's implementation on basic mobs would call parent and then react to it's value, this is presumably to do the first check about space vine mutations and whatever. the problem is that the `/mob/living` implementation would itself also call parent, and that would always return null because `/atom/proc/ex_act` doesn't have a set return value. So, this simply would _always_ early return, with ex_act presumably *never* working on basic mobs for at least four months now. I decided to then change up the return values for pretty much all implementations of `ex_act()` since there was no rhyme or reason to returning null/FALSE/TRUE, and documenting why it's like that. Just to make sure I wasn't breaking anything doing this (at least on base implementations), I wrote a unit test for all of the three major physical types in game (objs, mobs, turfs) because i am a paranoid fuckar. we should be good to go now though. ## Why It's Good For The Game i noticed this because placing c4's on sargeant araneus wouldn't actually damage it whatsoever. now it actually does the stated 30 damage, but araneus has like 250 health so it doesn't actually matter in the long run. whatever at least it does the damn 30 now. also adds a unit test for this specific case as well as a range of other cases to ensure this stuff doesn't silently break in this way anymore |
||
|
|
f2fd69a49a |
Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you all here (through the automatic reviewer request system). So, mineral balance! Mineral balance is less a balance and more of a nervous white dude juggling spinning plates on a high-wire on his first day. The fact it hasn't failed after going on this long is a miracle in and of itself. This PR does not change mineral balance. What this does is moves over every individual cost, both in crafting recipes attached to an object over to a define based system. We have 3 defines: `sheet_material_amount=2000` . Stock standard mineral sheet. This being our central mineral unit, this is used for all costs 2000+. `half_sheet_material_amount=1000` . Same as above, but using iron rods as our inbetween for costs of 1000-1999. `small_material_amount=100` . This hits 1-999. This covers... a startlingly large amount of the codebase. It's feast or famine out here in terms of mineral costs as a result, items are either sheets upon sheets, or some fraction of small mats. Shout out to riot darts for being the worst material cost in the game. I will not elaborate. Regardless, this has no functional change, but it sets the groundwork for making future changes to material costs much, MUCH easier, and moves over to a single, standardized set of units to help enforce coding standards on new items, and will bring up lots of uncomfortable balance questions down the line. For now though, this serves as some rough boundaries on how items costs are related, and will make adjusting these values easier going forward. Except for foam darts. I did round up foam darts. Adjusting mineral balance on the macro scale will be as simple as changing the aforementioned mineral defines, where the alternative is a rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~ Items individual numbers have not been adjusted yet, but we can standardize how the conversation can be held and actually GET SOMEWHERE on material balance as opposed to throwing our hands up or ignoring it for another 10 years. |
||
|
|
fa0225b05c |
Converts Spiderlings from Structures to Basic Mobs (#75001)
If I could've made this more atomic, I would have in a heartbeat, trust me. ## About The Pull Request Hey there. People were mocking us for having spiderlings still be a subtype of `/obj/structure`. I decided to take a lot of time to fix that. A lot of behavior it was implementing was just pseudo-mob stuff, so it was actually easier than it looked for the raw conversion. A lot of the footwork on spider stuff in the basic framework was already done previously by Jacquerel, so that was pretty nice. However, there are two new things that weren't introduced in the code that had to be put in. A) A component to handle growth and differentiation into a mob. This may have already existed, no clue. If it does (and it's NOT evolutionary_leap), let me know. B) AI Behavior to handle seeking out a vent, entering a vent, and then exiting out of a different vent. I may have gone a bit wacky on the code, but it certainly works as expected (spiderling goes in one vent, exits the other). Let me know if you can think of a way it can be better optimized, but it was deliberately written to be very failsafey in case shit goes yonkers. One fundamental difference between structure spiderlings and basic mob spiderlings (beyond the AI and not just a random prob() check for movement) is the fact that they had vent movement coded in... but we _really_ don't need stuff like that for our intents and purposes. If the range turns out to be too OP in the current framework, we can always change it up a bit, but also there's a _lot_ of vents we can end up in the station (my testing had one spiderling end up in the AI sat to get obliterated). ## Why It's Good For The Game Spiderlings aren't structures! They behave like a mob should! Players can possess spiderlings! They work seamlessly with differentiating into a giant spider! Better AI! More room for people to add into this very under-utilized buggers! ## Changelog 🆑 refactor: Spiderlings are now basic mobs, report any complete weirdness/deviation from known behavior. They should be a lot more intelligent now though. add: AI Spiderlings are super fragile, but they're also super fast, especially when they get into a vent. Once they're in circulation, they could end up everywhere! Maybe in the armory, maybe in a locked closet in maintenance. Be sure to be vigilant and splat them whenever you can to save the station from a whole lotta heartache! /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
a49af57567 | March into Mapness - Moon Base 19 (#74067) | ||
|
|
b093b12e03 |
Burning and acid components fixes and improvements (#74803)
## About The Pull Request Generally cleans up code on both components. Moves burn proc back to /obj level, I'm not sure why I moved it to /atom level, it was unnecessary. Acid component generalized so it can be used on any atom that uses atom_integrity. Fixes a bug where objects that stopped burning didn't update their burn overlay properly due to bad removal logic and leftover code. Standardizes examine messages on burning items by just slapping an examine signal registration on the component. Adds fire particles to items thanks to Lemon's PR: https://github.com/tgstation/tgstation/pull/74524 ## Why It's Good For The Game Particles look cool   Bugfixes are good Code improvements are good ## Changelog 🆑 add: Burning items now get (small) smoke particles. Sick. fix: Burning objects now clear their burning overlay properly. qol: Examining burning objects will always tell you that they are burning. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
b8f03c5e9a |
Stops the base random poster spawner from spawning traitor posters (#74868)
## About The Pull Request When the syndicate posters were added, they were intended to be a traitor objective. To quote from the original PR: >"If you start seeing red posters then you know there are traitors somewhere." As an unintended consequence of how poster randomization works however they are able to spawn from the base random poster mapping object, defeating the purpose. They should only be able to be placed by actual player traitors (or a deliberate mapping decision). This PR just removes them from the pool of posters to select from when using `/obj/structure/sign/poster/random`. You can still use `/obj/structure/sign/poster/traitor/random` to spawn random traitor posters both when mapping or ingame via commands. This will close https://github.com/Skyrat-SS13/Skyrat-tg/issues/17956. ## Why It's Good For The Game More control over mapping poster placement. ## Changelog 🆑 fix: traitor objective posters will no longer be able to spawn from general random poster spawners. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
77aebb4c29 |
Audio File Cleanup (#74863)
## About The Pull Request Removes a bunch of sound files that we don't use and moves some sound files into better locations. I'm hoping to get an archive repo for sounds going, much like the [map_depot](https://github.com/tgstation/map_depot) and [SS13-sprites](https://github.com/tgstation/SS13-sprites). EDIT: The old sound files are being moved here: https://github.com/tgstation/SS13-sounds Also increased the volume of the clownana rustle sound and clipped off some dead air from shockwave_explosion ## Why It's Good For The Game Removes a total of 1.95MB worth of unused sound files from the codebase. ## Changelog 🆑 Tattle soundadd: increased the volume of the clownana rustle /🆑 --------- Co-authored-by: tattle <article.disaster@gmail.com> |
||
|
|
fa644f7aee |
Fixes eigen lockers bypassing TP protection (#74722)
## About The Pull Request Fixes eigenlockers bypassing teleport protections.  Tested w/ one and multiple lockers, prevents entering or exiting from a tp-prot eigenlocker ## Why It's Good For The Game This came up in an away mission designed to be a "one-way-trip", the only exit being at the very end of the away mission. However, people are able to bypass this with eigenlockers, thanks to them performing no teleportation checks, which I believe is an oversight. ## Changelog 🆑 fix: Eigenstasium lockers no longer bypass teleport protection /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> |
||
|
|
9219ca33f9 |
Optimizes particle holders (#74524)
## About The Pull Request It isn't really an issue now, but these will be used more in future, so let's start off strong. There's a lot of work going on here that doesn't really need to be happening, mostly off not knowing a trickTM. Biggest one is vis_locs and vis_contents are linked lists, being in one requires being in another. Atoms clear out their vis_locs on Destroy, so we do not need to "own" references to things that have us in their vis_contents. This combined with knowing our old loc's loc off Moved made the use of weakrefs here unneeded. Similarly, atoms inside atom movables qdel on when the upper layer is deleted, so most cases of the qdeleting signal were unneeded. Also, we only cared about movement if we were an item (speaking of which, I swapped out the isitem stuff with a flag that gets passed into the new() call) ## Why It's Good For The Game Speed |
||
|
|
d0441464fb |
Basic pollen-particles for plants pollenating. (#74675)
Legally endorsed nightcode 👍 ## About The Pull Request When 2 plants are adjacent to each other, they will begin to cross-pollenate, sharing their potency, instability, and yield values between the two. This has been in the game since #50001 , however we never added a more clear visual tell that cross-pollenation exists. Thanks to the magic of *barticles*, now you can!  _pictured: wheat and tomatoes pollenating_ Adds a simple particle effect, largely lifted from bonfires, that indicates that two plants are sharing stats at minimum. ## Why It's Good For The Game Following discussion from #74621, it was decided we needed and preferred a more visual cue to the mechanic. As a general point I think that's a longer term fix to the issue, and this adds more visual clarity to an otherwise arcane mechanic (heh). Looking for feedback on how to improve the look of the particles but for fast nightcode I think I did okay for a first try ## Changelog 🆑 imageadd: Hydroponics trays now have pollen particles that they generate when they share stats and chems. Non-allergenic! /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
a0e368930f |
Reworks burning objects to be a component (#74688)
## About The Pull Request Title. ## Why It's Good For The Game Simply put, allows for atoms which are not /obj but use atom_integrity to burn up too, which is nice and good. But also, it allows for neat behavior like burning particle effects (only structures use that right now to spawn smoke)  ## Changelog 🆑 add: Burning structures spawn smoke particles. Sick. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
b1716732b0 |
The North Star Expeditionary Vessel - A Second Wind (#74371)
## About The Pull Request A new map for TGstation, in the works! It has 4 fucking Z levels, a massive expansive maintenance with unique designs, and some unique code features in the works. To Do: - [x] Update the Map to Modern TG - [x] Local Tests - [x] Work on Map Optimizations - [x] Run Live Tests Fikou has greatly helped with creating an important flavour aspect of this map, Trek Uniforms on anyone who joins! See the forum thread for more. This includes the framework for innate station traits, station traits loaded as long as it's in a map's json Here's the forum dev thread there are screenshots there. https://tgstation13.org/phpBB/viewtopic.php?p=657252#p657252 ### Mapping March Ckey to receive rewards: Cheshify ## Why It's Good For The Game So, this is the North Star. An effort taking multiple mappers and of 9~ months of hard work. This map was not initially designed for TGstation, but always designed for TGstation code. The process of retooling the map for TGstation was an absolute joy and I feel like the map definitely has it's niche as a massive and unique experience for it's players. I adore this map, it's gorgeous, has a unique aesthetic, and a number of very funny interactions with multi-Z. The PR comes packed with unique mechanics for future mappers (innate station traits!), a number of map-fitting shuttles, and a fun spacefaring uniform gimmick for the crew. **This is my second attempt at bringing this map into rotation. It was initially closed due to concerns about maptick and performance, as I wasn't willing to push for a map to be added to the repository if it didn't function to my own standards. I've been informed by a number of coders far better than I that optimizations are arriving and enroute, so I think it's time to dust her off and set sail for another journey.** **Quick Disclaimer: Due to some design decisions disagreed upon by the headcoder team and myself, the map will not be featuring unique roundstart uniforms, and despite my design intentions, the innate station trait features will be shelved for now.** ## Changelog 🆑 Cheshify, Fikou, Blue-Berry, Zytolg, InfiniteGalaxies, Striders, Sylphet, Riggle, Soal, Andry, Crit, Deranging, and Pumpkin0. add: Nanotrasen's Newest Exploratory Vessel is now available! Meet the North Star! add: More landmines, and a landmine random spawner. add: energy barriers now have a regenerative subtype, fit for permanent installations. code: Raised the number of possible level render to 4, check your preferences if needed to be reduced. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
4c48966ff8 |
Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is not completely accurate, as subsystems can be delayed, however it's useful to have this number as a multiplier or ratio, so that if in future someone changes the subsystem wait time code correctly adjusts how fast it applies effects regexes used git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i 's/DT_PROB/SPT_PROB/g' git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i 's/delta_time/seconds_per_tick/g' |
||
|
|
9b401a87be |
[MDB IGNORE] UpdatePaths to convert directional pane windows to their proper subtypes, also creates the /south spawner for consistency (#74517)
## About The Pull Request Title. ## Why It's Good For The Game 1. This nukes a lot of silly var edits, and cleans up maps 2. The south spawner *isn't* really needed, but having it is nice for consistency and clarity 3. Sometime ago I forget which map but one of them had var edited directional subtypes and that made me cry ## Changelog 🆑 Jolly fix: Maps internally had the code for the "directional" windows altered a bit. If you see stacked window panes or things look incorrectly, please file a bug report as that isn't intentional!! /🆑 |
||
|
|
6346df18bc |
Significantly speed up create & destroy by reducing the amount of time to wait for GC (#74604)
The check queue is 5 minutes long because that's the longest a client can hold onto a reference. Without clients, we can drastically decrease the time we have to wait. This lowers the time down to 10 seconds (though everything right now deletes in 5). This will represent a 5 minute decrease in CI across the board, freeing up runners. Makes a few changes to stuff that was being held for more than 10 seconds. - `VARSET_CALLBACK` now works through weakrefs, to allow for pAIs to have their holochassis init timers. - Nar'Sie cleans herself up in GLOB.cult_narsie if she's deleted. - "Spooky portals" no longer hold onto a reference for 2 minutes. - `poll_candidates` short circuits to an empty list if there are no candidates, to avoid several 30 second+ long timers Originally this was going to be a more clever hack from @MrStonedOne about short circuiting if everything deletes before the wait, but we realized that basically nothing actually holds onto references for that long without clients, and that nothing really should anyway |
||
|
|
f024f54baa |
Convert Atmos Sanity to use Landmarks (#74454)
## About The Pull Request Lets mappers do their thing without causing needless grief Lets mappers mark areas as a goal area for atmos connectivity, aswell as starting points There are four landmarks added. - Goal - Start - Ignore - Station Areas Goal and start are fairly self explanatory, note that not having any goals will default to using all station areas, with a notice. If you intend for that to happen place the Station Areas landmark somewhere on the map, preferably near the top left of the map. The ignore marker allows you to mark an area as ignored for purposes of connectivity. If you purposefully want a disconnected room off in near space for example. ## Why It's Good For The Game Alternative of and closes https://github.com/tgstation/tgstation/pull/74444 More workability for mappers |
||
|
|
20ea0d7a31 |
Stops admin spawned ghost portals from mutating global lists (#74607)
## About The Pull Request Admin spawned ghost portals call `make_ghost_swarm(null)` This in turn causes `!length(candidate_list)` to succeed The intended effect of this is that the candidate list gains the entries of `GLOB.current_observers_list` and `GLOB.dead_player_list` In actuality, what this does is that it causes `candidate_list` to be assigned to `GLOB.current_observers_list`, then adds the contents of `GLOB.dead_player_list` to `GLOB.current_observers_list` This is because `null += list()` just sets the variable to the list, while `list() += list()` adds the contents of the latter to the former in place (does not produce a new list object) All this needs is a default set so that a `null` value passed uses an empty list rather than nothing ## Why It's Good For The Game This is very unlikely to pop up (admin only in fact), but it's mutating managed globals like this is not good. ## Changelog 🆑 Melbert fix: Admin spawned ghost portals no longer make all dead players considered also as observers (they're two different things) /🆑 |
||
|
|
73ba9046df |
[Ready] New Cosmic Heretic Path DLC (#73915)
## About The Pull Request This PR adds a new Cosmic Heretic.      Main Paths: - Eternal Gate: Opens up the Path of Cosmos to you. Allows you to transmute a sheet of plasma and a knife into an Cosmic Blade. You can only create two at a time. - Grasp of Cosmos: Your Mansus Grasp will give people a star mark (cosmic ring) and create a cosmic field where you stand. - Cosmic Runes: Grants you Cosmic Runes, a spell that creates two runes linked with eachother for easy teleportation. Only the entity activating the rune will get transported, and it can be used by anyone without a star mark. - Mark of Cosmos: Your Mansus Grasp now applies the Mark of Cosmos. The mark is triggered from an attack with your Cosmic Blade. When triggered, the victim transport back to the Cosmic Diamond, which is the location your mark was applied to them. After getting transported they will be paralyzed for 2 seconds. - Star Touch: Grants you Star Touch, a spell that will give people a star mark (cosmic ring) and create a cosmic field where you stand. People that already have a star mark will be forced to sleep for 4 seconds. When the victim is hit it also creates a beam that deals a bit of fire damage and damages the cells. The beam lasts a minute, until the beam is obstructed or until a new target has been found. Can remove Cosmig Runes and teleport you to your Star Gazer when used in hand. - Star Blast: Fires a projectile that moves very slowly and create a cosmic field on impact. Anyone hit by the projectile will recieve burn damage, a knockdown and a star mark. - Cosmic Blade: our blade now deals damage to peoples cells through cosmic radiation. - Cosmic Expansion: Grants you Cosmic Expansion, a spell that creates a 3x3 area of cosmic fields around you. Nearby beings will also receive a star mark. - Creators's Gift: The ascension ritual of the Path of Cosmos. Bring 3 corpses with bluespacedust in their body to a transmutation rune to complete the ritual. When completed, you become the owner of a Star Gazer. You will be able to command the Star Gazer with Alt+click. You can also give it commands through speech. The Star Gazer is a strong mob that can even break down reinforced walls. Star Touch can now teleport you to your Star Gazer when Star Touch is used in hand." Side Paths: - Ash-Cosmic: Fire Fish: Allows you to transmute a pool of ash, eyes, and a sheet of plasma into a Fire Shark. Fire Sharks are fast and strong in groups, but are bad at combat. - Ash-Cosmic: Curse of The Stars: Allows you to transmute a bluespace crystal, a pool of ash, and a liver to cast a Curse of The Stars on a crew member. While cursed, the victim will recieve a star mark that lasts for at least 3 minutes. This star mark makes it so that the crew member cannot enter cosmic carpet fields. The victim will also recieve a cosmic carpet trail for at least 3 minutes. - Ash-Cosmic: Eldritch Coin: Allows you to transmute a sheet of plasma, a diamond and eyes to create an Eldritch Coin. The coin will heals when landing on heads and damages when landing on tails. The coin will heal for more, but only for heretics. Extra ability information: - Star Mark: This is a status effect that prevents people from walking into cosmic fields. - Cosmig Fields: Only block entities marked with a star mark, projectiles or throwing items will still work. Lasts only 30 seconds and 5 seconds for the Cosmig Trail trait. Some things I wanted to mention: - Why the Star Gazer is balanced: It has 3000 health and can kill people pretty fast, but at the same time, anyone can space the Star Gazer and lead it away from the heretic if they do not pay attention. - The Cosmic Heretics balancing has been carefully considered. It is relatively weak in group situations but strong in one to one combat. - Balance changes can also be made after the PR gets merged need be, or it can be test merged first. ## Why It's Good For The Game New heretic path means more choice and a different play style. ## Changelog 🆑 add: Adds new Cosmic Heretic. soundadd: Adds Cosmic Heretic sounds. imageadd: Adds Cosmic Heretic sprites. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
6085e3b5ee |
Reagent soup / Soup rework / Stoves - A kitchen expansion (#74205)
## About The Pull Request  **This PR:** - Reworks most* existing soup into reagents. - Adds Stoves and Ranges. Ranges replace most* existing ovens. - Adds soup pots, to cook soup **How does it work?** In the kitchen you will find a stove now. Stoves act as a "reagent container heater", essentially a chem heater. You can set a pot onto the stove. To make soup, visit the cooking recipe book for a guide. Most recipes are the same as before, just tweaked slightly - Add water to the pot (50 units for 1 batch generally), then add all the corresponding ingredients to the pot. Set the pot out on the stove and right click it to turn it on. If the recipe's correct, shortly it will start to mix and give you soup! One soup recipe will give you roughly 3 servings of soup. You can pour our the soup into a bowl using a ladle or just by pouring it manually. Of note: **All of the reagent contents of the ingredient are transferred into the soup.** Better, more nutrient rich ingredients produces more soup, and poisoned produce will pass it on. If you place the soup into a chem master, you will notice it's roughly half "soup reagent" and half a variety of reagents, including nutriments / proteins. This is your soup! It is recommended you serve your soup with the reagents included, as they make up more nutrition for the customer, however you can separate it out if you're picky. **Todo:** - [x] Fill out the PR body a bit more - [x] Mapping (wait for big merge conflict pr to go past) - [x] Soup colors - [x] Balance pass over for soup recipes - [x] TODOs - [ ] Unit tests - [x] Cullen Skink's recipe is invalid - [x] Try to see if there's an easy way to prevent soup from fattening you up too easy. ## Why it's good for the game Adds some more depth to the kitchen and moves chef away from the click-button-get-food style that exists. Allows for inherently custom soups by the way of making it reagents, so no need to support custom soup food items. ## Changelog 🆑 Melbert, stove and pot sprites by Kryson, ladle sprite by Kinneb add: Kitchens are now stocked with Ranges. add: You can now print (and create) Stoves. add: The dinnerware vendor now dispenses ladles. add: Spoons can now actually spoon... things. add: Soup has been reworked entirely. Soups are now reagents, cooked via a soup pot on a Stove or Range. Simply add water and your required items, then apply heat. Be careful not to boil over! add: Stoves, Ranges, and Griddles will now heat up their surroundings - don't turn them on around plasma! fix: Fixes being able to cook in an Oven while the room is depowered qol: Hitting a customer bot with an incorrect recipe no longer counts as a hostile attack leading to your demise shortly after refactor: Customer bots that request a reagent now use custom orders code: Cut down a lot of code in the crafting menu code, and removes some ugly ispaths del: Soup is no longer food items, so can't appear in random food pools (at least not yet). balance: Virus Food recipe now requires you cool it to 200k. /🆑 |
||
|
|
78db293e77 |
Fire and water particle effects for mobs (sick) (#74555)
## About The Pull Request Mobs on fire and wet mobs get cool particle effects ## Why It's Good For The Game https://user-images.githubusercontent.com/82850673/230459326-184b5553-17db-49df-997f-8db4c87df601.mp4 fire particles (big fire) small fire just reduces the spawn rate of particles to 20% of this https://user-images.githubusercontent.com/82850673/230468680-b831e557-bb0a-4489-8aef-4fefdfc14e43.mp4 wet particles sick ## Changelog 🆑 add: Mobs on fire get particle effects (it looks sick) add: Wet mobs get particle effects (it looks sick) /🆑 |
||
|
|
126d1cc835 |
Fix anomaly releaser creating a "Stable " (#74525)
## About The Pull Request Fixes this.  ## Why It's Good For The Game Bugfix ## Changelog 🆑 fix: Anomaly releaser no longer creates a "Stable " /🆑 --------- Co-authored-by: Time-Green <timkoster1@hotmail.com> |
||
|
|
768bc7b942 |
[MDB Ignore] Audits all generic event landmarks, removed them from generic maintenance and ai satellite cores (except in Tramstation modular maint) (#74492)
## About The Pull Request I went through all of our maps and audited our generic event spawn landmarks. They have largely been removed from maintenance, unless in a unique maintenance area. They have also been removed from AI satellite cores. Finally, many maps which have had any placed in certain departments now have them. ## Why It's Good For The Game ### Why? With #74374, now we have two landmarks for generic event use, "Generic Event Spawn" and "Generic Maintenance Event Spawn". So I wanted to give the former a pass through to have the two overlap less. I removed generic event spawn points from all non-specific maintenance locations. That is to say maintenance that doesn't have its own area, like "Abandoned Kitchen" etc. I did this to all maps except Tramstation's maintenance modules, because I didn't want to audit all 90 of them. While doing this, I went through the rest of the map and added generic events to departments missing it. A few remaps, especially on Icebox, completely forgot to add any event landmarks. And also while doing this, I noticed we weren't consistent on whether it should affect ai satellites or not. So I err'd on the side of caution and removed any from AI satellite cores, but left one in the lobby / teleporter room. ### What does this effect? In the past generic event spawns were used for **Clock cult portal locations** (the comment was never even updated!). Given it's gone, what's it used for now? Well, only three things - Radiation Leak event, placing anomalies during a supermatter delamination, and placing safety portals during a supermatter cascade. With this context, this means these events / occurances will have slightly more teeth to it. Instead of having them placed in random maintenance halls or largely unreachable areas (Ai core), it is placed in more publicly available to the player areas. ## Changelog 🆑 Melbert code: Audits the placement of Generic events markers. Some departments which previously had none now have some, and maintenance largely no longer holds them. balance: Anomalies from a supermatter delamination, radiation leaks, and suipermatter cascade portals are now placed in more commonly traversed and easy to identify areas. They will also now trigger in places like Icebox med and brig when they previously couldn't. /🆑 |
||
|
|
4397d63a55 |
Split weapons_and_items.dmi icons into their own categories (#74363)
## About The Pull Request This sprite file had been a dumping ground for miscellaneous sprites for the past decade. It's bloated and full of random kinds of icons and even has a few unused ones. It's time to reorganize them into their own separate dmi's based on theme. ## Why It's Good For The Game Better organization and easier access when looking for stuff. ## Changelog 🆑 imageadd: Split all icons in weapons_and_items.dmi to their own categories imagedel: Removed some unused icons /🆑 |
||
|
|
c0719d7185 |
Replaces xeno_spawn with the generic_maintenance_landmark, adds atmos safety checks to remaining midrounds that need them (#74374)
## About The Pull Request The xeno_spawn landmark, used to pick spawn locations for many different midrounds (but NOT xenomorphs, ironically), has been killed and been replaced with the generic_maintenance_landmark landmark. This also adds atmos safety checks to some of the midround spawn location selections that were missing them: - Paradox Clone - Nightmare - Fugitives - Morph I decided to do both of these at the same time, since I'd be touching most of the same files anyways. This includes an updatepaths that, if you are on a downstream running a custom map, should probably definitely run. ## Why It's Good For The Game It may not be a secret that these landmarks aren't used for spawning xenomorphs anymore, but the name is still deceptive. This should communicate what they're used for a bit better to both coders and mappers. Atmos safety checks (for the midrounds I hadn't yet added them to) make sure people can play the game. Closes #74372. ## Changelog 🆑 code: The xeno_spawn landmark is now the generic_maintenance_landmark landmark. fix: Certain midrounds will now check for atmos safety before spawning. /🆑 |
||
|
|
b6af63179d |
Optimize /atom/movable/Initialize with faster check for blocks_emissive [140ms on init] (#74453)
Quoting the comment:
This one is incredible.
`if (x) else { /* code */ }` is surprisingly fast, and it's faster than
a switch, which is seemingly not a jump table.
From what I can tell, a switch case checks every single branch
individually, although sane, is slow in a hot proc like this.
So, we make the most common `blocks_emissive` value,
EMISSIVE_BLOCK_GENERIC, 0, getting to the fast else branch quickly.
If it fails, then we can check over every value it can be (here,
EMISSIVE_BLOCK_UNIQUE is the only one that matters).
This saves several hundred milliseconds of init time.
|
||
|
|
f13f979586 |
March Into Mapness: Anomaly Research Ruin (#74110)
## About The Pull Request Adds a new ruin: Anomaly Research Center! Researcher Anna Molly disappeared along with 20 anomaly cores, where could she have gone?  <details> <summary>Pictures</summary> (a bit outdated but not that much)           </details> <details> <summary>Loot and hazards</summary> **Loot** - (1) Raw anomaly core - NO ANOMALY CORES - Empty anomaly armor, empty bag of holding - Bunch of anomaly neutralizers - 5u of wittel (guarded by anomaly) - (5) New anomaly releaser, use on an anomaly core to release and stabilize the anomaly, removing the decay timer **Hazards** Area is guarded with "hollow" anomalies, stable and coreless (flux, bluespace, hallucination, delimber) They cannot be signalled, but the anomaly neutralizes will make them go away BEEEG ANOMALIE: Spawns with a contained supermassive anomaly. There's four possible big anomalies that can spawn: - Mega Bluespace: Has a longer reach and can teleport further. On touch, teleports you all over space for 10 seconds - Mega gravity: Distorts the area around it, as strong as the rare gravity anomaly, but with extreme moveforce - Mega Pyro: Creates more plasma, turns the tile it's on into lava, dusts on touch - Mega Flux: Extra damage, dusts on touch, shoots lightning </details> ### Mapping March Ckey to receive rewards: timegreen ## Why It's Good For The Game I think we're overdue for an anomaly ruin. The ruin has some unique loot that could be really fun, but not devastating, to play around with on the station. The mega-anomaly is also pretty cool. ## Changelog 🆑 add: Researcher Anna Nomally has disappeared into space, carrying 20 anomaly cores. What could she be up to? /🆑 --------- Co-authored-by: Sealed101 <75863639+Sealed101@users.noreply.github.com> |
||
|
|
ccef887efe |
Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW RATHER THAN AFTER THE FACT. ## About The Pull Request Hey there, This took a while to do, but here's the gist: Python file now regexes every file in `/code` except for those that have some valid reason to be tacking on more global defines. Some of those reasons are simply just that I don't have the time right now (doing what you see in this PR took a few hours) to refactor and parse what should belong and what should be thrown out. For the time being though, this PR will at least _halt_ people making the mistake of not `#undef`ing any files they `#define` "locally", or within the scope of a file. Most people forget to do this and this leads to a lot of mess later on due to how many variables can be unmanaged on the global level. I've made this mistake, you've made this mistake, it's a common thing. Let's automatically check for it so it can be fixed no-stress. Scenarios this PR corrects: * Forgetting to undef a define but undeffing others. * Not undeffing any defines in your file. * Earmarking a define as a "file local" define, but not defining it. * Having a define be a "file local" define, but having it be used elsewhere. * Having a "local" define not even be in the file that it only shows up in. * Having a completely unused define* (* I kept some of these because they seemed important... Others were junked.) ## Why It's Good For The Game If you wanna use it across multiple files, no reason to not make it a global define (maybe there's a few reasons but let's assume that this is the 95% case). Let me know if you don't like how I re-arranged some of the defines and how you'd rather see it be implemented, and I'd be happy to do that. This was mostly just "eh does it need it or not" sorta stuff. I used a pretty cool way to detect if we should use the standardized GitHub "error" output, you can see the results of that here https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792 ## Changelog Nothing that really concerns players. (I fixed up all this stuff using vscode, no regexes beyond what you see in the python script. sorry downstreams) |
||
|
|
af81a87446 |
Adds bacteria rich moldy food to random trash spawners. (#74276)
## About The Pull Request So, as bacteria bread from perma vendor was nerfed, the only way to obtain mold for cytology is from the mini-fridges. And they won't even spawn when needed. Correct me if i'm wrong. And so this adds moldy breadslices and pizzaslices to `random/trash/garbage` spawner which appears in trashcarts and in trashbagsfrom the trashcarts. Also added it to `grille_or_waste` spawner so it can just randomly spawn on the floor. About the damp rag. Just thought that there should be at least some piece of cloth at pile of garbage, as there is none at the moment. And it's quite usefull also, you can clean yourself or your fingerprints with it. Can cut it out if needed, not a big deal. ## Why It's Good For The Game More chances to find what you want to do cytology. Cytology slightly more practical. Damp rag is usefull. ## Changelog 🆑 add: Bacteria rich moldy food (like breadslices and pizzaslices) now spawn in trashcarts, trashbags and randomly on the floor. add: Damp rag now spawns in the trashcarts and etc. /🆑 |
||
|
|
302060acda |
Removes bepis Techweb and reworks tech disks in general (#74147)
## About The Pull Request Did you know that there's 2 types of disks Science can print? One of them creates a whole new techweb and is used to transfer data to and from techwebs (which used to be for Theft objective, but nowadays all it's used for is Admin techweb). The other one is these disks you can find from Lavaland & for the Limbgrower which holds nodes on them directly, they don't need anything else. These are both printable and have very similar names which could easily confuse people, especially since they are both printed and used at the same place, being the R&D room and R&D console. This will hopefully simplify it, by removing the base Tech disks from being printable. The only one that can be printed now is for Limbgrowers, which can't be easily mixed with the other type of Disk. Outside of that, Lavaland disks are staying the same, but I've moved Bepis disks to use this, which allows us to remove Bepis techwebs being made every single time a new bepis disk is created. Examples of it in-game    ## Why It's Good For The Game There's no reason why every single Bepis node should be making a whole new techweb set with experiments to complete, roundstart nodes researched, being constantly checked if it should gain research points, have a list of papers to publish, and everything else that techwebs do. Can you guess which disk does what in this screenshot?  ## Changelog 🆑 balance: You can no longer print Technology data disks. You can still print Tech disks, which hold techweb information on it, just not the one that holds up to 5 nodes. balance: ^ Because of this, there's no way to download nodes from an RD console and upload them to an Autolathe to bypass departmental restrictions, you have to go through a Techfab/Circuit imprinter for your needs. balance: Ones that are found cannot have anything uploaded/deleted off of them either, you can only upload them to the Web. code: Every individual Bepis disk no longer create an entire techweb /🆑 |
||
|
|
797840ff43 |
Fixes decals not layering as expected in world (#74232)
## About The Pull Request They just... were not passing their layer into the element. Stupeeed Rearranges some layers to ensure things work as they do now ## Why It's Good For The Game Closes #74165 Should fix weird decal layering. If it doesn't yell at me. ## Changelog 🆑 fix: Fixes decals layering weird in some cases /🆑 |
||
|
|
cfa9d94c49 |
Macro Helper For Re-Used Turf_Decal Patterns (#74171)
 oh that's sexy <!-- 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 Hey there, blast from the past PR format. Can you spot the issue here?  Well, I did while working on #74169, and it pissed me off. This is a really simple pattern, and the only reason why it's just copypasted (and prone to such errors) is because no one took the time to do it properly like this. So, I just decided to do it while I had time today. Very nice. I also removed all the names because there was no point in them: in all contexts you would be operating off the typepath, the name would never come up. like so:  memory save? it's just un-needed anyways <!-- 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 Silly error proofing is nice! Way easier to add new colors! No need to ctrl+c/ctrl+v everything to death anymore! whoopie <!-- 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. --> Nothing that players should fret about. <!-- 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. --> |
||
|
|
e000cb0b29 |
Bioscrambler scrambles your organs again (#74177)
## About The Pull Request  It looks like this task has fallen to me. The reason this was originally removed was threefold: - Having your brain replaced would ghost you. - Having your lungs replaced would often instantly kill you in a way that people would take a long time to notice. - Several abstract or otherwise inappropriate organs could end up inside someone. I have solved all three of these problems using a blacklist. Lungs are simply never touched. Brains, sadly, are also never touched. We _can_ modify your brain without ghosting you and originally I implemented it that way, but the fact of the matter is that having your brain scrambled is essentially irreversible except via DNA infuser, if you had your brain replaced with a monkey brain which renders you unable to use complex machinery (or worse, a Psyker brain) there is very little that can be done about it. If people think that this is good to have anyway I can put it back in but it's probably for the best to leave it off. I moved the code that the DNA infuser used to safely implant a brain into a proc on organs when I originally expected that brain replacement would be a feature of this PR, but I've left it there in case anything else wants to do convenient brain replacement in the future (or already does and can be updated to use this method). The reason I didn't use a _white_list is because it seems like this list would easily become incredibly long and nobody would maintain it. A blacklist is slightly less safe, but reviewing the list it generates it seems fine. I also noted that the anomaly and the armour both implemented exactly the same code in two places, so I moved that into a proc on `carbon` instead. Now you don't need to apply changes in two places, and if anything else needs to do this in the future once anyone adds literally any items which use a bioscrambler core as material then it's easy for them too. Finally I scrubbed all cybernetics from the list and also made the anomaly not affect cybernetics. No strong reason for this one, just seemed like how it should work given that it's also blocked by bio armour. ## Why It's Good For The Game The bioscrambler in its current state doesn't do a whole lot, half of the things it changes are invisible under your clothes and often won't come up as a mechanical change unless you have developed chunky fingers or a sunlight allergy. This makes them somewhat more potentially dangerous and means people who are negatively effected might turn up at medbay asking for new eyes or a new stomach. Like the Dimensional anomaly it also introduces somewhat of a gamble feature. Some of the things on the list are _good_, and standing next to it might help you rather than harm you. Or more likely, both. As the infuser mechanic continues to add new organs with benefits and downsides it also makes this anomaly more interesting. Finally this gives the bioscrambler reactive armour a purpose, because now it means that people attacking you have a chance to spontaneously grow cat ears or snail eyes. ## Changelog 🆑 add: Bioscrambler anomalies will once again swap your organs with other organs. balance: Bioscrambler anomalies no longer affect synthetic parts. /🆑 |
||
|
|
1937c248b5 |
Roundstart Xeno egg deliveries create a Captive Xenomorph team, gives regular xenos a fluff objective so their popup isn't blank. (#73852)
## About The Pull Request Xenomorphs who are a product of the roundstart xenobio egg delivery will now spawn as "Captive Xenomorphs", who receive an objective to break containment. Here's how it works: When a delivery egg is generated that area will be marked as the "captivity area". Xenomorphs born within this area now have their own team, and have their own section in the roundend report that will greentext them based on if they were able to survive and escape captivity. Xenomorphs born outside of this area will spawn as normal Xenomorphs, with no escape objective or special fanfare. To further encourage people from actually taking the role and potentially resigning themselves to an hour in Xenobio CBT prison, the first of the hive gets their own header on the roundend report. (When I say "team" here, I mean they receive a different antag team datum. They're still able to collaborate and cooperate with other Xenomorphs, they just have a different title and extra objective in addition to the bonus roundend report limelight.)   (This also adds a basic "survive and advance the hive" objective for all xenomorphs, since their objective popup was otherwise completely blank). Since the captivity area is entirely dependent on the location of the egg itself, admins can plop one of these down anywhere, and mappers don't have to put the egg mapping helper specifically in Xenobio. For clarification -- To be qualified for the Captive Xenomorph team, **a delivery egg must be spawned**, and the xeno you inhabit must be born in the same area the egg was spawned. If the queen breaks captivity and starts nesting elsewhere on the station, their children will be born as normal Xenomorphs, not Captive Xenomorphs. ## Why It's Good For The Game Adds a bit of distinction, and gives bragging rights, to anyone bold enough to take a roundstart xeno roll and escape with it. The Xeno egg delivery is already rare enough, I think it deserves a bit more fanfare (especially considering the dramatic impact it sometimes has on the direction of a round). ## Changelog 🆑 add: Xenomorphs born in the room the roundstart delivery egg was spawned in will be part of a special "captive xenomorph" team, tasked with escaping and tracked in the roundend report. fix: Regular Xenomorphs no longer receive a blank objectives popup on spawn. /🆑 |
||
|
|
9bb9e356b1 |
Makes all CTF windows actually indestructible (#74021)
## About The Pull Request Adds a spawner for indestructible shuttle windows Replaces all "hardened windows" (which were actually not unbreakable) with proper unbreakable windows ## Why It's Good For The Game Fixes #73297, people shouldn't be breaking into space in CTF ## Changelog 🆑 fix: All CTF windows are now indestructible, fixes breaking into space during CTF. /🆑 |
||
|
|
2524f42fe4 |
Adds the Smoking Room icebox surface ruin (#73876)
## About The Pull Request My contribution to the March Into Mapping/Mapness event -- The forlorn homestead of mister Charles Morlbaro, a high-brow individual with a taste for cigarettes. This ruin spawns on the surface level of Icebox.  A local of the ice planet, Morlbaro lived a peaceful life at home, until an _incident_ compromised one of his windows. Fearing the cold and unable to keep anything larger than a cigarette lit, he sequestered himself in his private smoking room, and hasn't been seen since. ... Oh, right, the loot. That's the most important part for some of you guys.  Where there's smoke, there's fire, and where there's cigarettes, there's lighters. Mister Morlbaro collected novelty lighters, which have to be worth something to someone, right? You might be able to find some if you dig around in his belongings. Just try not to disturb him if you choose to enter his smoking room. ### Mapping March <!-- If your pull request is part of Mapping March and you want to earn an antagonist token for your FIRST mapping pull request submitted this month, please include your ckey. For more information, read about the event here: https://hackmd.io/@EOBGames/BkwuRlxkh --> Ckey to recieve rewards: theduffelbag ## Why It's Good For The Game Ruin variety is nice. This one doesn't have any particularly spectacular loot, but it's a surface ruin. Bro space ruins are sooooo 2020 bro, it's all about icebox ruins now bro. ## Changelog 🆑 Rhials add: Adds the Smoking Room icebox ruin, found on the station level! /🆑 |
||
|
|
bd6a018083 |
Adds Pinatas that can be purchased by cargo and clown operatives! (#73868)
## About The Pull Request Pinata's drop various items when struck with a sufficiently powerful weapon. This PR adds two types, a standard one which can be bought from cargo which contains various candy items and a syndicate one which contains both candy items and explosives purchasable by clown operatives. The pinata functionality is also a component so admins can turn any structure/machine/mob into a pinata and customize the "candy" inside Sprites by @Mey-Ha-Zah animated versions by me ## Why It's Good For The Game Adds a cute little celebration themed structure that can be bought by players to accommodate a celebration based gimmicks or the party trait. I think the options on things to do as a crew during a celebration are a bit limited at present with most of the options being making/purchasing food, activity wise the main example of a celebration item is pin the tail on the corgi which is a bit uninteresting, the pinata on the other hand is more cathartic and provides a "reward" in the form of various candy items for people who participate in smashing it. I also think its just funny to have clown operative gambling half their TC to try and get explosives. ## Changelog 🆑 Mey-Ha-Zah & NamelessFairy add: Added pinata crates to cargo, they contain various candy items. Fun at parties. add: Clown operatives can now purchase a weapons grade pinata, this contains both candy and explosives. Still fun at parties. admin: Admins can now turn players, mobs and objects into pinata's with the new pinata component. /🆑 |
||
|
|
379bc658e9 |
Define anomaly event parameters, adjust timers (#73708)
- Moves parameters for all the anomaly random events to defines. - Timers consolidated into three severities: medium, harmful, dangerous. - Medium (harmless/nuisance) are announced immediately, higher severities keep delay allowing time for crew to notice it first. - Removes 6 second wait for anomaly events to start. - Countdown timer reduced to 75 seconds (+2 for ectoplasmic.) Previously 99/+1. |
||
|
|
44c0099536 |
Restores Spell Card targetting behaviour (#73706)
## About The Pull Request Fixes #52946 This has been broken ever since #44112 which apparently removed the proc in this component which selected a target for performance reasons and just... didn't replace it with anything else? So it's been bricked ever since. In order to restore the removed mouse tracking behaviour I implemented the pattern used in scoped weapons and the kinesis module. As this was the third thing I could find to use this code, I abstracted it out into an object where most of the shared behaviour lives. I tested those things too and they still seem to do what they used to. Here it is in action: https://user-images.githubusercontent.com/7483112/221954852-22244bb1-7c87-452d-a9b0-ebed81c4c1ef.mp4 Because this spell now applies a full screen overlay in order to function, it's really begging for someone to make some touhou-style art with cards and patterns around the edge of the screen while you are in aiming mode, but I'm not going to be the one to make it. I tidied this component up and refactored it as best I could while I was reworking it to use a full screen overlay but I am... not totally confident that it should be a component at all given that it keeps being created and destroyed. But also it has worked that way for like four years now, so who am I to say. Oh yeah also the icon for this spell broke, so I fixed it. ## Why It's Good For The Game Makes a reasonably terrible wizard spell marginally less bad. Maybe now that this component works, some other things can use it? If we make a fourth thing which follows your cursor it won't need to copy/paste code around. ## Changelog 🆑 fix: Spell Cards from the Wizard spell will now home in somewhat on the target nearest to your cursor. fix: The Spell Cards spell now displays the correct icon instead of a big red "error" text. /🆑 |
||
|
|
4ffd487520 |
Forcing an embed means that it will always happen (Effects trapped posters, accidental consumption, and bullet shrapnel) (#73729)
## About The Pull Request Addresses #73105 I confidently asserted in the issue that the current behaviour was not a bug, but lo and behold when I went to investigate this on March 1st what did I find... a bug! Force embed actually never worked in the first place because the passed arguments were in the wrong order. Now they are named, so the order doesn't matter any more. Also there was an argument called "silent" which did literally nothing, I just deleted it. Sending the force flag will now mean that the forced embed _always_ embeds unless it is literally impossible. The only other place this effects is when you accidentally eat glass, so a similar case to this one. While I was in there, I made posters _very slightly_ more discerning about what gloves block glass. Unfortunately there's no widely applied and useful trait like `THICK_MATERIAL` for gloves so I mostly just exluded latex and fingerless gloves... but that's better than nothing. Anyway now if you bother to place a glass shard inside a poster and someone tries to pull it down and they're not wearing thin or fingerless gloves it will _always_ embed in their hand. Oh and I put some balloon alerts in there. **Unrelatedly to this change** fixing this seems to also fix an ancient bug where bullet shrapnel would roll its embed chance twice in a row, meaning that it had an (x/100)^2% chance of applying rather than an (x/100)% chance, significantly less than written. It is weird for that to go in this PR, but seems to be an effect of fixing this bug? Not sure there's a way of not fixing both at the same time. ## Why It's Good For The Game You go to the effort of putting a glass shard behind a poster (the only way to associate your own fingerprints with the deed) and are lucky enough that the person who pulls it down isn't wearing gloves (almost everyone does) and it _still_ only has a 50% chance to embed the glass? The trap should work at least _some_ of the time. ## Changelog 🆑 fix: Something which is "forced" to embed will now always actually embed. Resultingly, accidentally swallowing glass or encountering it behind a poster without adequate protection will now always cause it to embed into your body. balance: Thin and fingerless gloves may no longer protect you from having glass in your hand after pulling down a poster fix: Bullets containing shrapnel now use their correct chance to embed, which may cause bullet wounds to contain shrapnel more frequently. /🆑 |
||
|
|
8b2aed0342 |
New Station Trait, Employee Birthday! (#73751)
<!-- 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 new neutral station trait the announces to the crew its a member of staff's birthday, spreads some confetti/balloons around and gives out some birthday themed items including hats, new toys and cake ingredients for the chef. The mechanical impact of the trait is quite minimal only giving out some fluff items and giving the janitor some extra work. However the event has a lot of potential roleplay impact by singling out a crewmember and informing everyone about their birthday, I can foresee players using this as an opportunity to run birthday themed gimmicks or give one specific player preferential treatment for the shift which should allow for some interesting stories to be produced. <!-- 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 Partially explained in my about section but in short I think a lot of the station traits we have at the moment are very mechanically driven and we could use a more open ended roleplay prompt themed one which this one provides. The idea of one player getting put in the spotlight while not being an antagonist is also something I can see potentially great stories come from. <!-- 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: New Neutral Station Trait, "Employee Birthday", its someone on the crews birthday, make sure to wish them a happy birthday and perhaps get them a gift. add: Two new party themed items have been added to the arcade prize pool, the party horn and a box of party poppers. /🆑 <!-- 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. --> |
||
|
|
88d6fae7c5 |
Tape Wizard, the distant cousin of the Paper Wizard (#73739)
## About The Pull Request Adds a new wizard costume and non magical variant, made exclusively from tape.  ## Why It's Good For The Game New unique nice looking thing = good Opens the door for more uses of an already niche mechanic  Roleplay. ## Changelog 🆑 add: Adds the tape wizard costume, both a real and fake variant add: Adds the costume behind the autodrobe contraband wire, and the real variant in the wiz den 🆑 |
||
|
|
50b37c8c7f |
Faction defines (#73681)
## About The Pull Request Quite a lot of mobs had faction defines as a string, which always has a chance for error. For example, the clown mob spawner had their faction written as "clown", when the official faction name was "clowns", and a define existed for it anyways! This PR moves every single string based factions over here. No references or special role factions. Hopefully I didn't miss anything. I also moved a global define used for picking your uplink provider's flavour to the only file that used it, datum_traitor.dm, and renamed them a bit to avoid confusion. I have also noticed that the mimic faction was assigned to the petrified player with += instead of |=. |= would ensure no duplicate factions, so I have changed it. Future improvement: I have noticed that there is a lot of bloat with factions that contain only one or two entries (examples: gnomes, floating eyeballs, penguins, the pet lizards), and some always appear in pairs (vines and plants, the rare exceptions being killer tomatoes and strange reagent spawned pine trees), but trimming consolidating them is a matter for a different time. ## Why It's Good For The Game Makes assigning factions a bit less error prone. I can finally remove the ```/// Later all mob factions will be moved here and their current factions replaced with faction defines.``` comment. Later is NOW. ## Changelog Nothing player facing |
||
|
|
64de1617b2 |
Refactors lizard fake canned food into real canned food (#73469)
## About The Pull Request /obj/item/food/canned_jellyfish, /obj/item/food/desert_snails, and /obj/item/food/larvae are now all /canned subtypes. All this means is that to eat them, you use them once, and now they drop an empty tin rubbish item. ## Why It's Good For The Game Making fake false versions of real types that exist is such a pet peeve of mine, we recently had a bug from it where the snails would go bad. But even with that fixed you're just chomping the container of snails and it's not the same behavior as all the other cans grumgrugmrg I FIXED IT. ## Changelog 🆑 refactor: Lizard related canned food now acts like canned food /🆑 |
||
|
|
10f6825ae3 |
Updates policy to better warn players for any existing antagonist policy (#73408)
# Don't merge this without leading the headmins know so they can update the server configs ### For headmins: The following roles need to be updated: - "Obsession" -> `/datum/antagonist/obessed` - "Heretic" -> `/datum/antagonist/heretic` (Though this one will still work, change it to message them on spawn) - "Headslug Changeling" -> `/datum/antagonist/changeling/headslug` - "Pyroclastic Anomaly Slime" -> `/datum/antagonist/pyro_slime` (Though this one will still work, technically, change it to message them on spawn) ## About The Pull Request So, we have this whole system in the code to allow all mob typepaths, species typepaths, and even antag datum typepaths to have a set policy But we like, don't use it? For some reason we rather set a million `get_policy` calls than use this. They're all stuck in the policy verb and not sent to the player in any obvious. (Also, it's super fragile, which I hate. Change the typepath and the policy silently fails. Maybe someone can change that afterwards) This PR updates that. All antag datums will check in `on_gain` for policy to show to the player if there's any. It doesn't solve the entire issue. Mob policy and species policy is not conveyed to the player in any way BESIDES the policy verb which no one uses. So people have no idea that it's a thing. But it helps a bit. ## Why It's Good For The Game Better ways to convey to players how they should be playing. Also Valentines day, because... it's crazy. ## Changelog 🆑 Melbert config: Policy.json config got updated. The following values need to be updated: config: "Obsession" -> /datum/antagonist/obessed config: "Heretic" -> /datum/antagonist/heretic config: "Headslug Changeling" -> /datum/antagonist/changeling/headslug config: "Pyroclastic Anomaly Slime" -> /datum/antagonist/pyro_slime config: ALL antags in the policy.json file will now get notified of any existing policy set by the admin team, rather than only a handful. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Tim <timothymtorres@gmail.com> |
||
|
|
cbbf7b3613 |
Basic Mob Spiders III: Sgt. Araneus is no longer a bat (#73350)
## About The Pull Request This PR converts giant spiders into basic mobs and resultingly fixes #37793 They _should_ have the same behaviour as their simple mob versions although I can't verify that their movement speeds are _exactly_ the same. It should at least be pretty close. A quirk of spiders is that they had a pretty large `move_to_delay` which made them slow in the hands of AI (because it would just pause for ages between taking steps) and faster in the hands of players, and they often appear in both forms so I had to implement this as a speed modifier based on player control. Additionally this is the first basic mob which can be set on fire. This is currently implemented as a var on `mob/living/basic` but I know there was some annoyance at adding the environment tolerances as vars on there so if desired I can try and extract it out, I'm just not sure how easy it will be. Something else I noticed is that spiders seem to take stamina damage from bug spray... but stamina damage does nothing to either simple _or_ basic mobs. I have left it in for now in case I am missing something, and rebalancing it to do something else would be more like a balance change. Oh also I killed the `mob/basic/retaliate` folder because that isn't a classification that needs to exist or makes sense. ## Why It's Good For The Game We don't want to use simple mobs any more. Sergeant Araneus can finally actually be a spider, instead of being a bat. ## Changelog 🆑 refactor: Spider code has been refactored and AI-controlled spiders may have slightly different movement or reaction times. fix: Basic mobs can now be slowed when they take stamina damage, however currently only spiders actually _can_ take stamina damage. fix: Spiders should now more reliably disable their AI when controlled by a player. fix: Araneus is no longer considered to be a bat and so cannot fly. fix: Araneus is no longer considered to be a bat and so is no longer frightening to people who are scared of the supernatural. /🆑 |
||
|
|
728a0f1b91 |
Grand Ritual: Alternate Wizard objective (Wizard Events II) (#72918)
Adds an alternate greentext objective for Wizards known as the "Grand Ritual". This was initially the gimmick of a different wizard-related antagonist downstream. I didn't get permission to port it, so I'm attaching it to regular Wizards instead. Wizards will spawn in with a new Grand Ritual button next to their antagonist info button. Pressing it will pinpoint them towards their next Ritual Location (a randomly chosen region of the space station). Once within that location, pressing it will summon a magic circle and obliterate any dense objects which are in the way. This also puts the ability on a two minute cooldown. Clicking on the magic circle with an empty hand will begin a three-stage invocation to gather magical power. You can interrupt this invocation at any time and will resume from the last stage you completed (if you finished two stages you only need to do one more). Once you complete a ritual, a random event will be triggered based on how many rituals you have performed so far. These tend to be ones which annoy the crew in some manner, and Wizard Events are included in the list. Additionally, something weird will usually happen to the room you are in. Then you are assigned a new location and can toddle off to do it again. Once you have done this three times, you will be picked up by the station's sensors every time you start a subsequent ritual and should expect annoyed company to come investigate. Once you have done this six times, you can finally spend all of that accumulated power on the seventh Grand Finale ritual. Completing this grants you victory at the end of the round and will have a larger, flashier effect which you can pick from a list of options, think of it like a wizard equivalent of a Traitor Final Objective or Heretic Ascension. After that you can still keep doing rituals if you want to pester the crew further by summoning more random events, you've already "won" at this point so now it's your job to make them want to go home. I think it'd be more fun to just find out what the Finale ritual can do by seeing it happen but maintainers will probably want a list of its precise capabilities, so here it is: Currently completing a ritual also has a chance to create Heretic Reality Tears (of both varieties, available for Heretics to eat and visible to crew) as a kind of cross-antagonist interaction which seemed to make sense to me but if this seems thematically or mechanically inappropriate it's easy to strip out. |
||
|
|
42d929a100 |
Adds the Ectoplasmic Outburst, a rare ghost-centric anomaly event (#73024)
## About The Pull Request This PR description might be a bit rushed because I accidentally submitted the PR and want to bang out a quick explanation of what this is before people start asking questions. Adds a new, rare, ghost-themed anomaly event -- The Ectoplasmic Outburst.  This event increases in power as more ghosts orbit it, with three important thresholds to meet. If 10% or more of all active observers are orbiting the anomaly, an effect will occur in the nearby area akin to the revenant's defile spell, damaging flooring, windows, and making a mess. If 35% or more are orbiting the anomaly, nearby objects in the effect radius have a chance to become haunted, and will fling themselves at anyone nearby for a bit. Spooky! Now, at 50% or more participation, things get serious. Ghosts orbiting the anomaly will be polled to be brought back into the world for a brief period as a vengeful spirit, anchored to a SUPER spooky ghost portal. The portal closes after two minutes (alternatively, smash it with a toolbox) and deletes all of the ghosts it spawned. Vengeful spirits are mostly just meant to smash stuff and be a nuisance while they can. It's a wonderful opportunity to let deadchat desalinate a little.  Oh, also, the anomaly is deadchat controlled. With enough ghosts, you could theoretically outrun anyone trying to neutralize it! The associated reactive armor has an effect similar to the anomaly, haunting nearby objects for a time when the wearer is struck. Not particularly outstanding, but it can introduce an element of chaos into a fight that your opponent might not expect. ## Why It's Good For The Game Anomaly events are great for ghosts. Why not make one tailored just for them! Gives admins something to spawn when a wizard has killed half of the crew but it's not quiiiite time for an ERT. It's a bit of a silly event with a novelty reward, but I think it's rare enough not to be a huge issue. ## Changelog 🆑 Rhials add: Ectoplasmic Outburst anomaly event add: Reactive Ectoplasm Armor /🆑 |
||
|
|
2ff892757f |
Correct instances of destroying baseturfs in ChangeTurf & Select dimensional anomaly theme (#73177)
## About The Pull Request This is starting to hit an atomisation threshold but I promise all of these fixes are related (they need the same new proc in their fix) First of all, I needed to debug specific types of dimensional anomaly because some of them replace the floor with floor tiles and some of them replace the floor with underlay tiles (like glass plating), so I added an event override to allow you to pick which to activate. This actually could be easily removed into another PR if desired, or even delayed until after the freeze if you don't think it's appropriate, it just seemed like after I wrote it then I might as well include it and I'll still need it to retest after addressing any reviews here. Fixes #39222 Fixes #70161 In both of these instances we were using `ChangeTurf` to turn one kind of floor into another kind of floor, but this is naive because in both cases we are also using a mix of "under" floors and "over" floors (from now on I will refer to these as "plating" and "floor tiles" because those are easier to understand). Transforming a plating into a plating, or a tile into a tile works fine and preserves expected behaviour. Transforming a tile into a plating is also fine, it just deletes the "over" layer and leaves you with some floor you can't remove with a crowbar. Transforming a plating into a tile creates a floor that you can remove with a crowbar _and which has no baseturf underneath_, instantly breaching it to space (or making a hole to the lower z level). This isn't expected behaviour for either of these effects. In order to fix this I added a helper proc to `turf/open` called `replace_floor`. If you pass this proc a plating it will simply replace the existing turf. If you pass it a tile then it will _always_ ensure that there is a plating underneath, making it breach-safe for any future effect (or other existing one I have forgotten about) which wants to transform floors. Also I generally refactored the "transform an area" version of the colossus crystal because that code was old and smelled bad. Fixes #55821 Finally I also fixed this for cult constructs, which was a similar but different bug. This was creating a _wall_ on top of a plating with changeturf which would _also_ destroy the plating and leave a void underneath. I haven't found any other instances of this so I fixed it in the Conjure spell rather than with a helper proc, but I can make one instead if desired. ## Why It's Good For The Game All three of these cases result in unexpected hull breaches, which can be quite annoying. In the case of both anomalous items they can cover quite a wide area in floor which can be trivially breached with a crowbar and then tedious to replace after it has destroyed all of the air. In the case of the artificer it could create breaches in cult bases (very frequently built in maint, which is mostly plating) which would immediately start suffocating your team. This is obviously not ideal. Also being able to pick the theme of the anomaly is fun. ## Changelog 🆑 fix: Plating replaced by floor tiles from a dimensional anomaly or colossus crystal will now still have plating underneath when crowbarred, instead of space (or open space on z level maps). fix: Summoning a cult wall on plating as an Artificer will leave the plating intact underneath when it is removed, rather than replacing it with a void. admin: Admins can pick the initial flavour of a manually triggered dimensional anomaly. /🆑 |
||
|
|
d1aa9c3a78 |
Effects no longer runtime on being attacked (#73300)
## About The Pull Request Effects didn;t override generic attack, which caused runtimes when attacked ## Why It's Good For The Game Closes #73295 ## Changelog Signed-off-by: GitHub <noreply@github.com> |