mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 12:05:59 +01:00
docker-container
16 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ffb797a5bf |
Refactors some of the card code to use new attack chain, adds a limit to card decks (#92690)
## About The Pull Request Updates card items to use ``item_interaction``, cleans up some of the code, adds a 54 card limit to normal decks (special decks retain their custom limits) and prevents adding cards past said limit. Card hands now have a limit of 21 cards. - Closes #92551 ## Changelog 🆑 fix: You cannot stack infinite amount of cards in decks to explode clients of whoever they get thrown at. refactor: Rewrote card items to use new interaction code. /🆑 |
||
|
|
33b275963a |
You can now read what cards are in a hand of cards + a related bugfix (#91279)
## About The Pull Request When you inspect a hand of cards in your hand you will see all the cards in it. When anyone inspects a hand of cards outside of your hand they will see all face up cards. Also fixes a bug that caused cards to improperly flip when added to a hand. ## Why It's Good For The Game When playing games that involve larger hand sizes (see: everything besides texas hold'em), hands can become unreadable from sprites alone. This adds a way to actually see whats in your hand and other people's hands if they're placed face up on the table. ## Changelog 🆑 qol: Inspecting a hand of cards now tells you what cards you can see in it. fix: Adding cards to a hand no longer automatically flips them. /🆑 |
||
|
|
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) /🆑 |
||
|
|
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. /🆑 |
||
|
|
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 /🆑 |
||
|
|
6268b8d40a |
Fix newly created cardhands not inheriting singlecard offsets (#84838)
## About The Pull Request So while working on another pr, I noticed every time I used a deck to click on a single card, it'd create a cardhand... that's centered on the table. Looking into it, I noticed we already have code for it... but it doesn't work? This seems to be because we copy over the `pixel_x` and `pixel_y` values AFTER we insert the card into the cardhand: https://github.com/tgstation/tgstation/blob/cb5a5c1c69adf00663791f86f9b56047dd52367e/code/modules/cards/singlecard.dm#L172-L176 Swapping these around fixes it. ## Why It's Good For The Game It's kinda awkward to play card games around a single table if all your newly created cardhands decide to take up the same space on the table. ## Changelog 🆑 fix: Using a dual wielded deck to add another card to a single card bases the position of the resulting hand of cards on the position of the card. /🆑 |
||
|
|
4ac4375faf |
Adds pen clicking, changes most pen typechecks into writing implement checks (#84186)
## About The Pull Request Fixes #84170 Adds pen clicking and changes some of edagger and pendriver code to use it instead. Also replaces most pen typechecks to writing implement checks where it makes sense, so now you can rename things with everything you can write with (crayons)  Twisting pen caps (for traitor uplinks) has been moved to ctrl + click instead. |
||
|
|
a21742ff60 |
Adds ALLOW_RESTING to a bunch of items (#82761)
## About The Pull Request Allows you to alt-click a bunch of items while resting. Fixes #82788 ## Why It's Good For The Game Some of these, such as storage, are bugfixes. You shouldn't need to be standing up to configure a spray can, or change the direction of your bedsheet Others are just sensible changes. ## Changelog 🆑 Melbert fix: You can open bags with alt click while resting again qol: Many items which previously required you to stand to alt-click now don't, such as bedsheets and spray cans /🆑 |
||
|
|
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. /🆑 |
||
|
|
5046a7d3ae |
decks of cards no longer have their own wielded var (#78260)
## About The Pull Request we have the trait for that ## Why It's Good For The Game Throughout UNDERTALE, we get treated to three story sequences (4 if you include flowey's fakeout but that's not important). The first is the intro story, telling the tale of humans and monsters, which shortly thereafter leads into 201X, and Chara (Toriel's house has “An old calendar from 201X.”) falling into the underground. The second is the waterfall flashback, its contents taking place immediately after the intro segment, as a voice (Asriel) finds the fallen child. And finally, the third takes place in the True Pacifist final boss. We'll get to it in due course, and it will have its own section, but let's address the first two. Regarding the intro, the first thought one might have is that simply, while narratively relevant, is not a diegetic presentation. However, We know that everything after the “201X” frame is Chara's memory (from an outside perspective, that is,) and we also know that UNDERTALE LOVES bringing the non-diegetic, the mechanical, the game, INTO the narrative. Saving, RPG Stats, hell, even the NarratorChara. Surely the intro can be as well? On top of this, what does the intro do for the player, as the player? Well, aside from setting the tone, the intro gives us some setting backstory. It's all important context, and it certainly helps… but it being in the intro sequence is not that important; It's all presented throughout the game via diegetic signs, books, and expositional tortoise war heroes/angry fish guardswomen. The second half is how Chara fell to the underground, and while also setting tone and informing the player how their character arrived. It also creates the false impression for the player that their character is Frisk, feeding into UNDERTALE's meta narrative; “You are not your character, and their happy ending is not yours.” If we weren't playing Chara, this would have no narrative impact. The story beat fails to land by showing us someone elses' character. But, sure. This could be a purely non-diegetic intro sequence. Simply put, The 201X portion of the intro sequence does not make sense from a diegetic or a storytelling perspective unless we play as Chara. Flashback number two is explicitly a canonical, diegetic flashback. It occurs when Frisk escapes Undyne by falling down a massive pit… again. This time, they land in the garbage zone, black out, and have a flashback sequence of the first time Asriel found Chara. While serving the main narrative by setting up Asriel as a character, furthering the final twist of the meta narrative's pacifist route, and neatly transitioning between overworld areas, it's also very explicitly diegetic and cannot be dismissed as an intro sequence. With this in mind, one question is raised. Why do we see this flashback? If the player character is Frisk, this makes little sense, why would we see someone else's flashback and not our own? Same thing applies for a Third Entity, but even more abstract and illogical. What even are we? Sure, you could say Chara is somehow attached to us/Frisk and that somehow we get a flashback from Chara who is somehow knocked unconscious by Frisk also being knocked unconscious. I used the word somehow three times. That's not good storytelling. A simpler answer, at least in my view, is that We Are Chara. When Frisk is knocked unconscious, we, being ostensibly linked to them as a Spirit/Ghost/Reincarnation/Possessing Dead Frisk/Demon/Insert fan-theory here/SOUL Fragment, have our only connection to the world temporarily disabled, rendering us effectively unconscious and prompting a flashback. Nothing weird with multiple entities or memory sharing. The waterfall flashback is simply our memory. Simple. The simplest answers are usually the correct ones. <details> <summary>DO NOT RESEARCH</summary> The third sequence is a connection/extension of the first two, displayed when we SAVE “Someone Else” during the true pacifist battle with Asriel. To refresh everyone, here is the direct quotes, taken from the Wiki: [SAVE]: Someone Else Strangely, as your friends remembered you... Something else began resonating within the SOUL, stronger and stronger. It seems that there's still one last person that needs to be saved. But who...? ... Suddenly, you realize. You reach out and call their name. Asriel: “Huh? What are you doing...?” s It's at this point that the sequence plays. There's no narration, but we see the sequence of interactions between Asriel and Chara. There are no panels (except for the first) that don't contain the both of them. Following this, we get: You feel your friends' SOULs resonating within ASRIEL! [This is the generic flavour text for saving all 6, before “Someone Else”, and appears at the asterisk above as well] [SAVE]: Asriel Dreemurr Asriel: > “Wh... what did you do...?” “What's this feeling…? What's happening to me?” Etc. etc. let me win… During my first and consecutive playthroughs of UNDERTALE, I came to the conclusion that Asriel's soul still “Had Some Chara In It.” Saving “Someone Else” was saving Chara, and then you save Asriel Dreemurr after the story sequence. This interpretation no longer feels particularly potent to me, but in the spirit of completeness I'll address it alongside the more reasonable “You just save Asriel.” Assuming for a moment though, that we do “Save Chara”, it's not unreasonable to assume that some of Chara's ‘essence' (or whatever) was merged with Asriel's and by SAVING them, we're SAVING the part of them that's inside Asriel. But I don't like that theory. Let's talk about SAVING Asriel for a moment. What is the motivation for doing that? Why would we, in universe, wish to SAVE him, something that the narration explicitly prompts us to do? He tried and probably succeeded to kill us, at least once, he wants to reset the entire timeline, he wants to erase all our friendships, all our progress. So, why? Well, it's simple. He's our brother. And we know better than anyone that he's worth saving. And at the very least, there's something about Frisk (who appears to have absolutely no personality) that reminds him of Chara, of us. This is, by his own admission, weird; Asriel: “Frisk… You really ARE different from Chara. In fact, though you have similar, uh, fashion choices… I don't know why I ever acted as if you were the same person.” To summarise. The player SAVING Asriel Dreemurr works best if they are Chara, it becomes Chara encouraging Frisk to SAVE Asriel too. Asriel recognises Frisk as Chara throughout the True Pacifist battle (And Beyond), despite his own admission that this is basically unfounded. Something is causing this recognition. In Alphys' true lab, there lies a dusty TV and a stack of VHSes. On them, lie some of the last words Chara had ever heard from their father. [Asgore] Chara! You have to stay determined! You can't give up... You are the future of humans and monsters... These tapes are not the first time they are heard. Sleeping in Toriel's guest bed, we dream about them. Suffering a fatal injury, they echo in our ears. Watching the tape is yet another reveal. It's the chilling truth that in fact, the words we (if we die a lot) are so familiar with, are in fact the words we hear on our deathbed. Storytelling-wise, this reveal; like all the others, fails if we do not play as Chara. Aside from Asriel's dialogue, Chara's genocide Narration, and the coffin in Asgore's basement, this is the only time we hear Chara's name. That and, this following exchange. [Flowey] Hi. … Monsters have returned to the surface Peace and prosperity will rule across the land. … Well. There is one last thing. … One being with the power to erase EVERYTHING… … I'm talking about YOU. … So, please. Just let them go. Let Frisk be happy. … Well, that's all. See you later… Chara. This, I think, is pretty explicitly definitive. Flowey comes to you. To us. Tells us to take a deep breath and leave the happy ending intact, then bids us farewell by our own name. Regardless of anything else, this definitively proves Chara is the entity with the power to reset everything by the end of True Pacifist (Which is a power we have). Flowey positively identifies us as “Chara”, despite his mistake we discussed in 3C. He's not talking to Frisk, because he refers to them in the third person. He is talking to Us. Chara. I don't want to discuss Flowey's use of “Chara” in Genocide all that much, because the counter-argument is blindingly simple. “By the time Flowey first says that name, Chara has overtaken Frisk by feeding on the power we create for them.” Of course, under PlayerChara, Flowey's lines still make sense, and arguably more. Implications At this point, I believe the evidence is sufficient to support the theory. With this in mind, I want to discuss the implications this has on the narrative and meta-narrative. This is where all those funny glossary terms come into play. The pacifist route in UNDERTALE, as discussed above, is textually quite simple when accepting PlayerChara. The meta-text is also relatively simple. Meta textually, the Pacifist Route is a dissection of the suspension of disbelief, examining how we emotionally place ourselves within fictional worlds, and are often-times torn away from those worlds as the game comes to an end, left wanting the true emotional connection, wanting a happy ending that cannot be good enough for us because we're real and it's not. The reflection of this meta narrative in the textual narrative, quite naturally flows. We, Chara, want a happy ending. But we can't have it, it's not our happy ending. We're gone. We've been gone a long time. Frisk's happy ending can't be good enough for us, because we won't be around to see it. So, we're left with a choice. To let Frisk live happily? To accept an ending that might leave us emotionally wanting, yet preserves our emotional journey? To reset? To refuse an ending and satiate our emotional emptiness, yet destroy that very emotional journey we took in the process? The choice is the same. There is practically no separation between the diegetic and the meta. “Can a happy ending be good enough for you?” This question applies to us, as the real world player running UNDERTALE.exe on our computer, and us, Chara, the long deceased human who can do little but watch as Frisk lives the life they wish they still had, or can destroy everything for a hollow mimicry of that very life. This message, however, breaks down under one specific circumstance. Where we force a Third Entity into the mix. This one decision fractures the cohesion and creates a meta-textually dissonant mess. Now, all of a sudden, “Can a happy ending be good enough for you?” no longer runs parallel through both narratives. There is no reason for the Player Entity to wish to remain, the happy ending should automatically be good enough because it's the happy ending. Meanwhile, Chara, despite being an inextricable representation of “A happy ending I can't achieve,” gets absolutely nothing to do with this meta-narrative because they're just… not you. “we are mario in Super Mario 64, but when he says "Thank you so much for playing my game!" that doesn't mean we aren't still playing as mario” - PopitTart This is where things get weird. See, in the Genocide route.. Well, we see Chara. On Screen. Talk to us. Now, it can easily be argued that this completely shatters the theory, but I would disagree. I'm going to endeavour to present a textual explanation (or two) for this. But first, I want to dissect the meta-text here. Now, I'm sure the idea that “The Genocide Route's Meta-Narratve is Fading Emotional Investment and the way emotional connection with video games can lead to the very sabotage of that emotional connection” is not revolutionary. However, what's conspicuously absent from all of the third entity theorising is the way that this meta-text is mirrored in the textual narrative. Once satisfied with a game, having extracted all lines of dialogue and stat boosts, once reaching all endings, a user will close the game down. And at some point, perhaps to make room for a new game or perhaps on a new device, will leave the game uninstalled, either deliberately, or simply as a consequence of time. Textually, what happens in the Genocide ending? Now we have reached the absolute. There is nothing left for us here. Let us erase this pointless world, and move on to the next. The world is destroyed. So much is left unanswered here. Who is Chara talking to? Where did Frisk go? How do they have this much power? Why would they want this? If we ‘corrupted' them, what the hell does that even mean? What is Chara? For now, let's talk about who Chara is talking to. The simplest answer is “Perspective switch.” Suddenly, we're not Chara anymore, now we are Frisk. This meets all the dialogue options and even vaguely mirrors the meta-text. It also manages to avoid bringing a third entity along and so is automatically better! But, I find myself still not fully enjoying this idea. Remember what I said about Occam's Razor? I think there's another option. One that doesn't involve three entities, or even two entities, just Chara. One that mirrors the meta-text to a degree only Toby Fox could pull off. It's a weird one, and I don't fault you if you don't get it on your first read, but bear with me here, because things are about to get A little Fucking Abstract Let's discard any and all pre-concieved notions of anything and hold one singular truth above all else. “Chara Is The Player.” What does this mean for this cutscene? Well… it means the player is talking to… THe player? It also neatly answers the question of motive, so let's throw that out the skeleton-shaped hole in the window for now. If the player is talking to the player, this frames Chara's words in a whole new light. Every time a number increases, that feeling… That's me. “Chara.” This line becomes explicitly literal. The Chara on-screen is literally the player's feeling of satisfaction watching stat increases. But this is all meta-textual, right? What does this mean for the textual narrative? Here's the thing. It can't mean anything, yet means everything. There is no way to reconcile the fact that a Textually Real character is directly talking about what the player feels when playing a game to completion. The barrier between Meta and Textual no longer exists. It can't. Not here. And with this revelation, everything begins to make sense. Your power awakened me from death. Our power. Our desire to complete UNDERTALE awakens Chara from death. They become startlingly real. We imbue this fictional character with the real world desire to consume fiction, destroying enemies and worlds as we go, increasing our power and our stats. Video Game Accomplishments. And UNDERTALE has just finished being consumed. My “human soul”... My “determination”... They were not mine, but YOURS. Chara, the textual player, acknowledges the meta-textual player's control over the game world. A control that we surrendered. By engaging in UNDERTALE in a fully immersed way, we have fed the Diegetic character that is our player character, Chara. This has continued until we haul ourself out of the Internal Mode and into the External Mode, revoking our immersion to make the consumption of content easier, to distance ourself from the killing. Raising our LV. The more we distance ourselves, the less real UNDERTALE's world appears to us. Once it's done, we're ready to erase this pointless world and move onto the next. There's just one problem. UNDERTALE knows about us. It knows we exist and it will abuse that to convey meaning. By revoking our immersion in UNDERTALE, we end up shattering the barrier between Meta and Textual, and this occurs because revoking our immersion is a diegetic decision. Without this barrier, WE, as a character, gain control of UNDERTALE and use this external mode control to Erase the world. To uninstall. This code doesn't actually work, of course. That was pretty obvious by the fact that it didn't delete your game. But still, this exists in the code that makes the game window shake when Chara attacks it. This is, quite literally, intent for Chara to delete UNDERTALE. If you didn't think Chara was capable of uninstalling your game before, you should now. Who is chara talking to? Us. How do hey have this much power? We gave it to them. We Are them, and we deleted UNDERTALE when we were done with it. Why would they want this? We wanted to move onto a new game. What is Chara? Us. ( I'll come back to this.) But wait! What about soulless pacifist? Well, at that point, you've surrendered Frisk's SOUL to Chara, as in, you the real player has revoked your emotional attachment to UNDERTALE and accepted that Chara can have control over the game. You've revoked your immersion AS Chara, you no longer see yourself a Chara and as such Chara becomes their own being. You've surrendered, basically. But they let you play through it. Because why not. You might get attached again, but that's fine. All that means is that the happy ending that was once Frisk's, that you, the player, and you, Chara, both once lamented not being able to live, has now been surrendered to Chara. A warped, completionist, Chara. You don't get your happy ending. But Chara does. You don't even get the solace of knowing someone gets their happy ending. Because Chara gets it. Frankly, outside of being “The Player”, I don't think the exact nature of “Chara” is that crucial. My personal thought is that they're a SOUL fragment, absorbed by Frisk when they fell on Chara's grave (Frisk could absorb a human SOUL fragment because said fragment was part monster SOUL). This fragment gives Frisk the final edge of determination needed to SAVE. But, ultimately, that's little more than a fanfiction. And frankly, I think that's okay. Not everything needs to be impenetrable, as long as there's enough there to build a stable foundation. I'd also like to address the nature of SAVING quickly, specifically the normal version, not the Asriel fight version. People have asked “Why do we save if it's Frisk's SOUL.” There could be many reasons. Frisk might just defer control to us. Because we're pushing Frisk over that Determination limit, we might be privileged to have that control. </details> ## Changelog not player visible |
||
|
|
af2b795340 |
Updates Coderbus and Adminbus Ruin (#73675)
## About The Pull Request Updates the people inside the coderbus and adminbus. Removes the meatballs, because... well, they used to be called something that actually accurately describes the admin team but now they're just meatballs. The banhammer now takes the driver seat of adminbus, with a sacrificial altar in the back. RIP to all the good players lost when they became admin ## Why It's Good For The Game It was really out of date lol ## Changelog 🆑 add: Updated the bus ruin /🆑 |
||
|
|
a1ada2c9ef |
Refactor, improve, and rename canUseTopic to be can_perform_action (#73434)
This builds on what #69790 did and improved the code even further. Notable things: - `Topic()` is a deprecated proc in our codebase (replaced with Javascript tgui) so it makes sense to rename `canUseTopic` to `can_perform_action` which is more straightforward in what it does. - Positional and named arguments have been converted into a easier to use `action_bitflag` - The bitflags adds some new checks you can use like: `NEED_GRAVITY | NEED_LITERACY | NEED_LIGHT` when you want to perform an action. - Redundant, duplicate, or dead code has been removed. - Fixes several runtimes where `canUseTopic` was being called without a proper target (IV drips, gibber, food processor) - Better documentation for the proc and bitflags with examples |
||
|
|
ad929ac3a9 |
Lazily initialize decks of cards instead of initializing thousands of cards at once (.09s drop in init times) (#70999)
We're getting into the less than 0.1s realm of low hanging fruits now. Decks of cards were initializing thousands of cards at once, not unlike [paper bins](https://github.com/tgstation/tgstation/pull/69586) or [circuit components](https://github.com/tgstation/tgstation/pull/69664). Cards are more complicated than paper bins since we can't just keep a count, and managing individual card object lifetimes is significantly more complicated than incrementing/decrementing a number. Thus, the logic here is slightly different. Decks now have an `initial_cards` variable which can take card names (which is most implementers), and for special decks, can specify an interface that is basically a lazy function for creating a card atom. When anything needs any real card atom, we just generate them all. The runtime cost of this is extremely small, and affects neither dev cycles (the motivation for the change) or ongoing rounds. |
||
|
|
91f02f2a6b |
canUseTopic now uses TRUE/FALSE instead of defines that just say TRUE (#69790)
* canUseTopic now uses TRUE/FALSE instead of defines that just say TRUE The most idiotic thing I've seen is canUseTopic's defines, they literally just define TRUE, you can use it however you want, it doesn't matter, it just means TRUE. You can mix and match the args and it will set that arg to true, despite the name. It's so idiotic I decided to remove it, so now I can reclaim a little bit of my sanity. |
||
|
|
d91390a447 |
[IDB IGNORE] The Great Sweep: Moving dmis into subfolders (part 1) (#69416)
Moves singulo and supermatter dmis into obj/engine, renamed from obj/tesla_engine Moves Halloween, Christmas, and misc holiday items to obj/holiday Moves lollipops to obj/food Moves crates, closets, and storage to obj/storage Moves assemblies to obj/assemblies Renames decals.dmi to signs.dmi ...because they're signs and not decals Moves statues, cutouts, instruments, art supplies, and crayons to obj/art Moves balloons, plushes, toys, cards, dice, the hourglass, and TCG to obj/toys Moves guns, swords, shields to obj/weapons |
||
|
|
22aa3566ab |
Card Shark DLC - GIMMIE MY MONEY OR I BREAK YOUR KNEECAPS (#64200)
Co-authored-by: Seth Scherer <supernovaa41@gmx.com> Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> |