mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-11 16:14:08 +01:00
mayfools
111 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0b0c5ea91e |
Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request Extends the part of the crafting unit test that ensures consistency between the total mats of the components of a recipe (or rather, the result of said recipe) and a generic instance of the same type as its result, previously only implemented on food recipes. ## Why It's Good For The Game This ensures a degree of consistency with the material composition of various objects in the game. I couldn't do it in the original PR as that one was too big already and it took months to get it merged, and have the relative bugs fixed. Currently a WIP as I slowly deal with the unit test reports. ## Changelog 🆑 refactor: Follow-up to the crafting/material refactor from months ago. All objects crafted with stacks now inherit their mat composition (not necessarily the effects and color) by default, while previously only a few things like chair, sinks and toilets did. Report any object looking or behaving weirdly as a result. fix: The material composition of ammo boxes is no longer a 1/10 of what it's supposed to be. It was a shitty hack to make it harder to recycle empty ammo boxes. Instead, they lose materials as they're emptied now. /🆑 |
||
|
|
4d648d016c |
Sleeping Carp and Cain & Abel no longer tell you about armor penetration when you reflect projectiles with them (#93275)
## About The Pull Request Projectile refactor pulled armor check above the pre-hit comsig, this fixes that. No need to check armor before you're hit when you potentially will not be. ## Changelog 🆑 fix: Sleeping Carp and Cain & Abel no longer tell you about armor penetration when you reflect projectiles with them /🆑 |
||
|
|
5df4de3f71 |
[MDB Ignore] Re-add hop console second ID slot (#92157)
## About The Pull Request <img width="491" height="301" alt="image" src="https://github.com/user-attachments/assets/a3b5b19f-edf5-4de9-9201-9cbfab9e8827" /> Mod computers with the access changing software installed have a secondary ID slot once again. This ID slot doesn't contribute to access. You can insert IDs into the slot with right click and remove them with alt-right click. Also removes the "New IDs and you" memo paper. Also tweaks PDA on_deconstruct so contents are dropped on when they're deconstructed with assembly. Fixes #92151 ## Why It's Good For The Game Changing IDs is very unnecessarily clunky with the one slot. Insert hop id, log in, remove hop id, insert crew id, change access, remove crew id, log out. We had it right back when we had two slots. Insert hop ID, insert crew id, log in. It just works. This also allows for mobile HoPs to change access without necessitating removing their ID from their PDA. Other changes: The "New IDs and you" memo is very old. They haven't been new for 4 years now. I don't think anyone reads it and they served their purpose. I found it odd that, if your PDA was melted or blown up, it would delete your ID. If this is a hold-over from old PDA behavior feel free to let me know but otherwise it seems sensible that it'd spit out the contents as you would expect. ## Changelog 🆑 Melbert qol: The access changing software (the HoP console) now has ID two slots again (one for the HoP's id and one for the ID being changed). You can insert IDs in the secondary slot via the UI or right click, and remove them via the UI or alt-right click. qol: If your PDA is destroyed via acid or bombs, your ID (and similar contents such as disks) are spit out instead of being deleted del: Deletes the "New IDs and you" memo in the HoP's office. They haven't been new for 4 years. fix: Engineering sub-tab in the access changing software no longer looks messed up fix: Fix reversed alt-click logic for mod pcs /🆑 |
||
|
|
0783e99c23 | Changes the description of the Modular Console machine (#92109) | ||
|
|
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) /🆑 |
||
|
|
a2d463cdd8 |
Guncode Agony 4.4: Armor as an argument (#88143)
## About The Pull Request Lil cleanup/tweak I couldn't do in the main PR because it conflicted before and i forgot after. Yes this works with overrides that don't have the arg, yes I tested it. ## Why It's Good For The Game Don't run armor code thrice please thank you ## Changelog 🆑 code: Projectile impacts no longer fetch mobs' armor values thrice /🆑 |
||
|
|
0b99107cc2 |
Guncode Agony 3: Projectile code cleanup (#87628)
## About The Pull Request
Massive cleanup/pseudo-refactor of projectile and projectile-adjacent
code. One letter variables, weird logic, some runtimes, all of that.
Atomized in a separate PR from the actual refactor so we don't end up
with a 5k line PR.
## Why It's Good For The Game
Makes the code possible to work with before I nuke pixel_move and kevinz
units™️
|
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
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> |
||
|
|
d1f3fc3fdf |
Oldstation (Charlie) experiments tweaks [NO GBP] (#84379)
## About The Pull Request There was a feedback that the new techweb made it harder to do science on ghost roles, namely Charlie station crew. This PR makes a few tweaks to oldstation to lower the bar on the experiments: - Added a pure N2O tank for easier BZ creation - Added one diamond to the ai sat to create artificial BS crystal - Added research console to ai sat with frontier app pre-installed - Added a gas compressor to Beta station atmos area Also moved the NTNet relay back to tcomms node as it requires tcomms parts. And moved chem pack/blood pack from tier 1 to tier 0 per players` request. Also fixed the dissection experiments giving the old amount of bonus points, before the recent point denomination. Made a few other minor changes to the map. ## Why It's Good For The Game Charlie is supposed to be friendly for the beginner players, yet the new experiments are hard to do with the limited resources on Charlie. ## Changelog 🆑 qol: It is easier to do some required techweb experiments on Charlie station now fix: Fixed experimental dissection surgeries giving too many points balance: Techweb: Moved NTNet relay back to tcomms node balance: Techweb: Moved blood pack and chem pack to the starting node /🆑 |
||
|
|
0db2a23faf |
Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore] (#84079)
## About The Pull Request As the title says. A standard power cell now only stores 10 KJ and drains power similar to how it did before the refactor to all power appliances. The new standard megacell stock part stores 1 MJ (what cells store right now). APCs and SMESs have had their power cells replaced with these megacell stock parts instead. Megacells can only be used in APCs and SMESs. It shouldn't be possible to use megacells in any typical appliance. This shouldn't change anything about how much 'use' you can get out of a power cell in regular practice. Most should operate the same and you should still get the same amount of shots out of a laser gun, and we can look at expanding what can be switched over to megacells, e.g. if we want mechs to require significantly more power than a typical appliance. Thanks to Meyhazah for the megacell icon sprites. ## Why It's Good For The Game Power cell consumption is way too high ever since the power appliance refactor that converted most things to be in joules. It's a bit ridiculous for most of our machinery to drain the station's power supply this early on. The reason it's like this is because regular appliances (laser guns, borgs, lights) all have a cell type that is identical to the APC/SMES cell type. And it means that if we want to provide an easy way to charge these appliances without making it easy to charge APCs/SMESs through a power bug exploit, we need to introduce a new cell type to differentiate between what supplies power and regular appliances that use power. This is primarily what the megacell stock part does. This moves us back to what it was originally like before the power refactor, where recharging power cells wouldn't drain an exorbitant amount of energy. However, it maintains the goal of the original refactor which was to prevent people from cheesing power generation to produce an infinite amount of power, as the power that APCs and SMESs operate at is drastically different from the power that a regular appliance uses. ## Changelog 🆑 Watermelon, Mayhazah balance: Drastically reduces the power consumption and max charge of power cells balance: Added a new stock part called the battery, used primarily in the construction of APCs and SMESs. add: Suiciding with a cell/battery will shock you and potentially dust you/shock the people around you if the charge is great enough. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> |
||
|
|
476973ea6b |
Refactor modular computer (and application) attackby into item_interaction (#84245)
## About The Pull Request Sooooooooo I was recently notified of an issue (#84185) that popped up from me replacing the `attackby(...)` chain on id cards, where it's no longer possible to put money into IDs inside of PDAs by slapping it against the PDA. As I expected, this is because modular computers both still use `attackby(...)`, and would call `attackby(...)` on the ID they contained if hit with cash. https://github.com/tgstation/tgstation/blob/24a23009e8ee4d056b6671c70c41feab1a18590b/code/modules/modular_computers/computers/item/computer.dm#L799 Now this could've been an easy one line no-gbp fix where I just replace it with a direct call to `insert_money(...)` on the ID and call it a day! But hey. Might as well get rid of the `attackby(...)` altogether while we're at it. First off, because the `attackby(...)` proc was getting quite bloated, we split off all the specific item behaviours into `[X]_act(...)` type procs to clean it up. We then make those return item interaction flags, so we can call them on `item_interaction(...)` after the right typecheck passes and immediately return their results. This also involves replacing the `application_attackby(...)` on applications with an `application_item_interaction(...)`, and making it return the item interaction flags too. The code of each subsection isn't significantly different, though reorganized a bit in some cases. Like inserting a computer disks now tries to move it into the computer _first_ before swapping out whichever disk is already in there, so it doesn't swap out the disk if putting the new one in fails. ## Why It's Good For The Game Fixes #84185. Having more stuff be updated to the proper `item_interaction(...)` system is cool and good. |
||
|
|
4799324416 |
Mild QOL updates to vending machine-cargo interactions. (#83933)
## About The Pull Request This Pull makes a few minor improvements to the features I added with vendor cargo (#81582). Changes are as follows: * Vending machines, when restocked with a refill pack and while containing a number of credits, will play a cash register sound to alert you that there's a payout associated with the action. * The Vending Restock app now works on all modular computer platforms, as opposed to just laptops and tablets. * This is actually hilarious because I even made a screen icon for modular consoles, and it's just been unused ever since merge. * The "cargochat" cargo modular console now has the vendor refill app pre-installed. * Vending machines, when determining their missing inventory during the associated station trait, now adds from 1-5 credits per missing item, up from 0-1. The original number was far too low to feel like a strong incentive based on feedback I'd received, and while still lower than providing a flat percentage of the missing item specifically (we ran some numbers on this a few months back), it should at least incentivize players to keep the station better stocked during regular rounds. Also, the UI now shows a difference between if all vending machines are stocked or not.  ## Why It's Good For The Game Most of these are just interfacing and ease of use improvements, as having the app pre-installed in a place where players can actually make some use of it's contents should help to improve it's versatility with regards to the restocking app. Audio feedback is always good. In terms of the balance tweak on the stored value on vending machines, basically it's a way to better incentivize it as an option on the station and to better encourage players to do these kinds of minor upkeep tasks for the crew. ## Changelog 🆑 qol: Vending machines now give audio feedback when you restock a vending refill and get a payout. qol: The Restock tracker NTOS app for tracking vending machine contents now works on all consoles, and comes pre-installed on the cargochat cargo computers. balance: Vending machines now offer a bit more credits when missing contents at the start of a round after getting restocked. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
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. |
||
|
|
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. /🆑 |
||
|
|
a73b77b3bb |
[MDB Ignore] Combines Cargobus consoles with Dept. Order Consoles, freeing all departments of 1 whole tile of space (#82210)
## About The Pull Request - Departmental orders are now an NTOS app - To download, they require `ACCESS_COMMAND`. - To use, they require one access from the department. - This means you cannot order things from not-your-department unless you have an ID. - When newly downloading the app, it will prompt a head of staff to insert an ID, to determine which department to be linked to. - Changes chat room overlay from the kind that AI uploads use to a new icon. - Minor refactors to department order in general.   ## Why It's Good For The Game These two computers are surprising waste spacers for two things which are tied together. So why not combine them? The lesser used cargobus chat is still there, and departmental orders are front and center. This gives mappers a ton more leeway when mapping departments out and is overall less clutter. ## Changelog 🆑 Melbert qol: Cargobus chat console and Departmental Order console are now combined into one. qol: Mod PCs active on the "chat client" apps no longer look like AI uploads (and now have their own sprite) refactor: Departmental order consoles were refactored a bit, report any oddities. /🆑 |
||
|
|
c1f11f26ce |
Converts arbitrary energy units to the joule. Fixes conservation of energy issues relating to charging cells. (#81579)
## About The Pull Request Removes all arbitrary energy and power units in the codebase. Everything is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you are going to multiply by time. This is a visible change, where all arbitrary energy units you see in the game will get proper prefixed units of energy. With power cells being converted to the joule, charging one joule of a power cell will require one joule of energy. The grid will now store energy, instead of power. When an energy usage is described as using the watt, a power to energy conversion based on the relevant subsystem's timing (usually multiplying by seconds_per_tick or applying power_to_energy()) is needed before adding or removing from the grid. Power usages that are described as the watt is really anything you would scale by time before applying the load. If it's described as a joule, no time conversion is needed. Players will still read the grid as power, having no visible change. Machines that dynamically use power with the use_power() proc will directly drain from the grid (and apc cell if there isn't enough) instead of just tallying it up on the dynamic power usages for the area. This should be more robust at conserving energy as the surplus is updated on the go, preventing charging cells from nothing. APCs no longer consume power for the dynamic power usage channels. APCs will consume power for static power usages. Because static power usages are added up without checking surplus, static power consumption will be applied before any machine processes. This will give a more truthful surplus for dynamic power consumers. APCs will display how much power it is using for charging the cell. APC cell charging applies power in its own channel, which gets added up to the total. This will prevent invisible power usage you see when looking at the power monitoring console. After testing in MetaStation, I found roundstart power consumption to be around 406kW after all APCs get fully charged. During the roundstart APC charge rush, the power consumption can get as high as over 2MW (up to 25kW per roundstart APC charging) as long as there's that much available. Because of the absurd potential power consumption of charging APCs near roundstart, I have changed how APCs decide to charge. APCs will now charge only after all other machines have processed in the machines processing subsystem. This will make sure APC charging won't disrupt machines taking from the grid, and should stop APCs getting their power drained due to others demanding too much power while charging. I have removed the delays for APC charging too, so they start charging immediately whenever there's excess power. It also stops them turning red when a small amount of cell gets drained (airlocks opening and shit during APC charge rush), as they immediately become fully charged (unless too much energy got drained somehow) before changing icon. Engineering SMES now start at 100% charge instead of 75%. I noticed cells were draining earlier than usual after these changes, so I am making them start maxed to try and combat that. These changes will fix all conservation of energy issues relating to charging powercells. ## Why It's Good For The Game Closes #73438 Closes #75789 Closes #80634 Closes #82031 Makes it much easier to interface with the power system in the codebase. It's more intuitive. Removes a bunch of conservation of energy issues, making energy and power much more meaningful. It will help the simulation remain immersive as players won't encounter energy duplication so easily. Arbitrary energy units getting replaced with the joule will also tell people more meaningful information when reading it. APC charging will feel more snappy. ## Changelog 🆑 fix: Fixes conservation of energy issues relating to charging powercells. qol: APCs will display how much power they are using to charge their cell. This is accounted for in the power monitoring console. qol: All arbitrary power cell energy units you see are replaced with prefixed joules. balance: As a consequence of the conservation of energy issues getting fixed, the power consumption for charging cells is now very significant. balance: APCs only use surplus power from the grid after every machine processes when charging, preventing APCs from causing others to discharge while charging. balance: Engineering SMES start at max charge to combat the increased energy loss due to conservation of energy fixes. /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
207ffd13cc |
Fixes runtime from examining mod PCs (#81200)
## About The Pull Request It's a classic  `EXAMINE_HINT(x)` resolves to `"<b>" + x + "</b>"` When placed in this line directly, you get: `["<b>" + HAS_TRAIT_FROM(...) ? "..." : "..." + "</b>"]` You see the issue, right? This resolves as you would expect: `("<b>" + HAS_TRAIT_FROM(...)) ? ("...") : ("..." + "</b>")` Which, of course, runtimes as it's adding a string to an integer (0). By pulling it out to its own var we can get around this: `["<b>" + frame_or_pc + "</b>"]` ## Changelog 🆑 Melbert fix: Fixed examining modular PCs /🆑 |
||
|
|
f9957b0373 |
Integrated circuits for modular computers (#80530)
## About The Pull Request This PR integrates circuits for modular computers and a good bits of their programs. The peculiarity here is that modular computers have no fixed amount of unremovable components (except the base one with just a couple ports for now), instead, they're added and removed along with programs. With a few exceptions (such as the messenger and signaler), for these program circuits to work, their associated program has to be either open or in the background. For a reason or another, not all programs have a circuit associated to them, still, however the programs with a circuit are still a handful. They are: - Nanotrasen Pay System - Notepad - SiliConnect - WireCarp - MODsuit Control - Spectre Meter - Direct Messenger* - LifeConnect - Custodial Locator - Fission360 - Camera - Status Display - SignalCommander *By the by, sending messages has a cooldown, so it shouldn't be as spammy. If it turns out to not be enough, I can make it so messages from circuit will be ignored by other messenger circuits. The PR is no longer WIP. ## Why It's Good For The Game I believe modular computers could make for some interesting setups with circuits, since they're fairly flexible and stocked with features unlike many other appliances, therefore also a speck more abusable, though limits, cooldowns, logging and sanitization have been implemented to keep it in check. ## Changelog 🆑 add: Modular Computers now support integrated circuits. What can be done with them depends on the programs installed and whether they're running (open or background). add: Modular Consoles (the machinery) now have a small backup cell they draw power from if the power goes out. /🆑 |
||
|
|
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. |
||
|
|
ddd3f53943 |
PDA general maintenance (NTNet downloader rework) (#79741)
## About The Pull Request I deleted the documentation file of ModPCs because it was barebones and had no new information to give that autodoc couldn't. Just to make sure this isn't a net-negative, I improved on much of the autodoc and comments in general around ModPC code to help people understand easier what's going on around it. I also renamed vars that were too easily confused with other var names, and reworked the ntnet downloader a little; - it now has a search bar - it now has more sections to scroll through, hopefully making it more accurate and easy to find what you need. - also organized the apps that were previously shoved in 'other'. - i also upgraded it to a .tsx because why not video demonstration https://github.com/tgstation/tgstation/assets/53777086/cbba4c1c-b8a8-4ba4-8628-aea8389999fc ## Why It's Good For The Game Adds in a lot of comments that were previously missing, clears up some sources of confusion within ModPC code, and improves NTNet Downloader, something I've procrastinated on doing for a very long time now. ## Changelog 🆑 qol: NTNet Downloader now has a search bar, and programs are now better sorted. /🆑 |
||
|
|
aaff861c90 |
pdas now use their cells more (#78580)
## About The Pull Request So one aspect of PDAs that I quite liked previously was managing and upgrading your power. This was lost when all cell parts got removed, mostly, and now I'd like to re-add it. PDAs and Tablets now use more power each second it's on Programs being active/idle now take charge too. And all this now takes ``seconds_per_tick`` into account. Screenshots of APC use before and after having 6 programs open at once   PDA default power cells have a max charge of 1000, each cell use is around ``1.00970340315`` power, which is ``1.01013789399`` w/ 2 programs in idle and 1 active program (which is what PDAs are capable of). This means it takes about 990 ticks to fully drain your power, or about 50 minutes, at max use. This is completely blasted away the moment you put anything beyond a t1 cell inside of it, which is unfortunate but what can you do about tiered parts being so poor. The problem of no public PDA chargers are alleviated by https://github.com/tgstation/tgstation/pull/78600 ### Update The PDA flashlight being on now also drains the battery 25% times faster. PDA running out of charge now also turns the flashlight off. ## Why It's Good For The Game You may or may not have to actually charge your PDA once in a round now, maybe. I liked this part of tablets and would like to see it brought back, managing your power to use your apps is important to ensure you're not just using all apps 24/7 Because this also adds the functionality to add/remove power cells again, it opens up to some minor little pranks/messing with people that isn't completely destroying their tools, as well as some minor upgradeability. ## Changelog 🆑 balance: You can now remove and replace power cells from PDAs (with screwdriver). balance: PDAs now drain their power cells harder, and also take into account active programs & their flashlight being on. balance: PDAs running out of charge now turn their flashlights off. /🆑 |
||
|
|
b2995cbd6e |
Fixes Intellicards in computers being deleted when the computer is destroyed (#78475)
## About The Pull Request As described in #78467, if an Intellicard is inserted into a laptop or stationary modular computer, and said computer is destroyed, then the Intellicard (as well as any AI on it) is instantly deleted. This PR makes the Intellicard get dropped instead. Closes #78467. ## Why It's Good For The Game Bugs are bad. ## Changelog 🆑 fix: Intellicards in computers are no longer deleted when the computer is destroyed. fix: Modular consoles can now be deconstructed by right clicking with a wrench. /🆑 |
||
|
|
f71ea26f72 |
Machine list is now stored in SSmachines | Remove excessive use of global lists for specific machine types (#76822)
## About The Pull Request Removes all of the duplicate global lists for specific machine types where the only thing they do is store all machines of that type. Adds machine tracking to SSmachines in the form of a list for all machines, and then an associative list for machines by their type. Previously we have machines in multiple global lists, such as airlocks being in GLOB.doors, GLOB.airlocks, GLOB.machines. This makes that not a thing, and also means that iterating through GLOB.machines looking for a specific type is no longer as expensive. |
||
|
|
ccf547c142 |
Adds an extra malf AI ability: Remote emagging. Also tidies up emag code and coverts a lot of things to balloon alerts (#76669)
## About The Pull Request New malf AI upgrade Remote safety overrides: Mid-cost, Mid-supply. Allows the AI to remotely emag things it can see and can access. 1. Very useful for psychological warfare (Emagging APCs to throw the crew off their trail) 2. Logically makes sense - why, of all things, can the AI not emag anything when it's fundumentally integrated with the station's electronics? 3. Generally speaking can only access things that make sense for it to access - it cannot emag ethereals, sadly In order for this to work, emag_act now returns a boolean, designating if the emag had any effect. While I was in there, I also added args to every single emag_act I could find and added far more feedback/converted a lot of things to balloon alerts to allow the AI to see if its emag had any effect. ## Why It's Good For The Game It just makes sense that the AI, the most electronically-sensitive entity in the game, would be able to emag things. Plus, more options given to malf that aren't strictly MURDER KILL MURDER are always a plus, especially if they allow for fancier plays. ## Changelog 🆑 add: New malf ability: Remote safety overrides. Allows the AI to remotely emag things it has access to. code: emag_act() now returns a boolean designating it's success in emagging code: All instances of emag_act() now have the proper arguments qol: Most usecases of emagging now have some kind of feedback, and existing feedback has been sanity checked and converted to balloon alerts. /🆑 |
||
|
|
fb10121022 |
Icons folder cleaning wave two (#76788)
## About The Pull Request Further continous organizing and cleaning the Icons folder. There are still some minior nitpicks left to do, but I reached my daily sanity expenses limit again, and the faster these get in the less issues for both me and others later. Also cleans some mess I caused by my blindness last PR. ## Why It's Good For The Game Saner spriters = better sprites |
||
|
|
8229972398 |
Tablet apps are now deleted when necessary & removes console preset. (#75863)
## About The Pull Request Apps now properly delete themselves when removed, so they don't exist in nullspace anymore. Chat client now actually updates the uid, because its New() didn't call parent. Deletes the 'console' subtype of modular computer Updates how downloading and transferring files are handled Fixes being able to infinitely upload apps to a disk ## Why It's Good For The Game Fixes some more bugs I found with apps and prevents spamming apps in a disk. ## Changelog 🆑 fix: Maintenance data disks now properly transfer from PC to disk fix: Disks can no longer be flooded with the same app repeatedly. /🆑 |
||
|
|
4ffef6be6d |
Fixes issues with closing apps on tablets (#75117)
## About The Pull Request - Fixes background apps not reloading the UI - Standardizes opening/closing/backgrounding apps - Simplifies the way apps are closed instead of having 2 procs, one on the PC and one on the program, being named the same thing (wtf) - Removes program states. They existed so computers can know to update their UI every process tick, but since we now do this event based, this is no longer needed, which is good. - Replaces the 'forced' arg from kill_program as it was completely unused, with ``reload_ui``, which is now used to open the UI on close, and not to when we don't want it to. - Closing background apps no longer reloads the entire UI - Responding to an NT Message will no longer open the UI on your face. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/75046 Closes https://github.com/tgstation/tgstation/issues/75108 Makes tablet UIs more responsive and lag less, not checking if a program is closed every process to close it, and makes responding to messages not a hassle every time. Also makes the code easier to understand/read, ## Changelog 🆑 fix: Tablets' minimize apps feature works again. /🆑 |
||
|
|
b8d86849c8 |
Removes ID computer parts (Removes computer hardware) (#71320)
## About The Pull Request Removes the last computer part in the game: ID parts Because this is removed, I also removed all computer hardware in the game, and removed mentions of it in the game. There is still 'hardware', as in Computer, Tablet, or Laptop. Computers now all hold one ID slot by default, the only time a second ID was needed was to use the access of both at once, and for the ID modification application. This was now replaced with a new UI that only has one tab, one ID slot: https://user-images.githubusercontent.com/53777086/202801939-151b783f-75c8-46bf-a6c5-1b57b0d0da8e.mp4 ## Why It's Good For The Game Computer hardware is finally dead 🦀 ## Changelog 🆑 balance: All modular computers now only have one ID slot, and cannot be upgraded. qol: The HoP's access application now only has one app, logging in will directly modify the ID that's in it, making it less confusing to swap back and forth. /🆑 |
||
|
|
ad5ceb5583 |
Removes tablet cell parts (#71078)
## About The Pull Request Removes cell parts and cell part cells, now tablets directly stole a power cell in them, and uses regular stock cells like every other machine in the game. This also makes it less confusing because people are more used to stock cells over computer cells. Because cells generally hold more power than computer ones, I bumped up the active power usage from 50 to 75. ## Why It's Good For The Game We are nearly finished removing all parts, holy cr*p ## Changelog 🆑 balance: Tablets now use regular cells instead of computer cells. balance: Tablets no longer need a power cell component to hold power cells. /🆑 |
||
|
|
6202f65661 |
Fixes & Improves ntnrc client & ntnet conversations (#70854)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
f1f46275f0 |
Removes tablet hard drives entirely (HDD & SSD) (#70678)
* Removes HDD's entirely HDDs have been removed, though the code for it is still currently lingering as it's required for portable disks. I'll have to find a solution to this one day, but as I am going to sleep, this is a problem for future me. * starts on removing SSD * updatepaths and kills off SSD * update path :D * Fixes to programs and icons * Ready for review now I read over everything I did and tried to fix anything I saw wasn't done right. Hopefully better comments now. * merge conflict fix * can't win them all * takes viruses into account in paths, fixes it in snowcabin * Renames the updatepaths * removes the qdel loop * accidentally new'ed programs twice * Fix program's computer var * destroy pen and disk, dont run kill program on something killed * more fixes for pens and idle threads * Fixes PDAs installing apps twice. * simplifies inserted disk & PDA disk * fuck's sake * Use istype instead * revert * Revert "revert" This reverts commit 9ede628c6fef9c7c86417234f6d8ada1ff9e2fef. * why did that happen * Update code/modules/modular_computers/computers/item/tablet.dm * MC_SSD added to master lol Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com> |
||
|
|
1619a5fe84 |
Fixes some inconsistencies with computers (#70679)
* Modular computers now have their initial name if they don't have an idenfitication and job, which previously meant they would have the name () * Removes MACHINE modular computer's process, because all it did was update the name, then call computer's process. Now it just does what every computer does, BUT UpdateDisplay on ITEM modular computers will now update the machine's name. * Additionally, I moved the modular computer processor's New to an Initialize, and removed the shutdown_computer code, because we already register update_icon signal to update the computer's appearance, why do we need to do it twice? |
||
|
|
218a153464 |
Removes a ton of unused tablet vars, re-organizes the rest (#70344)
* Removes a ton of unused vars, re-organizes the rest Removes a ton of unused vars from Modular computers Re-organizes the rest, and adds autodoc comments to most of them Moved 2 vars (saved_image and invisible) from the tablet to the messenger app, since that's where it was used. I didn't see the point of having these vars be on every computer anyways, only PDAs have the app. Renames Clown's honk virus var Makes Messenger app's saved image, actually used. * static list and NODECONSTRUCT_1 check * oops |
||
|
|
89beb98495 |
Modular computer fixes (#70606)
* Moves a lot of modular computer attackbys to the cpu instead, which is what handles it all. This allows their parts to be removed and the console deconstructed/repaired once again. |
||
|
|
7c990173e0 | Removes network cards and printers from tablets (#70110) | ||
|
|
ca229574f6 |
Removes AI and Charge parts from tablets, adds support for more later. (#70012)
* Removes recharger tablet parts Removes 'advanced' tablet subtypes that we used before PDAs were added, in some jobs. Replaces Roboticist's advanced tablet mail with a laptop Moves the notepad's note var from the tablet, to the note app Moves modular computer's defines into their own file Machine computers now directly use power from the machine they're in, while the rest uses power cells. Silicon tablets don't use power at all. Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
c61d6dc3cb |
Removes CPU, Sensors and Identify ModPC parts. (#66924)
Removes CPU, Sensors and Identify parts from modulra computers. This is in effort to simplify how tablets and tablet apps are, while removing barriers to download specific apps. Limiting apps needed for your job, through hardware, is a terrible idea, and just limits departmental stuff to being there roundstart/latejoin, punishing people who job change through the in-game HoP system, devaluing the job as a whole. |
||
|
|
ffd1ae5fc0 |
Rebalanced Power consumption, increase for machines (#66059)
Machinery power consumption rebalance. |
||
|
|
eeb5465931 |
Ordnance Content Update: Scientific Papers (#62284)
How do I play/test/operate this? Download NT Frontier on any modular computers. It should debrief you on what experiments are available and how to publish. If you want to do a bomb experiment, make sure it's captured by the doppler array (as usual) and then print the experiments into a disk and publish it. If you want to do a gas experiment, make the gas and either pump it into a tank and 1) overpressurize it with a "clear" gas like N2 or 2) overpressurize tanks with the gas itself. Make sure you do the overpressurizing in the compressor machine. When tanks are destroyed/ejected leaked gas will get recorded. Print it into a disk and publish it. For publication, the file needs to be directly present inside the computer's HDD. This means you need to copy it first with the file manager. Fill the data (if desired, it will autofill with boiler plate if you dont) and send away! Doing experiments unlock nodes, while doing them well unlocks boosts (which are discounts but slightly more restrictive) which are purchaseable with NT Frontier. If you are testing this and have access to admin tools, there are various premade bombs under obj/effect/spawner/newbomb A doc I wrote detailing the why and what part of this PR. https://hackmd.io/JOakSYVMSh2zU2YL5ju_-Q --- # Intro ## The Problem(s) Ordnance, (previously toxins) seems to lack a lot of content and things to do. The gameplay loop consists of making a bomb and then sending it off for credits or using it to refine cores. Ordnance at it's inception originally relies on players experimenting and finding the perfect mix over multiple rounds, but once the recipe for a "do-everything" mix got out, the original charm of individual discoveries becomes meaningless. Another issue with ordnance is the odd difficulty curve. As a new player, ordnance is almost impossible to decipher, but once you watch a tutorial or read a wiki and can mail a 50k into space, there pretty much isn't anything else to do. Most players will be satisfied at this point without the gameplay loop encouraging them to understand or play more. The only thing you can do afterwards is to sink your teeth in and understand why that particular mix explodes the way it does. This again has a significant difficulty curve, but if you do that, the department doesn't acknowledge or reward that in any way. There are pretty much two huge spikes, with the latter one not really existing inside the department. TLDR: * The content being same-y over rounds. * Odd difficulty curve: 1. A new player is oblivious to everything. 2. Those in the middle can repeat the final goal consistently without needing to understanding why 3. There is nothing to justify spending more time in the department after reaching the midgame. ## Abstract Scientific Papers aim to add a framework to run multiple experiments in ordnance. Adding more experiments scattered across various atmospheric aspects might allow players of various knowledge levels to still have something engaging to do. A new player should have an easier challange than to mail a 50K. While those that already can make bombs should have an easier time understanding why their bombs explode the way it does. Once they fully understand why, they can set their sights on taking advantage of another reaction to set their bomb off or hone one particular reaction down. ## Goals * Have some intro-level challanges for new players. * Have some semblance of late-game challanges for more experienced players. * Explain the mechanics better for those in the middle of the road. * Incentivize trying new things out in the department. * Better integrate Ordnance with Experisci ## Boundaries / Dont's * Do not incentivize people to learn ordnance by using PvP loots. * Do not shake or change the reaction system by a huge amount. * Disincentivize having a single god-mix that does everything. **** # Main design pillars ## A. Framework surrounding the experiments ### A.1. New experiments Add new experiments to the ExperiSci module. These will come in two flavours: New explosions to do, and various gas synthesis experiments. Both of these are actually supported by the map layout of ordnance right now, but there is no reason to do anything outside of making a 50k as fast as possible. ### A.2. Rewards for experiments: Cash and Techweb Boosts. Scientific papers will add a separate experiment handling system. A single experiment will be graded into various tiers, each tier corresponding to the explosion size or amount of gas made. Doing any tier of a specific experiment will unlock the discount for that specific reactions. A single explosion **WILL NOT** do multiple experiments (or even tiers) at once. On publication, a partner can be selected. A single partner only has a specific criteria of experiments they want. The experiments will then be graded on "how good they are done", with the criteria being more punishing as tier increases. Publication will then reward scientific cooperation with the partnered partner. Players can spend this cooperation on techweb boosts. Techweb boosts are meant to be subservient to discount from experiments and will not shave a node's price to be lower than 500 points. **Experiments will only unlock nodes, discounts are handled through this boost system.** This is more for maintainability than anything. ### A.3. On Tedium *This is a note on implementation more than anything, but I think this helps explains why several things are done.* Due to the nature of atmospheric reactions in the game (they're all linear), tedium is a very important thing to consider. An experiment should have a sweet spot to aim for, but there should not be a point where further mastery is stopped dead on it's track with a reward cap. Scientific Papers attempts to discourage this behaviour by having the "maximum score" scale off to infinity but with the rewards being smaller and smaller. The sweet spot is always there to aim for and should be well communicated with players, but on their last submission of an experiment topic players should be encouraged to do their best. There should always be a reward for pushing the system to it's limit as long as it doesn't completely nullify the other subdepartments. This is the reason why there is a hard limit on the number of publications and why the score calculation is a bit more complex than it needed to be. ## B. Gas Synthesis (Early-Mid Game) Scientific papers will add one new machine that requests a tank to release x amounts of y gas. This will be accomplished by adding a tank pumping machine which will either burst or explode a tank, releasing the gas inside. The gas currently requested are BZ, Nitryl, Halon and Nob. The overarching goal of this compressor machine is to present a gas synthesis challange for the players and to get them more accustomed to how a tank explodes. The gas synthesis part can always be changed in order to reflect the current state of atmospheric reactions. ## C. Explosion Changes (Mid-Late Game) ### C.1 Cause and effect. The main theme of the explosion changes is establishing cause and effect of explosions. Reactions that happens inside a tank that's going to explode will be recorded and forwarded to a doppler array. Some experiments will require only a single cause to be present (think of it as isolating a variable). This is currently implemented for nobliumformation and pressure based bombs. Having other reactions occuring besides noblium formation will fail the first one, while having any reactions at all will fail the second one. Adding more explosions here will be a slight challange because as of now the game has only two reactions that can reliably make an explosion. ### C.2 Tools upgrade. Doppler array has now been retrofitted to state the probable cause of an explosion, be it reactions or just overpressurization on gas merging. These should help intermediate players figure out what is causing an explosion. Added a new functionality to the implosion compressor: Basically performs the gas merging and reaction that TTV does in a machine and reports the results back as if someone uses an analyzer on them. Here to give players feedback so they can try and understand what is actually going on in a bomb. ## D. Player Interaction There should be more room for more than 1 player to play ordnance simultaneously. Previously players are also able to split tasks, but this rarely happens because tritium synthesis needs only the gas chamber to be reconfigured. Now, different players can pick different experiments and work on them. Players can also do joint tasks on one single experiment. Gases like noblium will need tritium production and also a cooling module online. Ordnance can also coordinate with their parent department on what they really need, be it money or research bonuses. # Potential Changes The best-case changes that can be implemented if the current roster of content isn't enough is more reactions that can be used in bombs. Eliminating bombs entirely goes against the spirit of the subdepartment, while adding new ones will need a lot of care and consideration. Another possible change is to implement a "gas payload" bomb. Bombs that has a set number of unreacting gas inside that will increase the heat capacity, reduce the payload, and neccesitates more bespoke mixes. Adding more gas synthesis experiments is discouraged. The main focus of ordnance should be bombs, with gas synthesis being a side project for ordnance. These are present to ease the introduction to bombs and provide some side content. There should be a somewhat well-justified goal in adding new synthesis experiments: e.g. BZ is there as a "tutorial" gas, Nitryl to introduce players to cooling/heating mixes, Halon to a more efficient tritium production, and Nob as a nudge to nobformation bombs and mastery over other aspects. # Conclusion / Summary Add more experiments to ordnance that players can take, accomplish this by: 1. Making the players perform gas synthesis or make bombs. 2. Have them collect the data, see if it fits the criteria. Explain why if it fits and why if it doesn't. 3. Have the player publish a paper. Reward them based on how well did they do, give players agency both on the experiment phase and also publication phase. --- TLDR: Added new experiment to toxins, added the framework for those experiments existing. Experiments comes in gas synthesis and also bombs but with more parameters. Experiments needs to be published through papers, various choices to be made there. Implementation notes: Because of how paper works, ordnance experiments are handled outside of experiment_handler components. My reasoning for this is twofold: The experiments will be completed manually on publication and if the experiment isn't unlocked yet it will still be completed. Experiment handler datums have several procs which require an atom-level parent, and I figured this is the most sensible and cleanest way to implement this without changing the experiment handler datum too much. Small change to /obj/machinery/proc/power_change() signal ordering to adjust the state first and then send the signal. Didn't found any other usage of this signal except mine but barge down my door if it broke something. Rewrote the ttv merge_gases() code to be slightly more readable. A small code improvement for thermomachine to use tofixed (my fault). Ordnance have been updated to enable the publication of papers Several new explosive and gas synthesis experiments have been added to ordnance Anomaly compressor has been TGUIzed and now supports simulating the reaction of the gases inside the ttv. New tank compressor machine for toxins. You can overpressurize tanks with exotic gases and complete experiments. Several techweb nodes are locked and require toxin experiments to complete. Toxins can purchase boosts for various techweb nodes. You no longer need to anchor doppler arrays for it to work. Doppler array and implosion compressor now supports deconstruction, implosion compressor construction added. Doppler now emits a red light to denote it's direction and it being on. Doppler not malf. Implosion compressor renamed to anomaly refinery. Created a new program tab "Science" for the downloader app. Removed Robotics. Reworked the code for bombspawner (used in the cuban pete arcade game) |
||
|
|
6c01cc2c01 |
every case of initialize that should have mapload, does (#61623)
## About The Pull Request stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload  ## Regex used: procs without args, not even regex `/Initialize()` procs with args `\/Initialize\((?!mapload)((.)*\w)?` cleanup of things i didn't want to mapload: `\/datum\/(.)*\/Initialize\(mapload` |
||
|
|
62cf2ef21b |
small refactor to can_interact() so that borg range is fully respected (#60693)
Its a relatively small refactor that changes the previous machinery "can_interact()" proc that literally did a full override despite half of their checks already existing in not one, but TWO parent procs, so i removed the redundant checks, added callbacks to its parents and then added the cyborg range check on the can_interact_with() itself. in doing so i also moved the interaction range var from silicons only, to mobs as a whole and defaulted it to a single tile, silicons override it to 7 (so pAIs and borgs like before) but then set AI and AI.eye to "null", because i have a check in can_interact that if there is no range set, then the range is effectively unlimited. and i even added code for when AI is carded and their wireless transmission is disabled it sets their range to "0" aka, it has no range to do anything even if it could this was really complicated for me so despite my extensive testing it probably would be a bad thing if any of you want to test my code yourself to ensure there isnt a bug with this (theres no runtimes ive come across) note: i did a lot of searching and going through machinery to ensure i caught all the little snowflake overrides and added can_interact() checks to them, but i may have missed one or two things, especially maybe a altclick or ctrlclick somewhere, however i believe i caught most of them one nice side effect of this refactor is that you can actually set another mobs range to something other than 1 tile and they can interact at range, rather than only silicons getting this ability, an admin could VV a human to have a 3 tile arm reach as a meme if they want |
||
|
|
891d7bb363 | Sets RD consoles to have two ID card slots (#59830) | ||
|
|
375a20e49b |
Refactors most spans into span procs (#59645)
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs. Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines. Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing. Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc. (Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such) |
||
|
|
f90e8cf7a3 |
Fixes a bunch of harddels that are sourced from player action (#59371)
Sourced from #59118 and a cursed project I'll pr later, This pr contains a lot of harddel fixes for stuff that pops up after a player interacts with something. I'm not gonna list them all here because there's something like 60 130, check the commit log if you're curious Oh and I moved ref tracking screaming to a separate define, and made some optimizations to the thing in general. I think that's it, this pr is a bit of a frankenstine |
||
|
|
43c5dc8bfa |
Makes obj_integrity only updated through procs (#59474)
Having things updating integrity directly is just going to cause more problems down the line as more elements and components depend on being notified of integrity changes. It's an easy mistake to make so making it private should deal with the problem. get_integrity() might be useful in the future but is mainly a side effect of making obj_integrity private as that also disallows reads. |
||
|
|
67a3ce53af | Gives curators a console for printing portraits not in the round onto canvases (#59146) | ||
|
|
fa83a686c4 |
Add #cargobus and gauntlets (also modernizes ntchat) (#58609)
* cargobus, start of gloves * basics of the HAUL gauntlets * fully mapped in * almost forgot the gauntlets * ntnet improvements * cargo gaunts, tablet cargobus * excludes body bags * dmis and map back * readd icons |
||
|
|
fb488fdfff |
Some explosions code cleanup (#57493)
Clears out two deprecated explosions systems (explosion ids and explosion levels) Refactors a bunch of contents_explosions procs to be maybe slightly faster. Cleans up a bunch of ex_act code. Slightly cleaner code A few less unused vars on /atom and /turf |