mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 18:11:16 +00:00
088409bbe376a7adcd4d1fb747cf4a5e4f257c5b
57 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
58501dce77 |
Reorganizes the sound folder (#86726)
## About The Pull Request <details> - renamed ai folder to announcer -- announcer -- - moved vox_fem to announcer - moved approachingTG to announcer - separated the ambience folder into ambience and instrumental -- ambience -- - created holy folder moved all related sounds there - created engineering folder and moved all related sounds there - created security folder and moved ambidet there - created general folder and moved ambigen there - created icemoon folder and moved all icebox-related ambience there - created medical folder and moved all medbay-related ambi there - created ruin folder and moves all ruins ambi there - created beach folder and moved seag and shore there - created lavaland folder and moved related ambi there - created aurora_caelus folder and placed its ambi there - created misc folder and moved the rest of the files that don't have a specific category into it -- instrumental -- - moved traitor folder here - created lobby_music folder and placed our songs there (title0 not used anywhere? - server-side modification?) -- items -- - moved secdeath to hailer - moved surgery to handling -- effects -- - moved chemistry into effects - moved hallucinations into effects - moved health into effects - moved magic into effects -- vehicles -- - moved mecha into vehicles created mobs folder -- mobs -- - moved creatures folder into mobs - moved voice into mobs renamed creatures to non-humanoids renamed voice to humanoids -- non-humanoids-- created cyborg folder created hiss folder moved harmalarm.ogg to cyborg -- humanoids -- -- misc -- moved ghostwhisper to misc moved insane_low_laugh to misc I give up trying to document this. </details> - [X] ambience - [x] announcer - [x] effects - [X] instrumental - [x] items - [x] machines - [x] misc - [X] mobs - [X] runtime - [X] vehicles - [ ] attributions ## Why It's Good For The Game This folder is so disorganized that it's vomit inducing, will make it easier to find and add new sounds, providng a minor structure to the sound folder. ## Changelog 🆑 grungussuss refactor: the sound folder in the source code has been reorganized, please report any oddities with sounds playing or not playing server: lobby music has been repathed to sound/music/lobby_music /🆑 |
||
|
|
45d520f4df |
Another examine refactor: Tag edition (#86678)
## About The Pull Request Another batch of changes to examine, ideas being courtesy of Melbert and Swanni. When examining an item you will now see tags with tooltips elaborating on their meaning instead of having each property displayed in a separate line. Additionally, examines now use fieldsets, saving a line previously spent on displaying an item's name and instead putting it directly into the top outline. Embedding and slapcrafting also display their properties as tags, and combat info now displays item's sharpness. Here are some examples, each tag previously taking up its own line.    Additionally, protection classes now better elaborate on items' temperature protection properties and tell you the exact temperatures that an item can withstand  ## Why It's Good For The Game Tags are a very intuitive system used in many games and we could benefit from it too. Compressing seven lines of text into one while retaining readability and all information within by using tooltips will majorly cut down on chat space used by examines. ## Changelog 🆑 refactor: Refactored how examines display item properties. A lot of them are now displayed as tags that you can hover over to receive details about, like item size, resistances and materials an object is made of. qol: Protection classes now better elaborate on thermal resistances of items, displaying the exact temperatures they can protect you from. /🆑 |
||
|
|
8d0e6734fe |
Fish (ya know, from fishing) is now edible (#86110)
## About The Pull Request Fish (the item that you catch with a fishing rod) now has an edible component attached to it, making it possible to eat them if you really have to, at the cost of eventually killing and deleting the fish, however, you normally shouldn't. Along with the seafood and meat foodtypes flags, it possess the gore and raw foodtypes too, making them pretty awful to eat unless you're a (non-vegan) lizard, felinid, or wearing the strange bandana*, which can only be found in the cqc kit case. Furthermore, it carry diseases like the ones from food left on the floors for too long, so a strong stomach is required to safely eat it even if you actually like it, dummy... UNLESS you fry or grill it, thus killing the diseases (as well as the fish) and removing both the gore and raw food types, then it becomes an actually ok meal... UNLESS you're dumb enough to eat a pufferfish, a donkfish or a slimefish. That is more or less the general rule. A few fish stray for it. For example, lavaloops are never raw (still gorey). The skeleton fish are never edibles, and holodeck fish is, well, holographic and thus disappears if you try to eat it. *the strange bandana is a reference to MSG, and this is a reference to the MGS3 fish eating animation. This is WIP btw, I'll have to test it and add some then polish it. ## Why It's Good For The Game Whole unprocessed fish should be technically edible, even if not safe to eat nine times out of ten. Also I kinda need this if I want to add a tasty fishing spot to the kitchen deepfriers. ## Changelog 🆑 add: Whole, unprocessed fish is now edible. However it's pretty much reccomended to grill or fry it for over 30 spess seconds before attempting to eat it. fix: germ-covered, dirty food no longer tries to infect you through contact. /🆑 |
||
|
|
8486f2f7e2 |
Storage / table interactions at the bottom of the interaction chain (#85512)
Because the wings were in fact made of wax ## About The Pull Request Storage goes to the very bottom of the interaction chain, hardcoded in on `/atom`. This is not preferred, obviously, but it ends up being a lot less snowflaking overall. Tables also go at the very bottom by extending `base_item_interaction`. Fixes #83742 Fixes #84434 Fixes #83982 Fixes #85516 Fixes #84990 Fixes #84890 Closes #85036 Closes #84025 (RMB places it on the table.) Closes #86616 Other changes: Refactored pod storage to be less jank. Patches some exploits around it. ## Why It's Good For The Game Should make a lot more interactions a lot more reliable... hopefully ## Changelog 🆑 Melbert refactor: Storage and Tables are now a lower priority action, meaning some uses of items on storage should work... better, now. Here's hoping at least, report any oddities. refactor: Note: For an overwhelming majority of items, **combat mode** will attempt to attack/insert into the target, while **non-combat-mode** will attempt to use on a target. This means screwdrivering or emagging a MODsuit must be done on non-combat-mode, as combat mode will simply put the screwdriver or emag into its storage. Same applies to tables, though when in doubt, RMB may help (for things which are also weapons, like mops). refactor: Refactored escape pod storage, now they actually properly show as unlocked on red alert and above. /🆑 |
||
|
|
6faa37853b |
Void Heretic Rework: You Can (Not) Heat Up. (#85728)
## About The Pull Request Reworks most of the Void Heretic kit. All Void spells now apply a stacking debuff that makes you gradually colder. Void Blast has been replaced with a new spell "Void Conduit" and a new Side knowledge spell, "Void Prison" has been introduced. Waltz At The End Of Time has been completely overhauled. Lastly Void Blade has been resprited along with the overlay of Void Chill, check any of the linked videos to see the new look. All new sprites have been kindly made by OrcaCora. ## Why It's Good For The Game Void path is *Supposedly* themed around the cold of space but doesn't have any tools to live up to the fantasy of being an harbringer of the Void whose main goal is to freeze the station to an icicle. Then there's also the issue of Void being utterly underwhelming compared to his neighbors, Cold is way too easy to treat as a status effect, so much so, a simple cup of coffee can utterly shutdown the void storm, which is just unacceptable. # **Changes** - **Void Chill**: Is now a stacking debuff, each stack slows movement speed by a percentage while lowering body temperature, upon reaching the cap, which is 5 stacks, the victim cannot heat up anymore, all void Spells apply 1 stack of the debuff, with the exception of the grasp applying 5 (2 for the mark and 3 for the detonation) and the blade upgrade applying 2. **Reasoning**: Void chill currently suffers from being completely shutdown by sipping tea, coffee or having the COLD_RESIST trait,with this change you can still negate the damage and the slowdown you get from being cold but not the slowdown from the debuff itself. - **Aristocrat's Way**: Now grants no slip on ice and water tiles on cold or depressurized turfs **Reasoning:** Since the rework revolves around making Void heretic more involved in freezing the station, they should be able to move in their domain without getting punished for it. - **Void Cloak:** Can now be toggled on and off to make the cloak visible or invisible; when the cloak is visible it grants low pressure immunity trait. **Reasoning:** Not having pressure resistance as a Void Heretic just sucks, as you are clearly intended to somewhat go into space at some point; giving it to the cloak is a good compromise since you sacrifice better protection (***the armor values of the cloak are pitiful***) for utility. - **Replaces "Void Blast" with a new spell, "Void Conduit"**. **Void Conduit:** Opens a gate to the Void; it releases an intermittent pulse that damages windows and airlocks and applies a stack of void chill to non heretics, Heretics are granted the low pressure resistance trait. **Reasoning**: I like the idea behind Void Blast; unfortunately, the spell has limited uses if an area isn't already spaced, which is hard to do considering the current kit of Void Heretic doesn't provide anything to help in that regard. I wanted to give Void Heretic a tool to turn any area of their choosing into their ideal habitat. Not amazing for quick assassinations, good if you are anticipating a fight or want to simply expand your domain, the added Trait might seem redundant, but let's not forget that the void cloak is still a side knowledge, I don't want newbie heretics to space an area and accidentally killing themselves because of it. Video Demonstration: https://www.youtube.com/watch?v=nhPdj1hIgSI - **New side knowledge: "Void Prison."** **Void Prison:** It makes the target invulnerable and unable to do anything for 10 seconds , when the spell ends, it applies a few stacks of void chill, cannot be self-cast. It occupies the same slot of Blood Siphon (inbetween Raw Ritual and Void Phase.) Video Demonstration: https://www.youtube.com/watch?v=nKZd8aEcZFw **Reasoning**: Void is technically meant to be an assassination path and not really apt at tackling multiple opponents, this spell might come into clutch if you are outnumbered, or simply want some breathing room from your pursuers. - **Void Jaunt and Void Pull** Cooldown respectively reduced to 25 and 30 seconds, down from 30 and 40. **Reasoning:** I felt that the cooldown on these was a bit too high overall; as it stands, Void Phase cooldown is twice as long as Ashen passage, one of the best and arguably most sidepathed spells in the game. Granted phase is faster and has more range but I don't think it justifies its cooldown being this long. Void pull could also use slightly less cooldown, being the very last spell you unlock and offering a simple melee knockdown. - **Seeking Blade:** Now applies 2 stacks of void chill per hit. **Reasoning:** Seeking blade is a bit underwhelming for being the final blade upgrade, teleporting to a target you just stunned at melee range is incredibly niche, now that Void chill is a stacking debuff we can probably just slap it on the blade itself. - **Waltz At The End Of Time:** The Heretic becomes weightless and able to levitate around, (carp movement essentialy). The heavy storm is no longer bound to the room the heretic is in but is now an aura around them, this does a few things. 1) Releases a pulse that depressurizes areas, shatters windows, airlocks and firelocks, and applies a stack of void chill to non heretics, the passive burn and oxy damage effect has been removed. 2) Grants to the Heretic projectile deflection. **Reasoning:** Void Has the reputation of having the weakest ascension in the game, which it's hard to disagree on considering you can completely neutralize the effects of the storm by simply sipping tea and how generally little it does overall. It's also kind of strange that you have this massive Eldritch storm ravaging the station and for it to have no effects on its atmosphere, infrastructure, or projectiles whatsoever. Video Demonstration: https://www.youtube.com/watch?v=1_blr20-hgA ## Changelog 🆑 add: New Heretic Side Knowledge, Void Prison. add: New Void Spell Void Conduit has now replaced Void Blast. balance: Void Chill is now a stacking debuff, upon reaching the cap, makes the target unable to heat up. balance: Aristocrat's way now grants immunity to ice and water slips on cold turfs. balance: Void Cloak now grants low pressure resistance when visible. balance: Void Phase and Void pull have received a minor CD reduction. balance: Seeking Blade now applies a couple of stacks of void chill. balance: Void Heretic Ascension has been overhauled, it's now protects the heretic from projectiles, destroys windows and airlocks and applies void chills to non heretics. image: Void Blade and Void Chill have received some new sprites. /🆑 --------- Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> |
||
|
|
48bbd6fddf |
Reworks examine (a little) (#86506)
## About The Pull Request Basically, reworks how examining things looks to the user. #86497 is required even though this pretty much replaces the entire PR. Examining random objects and simplemobs:   Examining a person:   Examining an ID card a person is wearing (by clicking the hyperlink adorning the ID card when examining them): (Note, you can only pull up this if you are within 3 tiles of the person)  ## Why It's Good For The Game Examine is very old and very inconsistent between atoms and mobs. So I thought I could spruce it up a bit while bringing some consistency along. This should also help with losing certain details in massive walls of examine text - stuff like names will stick out more. ## Changelog 🆑 Melbert qol: The way examine looks has been updated. qol: A person's ID card no longer appears with a big icon on examine. You can now click on their ID card (in the chat box) to get a bigger picture of it, as well as information about them. refactor: Much of examine backend code has been refactored, report any odd looking text. /🆑 |
||
|
|
69176298ed |
Spelling Fixes (#86056)
## About The Pull Request Fixes several errors to spelling, grammar, and punctuation. ## Why It's Good For The Game Improves readability and user experience. ## Changelog 🆑 spellcheck: fixed a few typos /🆑 |
||
|
|
10c2b7364e |
The fishening v3: Fishing lures. (#86007)
## About The Pull Request Over half of the line changes are merely from splitting the fish_types.dm into several files since it was over 1k lines already. One of the small issues with fishing right now is RNG. You want to get some specific fish, and you go through all the micromanaging with hooks, reels and baits only for the random number god to say "nope", and that's only going to get worse the more fish are in the game. However, I've a solution: (unconsumable/reusable) fishing lures, each of which attracts different fish based on different conditions. The only caveat is that they require to be spun at set intervals (usually 1 to 3 seconds, depending on the lure, with a second-long window). Worry not, there're visual cues in the form of a green/red light hovering the fishing float, so you won't get screwed up by the server slowing down or whatever. The whole box of lures (12 so far) can be from cargo for the fair price of 450 credits. I've also added 5 new fish: monkfish, plaice, pike, another punnier variant of the pike, perch and squid. The latter is quite special because of the ink production trait, which lets players use it to blind others at a close range and when butchered, it yields an ink sac, which can be processed into a can of squid ink (one less item exclusive to the produce console), or thrown at people in a sort-of-similar fashion of banana cream pies (except it's ink). <details> <summary>Images</summary> Fishing lures (forgot to take my cursor off the veggie one before the screenshot):  The five new fish:  </details> <details> <summary>A table of fish catchable wth each lure (excluding holodeck)</summary>  </details> A few more things in the CL, baitfish are a thing now. ## Why It's Good For The Game There should be ways to contrast some of the RNG fishing has. After all, it's only going to get more random the more fish are in the game. Furthermore, I find it disappointing that a lot of food stuff is exclusive to the ingredients console and there're no other ways to get it. ## Changelog 🆑 add: Added fishing lures to the game. They don't get used up like baits and let you catch specific kinds of fish, though they need to be spun every few seconds. The whole set can be ordered from cargo for 450 credits. balance: The magnet hook now removes dud chances. add: Added five new fish types: perch, two types of pike, monkfish, plaice and squid. Squids have a fairly special ink production trait, which lets you use them (unless dead) to ink people face at close range, and can be butchered for an ink sac, which can either be processed into canned squid ink, or thrown at someone. fix: Refactored throwing a little. Some items (specifically components/elements) won't be triggered when caught. no more plates shattering despite being caught for example. add: Goldfish, lavaloops, needlefish and armorfish can now be used as baits. /🆑 |
||
|
|
aefa22166c |
Heretic Influences use alt appearances (so ghosts can now see them (semi-transparent)) (#85932)
## About The Pull Request Removes the rather overcomplicated system behind heretic influences and makes them use alt appearances Fixes a few bugs involving alt appearances that I noticed in making them I made this PR 7 months ago and forgot to Pr it ## Why It's Good For The Game Less complex codes and lets observers get a cut in on the action. Should fix #77530 ## Changelog 🆑 Melbert refactor: Refactored heretic influences a tiny bit, now ghosts can see them! Report any oddities. /🆑 |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
2f69fe6190 |
Adds three new deathmatch maps - Ragnarok, Lattice Battles, Species Showdown (#85319)
## About The Pull Request Adds three new deathmatch maps. ### Important nonDM Balance Changes Cult daggers fit on belts. Heretic blades fit on belts. Veil shifters fit on belts. I really don't know why these didn't, it makes inventory management rather annoying at times. It also screwed my loadouts over. Cursed Blades fit on cult robes. They're cult equipment after all. Bronze suits fit toy watches!! ### Ragnarok  A vicious battle in the jungle, between the three major religious sects: Prove your deity's might! And try not to upset any primates. Or fall into the chasm. Going clockwise: **Cultist Invoker**: Wielding a mirror shield, shielded robes, a sword, and some bolas, this cultist has a 'well-balanced' set of equipment to annihilate their opponents. **Cultist Artificer**: This set harnesses the blood magicks - with spells of stunning, blood rites, and ranged hallucinations, with a wicked Cursed Blade and Veil Shifter as implement, and Berserker Robes to finish the look. **Holy Crusader**: Nullifying most, but certainly not all, of the fearsome arsenal of the opponents with the null rod at their belt, the Crusader packs a dangerous claymore and armor to protect them from the demons. **Rat'var Apostate**: Hey, what's that guy doing there in the dark? They don't have any magic because their god is Fucking Dead, but they're still going to show up for a token effort. Good luck! **Heretic Scribe**: This mad soul wields an antique rifle and an assortment of other dangerous relics, with a set of magic geared towards staying far apart, picking enemies off from range and evading their attacks for the final blow. **Heretic Warrior**: With the deadliest of Mansus Magic at their disposal, this warrior is only limited by their ability to juggle all their spells at once - don't get overwhelmed sorting your spells while an Invoker runs at you with a sword and shield and makes you cry yourself to death. ### Lattice Battles  A fresh change of pace: In this pacifist map, the only way to kill your opponents is to snip the lattices and catwalks from under them. Watch your step. ### Species Warfare  Prove the might of your static by duking it out with every other kind of crewmember out there. Features a messy dorms, a ticking-timebomb atmos, a rather sterile robotics, a slippery closet, a fluffy medbay, and an energetic bridge. Mirror Shields now shatter on throw (which stuns and hurts) ## Code changes Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC. Added these as an OR to respective IS_X checks. Added new GET_X checks for them, which do not check the trait. Tidied up the file those are in. Added belt_contents() to outfits, but it dosen't work.... Added a heretic rust sister-type to rust walls and floors. Fixed a typo in cult ascension. ## Why It's Good For The Game These maps all aim to do something interesting and unique with DM rather than the usual deathfest and hugging of random crates. Ragnarok allows players to practice unusual and rare magical mechanics, similar to Ragin' Mages. Lattice Battles adds SPLEEF to the game, which I think is awesome. Species Warfare is, I think, fun and funny. Each 'department' has incredibly chaotic and thematically-appropiate content for the species its meant to symbolize, and I look forward to the chaos that every round in it is inevitably going to have. > Mirror Shields now shatter on throw. I'm surprised they didn't! Since they aren't used anywhere I can do what I want with them. ## Code changes > Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC. Added these as an OR to respective IS_X checks. Added new GET_X checks for them, which do not check the trait. I think this is a clever solution to the problem of 'what if I want someone who acts as the antag, but isn't?' Some procs do need the datum to modify it, so there's GET_X, but those aren't common and don't seem likely to be an issue. > Added belt_contents() to outfits, but it dosen't work.... Help would be very much appreciated, I don't know what I'm doing wrong here. It's only used for the heretic scribe's unfathomable curio. Some post-PR cleanup coming up. ## Changelog 🆑 add: Added three new DM maps - Ragnarok, Lattice Battles, Species Showdown. /🆑 |
||
|
|
4b4e9dff1d |
Wallening [IDB IGNORE] [MDB IGNORE] (#85491)
## What's going on here Kept you waitin huh! This pr resprites most all walls, windows and other "wall adjacent" things to a 3/4th perspective, technical term is "tall" walls (we are very smart). If you're trying to understand the technical details here, much of the "rendering tech" is built off the idea of split-vis. Basically, split a sprite up and render it on adjacent turfs, to prevent seeing "through" walls/doors, and to support seeing "edges" without actually seeing the atom itself. Most of the rest of it is pipelining done to accommodate how icons are cut. ## Path To Merge Almost* all sprites and code is done at this point. There are some things missing both on and off the bounty list, but that will be the case forever unless we force upstream (you guys) to stop adding new shit that doesn't fit the style. I plan on accepting and integrating prs to the current working repo <https://github.com/wall-nerds/wallening> up until a merge, to make contribution simpler and allow things like bounties to close out more easily This pr is quite bulky, even stripping away map changes it's maybe 7000 LOC (We have a few maps that were modified with UpdatePaths, I am also tentatively pring our test map, for future use.) This may inhibit proper review, although that is part of why I am willing to make it despite my perfectionism. Apologies in advance. Due to the perspective shift, a lot of mapping work is going to need to be done at some point. This comes in varying levels of priority. Many wallmounts are offset by hand, some are stuck in the wall/basically cannot be placed on the east/west/north edges of walls (posters), some just don't look great good in their current position. Tests are currently a minor bit yorked, I thought it was more important to get this up then to clean them fully. ## What does it look like?       ## Credits <details> <summary>Historical Mumbojumbo</summary> I am gonna do my best to document how this project came to be. I am operating off third party info and half remembered details, so if I'm wrong please yell at me. This project started sometime in late 2020, as a product of Rohesie trying to integrate and make easier work from Mojave Sun (A recently defunct fallout server) with /tg/. Mojave Sun (Apparently this was LITERALLY JUST infrared baron, that man is insane) was working with tall walls, IE walls that are 48px tall instead of the normal 32. This was I THINK done based off a technical prototype from aao7 proving A it was possible and B it didn't look like dogwater. This alongside oranges begging the art team for 3/4th walls (he meant TGMC style) lead to Rohesie bringing on contributors from general /tg/, including actionninja who would eventually take over as technical lead and Kryson, who would define /tg/'s version of the artstyle. Much of the formative aspects of this project are their work. The project was coming along pretty well for a few months, but ran into serious technical issues with `SIDE_MAP`, a byond map_format that allows for simpler 3/4th rendering. Due to BULLSHIT I will not detail here, the map format caused issues both at random with flickering and heavily with multiz. Concurrent with this, action stepped down after hacking out the rendering tech and starting work on an icon cutter that would allow for simpler icon generation, leaving ninjanomnom to manage the project. Some time passed, and the project stalled out due to the technical issues. Eventually I built a test case for the issues we had with `SIDE_MAP` and convinced lummox jr (byond's developer) to explain how the fuckin thing actually worked. This understanding made the project theoretically possible, but did not resolve the problems with multi-z. Resolving those required a full rework of how rendering like, worked. I (alongside tattle) took over project development from ninjanomnom at this time, and started work on Plane Cube (#69115), which when finished would finally make the project technically feasible. The time between then and now has been slow, progressive work. Many many artists and technical folks have dumped their time into this (as you can see from the credits). I will get into this more below but I would like to explicitly thank (in no particular order) tattle, draco, arcanemusic, actionninja, imaginos, viro and kylerace for keeping the project alive in this time period. I would have curled up into a ball and died if I had to do this all myself, your help has been indispensable. </details> <details> <summary>Detailed Credits</summary> Deep apologies if I have forgotten someone (I am sure I have, if someone is you please contact me). I've done my best to collate from the git log/my memory. Thanks to (In no particular order): Raccoff: Being funny to bully, creating threshold decals for airlocks aa07: (I think) inspiring the project ActionNinja: Laying the technical rock we build off, supporting me despite byond trying to kill him, building the icon cutter that makes this possible ArcaneMusic: Artistic and technical work spanning from the project's start to literally today, being a constant of motivation and positivity. I can't list all the stuff he's done Armhulen: Key rendering work (he's the reason thindows render right), an upbeat personality and a kick in the ass. Love you arm Azlan: Damn cool sprites, consistently Ben10Omintrix: You know ben showed up just to make basic mobs work, he's just fuckin like that man BigBimmer: A large amount of bounty work, alongside just like, throwing shit around. An absolute joy to work with Capsandi: Plaques, blastdoors, artistic work early on CapybaraExtravagante: Rendering work on wall frames Draco: SO MUCH STUFF. Much of the spritework done over the past two years is his, constantly engaged and will take on anything. I would have given up if not for you Floyd: Early rendering work, so early I don't even know the details. Enjoy freedom brother Imaginos16: A guiding hand through the middle years, handled much of the sprite review and contribution for a good bit there Iamgoofball: A dedication to detail and aesthetic goals, spends a lot of effort dissecting feedback with a focus on making things as good as they can be at the jump Infrared: Part of the impetus for the project, made all the xenomorph stuff in the MS style Jacquerel: A bunch of little upkeep/technical things, has done so much sprite gruntwork (WHY ARE THERE SO MANY PAINTING TYPES) Justice12354: Solved a bunch of error sprites (and worked out how to actually make prs to the project) Thanks bro! Kryson: Built the artstyle of the project, carrying on for years even when it was technically dying, only stopping to casually beat cancer. So much of our style and art is Kryson KylerAce: Handled annoying technical stuff for me, built window frame logic and fully got rid of grilles. LemonInTheDark: Rendering dirtywork, project management and just so much fucking time in dreammaker editing sprites Meyhazah: Table buttons, brass windows and alll the old style doors Mothblocks: Has provided constant support, gave me a deadline and motivation, erased worries about "it not being done", gave just SO much money to fill in the critical holes in sprites. Thanks moth MTandi: Contributed art despite his own blackjack and hookers club opening right down the road, I'm sorry I rolled over some of your sprites man I wish we had finished earlier Ninjanomnomnom: Consulted on gags issues, kept things alive through some truly shit times oranges: This is his fault Rohesie: Organized the effort, did much of the initial like, proof of concept stuff. I hope you're doin well whatever you're up to. san7890: Consulting on mapper UX/design problems, being my pet mapper Senefi: Offsetting items with a focus on detail/the more unused canidates SimplyLogan: Detailed map work and mapper feedback, personally very kind even if we end up talking past each other sometimes. Thank you! SpaceSmithers: Just like, random mapping support out of nowhere, and bein a straight up cool dude Tattle: A bunch of misc project management stuff, organizing the discord, managing the test server, dealing with all the mapping bullshit for me, being my backup in case of bus. I know you think you didn't do much but your presence and work have been a great help Thunder12345: Came out of nowhere and just so much of the random bounties, I'm kind of upset about how much we paid him Time-Green: I hooked him in by fucking with stuff he made and now he's just doin shit, thanks for helping out man! Twaticus: Provided artistic feedback and authority for my poor feeble coder brain, believed in the project for YEARS, was a constant source of ❤️ and affirmation unit0016: I have no god damn idea who she is, popped out of nowhere on the github one day and dealt with a bunch of annoying rendering/refactoring. Godspeed random furry thank you for all your effort and issue reports Viro: A bunch of detailed spriting moving towards 3/4ths, both on and off the wallening fork. If anyone believed this project would be done, it was viro Wallem: Artistic review and consultation, was my go-to guy for a long time when the other two spritetainers were inactive Waltermeldon: Cracked out a bunch of rendering work, he's the reason windows look like not dogwater. Alongside floyd and action spent a TON of time speaking to lummox/unearthing how byond rendering worked trying to make this thing happen ZephyrTFA: Added directional airlock helpers, dealt with a big fuckin bugaboo that was living in my brain like it was nothing. Love you brother And finally: The Mojave Sun development team. They provided a testbed for the idea, committed hundreds and hundreds of hours to the artstyle, and were a large reason we caught issues early enough to meaningfully deal with them. Your work is a testament to what longterm effort and deep detailed care produce. I hope you're doing well whatever you're up to. Go out with a bang! </details> ## Changelog 🆑 Raccoff, aa07, ActionNinja, ArcaneMusic, Armhulen, Azlan, Ben10Omintrix, BigBimmer, Capsandi, CapybaraExtravagante, Draco, Floyd, Iamgoofball, Imaginos16, Infrared, Jacquerel, Justice12354, Kryson, KylerAce, LemonInTheDark, Meyhazah, Mothblocks, MTandi, Ninjanomnom, oranges, Rohesie, Runi-c, san7890, Senefi, SimplyLogan, SomeAngryMiner, SpaceSmithers, Tattle, Thunder12345, Time-Green, Twaticus, unit0016, Viro, Waltermeldon, ZephyrTFA with thanks to the Mojave Sun team! add: Resprites or offsets almost all "tall" objects in the game to match a 3/4ths perspective add: Bunch of rendering mumbo jumbo to make said 3/4ths perspective work /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: = <stewartareid@outlook.com> Co-authored-by: Capsandi <dansullycc@gmail.com> Co-authored-by: ArcaneMusic <hero12290@aol.com> Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com> Co-authored-by: SomeAngryMiner <53237389+SomeAngryMiner@users.noreply.github.com> Co-authored-by: KylerAce <kylerlumpkin1@gmail.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: Runi-c <5150427+Runi-c@users.noreply.github.com> Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com> Co-authored-by: tattle <article.disaster@gmail.com> Co-authored-by: Senefi <20830349+Peliex@users.noreply.github.com> Co-authored-by: Justice <42555530+Justice12354@users.noreply.github.com> Co-authored-by: BluBerry016 <50649185+unit0016@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com> Co-authored-by: Rob Bailey <github@criticalaction.net> Co-authored-by: MMMiracles <lolaccount1@hotmail.com> |
||
|
|
134a84d824 |
Turfs in lua will no longer null out their reference on deletion. (#85429)
## About The Pull Request Turfs are static objects and you can safely hold reference to them because their reference does not change on deletion. ## Why It's Good For The Game Makes lua scripts more stable since signals don't get unregistered on turf deletion. ## Changelog 🆑 admin: Turfs in lua will no longer become invalid on deletion. /🆑 Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> |
||
|
|
d1ccb530b2 |
Replaces Auxlua with the byondapi-based Dreamluau (#84810)
## About The Pull Request Ever since byondapi went stable, I've been meaning to create a replacement lua library that uses it instead of the auxtools-based auxlua. After so many months, I've finally got the code just about into a position where it's ready for a PR. [Click here](https://hackmd.io/@aloZJicNQrmfYgykhfFwAQ/BySAS18u0) for a guide to rewriting auxlua scripts for dreamluau syntax. ## Why It's Good For The Game Code that runs on production servers should not depend on memory hacks that are liable to break any time Dream Daemon updates. ## Changelog 🆑 admin: Admin lua scripting uses a new library that (probably) will not break when BYOND updates. /🆑 ## TODO: - [x] Convert the lua editor ui to TS - [x] Include a guide for converting scripts from auxlua syntax to dreamluau syntax |
||
|
|
2cc680c7ec |
[NO GBP] Tooltips no longer call MeasureText every time you move your mouse (#85246)
## About The Pull Request MeasureText is now only called when the text is (most likely) wider than your screen, which is rather rare. ## Why It's Good For The Game I fucked up ## Changelog 🆑 fix: People with tooltips enabled no longer lag the server when they move their mouse. Oops. /🆑 |
||
|
|
9a4386d31d |
deletes wires on atom/destroy() (#85154)
Closes #85132 Fixes #85110 |
||
|
|
5f80128fa9 |
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑 |
||
|
|
f8c0d1819a |
Context maptext now properly dynamically adjusts itself instead of using hardcoded pixel values (#85088)
## About The Pull Request Closes #84977. Now adjusts itself asynchronously based on WXH_TO_HEIGHT ## Changelog 🆑 fix: Context maptext now properly dynamically adjusts itself instead of using hardcoded pixel values /🆑 |
||
|
|
c5ac7b7297 |
Ghosts once again can see people's true names and roundstart jobs (#84951)
## About The Pull Request #83186 made it so ghosts are fooled by disguises, like wearing a mask and an ID. This PR fixes that behavior, instead always displaying the person's real name and their face/ID name (if their face name is somehow different from real name) in brackets. Additionally, this PR makes orbit menu prioritize "real" job name and icon, aka the ones the person spawned with. If they don't have an assigned job, it will fall back to current behavior of looking it up from their ID. Also, searching people includes both their fake and real name. ## Why It's Good For The Game Ghosts really, really shouldn't be fooled by wearing a gas mask and an ID. **Especially** admin ghosts. ## Changelog 🆑 qol: Ghost orbit menu now always displays person's real name and their roundstart job and cannot be fooled by disguises. /🆑 |
||
|
|
e90a9b4b68 |
Flattens The Floor Plane (Camera Update Too) (#84350)
## About The Pull Request Ok so like, side map right? It makes things higher up in the world render above things lower down in the world. Most of the time this is what we want, but it is NOT what we want for floors. Floors are allowed to be larger then 32x32, and if they are we want them to render based off JUST their layer. If we don't allow this grass turfs and others get cut off on their bottom edge, which looks WEIRD. In order to make this happen, we can add TOPDOWN_LAYER to every layer on the floor plane and disable sidemap. I've added documentation for this to VISUALS.md, and have also implemented unit test errors to prevent mixing TOPDOWN layers with non topdown planes (or vis versa). This new test adds ~1 second to tests, which is I think a perfectly scrumpulent number. EDIT: I nerd sniped myself and implemented sidemap layering and lighting for cameras (also larger then 32x32 icon support for getflat) The lighting isn't perfect, we don't handle things displaying in the void all that well (I am convinced getflat blending is broken but I have no debugger so I can't fix it properly), but it'll do. This came up cause I had to fix another layering issue in cameras and thought I might as well go all in.  ## Why It's Good For The Game Old:  New:  ## Changelog 🆑 fix: Grass turfs will render properly now. Reworked how floors render, please report any bugs! fix: Cameras now properly capture lighting fix: The layering seen in photos should better match the actual game /🆑 |
||
|
|
e4c5c2fc2a |
Allows for proxy atoms in object melee attack chain (#83860)
## About The Pull Request 1. Objects now have an `get_proxy_for()` proc. This returns an atom that will participate in the object melee attack chain on behalf of your atom. Allows for general purpose polymorphism per object interaction 2. Cleaned up some multitool acts to accommodate proxy behaviour 3. You can pry tiles as an Engiborg with crowbar in hand & do other similar behaviour with crowbar 5. Improves & Depends on #83880. We don't need a hidden omni toolbox & can create the tools directly in the omnitool and pass them in the attack chain as a proxy rather than calling the attack chain manually. All tools are on the borg directly - Fixes #84355 - Fixes #84359 - Fixes #84393 ## Changelog SyncIt21,zxaber 🆑 fix: omni crowbar tool interaction for replacing tiles has been fixed fix: techfab screentip does not runtime when you hover over it with an omnitool multitool fix: medi borgs can do brain surgery again code: improved multitool & general tool code for some machines /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
4aa7bae77a |
Moves tool use back higher in the chain, but makes it so tool acts are only called on non-combat-mode (#84083)
## About The Pull Request ### Dilemma So we've been running into a dilemma recently as we move more and more items over (#84070, #83910) Some things like modsuits, tables, washing machines, storage items want to do their tool acts before their item interactions In the past this was perfectly fine, because it was `tool_act` -> `attack`, but now it's a problem, because it's `item_interaction` -> `tool_act` -> `attack`. Rather than resort to snowflaking, my idea is that we can move tools back up the chain so deconstruction and other similar effects are handled first, before anything else like putting the tool onto the table. ### So why does it require non-combat-mode? A large amount of tool acts early return if the user's on combat mode to allow the user to smack the thing instead of using the tool on it. So I've decided to walk back on what I said like a week ago and make this standardized behavior. ### Misc Reintroducing `tool_act` as a proc that exist means that atoms can easily hook certain interactions that must happen very high in the click chain, such as doing something that block storage insertion. Moves some of the behaviors I put on the (admittedly rather hacky) new proc to that. (Also cleaned up a bit of lockbox and medbot code) ## Changelog 🆑 Melbert fix: Fixed modsuit interactions slightly. No longer requires combat mode to use tools on it, plasma core works as intended as well. (Using combat mode, however, will make you insert the item) refactor: Refactored lockboxes refactor: Refactored medbot skin application /🆑 |
||
|
|
47be0bffc2 |
Ctrl click refactor (#83784)
## About The Pull Request Same idea as #82656 but for ctrl click & ctrl shift click cause why not - Does your signal & `can_perform_action()` checks using `interaction_flags_click` flags before delegating the event down to `ctrl_click()` proc. - The one new change now is that `ctrl_click()` proc is now blocking, meaning returning `CLICK_ACTION_SUCCESS` or `CLICK_ACTION_BLOCKING` will stop the object from getting grabbed/pulled. So remember to return these values if you want to stop the grab action or return `NONE` if you want to process the click but still want the object to get grabbed as well ## Changelog 🆑 refactor: Ctrl click & Ctrl shift click has been refactored. Please report bugs on GitHub /🆑 |
||
|
|
b6369a47b4 |
Mouse drag & drop refactored attack chain (#83690)
## About The Pull Request
Mouse drag & drop has been refactored into its own attack chain. The
flowchart below summarizes it

Brief summary of each proc is as follows
**1. `atom/MouseDrop()`**
- It is now non overridable. No subtype should ever touch this proc
because it performs 2 basic checks
a) Measures the time between mouse down & mouse release. If its less
than `LENIENCY_TIME`(0.1 seconds) then the operation is not considered a
drag but a simple click
b) Measures the distance squared between the drag start & end point. If
its less than `LENIENCY_DISTANCE`(16 pixels screen space) then the drag
is considered too small and is discarded
- These 2 sanity checks for drag & drop are applied across all
operations without fail
**2. `atom/base_mouse_drop_handler()`**
- This is where atoms handle mouse drag & drop inside the world. Ideally
it is non overridable in most cases because it also performs 2 checks
- Is the dragged object & the drop target adjacent to the player?.
Screen elements always return true for this case
- Additional checks can be enforced by `can_perform_action()` done only
on the dragged object. It uses the combined flags of
`interaction_flags_mouse_drop` for both the dragged object & drop target
to determine if the operation is feasible.
We do this only on the dragged object because if both the dragged object
& drop target are adjacent to the player then `can_perform_action()`
will return the same results when done on either object so it makes no
difference.
Checks can be bypassed via the `IGNORE_MOUSE_DROP_CHECKS` which is used
by huds & screen elements or in case you want to implement your own
unique checks
**3. `atom/mouse_drop_dragged()`**
- Called on the object that is being dragged, drop target passed here as
well, subtypes do their stuff here
- `COMSIG_MOUSEDROP_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
**4. `atom/mouse_drop_receive()`**
- Called on the drop target that is receiving the dragged object,
subtypes do their stuff here
- `COMSIG_MOUSEDROPPED_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
## Why It's Good For The Game
Implements basic sanity checks across all drag & drop operations. Allows
us to reduce code like this
|
||
|
|
ff6b41aa07 |
Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request - Afterattack is a very simple proc now: All it does is this, and all it's used for is for having a convenient place to put effects an item does after a successful attack (IE, the attack was not blocked)  - An overwhelming majority of afterattack implementations have been moved to `interact_with_atom` or the new `ranged_interact_with_atom` I have manually tested many of the refactored procs but there was 200+ so it's kinda hard ## Why It's Good For The Game Afterattack is one of the worst parts of the attack chain, as it simultaneously serves as a way of doing random interactions NOT AT ALL related to attacks (despite the name) while ALSO serving as the defacto way to do a ranged interaction with an item This means careless coders (most of them) may throw stuff in afterattack without realizing how wide reaching it is, which causes bugs. By making two well defined, separate procs for handing adjacent vs ranged interactions, it becomes WAY WAY WAY more easy to develop for. If you want to do something when you click on something else and you're adjacent, use `interact_with_atom` If you want to do something when you click on something else and you're not adjacent, use 'ranged_interact_with_atom` This does result in some instances of boilerplate as shown here:  But I think it's acceptable, feel free to oppose if you don't I'm sure we can think of another solution ~~Additionally it makes it easier to implement swing combat. That's a bonus I guess~~ ## Changelog 🆑 Melbert refactor: Over 200 item interactions have been refactored to use a newer, easier-to-use system. Report any oddities with using items on other objects you may see (such as surgery, reagent containers like cups and spray bottles, or construction devices), especially using something at range (such as guns or chisels) refactor: Item-On-Modsuit interactions have changed slightly. While on combat mode, you will attempt to "use" the item on the suit instead of inserting it into the suit's storage. This means being on combat mode while the suit's panel is open will block you from inserting items entirely via click (but other methods such as hotkey, clicking on the storage boxes, and mousedrop will still work). refactor: The detective's scanner will now be inserted into storage items if clicked normally, and will scan the storage item if on combat mode /🆑 |
||
|
|
29e99ddc97 |
Fixes COMSIG_ATOM_POST_DIR_CHANGE sending the wrong oldDir argument (#83727)
## About The Pull Request It didn't cache dir, so it just sent newDir. ## Why It's Good For The Game im starting to hate this signal ## Changelog 🆑 fix: COMSIG_ATOM_POST_DIR_CHANGE should ACTUALLY work now /🆑 |
||
|
|
55f4249785 |
fixes runtime when trying to remove a nonexistent source ID via RemoveInvisibility() (#83253)
```
[2024-05-15 18:24:21.291] RUNTIME: runtime error: cannot read from list
- proc name: RemoveInvisibility (/atom/proc/RemoveInvisibility)
- source file: code/game/atom/atom_invisibility.dm,66
- usr: null
- src: the turret (/obj/machinery/porta_turret/ai)
- src.loc: the floor (187,33,3) (/turf/open/floor/circuit)
- call stack:
- the turret (/obj/machinery/porta_turret/ai): RemoveInvisibility(/obj/machinery/porta_turret_co... (/obj/machinery/porta_turret_cover))
- the turret (/obj/machinery/porta_turret_cover): Destroy(0)
- qdel(the turret (/obj/machinery/porta_turret_cover), 0)
- the turret (/obj/machinery/porta_turret/ai): atom break("melee")
- the turret (/obj/machinery/porta_turret/ai): take damage(20, "brute", "melee", 1, 4, 0)
- the turret (/obj/machinery/porta_turret/ai): take damage(40, "brute", "melee", 1, 4, 0)
- the turret (/obj/machinery/porta_turret/ai): attack generic(the turret (/mob/living/simple_animal/hostile/mimic/copy/machine), 40, "brute", "melee", 1, 0)
- the turret (/obj/machinery/porta_turret/ai): attack animal(the turret (/mob/living/simple_animal/hostile/mimic/copy/machine), null)
- the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): AttackingTarget(the turret (/obj/machinery/porta_turret/ai))
- the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): AttackingTarget(the turret (/obj/machinery/porta_turret/ai))
- the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): MeleeAction(1)
- the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): MoveToTarget(/list (/list))
- the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): handle automated action()
- NPC Pool (/datum/controller/subsystem/npcpool): fire(0)
- NPC Pool (/datum/controller/subsystem/npcpool): ignite(0)
- Master (/datum/controller/master): RunQueue()
- Master (/datum/controller/master): Loop(2)
- Master (/datum/controller/master): StartProcessing(0)
-
```
|
||
|
|
154837240d |
Rust Heretic rework: THE PUKENING. (#83006)
## About The Pull Request Turf rusting is now based on knowledge instead of RNG; toxic damage on spells has been replaced with disgust; rust walkers are a bit easier to summon and show up early in the tree. Rust ascension spread has been massively increased and immunities while on Rust have been updated. ## Why It's Good For The Game This is a massive list of changes, but the tl:dr is Rust heretic design is pretty barebones and dated in its current state. I'm going to try my best to explain why that is and why it needs to change. ### RNG on rusting is bad **Problem** : quite a lot of turfs cannot be rusted, and reinforced turfs rusting is tied to RNG, the emergency shuttle floors are also unrustable, making an ascended heretic not threatening at all to an escaping crew. **Solution**: Heretic rusting prowess is now tied to knowledge progression; reinf wall rusting is no longer tied to RNG; the emergency shuttle is now rustable if you have accrued enough knowledge. **Explanation** : I've been adopting the code from a previous PR that sadly didn't make the light of day. Link: https://github.com/tgstation/tgstation/pull/65361 The goal is to have Heretic rusting be more consistent, so that if you ascend the shuttle is no longer a safe refuge. **Grasp Of Rust**: Basic floors and walls. **Mark Of Rust**: Reinf floors and walls (takes 3 applications of rust to fully destroy). **Toxic Blade** Titanium and Plastitanium( still takes 3 applications of rust to destroy). **Ascension**: almost everything save for admin walls, glass, and silver. ### A territorial antagonist with no tools to defend its turf **Problem**: Rust heretic is forced into a territorial playstyle, but it's heavily diminished by rusted turfs not having any negative effect on the crew whatsoever, Toxic damage on plume and blade is also kind of bad and has no synergy with the rest of the kit. Lastly, while fitting to the theme of Rust; mark detonation destroying clothes and items can end up being more harmful to the heretic, as destroying a secoff's flashbang will result in you getting stunned and killed. **Solution**: Rusted floors are no longer safe for the crew; walking over Rust will add a small buildup of disgust, silicons will receive ticking damage, Toxic damage on Rust skills has been replaced with disgust buildup and a chem purge effect to prevent the crew from cheesing the debuff with sol dry. **Explaination** "The goal behind this change is to prevent the crew to just be able to walk willy nilly into an eldritchly decayed area without repercussions, plus I feel like disgust is a fitting debuff for Rusties for a number of reasons. 1) Lore wise, your goal is to turn the entire station into a garbage dump. 2) It fits for fighting a territorial antagonist, it's not immediately threatening on its own, but if you overstay your welcome, it has dire consequences. 3) We don't really do much with disgust as a status effect, far as i know, this'll be the first iteration of it being used for an antagonist toolset. 4) It gives reason to the crew to act hostile towards the Heretic, as you are essentially making their work area inhabitable. I've also Slightly increased the healing on leeching walk and gave it some minor temperature regulation (you won't be able to outtemp space cold). ### Rust Walkers **Problem**: Rust walkers might as well not exist in their current state; they are one of the latest heretic unlocks, and the recipe for summoning one is INSANE now that you cannot decapitate mobs anymore. **Solution**: Rust walkers pop up a bit earlier in the tree; the ritual to summon them has more reasonable reagents (wires, pools of vomit, iron sheets) and they have increased health. **Explanation**: : There is not a lot to add to this. without walkers, Rust heretics are fairly slow at spreading rust, by making rust walkers have reasonable summoning reagents, we ease that problem; lastly i've slightly bumped their hp, as i felt 75 hp was a bit low. ### Underwhelming ascension **Problem**: The spread rate from the ascension is downright ATROCIOUS in its current state, i actually ran multiple tests on different maps, on Metastation it can take up to 40 minutes for the rust to spread to the entire station, considering an ascended heretic results in an immediate shuttle call, it's unecceptable in its current form. Solution: Rust spread is now a hybridization between old ascension and Wizard tranformation ritual. **Explanation**: The spread rate in its current form is painstakingly slow and has a tendency to reach one corner of the map and compound on itself, i've borrowed the code from the wizard final ritual "transformation" and gave it my own spin so that given enough time it will cover the station more or less evenly, it can now spread through all z levels. Video example: https://www.youtube.com/watch?v=jZ5zMrNM6Jw I've also updated the immunities you gain on ascension to ignore slowdown and stasis from Cryogelidia. The whole point of rust ascension is to become immune to crowd control, i've seen far too many ascended heretics die to a single bola or cryo syringe, that's pretty lame so i fixed that. Lastly, aggressive spread has had its radius reduced in exchange for the spread being consistent now; cooldown is also halved when you ascend, to better help the heretic go on the offensive. |
||
|
|
bc4e7d3b4e | Remove data systems in favor of global datums (#82943) | ||
|
|
c1a775efe1 |
Implements data systems (#82816)
## About The Pull Request Subsystems currently come in two different flavors: 1. Systems that process at intervals with the master controller 2. Global data containers that do not fire And I think they should be split up... This moves 4 non firing, non init subsytems -> datasystem ## Why It's Good For The Game Clarity in code |
||
|
|
d280c9ccce | Makes it EVEN EASIER to work with atom item interactions ft. "Leaf and Branch" & "Death to Chains" (#82625) | ||
|
|
8e3f635b98 |
Alt click refactor (#82656)
## About The Pull Request Rewrites how alt click works. Based heavily on #82625. What a cool concept, it flows nicely with #82533. Fixes #81242 (tm bugs fixed) Fixes #82668 <details><summary>More info for devs</summary> Handy regex used for alt click s&r: `AltClick\((.*).*\)(\n\t.*\.\.\(\))?` `click_alt($1)` (yes I am aware this only copies the first arg. there are no other args!) ### Obj reskins No reason for obj reskin to check on every single alt click for every object. It applies to only a few items. - Moved to obj/item - Made into signal - Added screentips ### Ventcrawling Every single atmospherics machine checked for ventcrawling capability on alt click despite only 3 objects needing that functionality. This has been moved down to those individual items. </details> ## Why It's Good For The Game For players: - Alt clicking should work more logically, not causing double actions like eject disk and open item window - Added context menus for reskinnable items - Removed adjacency restriction on loot panel For devs: - Makes alt click interactions easier to work with, no more click chain nonsense and redundant guard clauses. - OOP hell reduced - Pascal Case reduced - Glorious snake case ## Changelog 🆑 add: The lootpanel now works at range. add: Screentips for reskinnable items. fix: Alt click interactions have been refactored, which may lead to unintentional changes to gameplay. Report any issues, please. /🆑 |
||
|
|
7f8752be14 | Admin Verb Datums MkIII | Now with functional command bar (#82511) | ||
|
|
1530f361c0 |
Removes unused code for HTML UIs (#82589)
## About The Pull Request This is the final PR for https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA that I've been slowly inching towards the past few months. This removes ``updateDialog``, ``updateUsrDialog``, ``IN_USE``, ``INTERACT_MACHINE_SET_MACHINE``, and everything surrounding it. Also fixes advanced camera consoles not booting you off when you're moved out of reach. We called ``check_eye`` on mob life whenever they had their machine var set, but their machine var would never be set to anything that actually used it, which I found to be a little funny but was also probably my fault. ## Why It's Good For The Game This is poor and unmaintained code used for HTML UIs that we no longer need thanks to TGUI, we should get rid of it to encourage the use of TGUI in the future instead. ## Changelog 🆑 fix: Advanced camera consoles now boots you off when you're moved out of reach. /🆑 |
||
|
|
c403a6eccc |
Wraps lowertext() to ensure proper stringification. (#82442)
## About The Pull Request Fixes #82440 This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not lost on me) to wrap around all calls of `lowertext()` and ensure that whatever we input into that proc will be stringified using the `"[]"` (or `tostring()` for the nerds) operator. very simple. I also added a linter to enforce this (and prevent all forms of regression) because I think that machines should do the menial work and we shouldn't expect maintainers to remember this, let me know if you disagree. if there is a time when it should be opted out for some reason, the linter does respect it if you wrap your input with the `UNLINT()` function. |
||
|
|
fa31403353 |
LateInitialize is not allowed to call parent anymore (#82540)
## About The Pull Request I've seen a few cases in the past where LateInitialize is done cause of the init return value being set to do so for no real reason, I thought I should try to avoid that by ensuring LateInitialize isn't ever called without overriding. This fixes a ton of machine's LateInitialize not calling parent (mechpad, door buttons, message monitor, a lot of tram machines, abductor console, holodeck computer & disposal bin), avoiding having to set itself up to be connected to power. If they were intended to not connect to power, they should be using ``NO_POWER_USE`` instead. Also removes a ton of returns to LateInit when it's already getting it from parent regardless (many cases of that in machine code). ## Why It's Good For The Game I think this is better for coding standard reasons as well as just making sure we're not calling this proc on things that does absolutely nothing with them. A machine not using power can be seen evidently not using power with ``NO_POWER_USE``, not so much if it's LateInitialize not calling parent. ## Changelog 🆑 fix: Mech pads, door buttons, message monitors, tram machines, abductor consoles & holodeck computers now use power. /🆑 |
||
|
|
6a1519471d |
Very small atom examine tweaks (#82501)
## About The Pull Request - Gloves and Shoes are now referred to in "pairs" rather than as "some". - Meaning you now see "That's a pair of gloves" rather than "That's some gloves" - Makes it a tad easier to edit portions of an atom's examine text. - Gives reinforced windows a more proper description. - (I was examining random things to test and noticed its current description was INCREDIBLY out of place) - Fixes an extra space in bloody hand examination.  ## Why It's Good For The Game It's the little things that you tend to notice. When referring to shoes, you _generally_ will say "a pair of shoes" rather than "some shoes". It's just a tad more proper. ## Changelog 🆑 Melbert spellcheck: Shoes and Gloves are now referred to as "a pair of" rather than "some". spellcheck: Reinforced Window's description is less out of place. spellcheck: Fixed an empty space in examining a human's bloody hands. code: It's a tad easier to exit an atom's examine text now. /🆑 |
||
|
|
9723b4b317 |
Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
|
||
|
|
7e907771fb |
Deathmatch modifiers (#81673)
## About The Pull Request This PR adds the base to simple modifiers that the host can select to make the minigame ~~worse~~ more entertaining for everyone. Here's the screenshot of the UI (without a few modifiers I added later):  ## Why It's Good For The Game I've seen this minigame is frankly popular lately, so I thought I could contribute to it. ## Changelog 🆑 add: Added 20+ modifiers to the deathmatch minigame, which can be enabled by the host. /🆑 |
||
|
|
1719ad8deb |
Sticker resprite and rewrite (#81893)
Stealing from Goon is bad, but stickers are actually a good feature, and loosing those will be a disappointment. This project aims to recreate 'em from scratch without using Jimmyl's and Goon's code. Also, suspicious icons were resprited and renamed. |
||
|
|
79244dc11f |
Lint with OpenDream (#81892)
## About The Pull Request Courtesy of https://github.com/ParadiseSS13/Paradise/pull/21099 and https://github.com/goonstation/goonstation/pull/18127 |
||
|
|
9ac81e1a64 |
New station trait job: Human AI (#81681)
## About The Pull Request This PR does many things, I'll try to explain the basic/background stuff to the main thing first: 1. Adds a new remote that allows a human to function like an AI. It controls a fly that will fly around the station slowly, and when it reaches a machine then the person can interact with it as if they were an AI. This required changing a lot of silicon/AI checks with one that also checks for this remote, and some messing with shared ui state. 2. Moves req_access from the obj and bot to ``/atom/movable`` which lets it be shared between the two, no more copy-paste and one side lacking features/checks/signals the other has. 3. Adds a check for AI config for AI-related station traits, which was lacking prior Now for the good part... Adds a new station trait that replaces the AI with a Human. This person is equipped with an AI headset (including Binary), an advanced camera console, an omni door wand, the machine controller, and their laws. They are immune to the SAT's turrets (even if set to target borgs) and are slow outside of the SAT, mimicing the actions of the AI. They interact with the world through their advanced camera console, which allows them to do most AI stuff needed, and the holopad they can connect to without having to ring first (like Command can). They are given a paper with the laws they must follow, but since they are human they are able to bend it. Cyborgs that run the default lawset are "slaved" to them via an unremovable law 0, so the Human AI can bend the laws if they really need to (for their own survival n such), and make the cyborgs obey their commands above laws, but in general this shouldn't be a frequent occurrence. This does take into account the unique AI trait, so it's not guaranteed Asimov. When this station trait rolls, all Intellicards, AI uploads, and AI core boards are destroyed and are unresearchable. They can be spawned by admins in-game if necessary. Maybe in the future we can also exclude Oldstation from this but I haven't really decided. Extra perks: Human AI spawns with a Robotic voicebox (unless they are a body purist) and teleport blocking implant, so they can't use teleporters to bypass their on-station slowdown. They also have an infinite laser pointer that can be used to blind through their camera console. This is unfortunately nerfed from the recent borg balance PR that removed its stun. This was meant to be the alternative to no longer being able to permanently lock borgs down like AIs can (or more than one, for that matter). They aren't affected by Roburgers, Acid, and Fuel's toxicity. Bots salute them like they do Beepsky (which is now a trait) They spawn with SyndEye to replace the AI's tracking ability They do not have a bank account ### The machine remote The machine remote has a little fly in it that flies to the machines it is pointed to, working as the arms and legs of the Human AI. It scans the machine and punches in the action the AI does, and is how the AI accesses basically anything. This fly slowly moves from one machine to the next, and can be recalled with Alt Click. It works on machines and bots. ### Video (Low quality to fit Github) https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8 ## Why It's Good For The Game I've seen a funny screenshot one day of a person replacing the AI by using a bunch of door remotes, camera console, crew monitoring console, and a few other things. I've been thinking about that for a few years and really wanted to make it official if not easier to make possible, because it is an incredibly funny interaction. This makes it a reality, and while they aren't as powerful as regular AIs, I think it makes for better and funnier in-game moments. With the same weight as Cargorilla (1), I hope this wouldn't be rolling too often and ruin rounds, but instead show off the different capabilities that Humans and AIs can do, to do the job of an AI. You win some you lose some. ## Changelog 🆑 JohnFulpWillard, Tattax add: Adds a new station trait job: The Human AI. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
499e311a95 |
Fixes valentine love again, for real this time, "why did no one report this" edition (#81470)
## About The Pull Request Basic one-person huds now default to having no AA flags set, rather than `AA_TARGET_SEE_APPEARANCE` set I thought it would be fine to let basic huds just use default hud flags without realizing the default flags were very self-defeating for this. Also also kinda dumb. Why does it default to letting the target see the hud? Whatever I guess. This fixes Valentines seeing love hearts on themselves in addition to their companion I'm surprised no one reported this. ## Changelog 🆑 Melbert fix: Valentines no longer see themselves covered in hearts. They only see their Valentine covered in hearts. /🆑 |
||
|
|
c85f84245d |
Fix love not working right before Valentines day (VERY HIGHI priority) (#81440)
## About The Pull Request The parent new call is what handles showing the alt appearance to the mob So we add the alt appearance to our date, try to show to any mob, it fails (there is no seer), then set seer Fixes this by fixing the order ## Changelog 🆑 Melbert fix: You can once again see love on Valentines Day /🆑 |
||
|
|
70651816c2 |
Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request [Fixes static lights not moving]( |
||
|
|
12afcb911e |
Comprehensive cleanup of storage datum, replaces the weakrefs with just refs (because they were managed already) (#81120)
## About The Pull Request
- Large amount of storage datum cleanup.
- Documentation.
- Maybe more consistent use of parent vs real_location.
- Removes the weakrefs, replaces it with just references.
- These were already managed references anyways so why bother?
- Removes a bunch of arguments no one used and would ever used so only
the most useful args are left.
- Some bugfixes.
## Why It's Good For The Game
Aiming to make storage easier to work with. The whole intent of this was
to bugfix the whole "weight class" thing that keeps popping up but I had
to do this first.
## Changelog
🆑 Melbert
fix: When placing an item into storage (such as backpacks), all nearby
mobs now get a message, rather than just the first mob.
fix: TGC decks of cards should act a bit less odd when looking inside.
refactor: Refactored a bit of storage, cleaned up a fair bit of its
code. Let me know if you notice anything funky about storage (like
backpacks).
/🆑
|
||
|
|
f245c447f2 |
Improves upon setting custom materials for printed items (#81015)
## About The Pull Request This is an improvement on #80839 regarding how custom materials are set on items, it's based on the following findings. 1. `set_custom_materials()` proc already comes with an prebuilt `multiplier` var |
||
|
|
8703eac50d |
split area.contained_turfs up by zlevel, make init 10 seconds faster (#80941)
## About The Pull Request Situation: areas have a list of all turfs in their area. Problem: `/area/space` is an area and has a 6 to 7 digit count of turfs that has to be traversed for every turf we need to remove from it. This can take multiple byond ticks just to preform this action for a single space rune Solution: split the list by zlevel, and only search the right zlevel list when removing turfs from areas. replaces `area.get_contained_turfs()` with a few new procs: * `get_highest_zlevel()` - returns the highest zlevel the area contains turfs in. useful for use with `get_turfs_by_zlevel` * `get_turfs_by_zlevel(zlevel)` - returns a list of turfs in the area in a given zlevel. Useful for code that only cares about a specific zlevel or changes behavior based on zlevel like lighting init. * `get_turfs_from_all_zlevels()` - the replacement for `get_contained_turfs()`, renamed as such so anybody copying/cargo culting code gets a hint that a zlevel specific version might exist. Still used in for loops that type checked so byond would do that all at once * `get_zlevel_turf_lists()` - returns the area's zlevel lists of lists but only for non-empty zlevels. very useful for for loops. The area contents unit test has been rewritten to ensure any improper data triggers failures or runtimes by not having it use the helpers above (some of which ensure a list is always returned) and access the lists directly. |
||
|
|
27f85f1c76 |
Ice cream vat uses a radial menu (#80965)
## About The Pull Request Removes the ice cream vat's html window for ice cream, reagents, and cones and replaces it with a radial menu and the ability to simply examine the machine to see its contents. Soup and Salads currently allow you to see whats inside without the need for science/bar goggles, so following that theme I thought it would make more sense for it to also be the case here (and for feature parity with previous behavior). #### Controls Left-click chooses ice cream flavor or ice cream cone Right-click swaps between which one you will be choosing from Left click with a beaker will put it inside to use for custom ingredients Right click with a beaker will transfer its reagents to the machine (any that is used for making ice cream) Dispensing custom ice cream takes from the beaker inside of the beaker Video demonstration https://github.com/tgstation/tgstation/assets/53777086/9ebdcb13-b29f-4b3c-9d5f-54be1f6da888 Custom Ice cream https://github.com/tgstation/tgstation/assets/53777086/687af270-14e4-4851-bf1f-3c4da4aeb21f ## Why It's Good For The Game The ice cream machine is genuinely confusing because of it's UI and personally it was unironically the last kitchen tool I learned because I just didn't think it was worth it. This makes it feel way better to use. It also helps me with https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA which I've been trying to chisel away at. ## Changelog 🆑 refactor: Ice cream vats now use a radial menu instead of an HTML one. /🆑 |
||
|
|
568c5119b3 |
Runechat color now goes by voice rather than name (#80812)
## About The Pull Request What it says on the tin. The color you get from runechat is currently tied to your `name`, which doesn't accurately reflect how your character is speaking in all cases. What this change means: now things like voice changer masks, changeling mimicry, and voice change disease will now actually change the color of your voice to match the mob you are speaking in the voice of. As a result it should now be impossible to figure out whether someone is voice changing from looking at their runechat color and knowing what the real mob's color was. ## Why It's Good For The Game Just feels like an oversight that it didn't do this in the first place. ## Changelog 🆑 fix: if your voice changes (e.g. through a voice changer or changeling mimicry) your runechat will now appear as the mob you are speaking in the voice of fix: when doing emotes with your face obscured, your runechat color will now appear as either that of Unknown or the mob you are wearing the id of (if you are wearing a mask with someone else's id) /🆑 |