Commit Graph

48 Commits

Author SHA1 Message Date
Fikou
00db69ffdd you can no longer stuff infinite ais in modsuits (#65915) 2022-04-05 19:37:56 -07:00
Zonespace
b62df3a2df MODSuit clothing icon files can be overridden by its skin (#65733)
This allows the MODSuit skin to change the icon and worn icon files of the modsuit pieces.
2022-04-05 14:02:54 -04:00
LemonInTheDark
50689f89a4 Action button refactor/rework: Enhanced Dragging (#65180)
About The Pull Request

I noticed a lot of strange and un-intuitive behavior in action buttons, and got stung by the bloat bug. Damn it hug #58027
I'll do my best to explain what I've changed and why, might get a bit long.
If you want a better idea, read the commits. Most of em are pretty solid, if long.

Whelp. Here we go.
How do action buttons currently work

All action buttons are draggable, to any place on the screen. They're held in an actions list on the player's mob.
Their location in this list determines their position on the top of the screen. If one is dragged away from the top, its position in the list is "saved". This looks really bad.
If two buttons are dragged over each other, their positions swap. (inside the actions list too)
If a button is shift clicked, it is brought back to the position it started at.
If the action collapse button that you likely just mentally edit out is alt clicked, it resets the position of all action buttons on the screen.
If an action is ctrl clicked, it is "locked". This prevents any future position changes, and also enables a saving feature. With this saving feature, locked button positions persist between rounds. So your first o2 canister will always start where you saved it, etc.
Actions and buttons are a one to one link. While there is functionality to share action buttons between two players, this means showing the same object to both. So one player can move a button on another's screen. Horrendous.
This also makes code that modifies properties of the screen object itself very clunky.
Why is this bad

A: None knew pretty much any of this information. It is actually documented, just in a horribly formatted screen tip on the collapse button, you know the one we all mentally delete from the hud.
B: None of this is intuitive. Dragging buttons makes the hud look much worse, and you get no feedback that you even can drag them. Depressing
C: We use actions to make new options clear to the player. This means players can have a lot of action buttons on the hud. This gets cluttery
D: The collapse button is useless. It lets you clear your screen if someone like me fucks up and gives you 2000 actions, but outside of that it just hides all information from you. You never want to see none of your action buttons, just a filtered list of them.
E: On a technical level, they're quite messy, and not fully functionally complete. This is depressing.
What I've done

Assuming the above to be true, how do we fix them?
Well first I'm going to go over everything I changed, including links to major commits. I'll then describe the finished product, and why I made the decisions I did.

Oh and I've moved some of the more niche or technical discussion to dropdowns. Hopefully this makes finding the major functional changes easier

Adds helper procs for turning screen_loc strings into more manageable arrays. This doesn't fully support all of the screen_loc spec, but it's enough for what I'm doing. (f54865f)

Uses these helper procs to improve existing code (6273b93)

Fixes an issue with tooltip code itself. If you tried to hold down a mouse button while dragging onto a tooltip enabled object, it would silently fail. The js made assumptions about the order args came in, which broke when buttons were held down (e0e42f6)

Adds a signal linked to /client/Click(). Surprised we didn't have this before honestly (c491a4a)

Makes /client/MouseDrag() return parent. If we don't do this, any overrides of MouseDrag will never actually be called (2190b2a)
Refactors how action buttons work under the hood (53ccce2)
Basically, rather then generating one button per action, we generate one button per viewer

Starts to change button behavior, more cleanup

Changes the mouse cursor when an action button is dragged. Hopefully
this makes moving things feel less like an accident, and makes you doing
it more clear

Removes the moved and locked vars. This will be more relevant later, but
for now:

Moved exists as a sort of budget "We've been dragged" variable. We can
handle this more cleanly, and the movable type doesn't care about it

Locked is a very old variable that is also not something that the
movable type "owns". It's more an action button thing that's been moved
down.
It exists so an action can be locked in place, and in that locking, be
treated as a "saved location"
(21e20fc)

Because I've nuked move, we don't need to directly set our button's
position. We can use the default_button_position var instead. This is
quite handy.

Please ignore position_action, I will explain that later
(83e265e)

Removes the buttons locked pref

It was another obscure part of action buttons, basically do buttons
start "locked" or not. See previous discussion of locked
(b58b1bd)

Major rework starts here

Alright. Sorry for this, this is where me not commiting regularly starts
to suck. I'll do my best though.

Rather then figuring out an action button's position via a combination
of the moved and ordered vars, we use a separate location var to store
one of a few defines. This makes life later much easier.

Adds tooltip support for dragging action buttons. The way the tooltip
just froze in place when dragging really bugged me, and lead to some
nasty visual artifacts.
This is a bit messy because the drag procs are horrible, but it's
workable

Dropping a button on another button will no longer swap their positions
Behavior instead depends on the target button.

If it's a part of a group (A concept I will explain later) the dragged
button is simply inserted before it in the group's list.

If it's floating on the general hud, we instead position the dragged
button to its right. There's extra logic here to ensure buttons will
never overflow the screen, but I'll get into that later.

Alright. That's most of the refactoring. Time for the larger behavior
changes.

Adds a button palette. This is a separate dropdown that renders
underneath buttons.

image

The idea is to allow for a conceptual separation between "important"
buttons and the ones that end up cluttering the screen.

You can click on the dropdown to open it, then any later clicks that
don't involve actions in some way will autoclose it.

My goal is to come up with an alternative for the action button that
just acted as a way to hide all buttons on screen. Not convinced it saw
much use.

As a side effect of removing that, I've moved its tooltip stuff to the
palette. I've properly formatted it, so hopefully it's easier to read
then the jumble that we used to have.

(You can alt click the palette button to reset all button positions)

Oh and the palette can scroll, since as you'll see later it has a
limited size.
image

Moving on from that, I've added what amounts to action landing buttons.
These allow buttons to rejoin groups, or be positioned at the end of a
line of buttons.
image

They've got a 32x32 hitbox, and only show up when dragging. Hopefully
this makes the system more clear just by dragging an action.

Oh and I've changed how button position updating works. The old system
of calling update_action_buttons on mob every time an action button
changes position is gone, mostly because I've setup more robust
grouping. Will discuss when I get to huds

(0d1e93f)
Adds the backbone behind action button position changes (94133bd)

Moves hud defines to the global folder, safer this way (7260117)

Adds color changing to the palette button, giving some heads up for buttons being inserted into the palette automatically
image
image
Ensures a landing button is always shown, even if it needs to break the
max row rule
Makes palettes auto contract if they have no buttons inside them
Prevents palettes from being opened if they have no buttons inside them
(f9417f3)
How it looks
2022-02-26.02-30-10.mp4
Why It's Good For The Game

Players have more control over the clutter on their screen.
Buttons are available, but not in the way,
Since any player move of a button saves it, any lack of clarity in the way buttons work will be forced out by buttons not just resetting when a new game starts.
We don't overlap any existing screen elements, unless the upper button list gets really long.
The code is much less crummy (I think, may have made it worse it's hard for me to judge my own work)

If it ends up not being as usable as I'd like, I'll rip out the existing changes and just implement the qol and backend stuff. I think it's worth doing though.
Changelog

cl
add: Expanded heavily on action buttons
add: Adds an action button dropdown that sits just under the normal list in the top left. You can drag new buttons onto it to insert them. Click on it to show its contents, do what you want to do, then click again anywhere to contract it. Alt click it to reset all button positions
add: Action buttons will now remember their position between rounds. So if you really like your flashlight right next to your player for some reason, we support that now
add: When you start to drag an action button, docking ports will appear in places that it can be inserted into. (Outside of just floating somewhere on your screen of course)
del: Removed action button locking, and the associated preference. I'm reasonably sure literally none uses this, but if you do hit me up
qol: Dragging an action button will now give you an outline of its size around your cursor
fix: You can no longer cause the screen to expand by putting an action button on the edge of widescreen, and then resizing to standard.
refactor: Refactors action and button code significantly. lots of little things.
/cl
2022-04-01 09:40:20 +13:00
Fikou
04bb6812d1 fixes modsuit painting (#65753) 2022-03-29 13:29:51 -07:00
Fikou
db0c8a039c MODsuit painting (#65445)
Adds modsuit painting.
2022-03-27 13:50:07 +02:00
capsaicinz
75f7c7a69c changes projectile's armor resistance flag to "armor_flag" (#65487)
* IHATEVARIABLES

* removes the face
2022-03-22 17:14:53 -04:00
Fikou
e440ccb20e modsuit armor (#65559)
headcoder wanted me to do it so lets go
every modsuit now has some amount of armor, this armor is pretty minor (ranging from 5 to 20) and department-dependant (engineers have more laser armor due to having to deal with emitters and whatnot, security suits have more bullet armor etc)
the wound armor values got nerfed for some of the suits
cc @tralezab as person with space armor opinions
2022-03-20 10:27:46 +00:00
Fikou
b98f16d659 modsuit storage empties when being removed from the suit (#65416) 2022-03-18 01:18:13 -07:00
LemonInTheDark
0e904f7032 [MDB IGNORE] Moves non floor turfs off /floor. You can put lattices on lavaland edition (#65504)
About The Pull Request

Alternative to #65354

Ok so like, there was a lot of not floor types on /floor. They didn't actually want any of their parent type's functionality, except maybe reacting to breaking (which was easy to move down) and some other minor stuff.
Part of what we don't want them to have is "plateable" logic.
I should not be able to put floor tiles on the snow and be fine. It's dumb.

Instead, I've moved all non floor types down to a new type, called /misc.

It holds very little logic. Mostly allowing pipes and wires and preventing blob stuff.
It also supports lattice based construction, which is one of the major changes here. I think it makes more sense, and it fixes an assumption in shuttle code that assumed you couldn't place "a new tile" by just hitting some snow with a floor tile.
Oh and lattices don't smooth with asteroid tiles anymore, this looks nicer I think.

Moving on to commits, and minor changes

Changes clf3 to try and burn any turfs it's exposed to, instead of just floors
Moves break_tile down to the turf definition, alongside burn_tile
If you're in basic buildmode and click on anything that's not handled in a targeted way, you just build plating
FUNCTION CHANGE: you can't use cult pylons to convert misc tiles over anymore
Generalizes building floors on top of something into two helper procs on /turf/open, reducing copypasta
Adds a new turf flag, IS_SOLID, that describes if a turf is tangible or not.
Uses this alongside a carpet and open check to replace plating and floor checks in carpet code. This does mean that non iron tiles can be carpeted, but I think that's fine

Moves the /floor update_icon -> update_visuals call to /open
This change is horrificly old, dating back to 8e112f6 but that commit describes nothing about why it was done. Choosing to believe it was a newfriend mistake. Uncomfortable nuking it though, because of just how old it is. Moving down instead

Create a buildable "misc" type off open, moves /dirt onto it
Basically, we want a type we can use to make something support
construction, since that can be a messy bit of logic. Also enough
structure to set things up sanely.

I'm planning on moving most misc turfs onto it, if only because
constructing on a dirt tile with rods should be possible, and the same
applies to most things

Murders captain planet, disentangles /turf/open/floor/grass/snow/basalt

Adds a diggable component that applies the behavior of "digging"
something out from a turf.

Uses it to free the above pain typepath into something a bit more
sensible

The typepaths that aren't actually used by floor tiles are moved onto
/misc

The others are given names that better describe them, and kept in
fancy_floor

Oh and snowshoes don't work on basalt anymore, sorry

Snowed over platings now actually have broken/burned icon states, fixing black holes to nowhere

Misc turfs no longer smooth as floors, so lattices will ignore them

Placing a lattice will no longer scrape the tile it's on

Ok this is a really old one.
I believe this logic is a holdover from kor's baseturf pr
(97990c9)
It used to be that turfs didn't have a concept of "beneath" and instead
just decided what should be under them by induction. This logic of "if
it's being latticed scapeaway to space" made sense then, but has since
been somewhat distorted

We do want to scape away on lattice spawn sometimes, mostly when we're
being destroyed, but not always. We especially don't want to scape away
if someone is just placing a rod, that's dumb.

Adds a path updating script for this change

I've done my best to find all the errors this repathing will pull out, but I may have missed some. I'm sorry.
Why It's Good For The Game

Very old code made better, more consistent turfs for lavaland and icebox, better visuals, minor fix to snowed plating, demon banishment in lattice placement, fixes the icebox mining shuttle not being repairable
Changelog

cl
add: Rather then being tileable with just floor tiles, lavaland turfs, asteroid and snow (among other things) now support lattice -> floor tile construction
fix: Because of the above, you can now properly fix the icebox mining shuttle
refactor: Non floor turfs are no longer typed as floor. This may break things, please yell at me if it does
/cl
2022-03-16 15:55:56 +13:00
tralezab
0c305d0c58 Removes Dynamic Hair Suffixes (#65209)
About The Pull Request

Removes Dynamic Hair Suffixes + Included files
Why It's Good For The Game

Facial hair suffixes went unused, @Twaticus and the spriting team are planning something new for hair that is not going to use this horribly underused and just kinda like, bad system
Changelog

not player facing
2022-03-16 10:03:15 +13:00
Fikou
b40adaecf6 modsuit nominal sound no longer plays when youre deaf (#65402)
* modsuit nominal sound no longer plays when youre deaf

* stupid
2022-03-13 18:10:22 +08:00
Gandalf
684eab3d31 Converts SFX keys into DEFINES (#65146)
About The Pull Request

Simply converts all instances of soundkeys that use get_sfx from strings into defines.

E.g. "sparks" is now SFX_SPARKS
Why It's Good For The Game

It makes life a lot easier when you're looking for a sound effect. You just type SFX_ and you get suggestions in VSC. Plus, it looks better.

image
Changelog

Not player facing.
2022-03-11 10:09:18 +13:00
Fikou
4c250570ef fixes mod plating being called armor in some places (#65314)
* saucy jack

* wario
2022-03-09 01:07:49 -05:00
Fikou
5a74dafb96 Debug modsuits now are insulated (#65315) 2022-03-08 01:13:09 -06:00
Fikou
c0064f7071 mod clamp can carry wrapped crates + mod activation not affected by do after slowdowns + radial icons highlight on extended pieces (#65193) 2022-03-01 13:47:49 -08:00
John Willard
234d4c1217 makes most alerts, defines (#65086) 2022-02-25 00:37:01 -08:00
Thunder12345
c95321042e Resprites power cells, fixes and cleans up power cells and power cell derivatives (#64900)
imageadd: Power cells and the cell charger have been resprited, the charger will now look correct with a much wider variety of non-standard power cells
del: Removed the uncraftable 15k charge high-capacity power cell+, all instances have been replaced with the regular 10k charge high-capacity cell
fix: Erroneous power cell charge indicators have been removed from many non-standard types of power cells
fix: All varieties of marauder mech including the nuke ops mauler come with a bluespace power cell, consistent with other nuke op mechs
fix: Power cell charge indicators will now update while in a cell charger
fix: Potato and other crop batteries will not have their wires disappear when on cell chargers
2022-02-21 02:48:13 -03:00
Fikou
01ff8af153 adds allowed suit storage items to every modsuit theme (#65000)
adds a list of allowed suit storage items to every modsuit, instead of every (other than loader and mining) having the default of a flashlight and internals tank
2022-02-20 18:25:45 +00:00
Doctor Pope
a0a33d3721 Changes Loader Mod core text to include "non-airtight" (#64856)
Changes the Loader modcore text to better explain that it is not airtight or a sealed environment.
2022-02-16 15:40:12 -08:00
Cursed
79963a08f5 Pepper spray module for sec modsuits, Atmos resin module and nukie pyro bundle flamethrower made into module (#64934)
Pyro bundle was broken as when you brought it you would get modsuit and pyro backpack forcing you to either use armor or use backpack without fire protection(which modsuit has). Thanks to Fikou work it became a module
Anti-Tider on the other hand is rarely used(i have never seen it used when i was playing sec or observing) and needed a little buff so now it will also became a module while i will make normal Anti-Tider stream wider(still working on it).
2022-02-16 13:01:12 -08:00
MrMelbert
cb894d853a Makes master compile (fuck) (merge skew moment) (#64930)
#64709 (b5ae68778b) broke master due to a merge skew with a var name changed by #64688 (0d34bc7798)
2022-02-14 16:40:12 -08:00
Aerden
b5ae68778b Firefighter tank can now be equipped in the suit storage slot of atmos modsuits. (#64709) 2022-02-14 15:57:58 -08:00
Fikou
b272f1aa74 Fixes modsuit charging and sphere transformation in 0 gravity (#64857)
Handles modsuit borg recharging on the standard core itself instead of the modsuit modsuit, as it should.
2022-02-13 17:09:50 -06:00
Fikou
0d34bc7798 Mining MODsuit Rework (#64688)
makes dropkey deactivate device modules
fixes speed potion being fucky
fixes doubled up balloon alerts
makes some cell code better i think
makes the gps module open the gps tgui for you, instead of putting a gps in your hand
the loader suit can now hold mailbags

Reworks the mining modsuit.
The suit is no longer cold-proof (this can be mitigated by using module space for thermal regulators)
The suit fits less modules than standard suits, but cant burn in lava.
In suit storage it can carry ore bags, resonators and kinetic crushers.
It features a storage, gps, ore bag, drill, clamp and by default comes with a plasma core, being recharged with plasma ore rather than by power cell.
Features two new modules:

Ash Accretion, it gathers dust from basalt (or snow) you walk on to create a layer of ash around the suit, acting as armor and a speed up that quickly drains when you walk on other terrain.
Sphere Transform, turns you into a fast moving ball that can travel past lava, you cannot use your hands when in this form, but you can launch aoe mining bombs to attack or mine
2022-02-06 15:46:21 -08:00
LemonInTheDark
b48cda6afa Fixes harddels in pinned module code, cleans up a musty pattern that I want to die (#64674)
* Please stop typecasting target, noooooooooooooooooo

* Fixes harddels in pinned module code

The logic for pinned modules was intentionally hanging references to the
mob that pinned the action button. I have depression.

The pinned_to list also was never fully cleared, but that would have
just exasperated the issue. I've converted its use of mobs to refs, and
its use of the module var into something better managed

(Friendly reminder that actions will persist in your nightmares forever
unless they are manually qdel'd, this code wasn't doing that.

Also cleaned up how the pinned_to list is managed, hopefully it's a bit
more action centered now
2022-02-06 13:32:09 -06:00
Fikou
9a5da80232 elite nukie suit improvements (#64668)
deletes the elite armor booster module, instead the elite syndie suit has some armor by default, with the rest being filled by the standard armor booster
makes welding protection a part of armor booster, removes it from nukie suits since they have armor booster
adds new towering sprites, here you can see the space mode and combat mode
2022-02-06 09:39:08 +00:00
Tim
be355edab5 Refactor incapacitated optional arguments (#63771) 2022-01-31 00:04:07 -08:00
Fikou
62add6c9a8 Loader Class MODsuit (#64359)
* loader modsuit
2022-01-28 15:10:02 +01:00
Y0SH1M4S73R
db94f78511 MODsuit Action Circuit Component (+ MODsuit circuit module fixes) (#63755)
This makes several small changes to the MODsuit circuit module:

Adds the MODsuit Action component. When selected, the circuit module opens a radial menu with which to select an action component to trigger.
Due to its similarity to the BCI Action component, both it and the BCI Action component have been made subtypes of an abstract equipment_action component that implements their shared functionality.
Renames the MOD component to the MOD circuit adapter core component.
Changes the "selected module" port on the MOD circuit adapter core to a string port, for consistency with the corresponding input port.
The circuit in the circuit module can be removed. Consequentually, the circuit module no longer comes with a pre-installed circuit.
The "Toggle Suit" signal port on the MOD circuit adapter core can now activate the modsuit.
Makes the circuit module printable in the component printer, for consistency.
Moves the circuit module's code to modules/wiremod, for consistency.
BCI action component properly typechecks the shell it's inserted in.
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
2022-01-25 22:54:08 +00:00
Iamgoofball
c2d7fcffc5 Traitor Roboticists can now purchase the Springlock MODsuit Module from the uplink. (#64224)
Lets them upgrade their suit to be much stronger, while coming at a risk, or place it in other suits to sabotage them.
2022-01-21 16:45:04 -08:00
Fikou
0ba4436dd9 fixes mod devices permanently fucking up (#64237)
if you couldnt equip a device, it would drop it on the ground and fuck up being a nodrop item, fixes that
fixes the modsuit outfits not having internal slots set
adds feedback to not being able to turn on a module due to suit not being active
2022-01-21 02:47:24 -08:00
Fikou
505e441495 Kinesis Module (#64151)
fixes #64029 (Springlock MOD module kills you even when you have Memento Mori necklace)
fixes #64136 (modsuits cant run out of charge)
fixes #64158 (trying to install a battery into a modsuit with free storage space places the battery into storage)
fixes #64186 (ModSuits : taking out cell doesn't give it back)
fixes #64161 (Modsuit cores disappear in construction)
makes mod jetpacks show particles indoors
gives the prototype suit back their upgraded cell (they literally lose 1% of power per 3 seconds with their current one)
Fully reworks the kinesis module to not be TK but lamer, it is now a gravitational anomaly locked module. 

Unique stuff that can be used in fun scenarios
2022-01-18 16:30:11 -08:00
Wallem
71162dee9b Sign Language translation glove changes (Plasmamen & MODsuits) (#64090)
Swaps the check for the gloves for people with the tongue-tied trait into a check for a clothing-based trait.
Makes a variant of the radio gloves for plasmamen, so they can be forced to use their hands too.
Makes a MODsuit mod that lets you sign over comms when your modsuit is activated.
2022-01-17 22:37:44 -06:00
Fikou
fd9a7f8a58 MOD update: Modular Cores (#64042)
* Modsuit update - Cores
2022-01-15 13:54:53 +01:00
capsaicinz
83e0530ec0 honkerative MODsuit theme, and paint-kit! (#64064)
you've all been waiting for it- clown operative MODsuits! clown operatives gain access to a MODsuit paint kit free of charge, and can use this to turn their boring old syndicate MODsuits into funny, clown-styled ones! this has no mechanical change whatsoever, aesthetics only.
2022-01-15 00:14:01 -08:00
OrionTheFox
1b84112dba [READY] Adds the Hat Stabilizer Module, inbuilt to the Captain and CC MODsuits (#63795)
The Hat Stabilizer Module lets you balance hats on top of your modsuit. Neat!
2022-01-14 02:06:26 -08:00
tralezab
a61b884f30 Time Eradication Modsuits (#63999)
* reworks chrono legionnaire into a MODsuit + modules

* organizes MODsuit files
2022-01-13 23:44:45 -06:00
Time-Green
8148c64115 Adds a springlock death achievement (#63987)
* Adds a springlock death achievement

* The man inside the MODsuit

* Update code/datums/achievements/misc_achievements.dm

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>

* Reviewssssss

* Resprites the man inside the modsuit

* Adds your stupid fucking newline

* removes invisidixel

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2022-01-13 15:45:40 -05:00
MrMelbert
9550321d49 Adds warm (hot) (very hot) paper dispenser maintenance MOD (#63845)
Adds a paper dispenser mod to the maintenance MOD loot pile.
The paper dispensed has a small chance to burst into flames with every paper made.
2022-01-10 19:26:35 -08:00
Fikou
0e8e884f24 Adds Anomalock Modules! (#63836)
* Adds anomaly modsuit modules, various fixes for other modsuit modules
2022-01-06 20:40:28 -06:00
Arturlang
120d38b8a9 Fixes MODsuit DNA scanner runtimes (#63819) 2022-01-05 13:35:59 -06:00
Fikou
24082a2b4f Adds Maintenance MOD Modules! (#63791) 2022-01-04 15:47:21 -08:00
Fikou
017341d5ac MODsuit balance/content update: suits dont slow you down undeployed, waddle/noslip modules (#63749)
Modsuit balance update
2022-01-03 16:44:16 +01:00
Fikou
e72c035640 modsuit update: you can now pin modules to your action buttons (#63745) 2022-01-02 04:54:19 -08:00
SmArtKar
c7ac1eee59 Fixes runtime when MODsuit gets EMPed (#63706)
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2021-12-31 15:57:38 -08:00
Fikou
4adebd7f02 modsuit works with speed potions + ai movement fix + file sortage (#63670)
modsuit examining now tells you about wire panels
fixes being able to remove stuff with the dna lock
fixes 63650
fixes 63633
sorts module files
2021-12-29 13:44:27 -08:00
Fikou
f58848e2ec modsuit patch one (#63638)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2021-12-27 14:47:59 -08:00
Fikou
7b38dd4ff7 MODsuits (#59109) 2021-12-24 12:00:24 -08:00