mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 01:51:46 +00:00
4b4fa2d61269aa56cdcaba5fb2f0d8fb104fefdd
100 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ed926826c6 |
Ghosts can't haunt canvases (#91759)
## About The Pull Request Ghosts are snowflaked able to interact with the canvas UI, which meant they were able to press buttons including finalize. This fixes that with a special observer check. Leaves a comment to explain why it is the way it is as well in case someone in the future messes it up. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/91750 ## Changelog 🆑 fix: Observers can no longer finalize unfinished canvas paintings. /🆑 |
||
|
|
412115c9b9 |
Fixes bugs related to transferring items to turfs, splits doing that off from dropItemToGround(...) (#91326)
## About The Pull Request Closes #91131. The author currently has other priorities, and as I need it for something else I am finishing it myself with the author's blessing. Recently, we turned `transferItemToLoc(...)` into a proc intended to be for transfers to non-turfs, with it now playing an animation to reflect that. However, this had the effect of leaving us with `dropItemToGround(...)` for mob>turf transfers, which isn't _ideal_. It sends an 'item dropped' signal, it randomizes offsets, and using it to transfer to a non-`drop_location()` loc was implemented as an afterthought. So in this pr we create a new proc, `transfer_item_to_turf(...)`, that separates off the actual transferring, setting offsets, and animating into its own proc. Then `dropItemToGround(...)`, tables, racks, easels, closets, hoops, beds, conveyor belts, pin the tail corgi posters, some other stuff, and the `floor_placeable` element call such each with their own preferred arguments. While we could leave setting offsets out of it, because setting the offsets after calling the animation works just fine, having them be set before the animation felt like a more intuitive flow. ...While I would love to refactor the easel's incredibly questionable `attackby(...)`, that is outside of the scope of this pr. ## Why It's Good For The Game Fixes #91082. Less jank 👍 ## Changelog 🆑 fix: Placing an item on a table/turf via the alt-click menu actually centers it, again. fix: Certain items, like canvases or syringe guns, are no longer weirdly offset when placed on tables. fix: Placing items on racks, closets, crates, hoops, beds, conveyor belts, and pin the tail corgi posters is animated again, instead of instantly teleporting followed by the pickup animation. fix: Placing a canvas on an easels no longer applies a random offset as if dropped. fix: Tucking in someone else actually animates the bedsheet from you to them, instead of from them to them. qol: Placing a canvas on an easel is animated. /🆑 |
||
|
|
7855dc4f01 |
Punctuation cleaning for diamond statues (#91390)
## About The Pull Request Removes some punctuation at the end of the diamond material statues. ## Why It's Good For The Game It looks weird and is inconsistent with like, everything else in the game. ## Changelog 🆑 Rhials spellcheck: Diamond material statue names are no longer punctuated. /🆑 |
||
|
|
7b04440de1 |
Re-adds the Dragoon tomb ruin & Spear (#90781)
## About The Pull Request It was removed in https://github.com/tgstation/tgstation/pull/27799 because the spear was broken and the Flans' AI sucked with not-great sprites and was all just one big reference. Original addition: https://github.com/tgstation/tgstation/pull/22270 This re-adds it, updates the map (now using airless turfs) with extra ambiance, using ash whelps (lavaland variation of ice whelps) instead of Flans, re-adds the spear, and adds armor as well this time around. The spear gives you a jump ability to crash down upon a player below you, rather than teleporting to wherever you throw the spear at. You can't attack while mid-air, you can go through tables but not walls/doors, and you also can't un-dualwield or drop the spear mid-jump. Landing on a mob deals double damage to them (36 to unarmored people), while landing on objects deals 150 damage to them (taken from savannah's jump ability, which was in turn taken from hulk's punching) It's also got some extra throw force (24 compared to default spear's 20) The armor has basic security-level armor but covers your whole body. Does not include space protection, and can be worn by Ian. Video demonstration https://github.com/user-attachments/assets/a77c3a0d-17d2-4e8d-88b6-cdbca8b1f2c3 New sprites demonstration https://github.com/user-attachments/assets/0e465351-5484-406f-8adc-ffa1ac180daf Armor demonstration https://github.com/user-attachments/assets/abdfcac6-65bf-443c-bde2-27d157ee3a80 Map  With the changes in https://github.com/tgstation/tgstation/pull/90771 I had to mess with ash whelp abilities a bit, I decided to make them use cold fire instead of hardcoding blue color on top of the fire sprites, and it now acts accordingly too https://github.com/user-attachments/assets/cfca0d70-d13d-4c73-996d-2d4a7519866d The jump was taken from Savannah Ivanov, and Goof's bunny jumping. ##### Code bounty by Ezel/Improvedname ## Why It's Good For The Game This Re-implements a old spear that got removed for its buggyness/bad mapping and on the authors request as well not wanting to deal with it. Re-introduces the SkyBulge as a space ruin, referencing Dragoons from Final Fantasy. this just like any normal spear, but using the savannah jump mechanic, this allows you to close distances with the spear avoiding ranged projectiles in the jump, and if you directly land on your target you will do double the damage. ##### -Ezel/Improvedname ## Changelog 🆑 Ezel/Improvedname, Toriate, JohnFulpWillard add: Re-added the Dragoon Tomb lair, now has a Skybulge spear and Drachen armor. balance: Ice whelps now spit out cold fire. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
5261efb67f |
Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). ## Changelog 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑 |
||
|
|
e698c965b3 |
Fix map_export admin verb not saving objects properly (#90998)
## About The Pull Request When using the `map_export` admin verb the following things are fixed: - All objects density, anchored, opacity, atom_integrity, and resistance_flags vars are saved - Multi-tile objects being spammed on all tiles the sprite reaches - Dirt decals error icon - Airlocks error icon and to save welded state - Dark Wizard Simple Mobs error icon - Closets to save welded, open, and locked states - Air alarms to save name - Air scrubbers/vents to save name and welded states - APCs to save name, charge, cell, lighting, equipment, and environmental states - APCs spawning a duplicated terminal underneath it when one already exists - SMES to save charge, input, and output states - Holodecks to revert any holodeck turfs to the empty turf and skip saving any hologram items - Photos and Paintings error icons - Bloody Footprints error icons - False Walls error icons - Docking Ports runtimes because the map template var would change - Effects (lasers, portals, beams, sparks, etc.) saving when they should be omitted I would have loved to get `component_parts` to save for machines and turf decals, but perhaps that is for another day since it requires complicated solutions. Here are some before and after pictures:     ## Why It's Good For The Game Better map saving code. ## Changelog 🆑 fix: Fix `map_export` admin verb not properly saving a massive amount of objects. /🆑 |
||
|
|
685ca9db69 |
[MDB Ignore] Damp Rag can now get dirty / Repaths damp rag (it's no longer a cup) (#90700)
## About The Pull Request - Damp rag is now no longer god's perfect cleaning tool. After blood, the damp rag will collect it, and after cleaning a lot of blood, you can no longer clean with the rag until you wash it in a sink (or with cleaner or however you want) - This means the rag will collect DNA in it as you clean, which gives detectives an opportunity to investigate. - It also means the DNA it collects will occasionally spread onto you, meaning you will have to clean your gloves or hands. - Cleaning vomit and such is (currently) unaffected (and does not dirty the rag). - Diseases are not currently transferred to the rag (but this would be fun to add) - Gauze now gets dirty when using it to wrap bleeding wounds. This is just visual, though blood DNA gets transferred. It can be washed in a sink. - Removed gauze on sink / cloth on sink interaction. - Can't really wash gauze with it, plus it's redundant. - Damp rag is no longer a cup. ## Why It's Good For The Game Damp rag is just "soap without any downsides", which is kinda lame. I thought about going a step further and making it require you wet it first but then it just becomes "mop but small" which is also lame. Instead, you're required to clean it, which gives janitors / crewmembers an alternate cleaning method: - Soap: Small, finite, limited. Can't be replenished. - Cleaner: Small, finite, even more limited, ranged. Can be refilled with chemistry's help. - Mop: Large, infinite, limited. Needs a water bucket. - Damp Rag: Small, infinite, limited. Need to clean it after a few goes. ## Changelog 🆑 Melbert balance: Damp Rags can now get dirty when using them to clean blood, passing blood DNA along. add: Gauze now gets dirty when apply it to actively bleeding wounds. Doesn't spread disease or anything, just passes blood DNA. It can be cleaned in a sink. del: Removed cloth on sink / gauze on sink interaction to make rags. Just use the crafting menu /🆑 |
||
|
|
339616ae78 |
You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request People can now pet held mothroaches and pugs if they want to, or use items on them, hopefully without causing many issues. After all, it only took about a couple dozen lines of code to make... ...Oh, did the 527 files changed or the 850~ lines added/removed perhaps catch your eye? Made you wonder if I accidentally pushed the wrong branch? or skewed something up big time? Well, nuh uh. I just happen to be fed up with the melee attack chain still using stringized params instead of an array/list. It was frankly revolting to see how I'd have had to otherwise call `list2params` for what I'm trying to accomplish here, and make this PR another tessera to the immense stupidity of our attack chain procs calling `params2list` over and over and over instead of just using that one call instance from `ClickOn` as an argument. It's 2025, honey, wake up! I also tried to replace some of those single letter vars/args but there are just way too many of them. ## Why It's Good For The Game Improving old code. And I want to be able to pet mobroaches while holding them too. ## Changelog 🆑 qol: You can now interact with held mobs in more ways beside wearing them. /🆑 |
||
|
|
1a6f354db1 |
removes hello (#90575)
goodbye ## Changelog 🆑 fix: The ghost of paintings past has been dispelled. Say goodbye. /🆑 |
||
|
|
7f95f61430 |
Bucket tool for the painting/canvas UI (plus other improvements and fixes) (#90309)
## About The Pull Request First update to the crappy paintings UI I've done in over a year, that I wanted to do it since then, but then I got caught up with the fishing feature. <details> <summary> verbosely explained data size related issue fixed</summary> First and foremost, this PR fixes an issue with the size of the data sent to topic when drawing. For those who don't know it yet, 516 has introduced a size limit of 2kb for topics, which means anything hitting that limit is fucked. Thankfully, Y0SH1M4S73R is working on a way to split the data in chunks. However, what does this have to do with drawing on a canvas? For starters, everytime onmousemove is called while the drawing prop is set to true, point data is pushed in the modifiedElements array, BUT it doesn't check if a point data object with the same x and y values is already there, meaning you can move the mouse back and forth two points of the raster/canvas/whateveryouwannacallit or even inside one point and the array will grow until it reaches the aforementioned limit. Furthermore, there's also an unused prop in the PointData type which only makes this worse. Thankfully, all I had to do Implementing the some() method in a conditional check that prevents point data from being instantiated and pushed if there's an instance with same x and y. </details> Moving on, this PR adds a bucket tool to the UI. By enabling it you can click on a point/square/pixel and it'll fill a same-colored area with a new color, much like how it's done in actual painting softwares. <details> <summary> verbose pseudo-technical rant</summary> The algorithm for it is based on the DM side of the code, although I reckon this is a suboptimal decision, just because there can be a small 1-2 seconds delay between clicking, topic stuff and re-rendering. It is not a major problem but it could be as well scoffed at. The dm proc employs a span filling algorithm, which works with constant x to reduce time spent accessing each position of the array, at the cost of code complexity. The algorithm uses queues, meaning sections on the same x will be handled first, then move to the next x. This is kinda my first time wrapping my head around this sort of things, so apologies if some of the code or comments are nighttime-coding levels of bad. </details> Both bucket mode and grid can now be toggled by key shortcuts with F and G respectively. This will cause some conficts with key bindings on those places if you have them however. If there's a way to prevent standard keybind functions through signals or whatsnot while the UI is open, please tell me. I can perhaps search for a solution to it myself later but I've already done so much. Also I don't want to assign keybinds to them, thank you. The canvas UI is still quite primitive frankly, so it'd be overdoing it. This PR also fixes observers/viewers not being able to zoom in/out regardless of distance, because it didn't work to begin with! My fault! ## Why It's Good For The Game Fixing issues with painting UI/UX. ## Changelog 🆑 fix: Fixed an issue with paintings related to 516. You should now be able to paint larger strokes again. fix: Fixed ghosts and other non-adjacent viewers not being able to zoom the canvas in and out. add: Added a bucket tool to the canvas UI to fill larger areas. You can find the button for it beside the one for the grid. qol: You can toggle the canvas grid and bucket tool with the G and F key respectively. /🆑 |
||
|
|
88c2213f1e |
Force UTC±0 for time2text logging and IC times (#90347)
## About The Pull Request This won't actually do anything on live, since those are all set to UTC±0 currently Pins logging and IC uses of time2text to UTC±0 instead of using the system timezone (byond default) Timezones not being set to utc0 caused issues before (and is again) All timezones are now passed explicitly to make it more likely it's cargo culted properly at least Deletes worldtime2text cus it was gameTimestamp default args ## Why It's Good For The Game Server timezone changes probably shouldn't affect logging, round times, file hashes, IC time, when you caught fish, etc ## Changelog 🆑 refactor: Logging and IC timestamps will now always use UTC±0 and not be affected by server system timezone changes fix: Station and round times will not longer be incorrect if the system timezone is not UTC±0 /🆑 --------- Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com> |
||
|
|
d3d3a12540 |
The big fix for pixel_x and pixel_y use cases. (#90124)
## About The Pull Request
516 requires float layered overlays to be using pixel_w and pixel_z
instead of pixel_x and pixel_y respectively, unless we want
visual/layering errors. This makes sense, as w,z are for visual effects
only. Sadly seems we were not entirely consistent in this, and many
things seem to have been using x,y incorrectly.
This hopefully fixes that, and thus also fixes layering issues. Complete
1:1 compatibility not guaranteed.
I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming
inside apply_overlays), and this is still included in the PR to flash
out possible issues in a TM (Plus I will need someone to grep the
runtimes for me after the TM period to make sure nothing was missed).
After this is done I'll remove all these extra checks.
Lints will probably be failing for a bit, got to wait for [this
update](
|
||
|
|
cae514da8d |
Adds a recording set up to the Captain's office on all maps, Adds "The Captain Cast" (#89358)
## About The Pull Request On all maps, the captain will find a brand new green screen and camera set up in their quarters This is used to cast the captain's (or anyone's who breaks in) face to all status displays across the station (It will also relay your voice to them)  NOTE: Some maps have a stunning lack of evac displays Noticeably **Wawa** has like 10. So these will be less effective on those maps. ## Why It's Good For The Game Gives Captains a more personable way of addressing the crew for impromptu announcements rather than resorting to the announcement computer. Also opens up shenanigans. ## Changelog 🆑 Melbert, Wallem add: Adds recording setups to the Captain's office on all maps, allowing them to project their face to all status displays on the station add: Centcom now has a soundstage for broadcasting to the station. It's besides the Thunderdome. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
4c2a76ede3 |
Fix a large number of typos (#89254)
Fixes a very large number of typos. A few of these fixes also extend to variable names, but only the really egregious ones like "concious". |
||
|
|
7ddc30783a |
Adds better attack animations and alternate attack modes (#88418)
## About The Pull Request This is the first PR in a series attempting to modernize our damage and armor, both from a code and a gameplay perspective. This part implements unique attack animations, adds alternate attack modes for items and fixes some minor oversights. Items now have unique attack animation based on their sharpness - sharp items are now swung in an arc, while pointy items are thrust forward. This change is ***purely visual***, this is not swing combat. (However, this does assign icon rotation data to many items, which should help swing combat later down the line). Certain items like knives and swords now have secondary attacks - right clicks will perform stabbing attacks instead of slashing for a chance to leave piercing wounds, albeit with slightly lower damage - trying to stick a katana through someone won't get you very far! https://github.com/user-attachments/assets/1f92bbcd-9aa1-482f-bc26-5e84fe2a07e1 Turns out that spears acted as oversized knives this entire time, being SHARP_EDGED instead of SHARP_POINTY - in order for their animations to make sense, they're now once again pointy (according to comment, originally they were made sharp because piercing wounds weren't very threatening, which is no longer the case) Another major change is that structure damage is now influenced by armor penetration - I am not sure if this is intentional or not, but attacking item's AP never applied to non-mob damage. Additionally, also fixes an issue where attack verbs for you and everyone else may differ. |
||
|
|
3f0b4abb8d |
Replaces world.icon_size (and some magic numbers) with defines (#86819)
## About The Pull Request All usages of world.icon_size in code have been replaced with new `ICONSIZE_X`, `ICONSIZE_Y` and `ICONSIZE_ALL` defines depending on context Replaces some "32" magic numbers with the defines A few bits of code have been modified to split up x/y math as well ## Why It's Good For The Game Magic number bad, code more readable, code more flexible and I'm told there's an access cost to doing world.icon_size so minor performance gains ## Changelog 🆑 tonty code: made some code relating to the world's icon size more readable /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
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 /🆑 |
||
|
|
a4328ae1f9 |
Audits tgui_input_text() for length issues (#86741)
Fixes #86784
## About The Pull Request
Although some of the issues found were a direct result from #86692
(
|
||
|
|
a4e7929a3b |
Lighters use welding fuel and can be used as welders in some cases (#85941)
## About The Pull Request Lighters now have welding fuel which can be filled/extracted by hand, giving a small but consistent source of welding fuel for non-chemists. Welding fuel is now required for these lighters to work, they'll close automatically once they're out of fuel. They last for a minute, zippo lasts 2 minutes, before they need to be refuelled. It can have other reagents put into it but it only checks for welding fuel, so it won't work at all unless its got some. They can be used as welding tools in minor cases, mostly fixing things and welding doors shut, but can't do big things like deconstruction, except the xenobio one because it's a lot hotter than the normal lighter. Also added a baseline support to check for heat to perform certain welds, before heat is just this binary "has or doesnt have heat", which made its value useless. ## Why It's Good For The Game Adds a ghetto way of getting welding fuel, hiding reagents, and a ghetto welding tool without being something that prisoners could break out of prison with. They could weld the doors shut which is a little funny, security still has proper welding tools to counter it. It also currently is kinda lame that lighters could just be open 24/7, unlike matches which has a lifespan of 10 seconds each or something. ## Changelog 🆑 add: Lighters now use and require welding fuel to work, but can be used as a welding tool for tasks that don't require much heat. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
d2ab513332 |
Reintroducing my PRs that were lost in the wallening revert. (#86439)
## About The Pull Request This PR reintroduces #85759, #85892 and #85894. #85892 has post-wallening arrows, but it isn't a big deal because they fit the top-down or 3/4 style we've for a lot of things. ## Why It's Good For The Game Reintroducing lost features and improvements. Remember to remove the 'Lost in the wallening revert' label from those PRs when this is merged. ## Changelog N/A |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
1880003270 |
Reworks silicon/ai access checking & fixes some ui_act's (#84964)
## About The Pull Request Currently to check for Silicon access, we do: ``if is silicon or is admin ghost or has unlimited silicon privileges or has machine remote in hand`` What has unlimited silicon privileges? Bots, Drones, and admin ghosts. To check for AI access, it just checks for AI instead of silicon, and doesnt check for unlimited silicon privileges. This was kinda silly, so I thought I should make this a little easier to understand. Now all silicon/ai traits come from ``AI_ACCESS_TRAIT`` or ``SILICON_ACCESS_TRAIT``. I made a single exception to keep Admin ghost, since now instead of being a var on the client, we moved it to using the same trait but giving it to the client instead, but since we have to keep parity with previous functionality (admins can spawn in and not have this on, it only works while as a ghost), I kept previous checks as well. No more type checks, removes a silly var on the mob level and another on the client. Now while I was doing this, I found a lot of tgui's ``ui_act`` still uses ``usr`` and the wrong args, so I fixed those wherever I saw them, and used a mass replace for the args. Other changes: - machinery's ``ui_act`` from https://github.com/tgstation/tgstation/pull/81250 had ``isAI`` replaced with ``HAS_AI_ACCESS``, this has been reverted. Machine wands and admin ghosts no longer get kicked off things not on cameras. This was my fault, I overlooked this when adding Human AI. - Human AI's wand gives AI control as long as it's in your hand, you can swap to your offhand. I hope this doesn't end up going horribly, otherwise I'll revert this part. It should let human AIs not have their UI closed on them when swapping to eat food or use their door wand or whatnot. - Bots previously had special checks to scan reagents and be unobservant, I replaced this with giving them the trait. I also fixed an instance of unobservant not being used, so now statues don't affect the basic creature, whatever that is. ## Why It's Good For The Game This is an easier to understand way of handling silicon access and makes these mobs more consistent between eachother. Other than what I've mentioned above, this should have no impact on gameplay itself. ## Changelog 🆑 fix: Statues don't count as eyes to creatures. fix: Human AIs and Admin ghosts no longer get kicked off of machines that aren't on cameranets. /🆑 |
||
|
|
f61ba8b818 |
paintings now drop canvas and frame when knocked off the wall (#85894)
## About The Pull Request Also, this PR polishes the clown frame. The honkin' red nose looked pretty malformed. ## Why It's Good For The Game Fixing a few issues with paintings. ## Changelog 🆑 fix: paintings now drop canvas and frame when knocked off the wall. /🆑 |
||
|
|
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> |
||
|
|
86d9bae412 |
Positive moodlets when examining high-value paintings, plus tgui nitpicks (#84646)
## About The Pull Request This PR makes it so that, when framed, paintings can give positive moodlets based on their art element, which is based upon their patronage, meaning, the higher tha patronage, the better the positive moodlets. This PR also adjusts the tgui states to allow observers to interact with the painting, but only for zooming in and out. And expands the tgui window a little so hopefully you can see the plaquette when it's framed. ## Why It's Good For The Game Higher-valued pieces tend to also look better, right? . . . right? Ok, jokes apart, I think this is a nice touch to paintings. ## Changelog 🆑 add: Examining high-value paintings now can give a positive moodlet. qol: Observers can now zoom paintings in and out in the UI. /🆑 |
||
|
|
461659f589 |
Paintings can be sponsored again (#84746)
## About The Pull Request - Fixes #84735 Since the canvas(`/obj/item/canvas`) was inside the painting wallframe(`/obj/structure/sign/painting`) both `CanReach()` & `Adjacent()` would fail because of nested locs. Now we check adjacency to the location of the canvas (if its in the wallframe) rather than the canvas itself ## Changelog 🆑 fix: paintings can be sponsored again /🆑 |
||
|
|
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 /🆑 |
||
|
|
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. /🆑 |
||
|
|
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. |
||
|
|
6dc40ca522 |
Standardizes object deconstruction throughout the codebase. (#82280)
## About The Pull Request When it comes to deconstructing an object we have `proc/deconstruct()` & `NO_DECONSTRUCT` Lets talk about the flag first. **Problems with `NO_DECONSTRUCTION`** I know what the comment says on what it should do |
||
|
|
dc5e87e545 |
Prevents Debug ID Card from Polluting Cargo Budget By Doing It Right (#82214)
## About The Pull Request Fixes #81755 Alright instead of piggybacking off the departmental/non-departmental distinction and prevent ourselves from constantly abusing the cargo budget in order to achieve the very-specific effect of not wanting players to abuse this card in certain contexts let's just leverage the framework and expand it so that we can snowflake for admin/`holder` use cases in stuff like debugging code on a local server while preventing some player from stealing it off a newbie admin and immediately wrecking the economy (although it is funny). ## Why It's Good For The Game Probably a bad idea to continue to abuse the cargo budget like this since the only reason why it's structured that way is just for specific use-case exemptions in certain contexts - let's just do our own thing now :3 ## Changelog 🆑 admin: Advanced Debug Cards will still provide a whole lot of access, but the way the money on those cards work is now a bit different. Players shouldn't be able to use the money on those cards in any context though, don't fret about that. Just know that the money printer goes wrrrr /🆑 --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> |
||
|
|
466b3df048 |
Refactor removing unused defines. (#82115)
## About The Pull Request Refactors a lot of the unused defines. ## Why It's Good For The Game Refactors a lot of the unused defines. ## Changelog Nothing player facing --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
354c9c8d93 |
Fixes patronising paintings when there's no curators. (#82124)
Fixes #82091 🆑 fix: Painting patronage works again when there's no curator present during the round. /🆑 |
||
|
|
717209899b |
Paintings update: Curators get a cut on patronage + zoom in/out buttons on UI (#81500)
## About The Pull Request (Roundstart) Curators now get a 22.5% cut on credits spent on painting patronages (divided by the number of curators). The service department also gets another, 12.5% cut. This PR also adds zoom in/out buttons to the painting canvas UI. So you don't have to stare at a blob of such enormous squares while the UI is open, which is only good when drawing. Screenshot copypaste in paint: ## Why It's Good For The Game The painting feature is mostly an end in itself, which is totally fine. I've put quite a few quality-of-life changes into it through the years, and I still want to kick in some stuff. However, I think the curator should actually benefit from them in a more "mechanical" way. Furthermore, I personally prefer them over the random written crap that players make. Also, as I said above, the canvas UI can feel a tad too big at times. |
||
|
|
1f494b47e9 |
Fixes Statues emitting solid lights (#81398)
## About The Pull Request Fixes #63653  Custom sculpted statues no longer include the light layers of objects such as lanterns and PDA lights. ## Why It's Good For The Game No longer have to worry if sculpting someone with their lights on. Can safely sculpt a vibebot without covering your screen in a solid circle. ## Changelog 🆑 fix: Sculpted statues stop including light layers. /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
1389351ef9 |
You can now move and talk through statues and mannequins (#81188)
## About The Pull Request I recently played a game where I rotated my skeleton model while rotating my own character at the same time and it being in sync gave me the realization on how cool it would be if the Coroner was able to simply control the skeleton body. I find skeleton displays very funny and I want to see more funny things happen with them, so I thought this would be a good place to start, with the benefits that it also works on mannequins and statues too so they aren't left out. Basically, while it is unanchored, if you have a statue/mannequin grabbed, it will change its direction as you do, and speak the same words you do. Your own messages can only be heard if the person is directly next to you, revealing that it was you talking through it all along. I was originally gonna add this to the simple rotation component but moved off when I decided to add talking through it, I left in the code improvements I made to the component though since it is one of the oldest components and hasn't been touched in a while. Video demonstration (before I added the person also talking, just ignore that missing) https://github.com/tgstation/tgstation/assets/53777086/27242fc3-9649-418d-95cb-b31619319e97 While fixing the Toilet bong's rotation stuff I noticed a lot of it wasn't up to proper code standards so I went over it and fixed issues I had with it. It now doesn't give text saying you found something nasty to species that still likes mice (like flypeople), and fixed its update appearance to match the codebase standard set by the introduction of ``update_appearance`` many years ago. ## Why It's Good For The Game It's a funny small idea I had and got inspired to add, it's a niche mechanic that I think fits the aesthetic I am going for with Coroner and also give a funny interaction with the human-like inanimate objects. ## Changelog 🆑 fix: Species that can eat mice don't get disgusted from seeing one in the toilet bong. add: Grabbing an unwrenched statue/mannequin/skeleton model will now move its direction as you move yours, and you can talk through it. /🆑 |
||
|
|
f03084c1ca |
FOV is Dead (Long Live FOV) (#80062)
## About The Pull Request FOV as it is currently implemented is incompatible* with wallening. I'm doin wallening, so we gotta redo things here. The issue is the masking of mobs. Wallening relies on sidemap (layering based off physical position), which only works on things on the same plane (because planes are basically sheets we render down onto) So rather then masking mobs, let's reuse the masking idea from old fov, and use it to cut out a bit of the game render plane, and blur/over-saturate the bit that's masked out. My hope is this makes things visible in light, but not as much in darkness, alongside making more vivid shit more easily seen (just like real life) Here's some videos, what follows after is the commits I care about (since I had to rip a bunch of planes to nothing, so the files changed tab might be a bit of a mess) Oh also I had to remove the darkness pref since the darkness is doing a lot of the heavy lifting now. I'm sorry. Edit: NEW FOV SPRITES! Thanks dongle your aviator glasses will guide us to a better future. https://github.com/tgstation/tgstation/assets/58055496/afa9eeb8-8b7b-4364-b0c0-7ac8070b5609 https://github.com/tgstation/tgstation/assets/58055496/0eff040c-8bf1-47e4-a4f3-dac56fb2ccc8 ## Commits I Care About [Implements something like fov, but without the planes as layers hell]( |
||
|
|
1e76fd70b4 |
Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request Implements half of this (with some minor changes):  The ultimate goal of this is to split our attack chain in two: - One for non-combat item interactions - Health analyzer scanning - using tools on stuff - surgery - Niche other interactions - One for combat attacking - Item hit thing, item deal damage. - Special effects on attack would go here. This PR begins this by broadining tool act into item interact. Item interact is a catch-all proc ran at the beginning of attack chain, before `pre_attack` and such, that handles the first part of the chain. This allows us to easily catch item interaction and cancel the attack part of the chain by using deliberate bitflag return values, rather than `TRUE` / `FALSE`*. *Because right now, `TRUE` = `cancel attack`, no matter what, which is unclear to people. Instead of moving as much as possible to the new proc in this PR, I started by doing some easy, obvious things. More things can be moved in the future, or technically they don't even need to move in a lot of cases. ## Changelog 🆑 Melbert refactor: Refactored some methods of items interacting with other objects or mobs, such as surgery and health analzyers. Report if anything seems wrong /🆑 |
||
|
|
5ce9d5806d |
Scopes NODECONSTRUCT_1 from flags_1 to obj_flags (#80104)
This flag only worked on the `/obj/structure` and `/obj/machinery` level, so let's rescope it from `flags_1` and put it where it belongs - `obj_flags`. Bitflag operators should be scoped to their subtype specific bitfield, not really useful to have this take up a spot on the `/atom` level if absolutely nothing other than `/obj`s use it. |
||
|
|
7f7688b60a |
Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request
Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game
Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.
I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
|
||
|
|
a39e2e5b64 |
offical to official (#78762)
## About The Pull Request Fixes "offical" to "official" in several locations - admin fax panel, admin newscaster, art patron text, a photocopier template, and a corgi tail pin item description. Adds this common misspelling to the check_grep.sh ci tool. ## Why It's Good For The Game I have corrected the typo manually every single time I have sent a fax from Central Command. ## Changelog 🆑 spellcheck: "offical" has been officially corrected to "official" in several official locations. /🆑 |
||
|
|
a6c66a098d |
Progress bars & cleaning particles will centre on the tile occupied by large icon objects (#77940)
## About The Pull Request Do_after bars always draw based on the top-left corner of the targetted atom, for atoms with sprites that are larger than 32x32 this gives them a weird offset instead of being centred, which bugs me. I have tried my best to figure out a way to reverse this which does not interfere with atoms which use pixel_x/pixel_y to visually appear to be on a different tile. ## Why It's Good For The Game Before:  he hates how you missed him completely 😦 After:  now you're cleaning his feet 🙂 ## Changelog 🆑 image: progress bars and cleaning particles are now centered on the tile occupied by the target, if it is a big sprite /🆑 |
||
|
|
5ff475afbc | Sets a saner length limit to ID assignments and paintings' titles. (#76723) | ||
|
|
41f20bc3ce |
[MDB IGNORE] Angled Lights & Lighting Prototyping Tool (#74365)
## About The Pull Request Hello friends, I've been on a bit of a lighting kick recently, and I decided I clearly do not have enough things to work on as it is. This pr adds angle support to static lights, and a concepting/debug tool for playing with lights on a map. Let's start from first principles yeah? ### Why Angled Lights? Mappers, since they can't actually see a light's effect in editor, tend to go off gut. That gut is based more off what "makes sense" then how things actually work This means they'll overplace light sources, and also they tend to treat lights, particularly light "bars" (the bigger ones) as directional. So you'll have two lights on either sides of a pillar, lights inside a room with lights outside pointing out, etc.  This has annoying side effects. A lot of our map is overlit, to the point that knocking out a light does.... pretty much nothing. I find this sad, and would like to work to prevent it. I think dark and dim, while it does not suit the normal game, is amazing for vibes, and I want it to be easier to see that. Angled lights bring how lights work more in line with how mappers expect lights work, and avoids bleedover into rooms that shouldn't be bled into, working towards that goal of mine. ### How Angled Lights? This is more complex then you'd first think so we'll go step by step  Oh before we start, some catchup from the last time I touched lighting code. Instead of doing a lighting falloff calculation for each lighting corner (a block that represents the resolution of our lights) in view we instead generate cached lightsheets. These precalculate and store all possible falloffs for x and y distances from a source. This is very useful for angle work, since it makes it almost totally free. Atoms get 2 new values. light_angle and light_dir Light angle is the angle the light uses, and light_dir is a cardinal direction it displays in We take these values, and inside sheetbuilding do some optional angle work. getting the center angle, the angle of a pair of coords, and then the delta between them. This is then multiplied against the standard falloff formula, and job done. We do need some extra fenangling to make this all work nicely tho. We currently use a pixel turf var stored on the light source to do distance calculations. This is the turf we pretend the light source is on for visuals, most often used to make wall lights work nice. The trouble is it's not very granular, and doesn't always have the effect you might want. So, instead of generating and storing a pixel turf to do our distance calculations against, we store x and y offset variables. We use them to expand our working range and sheet size to ensure things visually make sense, and then offset any positions by them. I've added a way for sources to have opinions on their offsets too, and am using them for wall lights. This ensures the angle calculations don't make the wall behind a light fulldark, which would be silly. ### Debug Tool? In the interest of helping with that core problem, lights being complex to display, I've added a prototyping tool to the game. It's locked behind mapping verbs, and works about like this. Once the verb is activated, it iterates over all the sources in the world (except turfs because those are kinda silly), outlining and "freezing" them, preventing any future changes. Then, it adds 3 buttons to the owners of a light source.  The first button toggles the light on and off, as desired. The third allows you to move the source around, with a little targeting icon replacing your mouse The second tho, that's more interesting. The second button opens a debug menu for that light  There's a lot here, let's go through it. Bit on the left is a list of templates, which allow you to sample existing light types (No I have no idea why the background is fullwhite, need to work on that pre merge) You can choose one by clicking it, and hitting the upload button. This replaces your existing lighting values with the template's, alongside replacing its icon and icon state so it looks right. There are three types as of now, mostly for categorization. Bar, which are the larger typically stronger lights, Bulb, which are well, bulbs, and Misc which could be expanded, but currently just contains floor lights. Alongside that you can manually edit the power, range, color and angle of the focused light. I also have support for changing the direction of the light source, since anything that uses directional lighting would also tie light dir to it. This isn't *always* done tho, so I should maybe find a way to edit light dir too. My hope is this tool will allow for better concepting of a room's lights, and easier changing of individual object's light values to suit the right visuals. ### Lemon No Why What Ok so I applied angle lights to bars and bulbs, which means I am changing the lighting of pretty much every map in the codebase. I'm gonna uh, go check my work. Alongside this I intend to give lighting some depth. So if there's room to make a space warmer, or highlight light colors from other sources, I will do that. (Images as examples)  I also want to work on that other goal of mine, making breaking lights matter. So I'll be doing what I can to ensure you only need to break one light to make a meaningful change in the scene. This is semi complicated by one light source not ever actually reaching fullbright on its own, but we do what we must because we can.  I'm as I hope you know biased towards darker spaces, I think contrast has vibes. In particular I do not think strong lights really suit maintenance. Most of what is used there are bulbs, so I'm planning on replacing most uses with low power bulbs, to keep light impacts to rooms, alongside reducing the amount of lights placed in the main tunnels  **If you take issue with this methodology please do so NOW**, I don't want to have to do another pass over things. Oh also I'm saving station maps for last since ruins are less likely to get touched in mapping march and all. ### Misc + Finishing Thoughts Light templates support mirroring vars off typepaths using a subtype, which means all the templates added here do not require updating if the source type changes somehow. I'd like to expand the template list at some point, perhaps in future. I've opened this as a draft to make my intentions to make my changes to lights known, and to serve as motivation for all the map changes I need to do. ### Farish Future I'm unhappy with how we currently configure lights. I would like a system that more directly matches the idea of drawing falloff curves, along with allowing for different falloffs for different colors, alongside extending the idea to angle falloff. This would make out of engine lighting easier, allow for nicer looking lights (red to pink, blue to purple, etc), and improve accessibility by artists. This is slightly far off, because I have other obligations and it's kinda complicated, but I'd like to mention it cause it's one of my many pipedreams. ## Changelog 🆑 add: Added angle lighting, applies it to most wall lights! add: Adds a lighting prototyping tool, mappers go try it out (it's locked behind the mapping verb) /🆑 --------- Co-authored-by: MMMiracles <lolaccount1@hotmail.com> |
||
|
|
c0e46fabf7 |
Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving it on most welder tasks require a minimum of 1u of fuel, some longer tasks require a minimum of 2 or 3u welders now drain 1u every 5 seconds they're active ## About The Pull Request Prior to this PR welder fuel usage was random, a lot of tasks didn't use any welder fuel and welders were basically near infinite so long as you didn't use them for combat, it took 26 seconds of activity to drain 1u of fuel, that means an emergency welder alone could run for 5 minutes straight before needing a refuel After this PR all welders will drain 1u every 5 seconds instead of every 26 seconds, but welding objects won't require extra fuel anymore, making the fuel usage much more consistent. resolves #55018 ## Why It's Good For The Game Actually makes fuel tanks useful and relevant without making it obnoxious to do repetitive quick tasks like turn rods into plates, there's actually a reason to upgrade off the emergency welder now since it lasts 50 seconds rather than 5 minutes ## Changelog 🆑 qol: Welders now have a more consistent fuel usage /🆑 |
||
|
|
4f87839cf3 |
The Canvas UI now shows a grid while the user is painting. (#75604)
A grid is shown while the user is holding a painting tool on an editable canvas. This is achieved by drawing empty rectangles after the filled ones are placed whenever the canvas is updated and if requirements are met. It's by no mean perfect, especially since the strokeStyle is a mere "#888888" hexcolor, the contrast may get low around colors of similar lightness. But I don't think I've much the strength to seek out a fancier solution to a peeve that's hardly a botherance anyway while the canvas is still mostly white. I've also had a maintainer suggest me to make a toggle to disable/enable. I talked a bit how that'd be a bit more complex to integrate but not much so frankly, although switching hands or putting away the tool already works for that. That said, I'm willing to do it if player feedback suggests such toggle should be integrated. |
||
|
|
2901313821 |
Adds a eye-dropper right-click function to the painting canvas. (#75571)
## About The Pull Request Having used the painting UI to kill some time during long rounds for a decent chunk of the past year, the need of a quicker and less tedious way to fix a misclick or mistake like drawing over the wrong pixel has become clear to me, as well as getting some feedback on the palette component I made last year. As the title suggests, this PR adds an eye-dropper function to the canvas. Right-Click a pixel on the canvas, and the painting tool will copy its color. Simple as, works on both finished and unfinished paintings. As a bonus, you can also right-click one of those selectable white/colored squares on the color scheme near the bottom of the UI (if using spraycan/palette) to change its color without having to go back to main game window and a radial menu. EDIT: With the tooltip added to the UI, I can say it's ready. ## Why It's Good For The Game This PR aims to add better options to change colors on the go and improve the user experience on the painting UI. ## Changelog 🆑 qol: Adds a eye-dropper-like right-click function to the painting canvas UI. Right-Click a pixel on the canvas while holding a painting tool to have it copy its color. qol: Also adds a right-click function to the color palette at the bottom of the UI to allow users to set its colors without having to alternate between the game window and the UI. qol: Lastly, a tooltip has been added near the top-left corner of the same UI to let players know of these features. /🆑 |
||
|
|
f83113e5ba |
Fixes 'Paintings leaving their frames #74707' (#75558)
## About The Pull Request See the title and the relative bug report. Yes, this is a webedit. The relative lines were removed by #74538. The author of that PR had apparently read the typepath wrong and therefore thought it was redundant (they were adding the TRAIT_KEEP_TOGETHER to canvases). ## Why It's Good For The Game This will close #74707. Bugfix. ## Changelog 🆑 fix: Fixed large paintings looking pretty off while flipped E/W. /🆑 |
||
|
|
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. |
||
|
|
821123b598 |
Makes a whole bunch of wooden objects flammable (#74827)
## About The Pull Request This whole PR started because I realized that baseball bats are not actually flammable which I found weird, then I looked at a whole bunch of other stuff that really should be flammable but also isn't. ## Why It's Good For The Game Makes wooden objects behave slightly more consistently? Honestly, most of these seem like oversights to me. ## Changelog 🆑 balance: The following structures are now flammable: Picture frame, fermenting barrel, drying rack, sandals, painting frames, paintings, spirit board, notice board, dresser, displaycase chassis, wooden barricade balance: The following items are now flammable: Baseball bat, rolling pin, mortar, coffee condiments display, sandals, wooden hatchet, gohei, popsicle stick, rifle stock /🆑 |