mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 07:08:00 +01:00
observer_fix_tm
454
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
1c0ac21cb4 |
Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead
(cherry picked from commit
|
||
|
|
e0bdfc3f5f |
Dynamic Rework (#91290)
Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic
from the ground-up
- Dynamic configuration is now vastly streamlined, making it far far far
easier to understand and edit
- Threat is gone entirely; round chaos is now determined by dynamic
tiers
- There's 5 dynamic tiers, 0 to 4.
- 0 is a pure greenshift.
- Tiers are just picked via weight - "16% chance of getting a high chaos
round".
- Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be
selected".
- Tier determines how much of every ruleset is picked. "Tier 4 (High
Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3
latejoins".
- The number of rulesets picked depends on how many people are in the
server - this is also configurable[2]. As an example, a tier that
demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and
will not spawn 2 rulesets if population <= 25.
- Tiers also determine time before light, heavy, and latejoin rulesets
are picked, as well as the cooldown range between spawns. More chaotic
tiers may send midrounds sooner or wait less time between sending them.
- On the ruleset side of things, "requirements", "scaling", and
"enemies" is gone.
- You can configure a ruleset's min pop and weight flat, or per tier.
- For example a ruleset like Obsession is weighted higher for tiers 1-2
and lower for tiers 3-4.
- Rather than scaling up, roundstart rulesets can just be selected
multiple times.
- Rulesets also have `min_antag_cap` and `max_antag_cap`.
`min_antag_cap` determines how many candidates are needed for it to run,
and `max_antag_cap` determines how many candidates are selected.
- Rulesets attempt to run every 2.5 minutes. [3]
- Light rulesets will ALWAYS be picked before heavy rulesets. [4]
- Light injection chance is no longer 100%, heavy injection chance
formula has been simplified.
- Chance simply scales based on number of dead players / total number
off players, with a flag 50% chance if no antags exist. [5]
[1] This does not guarantee you will actually GET 3-4 roundstart
rulesets. If a roundstart ruleset is picked, and it ends up being unable
to execute (such as "not enough candidates", that slot is effectively a
wash.) This might be revisited.
[2] Currently, this is a hard limit - below X pop, you WILL get a
quarter or a half of the rulesets. This might be revisited to just be
weighted - you are just MORE LIKELY to get a quarter or a half.
[3] Little worried about accidentally frontloading everything so we'll
see about this
[4] This may be revisited but in most contexts it seems sensible.
[5] This may also be revisited, I'm not 100% sure what the best / most
simple way to tackle midround chances is.
Other implementation details
- The process of making rulesets has been streamlined as well. Many
rulesets only amount to a definition and `assign_role`.
- Dynamic.json -> Dynamic.toml
- Dynamic event hijacked was ripped out entirely.
- Most midround antag random events are now dynamic rulesets. Fugitives,
Morphs, Slaughter Demons, etc.
- The 1 weight slaughter demon event is gone. RIP in peace.
- There is now a hidden midround event that simply adds +1 latejoin, +1
light, or +1 heavy ruleset.
- `mind.special_role` is dead. Minds have a lazylist of special roles
now but it's essentially only used for traitor panel.
- Revs refactored almost entirely. Revs can now exist without a dynamic
ruleset.
- Cult refactored a tiny bit.
- Antag datums cleaned up.
- Pre round setup is less centralized on Dynamic.
- Admins have a whole panel for interfacing with dynamic. It's pretty
slapdash I'm sure someone could make a nicer looking one.


- Maybe some other things.
See readme for more info.
Will you see a massive change in how rounds play out? My hunch says
rounds will spawn less rulesets on average, but it's ultimately to how
it's configured
🆑 Melbert
refactor: Dynamic rewritten entirely, report any strange rounds
config: Dynamic config reworked, it's now a TOML file
refactor: Refactored antag roles somewhat, report any oddities
refactor: Refactored Revolution entirely, report any oddities
del: Deleted most midround events that spawn antags - they use dynamic
rulesets now
add: Dynamic rulesets can now be false alarms
add: Adds a random event that gives dynamic the ability to run another
ruleset later
admin: Adds a panel for messing around with dynamic
admin: Adds a panel for chance for every dynamic ruleset to be selected
admin: You can spawn revs without using dynamic now
fix: Nuke team leaders get their fun title back
/🆑
(cherry picked from commit
|
||
|
|
0f01987115 |
Refactors ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK out of inventory code (#90869)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request So yesterday I've spotted that we had wrong SLOTS_AMT value set, and went a bit down a rabbit hole and found how abhorrent our ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK usage is. They're not real inventory slots, but just "hints" at items being located in backpacks or belts, or instructions to put an item into a belt/backpack. This PR rewrites all usages of them as "hints", and adds an equip_to_storage proc used to equip an item into a storage positioned in a certain slot, so ``equip_to_slot_if_possible(item, ITEM_SLOT_BACKPACK)`` is now ``equip_to_storage(item, ITEM_SLOT_BACK)`` ## Why It's Good For The Game Its really stupid and we shouldn't have those as slot flags, ITEM_SLOT_HANDS at least makes sense but those two are just absurd. Should make equipping things into non-backpack storage a bit easier too, in case we end up going through with the idea of suit/uniform pockets being a major part of player inventory. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and its effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 refactor: Refactored how backpack and belt contents are handled in mob inventory code, report any issues with lingering item effects or inability to equip things into them! /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> |
||
|
|
b6b8306fda | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a | ||
|
|
778ed9f1ab |
The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request This PR kills the abstract internal and external typepaths for organs, now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds. This PR also fixes fox ears (from #87162, no tail is added) and mushpeople's caps (they should be red, the screenshot is a tad outdated). And yes, you can now use a hair dye spray to recolor body parts like most tails, podpeople hair, mushpeople caps and cat ears. The process can be reversed by using the spray again. ## Why It's Good For The Game Time-Green put some effort during the last few months to untie functions and mechanics from external/internal organ pathing. Now, all that this pathing is good for are a few typechecks, easily replaceable with bitflags. Also podpeople and mushpeople need a way to recolor their "hair". This kind of applies to fish tails from the fish infusion, which colors can't be selected right now. The rest is just there if you ever want to recolor your lizard tail for some reason. Proof of testing btw (screenshot taken before mushpeople cap fix, right side has dyed body parts, moth can't be dyed, they're already fabolous):  ## Changelog 🆑 code: Removed internal/external pathing from organs in favor of a bit flag. Hopefully this shouldn't break anything about organs. fix: Fixed invisible fox ears. fix: Fixed mushpeople caps not being colored red by default. add: You can now dye most tails, podpeople hair, mushpeople caps etc. with a hair dye spray. /🆑 |
||
|
|
e59d8ba64b | Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b | ||
|
|
69176298ed |
Spelling Fixes (#86056)
## About The Pull Request Fixes several errors to spelling, grammar, and punctuation. ## Why It's Good For The Game Improves readability and user experience. ## Changelog 🆑 spellcheck: fixed a few typos /🆑 |
||
|
|
8b12def86c |
[MIRROR] Datumizes pod types (#28986)
* Datumizes pod types (#85033) ## About The Pull Request Changes supply pods to use datums instead of a massive nested list to store data and index defines as styles. Complete feature parity. ## Why It's Good For The Game this is nightmare fuel to work with  and this is a sin against nature and god   ends up as  which is ??? Using a nested list to store pod data is a very bad idea, it has horrible formatting, is unreadable without having index defines open in a second tab and is not extendable. And as you can see above, if someone added another pod type before 14th everything would break because other pod type lists **__only have 8 elements__** instead of 10 like the seethrough one does. ## Changelog 🆑 refactor: Pod code now uses datums instead of being a huge nested list /🆑 * Datumizes pod types * [MIRROR] Datumizes pod types [MDB IGNORE] (#3917) * Datumizes pod types (#85033) ## About The Pull Request Changes supply pods to use datums instead of a massive nested list to store data and index defines as styles. Complete feature parity. ## Why It's Good For The Game this is nightmare fuel to work with  and this is a sin against nature and god   ends up as  which is ??? Using a nested list to store pod data is a very bad idea, it has horrible formatting, is unreadable without having index defines open in a second tab and is not extendable. And as you can see above, if someone added another pod type before 14th everything would break because other pod type lists **__only have 8 elements__** instead of 10 like the seethrough one does. ## Changelog 🆑 refactor: Pod code now uses datums instead of being a huge nested list /🆑 * Datumizes pod types * modular updates --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: NovaBot13 <novasector13@gmail.com> Co-authored-by: Fluffles <piecopresident@gmail.com> --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com> Co-authored-by: NovaBot13 <novasector13@gmail.com> Co-authored-by: Fluffles <piecopresident@gmail.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> |
||
|
|
2c0f5d181a |
Datumizes pod types (#85033)
## About The Pull Request Changes supply pods to use datums instead of a massive nested list to store data and index defines as styles. Complete feature parity. ## Why It's Good For The Game this is nightmare fuel to work with  and this is a sin against nature and god   ends up as  which is ??? Using a nested list to store pod data is a very bad idea, it has horrible formatting, is unreadable without having index defines open in a second tab and is not extendable. And as you can see above, if someone added another pod type before 14th everything would break because other pod type lists **__only have 8 elements__** instead of 10 like the seethrough one does. ## Changelog 🆑 refactor: Pod code now uses datums instead of being a huge nested list /🆑 |
||
|
|
58ab268888 |
[MIRROR] Adds Character Loadout Tab to preferences (with just a small handful of items to start) (#28126)
* Adds Character Loadout Tab to preferences (with just a small handful of items to start) * step one rip out all the old nasties * fixes, current bugs: donator lock, ckey lock, one item in case * opps * sanity checks, fixed, donator implementation, ckey locking. fixes. * wew * final fixes * Update loadout_categories.dm * Update loadout_items.dm * Update loadout_items.dm * Update declarations.dm --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> |
||
|
|
d244c86ce6 |
Adds Character Loadout Tab to preferences (with just a small handful of items to start) (#83521)
## About The Pull Request Adds a Character Loadout Tab to the preference menu This tab lets you pick items to start the round with  This also has some additional mechanics, such as being able to recolor colorable items, rename certain items (such as plushies), set item skins (such as the pride pin)  ## Why It's Good For The Game This has been headcoder sanctioned for some time, just no one did it. So here we are. Allows players to add some additional customization to their characters. Keeps us from cluttering the quirks list with quirks that do nothing but grants items. ## Changelog 🆑 Melbert add: Character Loadouts del: Pride Pin quirk (it's in the Loadout menu now) /🆑 |
||
|
+8 |
7aa6664021 |
Mirror (#27453)
* Fix Conflicts * Change COGBAR_ANIMATION_TIME to seconds and not deciseconds (#82530) Most people should not be using this define * New Battle Arcade (#81810) Remakes Battle Arcade from just about the ground up, with exceptions taken for emagged stuff since I didn't really want to touch its behavior. The Battle Arcade now has stages that players can go through, unlocking a stage by beating 2 enemies and the boss of the previous one, but this must all be done in a row. You can choose to take a break between each battle and there's a good chance you'll sleep just fine but there's also a chance it can go wrong either through an ambush or robbery. The Inn lets you restore everything for 15 gold and you can buy a sword and armor, each level you unlock is a new sword and armor pair you can buy that's better than the last, it's 30 gold each but scales up as you progress through levels. They are really worth getting so it's best to try to not lose your money early in. The battle system is nearly the same as how it was before but I removed the poor combo system that plagued the old arcade as one big knowledge lock, now it's more just turn based. The game is built on permadeath so dying means you restart from the beginning, but if you are going to lose you can try to escape instead which costs you half of your gold. Getting to higher levels increases the difficulty of enemies but also increases the gaming exp rewards which could make this a better way to get exp if you can get good at it. Gaming EXP is used to increase chances of counterattacking but doesn't give any extra health to the player. I also removed the exploit of being able to screwdriver arcade cabinets because people would do that if they thought they were on the verge of losing to bypass the effects of loss. I instead replaced it with a new interaction that the Curator's display case key can be used to reset arcade cabinets (there's several keys on the chain so it made sense to me), which I added solely because I thought Curators would be the type of person to have run an actual arcade. This is some gameplay https://github.com/tgstation/tgstation/assets/53777086/499083f5-75cc-43b5-b457-017a012beede As a misc sidenote, I also split up the arcade file just like how Orion Trail was before, just for neat code organization. The Inn keeper is straight up just a photo of my localhost dude, he's not a player reference or anything it's not my actual character. I also have no idea how well balanced this is cause I suck at it lol. Battle Arcade is one of 3 last machines in my hackmd here to turn into TGUI https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view I've always thought the current version of battle arcade is quite lame and lacks any progression, like Orion Trail I thought that since I was moving this to TGUI, it would also be a perfect opportunity to revamp it and try to improve on where it failed before, especially since the alternative (NTOS Arcade) is also lame as hell and is even lamer than HTML battle arcade (spam mana, then spam health, then just spam attack, rinse and repeat). This will hopefully be more entertaining and give players sense that they are getting through a series of tasks rather than doing one same one again and again. 🆑 JohnFulpWillard, Zeek the Rat add: Battle Arcade has been completely overhauled in a new progression system, this time using TGUI. add: The Curator's keys can now reset arcade cabinets. balance: You now need to be literate to play arcade games, except for Mediborg's Amputation Adventure. fix: You can no longer screwdriver emagged arcade consoles. Accept your fate. fix: Silicons can no longer play Mediborg's Amputation Adventure. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Change setting item weight class to a setter to patch some weight class related shenanigans (#82494) ## About The Pull Request Fixes #81052 Fixes #58008 Setting weight class of items is now done via `update_weight_class`. I updated as many occurrences of manually setting `w_class` as I could find but I may have missed some. Let me know if you know of any I missed. This is done to allow datums to react to an item having its weight class changed. Humans and atom storage are two such datums which now react to having an item in its contents change weight class, to allow it to expel items that grow to a weight class beyond what is normally allowed. ## Changelog 🆑 Melbert fix: You can't fit items which are normally too large for a storage by fitting it in the storage when it is small, then growing it to a larger size. /🆑 * Material datum color update, plus touching up some material items (knight armor, tiles) (#82500) ## About The Pull Request Tries to bring the material datum colors in closer approximation to the stacks they're attached too. I literally used the colors on the stacks. some might need to be lighter or darker, but for the most part they'll look...closer to their actual material hues.  I've also tweaked the sprites of both the tile object and the actual material tile turf to give it the right shading.  In addition to the tiles, I've also updated the knight armor and helmet to look closer to the much higher quality plate armor already in the game. ## Why It's Good For The Game It bothered me that the material datum coloring was inconsistent with the actual colors used for the material stacks. When they were updated, and even before they were updated, material datum stuff just never looked _right_. I wanted to change that so that it looks just right. I did not like the old material knight armor whatsoever. It was a dithered mess, and seemed to already use parts of the standard plate armor but with all the actual shading removed or replaced with the wrong colors. This fixes that so that the armor is actually readable for what it is. ## Changelog 🆑 image: Updates the colors of various material datum to bring them closer in-line with their actual material stacks image: Improves the sprites for the material knight armor and helmet. /🆑 * 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. /🆑 * Fix table top deconstruction (#82508) ## About The Pull Request Edited: updated changelog, read comments for changes in implementation details So previously, tables would let you use a wrench to fully deconstruct them, or a screwdriver to take off only their top. This, however, broke in two different ways in #82280, when their deconstruction logic got changed. First off, deconstructed tables would only drop the materials for their top and not their frame. For this, the primary culprit seems to be on line 307: https://github.com/tgstation/tgstation/blob/c34d56a45b0461f5e0fad3cc75e81580c3357119/code/game/objects/structures/tables_racks.dm#L300-L307 Where `new framestack(target_turf, framestackamount)` accidentally got an extra indent, and ended up in the less common half of the if-else chain. Just moving this outside of the if-else chain again fixes it. Secondly, tables had their own special deconstruction logic, which got 'standardized'. Issue. This was special to accommodate for having two different deconstruction logics: full or top only. With `deconstruct(...)` no longer being overridable, I feel it's awkward to attempt to proxy that information to the new `atom_deconstruct(...)` So we introduce a new method, `deconstruct_top`, for the screwdriver to use, which handles deconstructing only the top. ```dm /obj/structure/table/proc/deconstruct_top() var/obj/table_frame = new frame(loc) if(obj_flags & NO_DECONSTRUCTION) table_frame.obj_flags |= NO_DECONSTRUCTION else // Mimic deconstruction logic, only drop our materials without NO_DECONSTRUCTION var/turf/target_turf = get_turf(src) drop_top_mats(target_turf) qdel(src) ``` Mimicking the `NO_DECONSTRUCTION` logic of normal deconstruction, and copying over the flag onto its frames if need be. This fixes screwdriver deconstruction. ## Why It's Good For The Game Fixes #82503. We can now deconstruct the table top separately again, AND get the right materials back too. ## Changelog 🆑 00-Steven, SyncIt21 fix: Wrench table deconstruction gives the right materials again. fix: Screwdriver table deconstruction only deconstructs the top again. /🆑 * [NO GBP] Reagent grinders display reagents on examination (#82535) ## About The Pull Request - Fixes #82531 Somehow omitted this during the general maintenance thing ## Changelog 🆑 fix: Reagent grinders display reagents of its beaker on examination /🆑 * Monkeys now use height offset (and monkey tail works) (#81598) This PR adds the ability for monkeys to wear any jumpsuit in the game, and adds support for them to wear things like coats, gloves, and shoes (though this cannot be obtained in-game and is solely achieved through admins, which I also improved a bit upon by adding a defined bitfield for no equip flags). This reverts a lot of changes from https://github.com/tgstation/tgstation/pull/73325 - We no longer check height from limbs and such to bring sprites down, instead monkeys now work more similarly to humans, so the entire PR was made irrelevant, and I didn't really want to leave around dead code for the sake of having a human with longer legs. I've now also added support for Dwarfism, which makes monkeys look even smaller. Very minor change but at least now the mutation doesn't feel like it does literally nothing to monkeys (since they can already walk over tables). Here's a few examples of how it can appear in game (purely for demonstration, as it is currently intentionally made impossible to obtain in-game, though if someone wants to change that post-this PR now that support is added, feel free): Tails have been broken for a while now, the only reason you see them in-game is because they are baked into the monkey sprites. This fixes that, which means humans can now get monkey tails implanted into them (hell yeah) and monkeys can have their tails removed (also hell yeah) * Gets [weird] with (spies) by adding protect and deuteragonist-flavored objectives. (#82447) ## About The Pull Request What are their goals? Why are they doing this? gets weird with Spy objectives - namely by adding a lot more ways spies might be asked to affect various targets around the station. the first of these is by several flavors of Protecting targets (these do NOT print a success at roundend in keeping with Spy design:) - Protect (get a humanoid target off alive) - Protect Nonhuman (get an entity off alive) - Jailbreak (make sure a humanoid target escapes free) - Detain (make sure a humanoid target gets taken out arrested) the second of this is by a new escape condition: - Exile (get off-station or off the Z-level by the end of the shift - sometimes it's not just pods, you need to fuck off to space to win.) the third is through a massive increase in the number of possible: - objective templates - departments to target (Command + Service added) - specific locations to target - general classes of objects to target (medicines, floor tiles, critical infrastructure, etc.) - efforts to target (such as meals, mechs, public supplies) - ways to leave (you can be asked to abscond from the scene of your crimes?) ## Why It's Good For The Game More goofy and weird prompts to do more interesting things with Spies. One thing I think we're sorely missing in our lineup is antagonists that can act a bit more as deuteragonists - very possibly helping the crew under certain conditions and frustrating the Hell out of them in others. Since there's no way to check their objectives, and they get their gear/progression through stealing shit, they're still very much an antagonist and exist under the suspicion of doing bad... but, just going by their objectives, introducing more varied (and in some cases even benign) goals for them creates suggestions pointing to a lot more varied and interesting stories if people choose to run with it. * Adds anosmia quirk (#82206) ## About The Pull Request Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss of the ability to detect one or more smells. I tried to find all smells action and (most likely) update all of them, unfortunately I can't change descriptions for this quirk. ## Why It's Good For The Game Some characters will be able to not feel smells That affect: * Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them * Bakery and cooking * Changeling ability to feel other changelings by smell * Some unimportant spans * Explosions Part I - Directional Explosions (#82429) ## About The Pull Request Adds the ability for explosions to be directional. This is achieved by adding an angle check to `prepare_explosion_turfs()` to drop any turfs outside the cone of the explosion. If the arc covers a full 360 degrees, as is the default, it will accept all the turfs without performing the angle check. Uses this functionality to rework both rocket launcher backblast and X4 explosions. Rocket launcher backblast has been changed from a shotgun of indendiary bullets to a directional explosion of similar length. X4 now uses a directional explosion to "ensure user safety". Apparently the old method of moving the explosion one tile away didn't even work, as it blew up `target` before trying to check its density for the directional behaviour. https://youtu.be/Mzdt7d7Le2Y ## Why It's Good For The Game Directional explosions - Useful functionality for a range of potential use cases, which can be implemented with minimal extra processing cost (Worst case scenario being very large directional explosions) Backblast - Looks way cooler than a bunch of projectiles, and should be significantly more functional in high-lag situations where projectile code tends to get fucky X4 - More predictable for players wanting to use it as a breaching charge, you can actually stand near the charge and not have to worry about being hoist upon your own petard. ## Changelog 🆑 add: Added support for directional explosions. add: Rocket launcher backblast is now 271% more explosive, check your six for friendlies! add: X4 charges now explode in a cone away from the user when placed on a sufficiently solid object. fix: X4 charges will now behave correctly when placed on dense atoms (note: don't try to read a variable from an atom you just blew up) /🆑 * Add balloon alerts to plunging (#82559) ## About The Pull Request Makes all plunging actions (pretty much anything using `plunger_act`) have a visible balloon alert. ## Why It's Good For The Game Makes sense that others would easily notice you plunging the shit out of something. Also, more people might finally learn that you can plunge the vent clogs instead of welding them. ## Changelog 🆑 qol: Added balloon alerts whenever you start plunging something (i.e ) /🆑 * Fixes spurious runtime on Icemoon caused by turf calling unimplemented LateInitialize() (#82572) ## About The Pull Request As of https://github.com/tgstation/tgstation/pull/82540 this runtime was happening,  `/turf/open/openspace/icemoon/` can be changed to `/turf/open/misc/asteroid/snow/icemoon/do_not_chasm` before `Initialize()` returns, which resulted in it `INITIALIZE_HINT_LATELOAD` getting returned on a turf that does not have an implementation of that proc. This should fix that. ## Why It's Good For The Game Fixes CI error * Blueprints tgui (#82565) Blueprints now use a TGUI panel instead of the old HTML one. Also did general code improvement and maintaining to blueprints in general and also destroyed the ``areaeditor`` level, repathing it to just 'blueprints'. Also adds a sound when you look at structural data cause why not Video demonstration: https://github.com/tgstation/tgstation/assets/53777086/861773fd-3d57-472d-bc94-d67b0d4f1dbd The 4 blueprint types:  Another HTML menu dead underground. This is more responsive and doesn't require constant updating to see which area you're in, feels less OOC (instead of saying "the blueprints say", just say it, you ARE the blueprints). Like, come on  Look at all this wasted space  🆑 refactor: Blueprints now use TGUI. qol: Blueprints can now be used while lying down. /🆑 * General maintenance for chem master (#82002) **1. Qol** - Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions - Analyzing reagents is now a client side feature & not a back end mode, meaning one person can see details of a reagent while the other can print stuff and do other operations so it's a non blocking operation. This also means 2 players can see information of 2 different reagents in their own screens, With that the overlay for analysis mode has been removed - You cannot do any tool acts on machines while printing. Balloon alerts will be displayed warning you of that. - The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. It can be enabled/disabled via a CheckBox **2. Code Improvements** - Removed defines like `TARGET_BEAKER` , `TARGET_BEAKER` etc. ther functionality is implemented as params in the `transfer_reagent()` proc directly - Removed all variables relating to analyzing reagents like `reagent_analysis_mode`, `has_container_suggestion` etc. all memory savings - `printable_containers` now stores static values that can be shared across many chem masters - Updates only overlays and not the whole icon during operations for efficiency **3. Fixes** - You can hit the chem master with the screwdriver, wrench, crowbar & beaker when in combat mode - You cannot insert hologram items into the chem master - Deconstructing a condiment master will give you the circuit board already pre-programmed with that option selected so you don't need to use a screwdriver to re program it - `printing_amount` is now the maximum number of containers that can be printed at a time. Presently this number with upgraded parts would print out empty containers especially for patches. This is because `volume_per_item` does not take into consideration this var. Also this var would not give control to the player on exactly how many containers to print as whatever amount the player entered would be multiplied with this value producing a lot of waste & worse empty containers. Now this var determines exactly how many containers you can print and is imposed on the client side UI as well **4. Refactors (UI performance)** - Beaker data is compressed into a single entity & sent to the UI. This is set to null if no beaker is loaded thus saving data sent - Reuses Beaker props from chem synthesizer to reduce code - reagent REF replaced with direct type converted to text and later converted with `text2path()` cause its much faster 🆑 qol: Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions qol: Analyzing reagents no longer blocks other players from doing other operations. Multiple players can analyze different reagents on the same machine qol: You cannot do any tool acts on the machine while printing to prevent any side effects. qol: The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. The feature can be enabled/disabled via a check box code: removed defines for reagent transfer, vars for reagent analyzis to save memory. Autodoc for other vars & procs fix: You can hit the chem master with tools like screwdriver, crowbar, wrench & beaker in combat mode fix: You cannot insert hologram items into the chem master fix: Deconstructing a condiment master will give you the circuit board already pre-programmed with that option fix: You now print the exact amount of containers requested even with upgraded parts without creating empty containers. Max printable containers is 13 with tier 4 parts able to print 50 containers. refactor: Optimized client side UI code & chem master as a whole. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Wraps `lowertext()` to ensure proper stringification. (#82442) 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. * Clowns can now make balloon... toys. And also mallets and hats. (#82288) <!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> Clowns will now start with a box of 24 random long balloons and a skillchip in their noggin allowing them to create balloon animals by combining two of them of different colour together. Owners of the skillchip also gain access to crafting recepies of balloon mallets, vests, helmets and tophats, all created from long balloons. A crate of long balloons, with a box of balloons inside, can be bought at cargo, in case the clown runs out. I might edit this once I wake up, its 3 in the morning right now. Oh also, resprited how balloons look in inventory.  Balloon animals funny. Silly features are my favourite kind of features, and this one's open-ended too. Someone on the coder chat recommended someone would do it that one time, here it goes. <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: Added long balloon box to the clown's starting inventory, and a skill-chip of long lost honk-motherian knowledge to their brain. add: Added long balloons. Consequently, added balloon animals to make from such balloons. Also, balloon top hat, vest, helmet, and a mallet. Don't ask about the mallet. add: A long balloons box harvested fresh from the farms on the clown planet will be able to be shipped in a crate to the cargo department near you! add: As per requests; water balloons can now be printed at service lathe, and entertainment modsuit can now blow long balloons! image: Balloons will now have an unique sprite when in the inventory, compared when to on the ground. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Jacquerel <hnevard@gmail.com> * Quick spellcheck 'steall' (#82560) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82447 quick followup to this, caught it while glancing through the code. * Fix * merge conflicts * Revert "Monkeys now use height offset (and monkey tail works) (#81598)" This reverts commit 5cfdc5972d16c6b509220e8874a927696249d36a. * fix * Fixed lateinitialize * This should cut it * Oh right * There? * Damn, here? * There * [NO GBP] Fixes spurious runtime caused by icemoon (again) (#82582) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82572 I tried to fix this but there was an unaccounted race condition which just caused a separate runtime...  Since the type is being changed mid-execution `replacement_turf` will become out of scope. My bad--this should fix it now for good. --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Higgin <cdonny11@yahoo.com> Co-authored-by: NeonNik2245 <106491639+NeonNik2245@users.noreply.github.com> Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
d59abdf148 |
Gets [weird] with (spies) by adding protect and deuteragonist-flavored objectives. (#82447)
## About The Pull Request What are their goals? Why are they doing this? gets weird with Spy objectives - namely by adding a lot more ways spies might be asked to affect various targets around the station. the first of these is by several flavors of Protecting targets (these do NOT print a success at roundend in keeping with Spy design:) - Protect (get a humanoid target off alive) - Protect Nonhuman (get an entity off alive) - Jailbreak (make sure a humanoid target escapes free) - Detain (make sure a humanoid target gets taken out arrested) the second of this is by a new escape condition: - Exile (get off-station or off the Z-level by the end of the shift - sometimes it's not just pods, you need to fuck off to space to win.) the third is through a massive increase in the number of possible: - objective templates - departments to target (Command + Service added) - specific locations to target - general classes of objects to target (medicines, floor tiles, critical infrastructure, etc.) - efforts to target (such as meals, mechs, public supplies) - ways to leave (you can be asked to abscond from the scene of your crimes?) ## Why It's Good For The Game More goofy and weird prompts to do more interesting things with Spies. One thing I think we're sorely missing in our lineup is antagonists that can act a bit more as deuteragonists - very possibly helping the crew under certain conditions and frustrating the Hell out of them in others. Since there's no way to check their objectives, and they get their gear/progression through stealing shit, they're still very much an antagonist and exist under the suspicion of doing bad... but, just going by their objectives, introducing more varied (and in some cases even benign) goals for them creates suggestions pointing to a lot more varied and interesting stories if people choose to run with it. |
||
|
|
8dec82ee85 |
[MIRROR] Blackmarket refactor and balance, fixing spy bounties, plus a new category for people captured by pirates/tots/contractors. (#26869)
Blackmarket refactor and balance, fixing spy bounties, plus a new category for people captured by pirates/tots/contractors. (#81818) This PR aims to take care of a few potential hard dels and fix the fenced goods category first and foremost. The PR also adds a new one that enables you to buy mobs captured by antags in advance, before they're sent back to the station. Unlike other categories, it doesn't have "Launch" and "Teleport" as delivery methods, instead it uses a special "Supply Pod" delivery method that ships the chattel directly to your location. This method costs 400 credits, however, if you've built the LTSRBT, shipment will be free. Another thing, I always felt LTSRBT to be pretty fucking dumb as is. Way too overpriced for the benefits it offers: a slighty cheaper delivery method that, while definitely better than the other two, doesn't really pay off or honestly even remotely compensate the 4000 credits you just spent to get it, especially if you're only buying a couple items at most. So I decided to remove it from cargo and add it to the blackmarket as a 500 to 750 creds item, available every round. Human mobs sold by the pirate bounty pad are no longer deleted, instead they're properly ransomed and sent to the holding facility, much like for contractors and tots. This means they're also added to the black market. The blackmarket system has some issues to it that need to be fixed (otherwise the "Fenced Goods" and "Hostages" categories wouldn't work). The Pirate Pad deleting "ransomed" mobs instead of actually ransoming them is lame. The LTSRBT shouldn't suck as much. Also more market stuff. This will fix #81809. 🆑 fix: Fixed the "Fenced Goods" black market category. balance: Removed the LTSRBT from cargo and added it to the blackmarket, reduced the price from 4000 to 625 on average. balance: The time it takes for captured mobs to be automatically sent back to the station from the holding facility has been increased from 3-4 minutes to 6. add: You can buy mobs captured by contractors, traitors and pirates from the black market and have them sent back to the station in advance. For safety, they'll also be handcuffed (not always) upon delivery. add: Human mobs sold by pirates are not deleted anymore. Instead, they're now captured and sent to the holding facility. /🆑 Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
737822398a |
Blackmarket refactor and balance, fixing spy bounties, plus a new category for people captured by pirates/tots/contractors. (#81818)
## About The Pull Request This PR aims to take care of a few potential hard dels and fix the fenced goods category first and foremost. The PR also adds a new one that enables you to buy mobs captured by antags in advance, before they're sent back to the station. Unlike other categories, it doesn't have "Launch" and "Teleport" as delivery methods, instead it uses a special "Supply Pod" delivery method that ships the chattel directly to your location. This method costs 400 credits, however, if you've built the LTSRBT, shipment will be free. Another thing, I always felt LTSRBT to be pretty fucking dumb as is. Way too overpriced for the benefits it offers: a slighty cheaper delivery method that, while definitely better than the other two, doesn't really pay off or honestly even remotely compensate the 4000 credits you just spent to get it, especially if you're only buying a couple items at most. So I decided to remove it from cargo and add it to the blackmarket as a 500 to 750 creds item, available every round. Human mobs sold by the pirate bounty pad are no longer deleted, instead they're properly ransomed and sent to the holding facility, much like for contractors and tots. This means they're also added to the black market. ## Why It's Good For The Game The blackmarket system has some issues to it that need to be fixed (otherwise the "Fenced Goods" and "Hostages" categories wouldn't work). The Pirate Pad deleting "ransomed" mobs instead of actually ransoming them is lame. The LTSRBT shouldn't suck as much. Also more market stuff. This will fix #81809. ## Changelog 🆑 fix: Fixed the "Fenced Goods" black market category. balance: Removed the LTSRBT from cargo and added it to the blackmarket, reduced the price from 4000 to 625 on average. balance: The time it takes for captured mobs to be automatically sent back to the station from the holding facility has been increased from 3-4 minutes to 6. add: You can buy mobs captured by contractors, traitors and pirates from the black market and have them sent back to the station in advance. For safety, they'll also be handcuffed (not always) upon delivery. add: Human mobs sold by pirates are not deleted anymore. Instead, they're now captured and sent to the holding facility. /🆑 |
||
|
|
362362ec2c |
[MIRROR] Adds an IS_CHANGELING helper (#26434)
* Adds an IS_CHANGELING helper (#81228) ## About The Pull Request What it says on the tin. I also replaced checks with it everywhere I found appropriate, hopefully without accidentally breaking anything. ## Why It's Good For The Game We have a helper for most other antags, and it makes code a lot cleaner and easier to read. I'm surprised we didn't have this one already. ## Changelog 🆑 code: added an IS_CHANGELING() helper and used it where applicable /🆑 * Adds an IS_CHANGELING helper * skyrat stuff --------- Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com> Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com> |
||
|
|
44ce6d923d |
Adds an IS_CHANGELING helper (#81228)
## About The Pull Request What it says on the tin. I also replaced checks with it everywhere I found appropriate, hopefully without accidentally breaking anything. ## Why It's Good For The Game We have a helper for most other antags, and it makes code a lot cleaner and easier to read. I'm surprised we didn't have this one already. ## Changelog 🆑 code: added an IS_CHANGELING() helper and used it where applicable /🆑 |
||
|
|
3658c80e57 |
[MIRROR] Explodes device.dmi [MDB IGNORE] (#25523)
* Explodes device.dmi * Demodularize these * Update traitordevices.dm * Update traitordevices.dm * Modularizes hypnotic flash * Modular dmi repath * Modular dmi repath --------- Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com> Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com> |
||
|
|
71a1fee2f1 |
Explodes device.dmi (#80025)
## About The Pull Request I woke up today and thought 'what would be easy thing to do today so I can say I've done something?'. Then I remembered I saw several gangtool usages the time I split radio up, and I could remedy those. 7 hours later, device.dmi is split in a folder of its own, and I've also given unique sprites to door remotes and landing desginators. ## Why It's Good For The Game The device.dmi was kind of a mess. ## Changelog 🆑 /🆑 |
||
|
|
b4dca646c9 |
[MIRROR] Lings no longer get impossible identity theft objectives [MDB IGNORE] (#25364)
* Lings no longer get impossible identity theft objectives * Fix Conflict, Preserve SR Addition * Should be Fixed now * Fix Compile Error --------- Co-authored-by: TJatPBnJ <69724863+TJatPBnJ@users.noreply.github.com> Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com> |
||
|
|
5322066d79 |
Lings no longer get impossible identity theft objectives (#80012)
## About The Pull Request Crew with TRAIT_NO_DNA_COPY are no longer valid targets for identity theft objectives. Changes some code to make it easier to exclude potential objective targets. Changelings that roll an identity theft objective while there are no valid targets will now get an ordinary escape objective rather than a free objective. Fixes #77764 ## Why It's Good For The Game Objectives are usually meant to be achievable. ## Changelog 🆑 fix: Changelings will no longer get an objective to impersonate crew without absorbable DNA. fix: Changelings will no longer start without an escape objective. /🆑 |
||
|
|
9501ca5be2 |
[MIRROR] Sends a message to admins when a headrev/head disconnects during a revolution. They are no longer immediately treated as dead but are given a chance to reconnect [MDB IGNORE] (#23976)
* Sends a message to admins when a headrev/head disconnects during a revolution. They are no longer immediately treated as dead but are given a chance to reconnect (#78586) ## About The Pull Request As the title says, headrevs and heads of staff during a revolution won't be disqualified when they either disconnect or go AFK. Instead, they're given a 2 minute timer to reconnect or stop being AFK and a warning is sent out to admins so that they can offer up the player if time is close to running out. Two admin messages are sent, one when they're initially disconnected or AFK and one sent a minute after, giving the admin a minute to act on the log. ## Why It's Good For The Game Disconnects can happen for any number of reasons, but sometimes they can be unintentional, like the game crashing or briefly losing connection. This will give headrevs and heads more leeway. Additionally, a solo headrev who disconnects before they've converted anyone could be spotted by admins and replaced so that the revolution gamemode isn't wasted. ## Changelog 🆑 balance: Head revolutionaries and heads of staff are no longer immediately considered disqualified when going AFK or disconnecting and are given a 2 minute grace period. admin: Admins now get a log when a head revolutionary or head of staff disconnects or goes AFK during a revolution. They also get the same log 1 minute after to give them a chance to act on the information. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> * Sends a message to admins when a headrev/head disconnects during a revolution. They are no longer immediately treated as dead but are given a chance to reconnect --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> |
||
|
|
887f715764 |
Sends a message to admins when a headrev/head disconnects during a revolution. They are no longer immediately treated as dead but are given a chance to reconnect (#78586)
## About The Pull Request As the title says, headrevs and heads of staff during a revolution won't be disqualified when they either disconnect or go AFK. Instead, they're given a 2 minute timer to reconnect or stop being AFK and a warning is sent out to admins so that they can offer up the player if time is close to running out. Two admin messages are sent, one when they're initially disconnected or AFK and one sent a minute after, giving the admin a minute to act on the log. ## Why It's Good For The Game Disconnects can happen for any number of reasons, but sometimes they can be unintentional, like the game crashing or briefly losing connection. This will give headrevs and heads more leeway. Additionally, a solo headrev who disconnects before they've converted anyone could be spotted by admins and replaced so that the revolution gamemode isn't wasted. ## Changelog 🆑 balance: Head revolutionaries and heads of staff are no longer immediately considered disqualified when going AFK or disconnecting and are given a 2 minute grace period. admin: Admins now get a log when a head revolutionary or head of staff disconnects or goes AFK during a revolution. They also get the same log 1 minute after to give them a chance to act on the information. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> |
||
|
|
eb31082053 |
[MIRROR] Choose your own Objective [MDB IGNORE] (#23570)
* Choose your own Objective * Update changeling.dm * Update heretic_antag.dm * Update heretic_antag.dm * Update malf_ai.dm * Update AntagInfoHeretic.tsx --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> |
||
|
|
6d258e5527 |
Choose your own Objective (#78118)
## About The Pull Request   This PR adds the ability for solo antagonists (Traitor, Changeling, Heretic, Wizard, Malfunctioning AI, and Ninja) to "write-in" their own objectives in place of the ones the game gave them. For traitors this is located on the uplink (though the button is not present if you aren't the owner of the uplink, thieves can't give you a troll objective) and for everyone else it is on the antagonist information panel. Pressing this button will replace all of your objectives _except_ ones like "escape alive" or "survive" or "die a glorious death". By default a player can only do this once per round, but the Traitor Panel admin tool contains a button which can display the prompt again. Custom-entered objectives are not mechanically tracked in any way and do not report success or failure on the round end screen, whether they were successful or not is up to you the audience. Resultingly, doing this will make you ineligible for getting the hardcore random points from completing your objectives. Admins are capable of using this button to show the prompt to _any_ antagonist, including team antagonists, but do so at their own risk. A single cultist changing their objective to something else only updates them, not their team. Admins can also choose whether or not it replaces existing objectives or just adds a new one entered by the player. When someone sets a new objective, it informs any active administrators of their choice and provides linked buttons to send them a syndicate radio message or immediately smite them, because unfortunately our players cannot always be trusted with arbitrary text entry. I _didn't_ make this a system which requires approval because I don't think admins _want_ that level of micromanagement, although plausibly if it is thought to be a good idea I could add a time delay and reject button similar to the "rename the station" charter item. Heretics work slightly differently and have an "Are you sure?" confirmation other antagonists lack. This is because Heretic objectives are directly tied to ascension, thus by replacing the objectives you are locking yourself out from being able to do it. I don't _necessarily_ think this is a terrible thing, because "try to ascend" _is_ the default objective. There's no point entering a new one if that is what you want to do anyway. While I was in here I gave Ninjas a very rudimentary custom antagonist panel, because they didn't have one. I also made their C4 display where it can be detonated on examine, in case you no longer have the relevant objective to reference. <details> <summary>Other previews</summary>      </details> ## Why It's Good For The Game It's a reasonably frequent refrain that "Objectives are just guidelines" and that more interesting players should strive to ignore them and do something else, I would hope this would encourage that kind of behaviour. If you _are_ going off and doing your own thing, now other players can actually see what it was that you were trying to do when the round ends (and judge you based on whether you actually did it). ## Changelog 🆑 add: Traitors, Changelings, Heretics, Wizards, Malfunctioning AIs, and Ninjas can now all reject their original objectives and provide one of their own in its place. A Heretic doing this will no longer be able to ascend. add: "Custom" objectives which aren't mechanically tracked will no longer report success or failure upon round end. qol: Space Ninja spider charges will now display where they can be detonated when examined, if you are a ninja. /🆑 |
||
|
|
14b02a99d7 |
[MIRROR] Generate theft objective target list more consistently [MDB IGNORE] (#23453)
* Generate theft objective target list more consistently (#78045) ## About The Pull Request Fixes #77943 Moves the generation of traitor theft objective targets from `new` of `/datum/objective/steal` to `initialize` of `/datum/controller/subsystem/traitor` `/datum/objective/steal` we would generate the full list of possible theft targets _only_ if the list was already empty. A recent PR added a secondary "destroy item" objective which has no rep prerequisite, as a result it is initialised as soon as a traitor datum is assigned. Importantly this happens _before_ the traitor's theft objective is assigned. The "destroy item" objective generates its own item targets using the "theft item" datum as it is a type of thievery, this pollutes the list to contain more than 0 entries. From this point on the only things people can be assigned to steal are the items that traitors can be assigned to destroy early in a round, which aren't valid for most kinds of theft objective. Making the subsystem generate the list before traitor datums are assigned resolves the race condition, the number of rounds where _nobody_ has any kind of theft objective and this list is unused is exceedingly small. ## Why It's Good For The Game You can get primary theft objectives again. ## Changelog 🆑 fix: Traitors should generate with "free objective" less often, and will once more be assigned to steal things. /🆑 * Generate theft objective target list more consistently --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
9f3430b360 |
Generate theft objective target list more consistently (#78045)
## About The Pull Request Fixes #77943 Moves the generation of traitor theft objective targets from `new` of `/datum/objective/steal` to `initialize` of `/datum/controller/subsystem/traitor` `/datum/objective/steal` we would generate the full list of possible theft targets _only_ if the list was already empty. A recent PR added a secondary "destroy item" objective which has no rep prerequisite, as a result it is initialised as soon as a traitor datum is assigned. Importantly this happens _before_ the traitor's theft objective is assigned. The "destroy item" objective generates its own item targets using the "theft item" datum as it is a type of thievery, this pollutes the list to contain more than 0 entries. From this point on the only things people can be assigned to steal are the items that traitors can be assigned to destroy early in a round, which aren't valid for most kinds of theft objective. Making the subsystem generate the list before traitor datums are assigned resolves the race condition, the number of rounds where _nobody_ has any kind of theft objective and this list is unused is exceedingly small. ## Why It's Good For The Game You can get primary theft objectives again. ## Changelog 🆑 fix: Traitors should generate with "free objective" less often, and will once more be assigned to steal things. /🆑 |
||
|
|
4d7ba6ebcb |
[MANUAL MIRROR] Reworks Duffel Bags (Zippers) (#22363)
* Reworks Duffel Bags (Zippers) * Update backpack.dm * Duiffel Spotfix * error fixes * Update backpack.dm * Update code/modules/antagonists/cult/cult.dm * Update backpack.dm --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> |
||
|
|
bb3d041572 |
[Manual Mirror Fix] Removes shitty "status" variable on organs, makes them use organ_flag (#22480)
* Removes shitty "status" variable on organs, makes them use organ_flags instead (#76350) Title. Seriously this shit pisses me off, why are ORGAN_SYNTHETIC and ORGAN_ROBOTIC two different things? not applicable unless i fucked up --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> * Modulars * Some merge skew * More diffs --------- Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Giz <vinylspiders@gmail.com> |
||
|
|
8c2c72b0ed |
Duiffel Spotfix (#76442)
## About The Pull Request Gives duffelbags their proper slot count They inherited this from backpacks, but I sorta just forgot about that [Creates "levels" of locked objects, uses that to make locked duffels work](https://github.com/tgstation/tgstation/pull/76442/commits/c613c00f62fa3ff03bb33737d24da9acbf2050e3) [c613c00](https://github.com/tgstation/tgstation/pull/76442/commits/c613c00f62fa3ff03bb33737d24da9acbf2050e3) Turns locked into something that holds defines, this makes life a lot easier. Requires a lot of boilerplate because of how many uses of these procs there are and all the passthrough and shit. Adds a few outfit subtypes to avoid this class of failure in future. Renames the args in a few but not all touched procs, one thing at a time Closes #76407 Closes #76430 Had the lock check in the wrong place Closes #76441 GOD I HATE TK SO MUCH Wrote half the pr without glasses so if it's weird gimme some grace yeah? ## Changelog 🆑 fix: Fixes some fuck with duffelbags, them not holding enough + issues with spawning gear in them (job shit and all) /🆑 |
||
|
|
82cf9ea499 |
Removes shitty "status" variable on organs, makes them use organ_flags instead (#76350)
## About The Pull Request Title. ## Why It's Good For The Game Seriously this shit pisses me off, why are ORGAN_SYNTHETIC and ORGAN_ROBOTIC two different things? ## Changelog not applicable unless i fucked up --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
6dfe17306c |
[MIRROR] Pulls apart the vestiges of components still hanging onto signals [MDB IGNORE] (#21738)
* Pulls apart the vestiges of components still hanging onto signals * update modular --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> |
||
|
|
ae5a4f955d |
Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request Signals were initially only usable with component listeners, which while no longer the case has lead to outdated documentation, names, and a similar location in code. This pr pulls the two apart. Partially because mso thinks we should, but also because they really aren't directly linked anymore, and having them in this midstate just confuses people. [Renames comp_lookup to listen_lookup, since that's what it does](https://github.com/tgstation/tgstation/commit/102b79694fa8eb57ecf7b36032616a9e368ccced) [Moves signal procs over to their own file](https://github.com/tgstation/tgstation/commit/33d07d01fd336726b4f6f6f1b61bb0b3f11a00dc) [Renames the PREQDELETING and QDELETING comsigs to drop the parent bit since they can hook to more then just comps now](https://github.com/tgstation/tgstation/commit/335ea4ad081ec63c42cfa05856e582cca833af6e) [Does something similar to the attackby comsigs (PARENT -> ATOM)](https://github.com/tgstation/tgstation/commit/210e57051df63f88dac3dd83321236da825aae5e) [And finally passes over the examine signals](https://github.com/tgstation/tgstation/commit/65917658fb8a1e7d28ae23c9437a583d646f0302) ## Why It's Good For The Game Code makes more sense, things are better teased apart, s just good imo ## Changelog 🆑 refactor: Pulled apart the last vestiges of names/docs directly linking signals to components /🆑 |
||
|
|
17534b3e7f |
[MIRROR] Ashwalker Tribe roundend reporting revamp [MDB IGNORE] (#21336)
* Ashwalker Tribe roundend reporting revamp (#75506) ## About The Pull Request This PR changes how ashwalkers are listed in the roundend report. Originally, they would be listed as individual "other" antagonists, which isn't a particularly great way of handling it and leads to weirdness like this:  _(That's an authentic ninja greentext from a live server, by the by)_ Now, the roundend report gives each ashwalker team their own section within the report, whether or not they succeeded, and some bonus stats.  This new roundend report handling also supports having multiple Necropolises (Necropoli?) in the same round. Each tribe has their stats and success reported individually. This also slightly modifies the protect_object objective, preventing hard deletes when linked to objects that don't clear their own references. ## Why It's Good For The Game Gives Ashwalkers a much better roundend report, and handles how the reporting is done in a much more sensible manner. Reduces how much space that large nests take up with their individual listings. ## Changelog 🆑 Rhials qol: Ashwalker roundend reporting has been revamped. Glory to the Necropolis! /🆑 * Ashwalker Tribe roundend reporting revamp --------- Co-authored-by: Rhials <Datguy33456@gmail.com> |
||
|
|
05316726ec |
Ashwalker Tribe roundend reporting revamp (#75506)
## About The Pull Request This PR changes how ashwalkers are listed in the roundend report. Originally, they would be listed as individual "other" antagonists, which isn't a particularly great way of handling it and leads to weirdness like this:  _(That's an authentic ninja greentext from a live server, by the by)_ Now, the roundend report gives each ashwalker team their own section within the report, whether or not they succeeded, and some bonus stats.  This new roundend report handling also supports having multiple Necropolises (Necropoli?) in the same round. Each tribe has their stats and success reported individually. This also slightly modifies the protect_object objective, preventing hard deletes when linked to objects that don't clear their own references. ## Why It's Good For The Game Gives Ashwalkers a much better roundend report, and handles how the reporting is done in a much more sensible manner. Reduces how much space that large nests take up with their individual listings. ## Changelog 🆑 Rhials qol: Ashwalker roundend reporting has been revamped. Glory to the Necropolis! /🆑 |
||
|
|
3464b6bfb2 |
[MIRROR] Refactors Regenerate Organs, and a few organ helpers [MDB IGNORE] (#20094)
* Refactors Regenerate Organs, and a few organ helpers * MERGE CONFLICTS * GETORGANSLOT > GET_ORGAN_SLOT * GETORGAN > get_organ_by_type * lint repairs * more lint * Update tgstation.dme * Update surgery_step.dm --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> |
||
|
|
96be018eb1 |
[MIRROR] Refactors Suiciding Variable Into Trait [MDB IGNORE] (#20017)
* Refactors Suiciding Variable Into Trait * suicide * https://github.com/tgstation/tgstation/pull/72919 MISSED IRROR * better suicide handling --------- Co-authored-by: san7890 <the@san7890.com> Co-authored-by: lessthnthree <three@lessthanthree.dk> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> |
||
|
|
ecbcef778d |
Refactors Regenerate Organs, and a few organ helpers (#74219)
## About The Pull Request Refactors regenerate organs to be slightly more intelligent in handling organ changes and replacements. Noteably: - We don't remove organs that were modified by the owner; such as changing out your heart for a cybernetic - We early break out of the for loop if they aren't supposed to have an organ there and remove it - We check for the organ already being correct, and just healing it and continuing if it is Also changes the names of some of the organ helpers into snake_case ### Mapping March Ckey to receive rewards: N/A ## Why It's Good For The Game ## Changelog --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
a6f49ed542 |
Refactors Suiciding Variable Into Trait (#74150)
## About The Pull Request Firstly, this var was on `/mob`, even though only `/mob/living` and `/mob/dead` could have ever used it, so who knows how much needless memory it was consuming on stuff such as `oranges_ear` that would never ever ever use something like this. Edit: okay instead of memory it just polluted variable edit windows for all /mob when it didn't need to. I like having a slim VV window Secondly, it's a technical improvement over the previous system as we are able to "track" where a suicide originates from, and how we can track that from mob-to-mob-to-mob. Previously, the boolean `suiciding` would only inform us if they had ever been connected to a mob that had ever committed suicide, but now we are able to precisely determine which mob gave them the trait that they must now apparently bear until the round restarts. ## Why It's Good For The Game Less memory usage, more indepth ability to track suicides in case you really need that dexterity. Currently no implemented code could benefit from using it, but it would be pretty neat if someone could figure out a way to have someone be guilt-tripped whenever they look into a mirror and seeing the reflection of their past life? This PR won't actually help you code that and it'll probably require a bit more work, but it's a possibility of some cool interactions you can do when you have this information available to you.  ## Changelog 🆑 refactor: Some aspects of how we track suicides from your living mob to your observer have changed- please do let us know if anything has broken via a GitHub Issue Report. /🆑 There's probably some technical improvements that can be made in some parts of the code I reworked to accommodate this change, do let me know if you spot any easy ones (or fuckups). a lot of excess comes from the fact that any step in the TRAIT framework trusts that you are passing in a valid datum (or subtype) so that's a thing |
||
|
|
db4444a9b3 |
[MIRROR] Limit theft/destroy secondary objectives to items which at least one person cares about [MDB IGNORE] (#19714)
* Limit theft/destroy secondary objectives to items which at least one person cares about * Update objective_items.dm --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> |
||
|
|
4aef8a4cd5 |
Limit theft/destroy secondary objectives to items which at least one person cares about (#73731)
## About The Pull Request This PR adds a new field `item_owner` to `datum/objective_item` and populates it for most objective items. The function of this field is that the objective will fail to generate if there isn't at least one player in the game with one of those roles. This limits theft objectives to targets which are likely to be carried around, missed if they become absent, or at least vaguely have someone standing close to. This has only been applied toprogression traitor secondary objectives. While doing this I also culled a number of deprecated or tedious objectives which we didn't use any more, such as every "steal a stack of x" objective. And the plasma tank one. And the slime core one. I also deleted any which nobody would miss, chiefly "an empty AI card". There's plenty of those things and if one vanished nobody would notice let alone be inconvenienced. If anyone ever wants to bring them back for soul reasons it will be retained in the commit history, that's what git is for. The list is actually not particularly long now, so if people have good ideas for more things to add to expand it again... well they could have done that any time in the past 10 years but they can still do it now as long as it isn't to fill it back up with things nobody will miss if they are gone. For myself, I added the robotics lab mech crowbar to the list as it fulfils most of the criteria of "fire axe" but with the benefit of there only being one on most maps. I also removed the `difficulty` var which was undocumented, not set for most objectives (all "low risk" objectives had a default difficulty of `9001`), and unused. Also I think this is my 100th PR so you have to be nice to me. ## Why It's Good For The Game Traitor objectives (and antagonist objectives in general) should: - Present you with a somewhat engaging task - Encourage you to interact with at least one other player (at least by "attempting to sneak past them") - Move the state of the round forward in some way, usually by creating inconvenience for at least one other person Many current progression traitor objectives do not meet all (and some perhaps not even any) of the above criteria and I am planning on making a series of changes in order to address this. Expect to see this paragraph copied/pasted into some other PRs probably. This one is the simplest: Stealing an item from someone who literally isn't in the game does not antagonise anyone. So we won't ask anyone to do it. ## Changelog 🆑 balance: Traitor secondary objectives to steal or destroy an item are now associated with a particular "owner" or "victim" and won't generate themselves if nobody would actually be victimised by the crime. add: Traitors can sometimes be tasked with stealing and destroying the roboticist's big crowbar, if there is one /🆑 |
||
|
|
9a0e94aaa2 |
[MIRROR] Fixes hijacked shuttles not counting as escaped, cleans up associated code [MDB IGNORE] (#19652)
* Fixes hijacked shuttles not counting as escaped, cleans up associated code (#73623) ## About The Pull Request Fixes #72240 So, in the past, `onCentCom` ran a check at the end that said "if we're on centcom z, in centcom area, or in shuttle that is endgame launched: return TRUE" Meanwhile its brother `onSyndieBase` did not need to run the same checks, because it was also on the centcom z-level. This meant that for the purposes of `considered_escaped`, `onCentCom` pretty much entirely eclipsed `onSyndieBase`, only mattering for, well, Nuke Ops So the fix was simple - add the check for "in shuttle that is engame launched" to `onSyndieBase`. I took this opportunity to do a quick audit of associated "escaped" and "alive" code. Did you know that hardcore random only checked that you were on centcom to award survival points? Instead of any other checks for escaped like stat? Also the ancient "romerol zombies can't be used as an easy way to greentext escape" was broken, because it checked the wrong species ID? Bonus performance optimization: `in area` -> `in area.get_contained_turfs()` ## Why It's Good For The Game Hijack does not turn around to become an L ## Changelog 🆑 Melbert fix: Hijacked shuttles now count as "escaping alive" once agian fix: Hardcore random survival now actually checks that you've escaped alive, and not just made it to centcom fix: Intelligent zombies can now escape. fix: Infectious zombies now don't count as escaped as intended. /🆑 * Fixes hijacked shuttles not counting as escaped, cleans up associated code --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
2fd2feec50 |
Fixes hijacked shuttles not counting as escaped, cleans up associated code (#73623)
## About The Pull Request Fixes #72240 So, in the past, `onCentCom` ran a check at the end that said "if we're on centcom z, in centcom area, or in shuttle that is endgame launched: return TRUE" Meanwhile its brother `onSyndieBase` did not need to run the same checks, because it was also on the centcom z-level. This meant that for the purposes of `considered_escaped`, `onCentCom` pretty much entirely eclipsed `onSyndieBase`, only mattering for, well, Nuke Ops So the fix was simple - add the check for "in shuttle that is engame launched" to `onSyndieBase`. I took this opportunity to do a quick audit of associated "escaped" and "alive" code. Did you know that hardcore random only checked that you were on centcom to award survival points? Instead of any other checks for escaped like stat? Also the ancient "romerol zombies can't be used as an easy way to greentext escape" was broken, because it checked the wrong species ID? Bonus performance optimization: `in area` -> `in area.get_contained_turfs()` ## Why It's Good For The Game Hijack does not turn around to become an L ## Changelog 🆑 Melbert fix: Hijacked shuttles now count as "escaping alive" once agian fix: Hardcore random survival now actually checks that you've escaped alive, and not just made it to centcom fix: Intelligent zombies can now escape. fix: Infectious zombies now don't count as escaped as intended. /🆑 |
||
|
|
4999bdfd19 |
[MANUAL MIRROR] Better groups for antagonists (#18839)
* Better groups for antagonists (#72576) Better categorizes antagonists into groups for the orbit UI, admin traitor panel. Permanently hostile antags were intermixed in the "Alive" section, and it was sometimes tough to see what's going on. To do this, many minor antags needed new antag datums which were added with fluff objectives as a bonus. Group Name | Antags --- | --- Syndicate | Nukies, battlecruiser crew, lone op Extradimensional Abominations | Nightmare⭐, morph⭐, pyro slime⭐ Spaceborne Leviathans | Space dragon, (spawned) carps⭐ Invasive Overgrowth | Venus human traps⭐ Arachnid Infestation | Spiders⭐ Eldritch Horrors | Cult constructs⭐, revenant (⭐ = New antag datum, proper orbit category, new objective text) <details> <summary>Screenshots (outdated)</summary> Antags get more tooltip info  Populating space dragon + carps (now leviathans)  Detail to distinguish job & rank  New categories in action  Organized Traitor Panel  </details> Better UI, observer experience, admin panel. It's now very obvious when something is hostile from the orbit panel. 🆑 qol: The orbit menu now sorts antagonists into groups more effectively. Some get new named groups. admin: Traitor panel should have slightly more sane categories. add: Many minor antagonists now have "objectives". refactor: Refactors code in several antag datums. /🆑 Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> * Fixes the compile issues * Also puts the drifting contractor in the syndicate group in the antag panel --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com> |
||
|
|
85a0d42b7d |
Better groups for antagonists (#72576)
## About The Pull Request Better categorizes antagonists into groups for the orbit UI, admin traitor panel. Permanently hostile antags were intermixed in the "Alive" section, and it was sometimes tough to see what's going on. To do this, many minor antags needed new antag datums which were added with fluff objectives as a bonus. Group Name | Antags --- | --- Syndicate | Nukies, battlecruiser crew, lone op Extradimensional Abominations | Nightmare⭐, morph⭐, pyro slime⭐ Spaceborne Leviathans | Space dragon, (spawned) carps⭐ Invasive Overgrowth | Venus human traps⭐ Arachnid Infestation | Spiders⭐ Eldritch Horrors | Cult constructs⭐, revenant (⭐ = New antag datum, proper orbit category, new objective text) <details> <summary>Screenshots (outdated)</summary> Antags get more tooltip info  Populating space dragon + carps (now leviathans)  Detail to distinguish job & rank  New categories in action  Organized Traitor Panel  </details> ## Why It's Good For The Game Better UI, observer experience, admin panel. It's now very obvious when something is hostile from the orbit panel. ## Changelog 🆑 qol: The orbit menu now sorts antagonists into groups more effectively. Some get new named groups. admin: Traitor panel should have slightly more sane categories. add: Many minor antagonists now have "objectives". refactor: Refactors code in several antag datums. /🆑 Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
aa441a9633 |
Mirror 72339 & 71284 (#18645)
* Renews a bunch of old roundend new reports that got lost. Plus, some roundend report QoL for cult and revs. (#71284) A few roundend reports got lost from moving to dynamic and other prs. This PRs re-allows them to occur. Namely: "Wizard Killed" (lost in dynamic), "Blob nuked" (lost in dynamic), "Cult escaped" (lost in cult rework), and "Nuke Ops Victory" (station destroyed via nuke) (lost from, what I can see, an oversight / accidental swap of report values). Additionally, small roundend report QOL for cult: Removes antag datums from spirit realm ghosts after being dusted, so they do not show up on the report. And in reverse, heads of staff who were dusted / destroyed in revolution rounds are now also shown in roundend reports. Some of these reports are dead, which is is a shame because I think they're cool and fun. 🆑 Melbert qol: Successfully fending off a blob now has a cross station news report again. More pressing reports will take priority over it, though. qol: Successfully killing a wizard (and all of their apprentices) now has a cross station news report again. qol: If more than half of a cultist team manages to escape on the shuttle (rather than summoning Nar'sie), they will send a unique cross station news report. This is still a loss, by the way. Summon Nar'sie! qol: Nuclear Operatives successfully nuking the station now has its unique cross station news report again, and no longer uses the generic "The station was nuked" report. qol: Nuking the station to stop a blob infection now has a unique cross station news report again. Good luck convincing admins to allow this. qol: Cult ghosts from "Spirit Realm" no longer persist on the cult's team after being desummoned, meaning they will not show up on roundend report. qol: Heads of staff will now always show up on revolution roundend report - even if their body was fully destroyed. /🆑 * Adds support for Rulesets having intrinsic template requirements (#72339) Title Ensures that we load templates for a ruleset before we attempt to place or cache characters for that ruleset Also makes wizard and abductor async load their template to improve (apparent) loading times for them This is the only thing left that I can think of that would cause antags like nukies and abductors to spawn in wrong This should not be player facing Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
63f8145598 |
[MIRROR] Replaces Traitor Greentext Objectives with Assassination/Escape Objectives [MDB IGNORE] (#18067)
* Replaces Traitor Greentext Objectives with Assassination/Escape Objectives * Mirror! Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com> Co-authored-by: Funce <funce.973@gmail.com> |
||
|
|
15faaa54f5 |
[MIRROR] Rewrites how action buttons icons are generated, makes them layer nicer. Allows observers to see a mob's action buttons. [MDB IGNORE] (#17907)
* Rewrites how action buttons icons are generated, makes them layer nicer. Allows observers to see a mob's action buttons. * conflicts * Modular! * update modular * icon icon icon icon icon Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> Co-authored-by: Funce <funce.973@gmail.com> |
||
|
|
54cfbcce2e |
Replaces Traitor Greentext Objectives with Assassination/Escape Objectives (#71349)
## About The Pull Request - Traitors now have the old two kill + escape objectives from before progressive traitors. These objectives are for greentext/victory conditions only, and are known as "Primary Objectives". - The Progressive Traitor system remains in place for unlocking dangerous gear. - Completing the Final Objective from the progressive list is an alternate route to victory. - Traitor Uplinks now have a new tab that lists Primary Objectives, which will also indicate when the Traitor has a secured victory by Final Objective. - Also cleaned up the round end report, see below. ## Why It's Good For The Game See https://hackmd.io/WVjTLp6xTJiTFEkhSqqWIQ?view for my complete thoughts. TL;DR: - Getting Rep is too much of a time commitment for Greentext. - Most of ProgTraitor is quiet sabotage that no one cares about, leading to less conflict with the crew. - Losing the Uplink creates an unwinnable state. This PR fixes the above, by bringing back the 2 kill + escape system. Traitors are now required to actually negatively affect at least some crewmembers, and actually survive the round, to gain a victory state. Alternatively, if they reach the Final Objective, they are given a free pass, as an alternate route if they cannot find their Primary Objective targets. Final Objectives will count as a victory even if the traitor dies. The Progressive Traitor system is still used for unlocking gear, and no values for items, or restrictions based on role, have been changed. ## Changelog 🆑 balance: Traitors now have two kill and an escape objective for Greentext purposes, though completing a Final Objective will Greentext too. /🆑 New Primary Objective Tab:  If the Final Objective is done, the traitor's victory condition is secured, and the Primary Objectives no longer matter.  Round-end report, showing one traitor that greentexts through traditional means, and one that doesn't get their kill target or escape, but greentexts via Final Objective anyway.  |
||
|
|
329921639a |
Rewrites how action buttons icons are generated, makes them layer nicer. Allows observers to see a mob's action buttons. (#71339)
## About The Pull Request
- Rewrites how action button icons are generated.
- Prior, generated an action button icon was fairly simplistic and
didn't allow for many changes. Someone recently added the option for
overlays to be generated over action buttons, but the framework was very
weak.
- Now, action button icon generation is split across multiple procs,
like atom icon updates.
- The background of action buttons are underlays
- The actual icon of the action button is the icon and icon state of the
action button movable
- The rim / border of the button is an overlay, layered overtop the
button.
- Allows observers to see what action buttons a mob has. They even
update in real time! And no, the observers cannot click on them.
## Why It's Good For The Game
- Runechat text of action buttons are no longer hidden behind the actual
icon. This was very ugly with cooldown actions, as the cooldown text was
hidden behind a lot of spell icons.
- Cuts down on a lot of icon duplication.
- Gives much finer control over action button icons
- Saves a bit of processing from generating full action button icons
when not necessary. Not implemented in many places, but is in some.


## Changelog
🆑 Melbert
add: Observers can now see what action buttons an observed mob has. No,
you can't click them. And no it doesn't show EVERY action.
refactor: Refactored how action button icons are generated. Some actions
will now use a colored border when active instead of just turning green.
Cooldown text will also appear on the top layer of actions too. If you
see any funky lookin' icons (namely their borders), let me know.
refactor: Bluespace Golem's teleport action is now a cooldown action.
fix: Construct actions go to the middle of the screen like expected.
/🆑
|