-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chameleon controller implant (Clothing fast switch) #33887
base: master
Are you sure you want to change the base?
Chameleon controller implant (Clothing fast switch) #33887
Conversation
The UI looks really good. it seems to work well in the video too. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR!
It looks pretty good, though I just have some stylistic issues, you should probably be using FancyWindow, and you should see if you can just use the SetOutfitCommand
code or maybe integrate the two to share implementations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed there's a lot of shared/duplicate code between this and the SetOutfitCommand
It might be useful to look or even directly integrate the two as they do a very similar job.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We talked about this on discord, the issue right now is that although there is a decent amount of duplicated code / similar code, the it would actually be relatively difficult to combine the functions. The big issue is that the set outfit command doesn't go off of jobs and is based off StartingGearPrototype
which kind of messes stuff up. I might be able to somehow combine them partially but I don't really think the complexity would decrease that much unfortunately 😔
If someone with more experience with loadouts could give some pointers or anyone has ideas, I'll totally combine them but for now I'm just going to leave it separate.
Content.Client/Implants/UI/ChameleonControllerBoundUserInterface.cs
Outdated
Show resolved
Hide resolved
Content.Client/Implants/UI/ChameleonControllerBoundUserInterface.cs
Outdated
Show resolved
Hide resolved
I love this. My one issue would be folks meta gaming people with default outfits, but that remains to be seen. |
I actually did think of this! It will use your loadout that you have for the job so everyone can customize it. Hopefully it wont be too much of an issue |
Absolutely hilarious how absurd metagaming can be sometimes. "You've been going in and out of maints with the most basic fit of all time. I'm arresting you" |
gotta make sure all the antags redtext, what do you mean this is a role-playing game????? |
36fa086
to
236c7a0
Compare
this is sooo cool actually amazing idea |
Tested with the new PDA and it works! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for addressing the review a month ago!
I just had some nitpicks (of course, it's me) and some questions.
Imagine my shock when a maintainer made mistakes 3 months ago.
Also, any thoughts on renaming the "Chameleon Controller" to something else, like "Chameleon Tailor/Outfitter"? "Chameleon Controller" sounds too generic and doesn't make it painfully obvious what it does.
I'll probably re-review this again after you address these changes, in which I'll look more into the UI and whatever is going on with the outfit code.
Anyways, have fun trying to remember what this PR was doing!
Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml
Outdated
Show resolved
Hide resolved
- type: InstantAction | ||
icon: { sprite: Actions/Implants/implants.rsi, state: chameleon } | ||
itemIconStyle: BigAction | ||
event: !type:ChameleonControllerOpenMenuEvent |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
question: I also noticed that many of the other implant actions have a set number of charges. Do you think unlimited would be fine balancing-wise?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at the usage rate of chameleon clothing (Its really low) yeah I don't think is an issue at all! This was never intended to be a specific amount of uses
Content.Client/Implants/UI/ChameleonControllerBoundUserInterface.cs
Outdated
Show resolved
Hide resolved
As another note, the reason why its called "Chameleon Controller" instead of something super specific is because I have a lot of other stuff planned! This is only the first PR of a few. Some other stuff I'm thinking of adding: I agree, the name isn't the best, but I don't want to make it super specific to clothing because of all that! |
i disagree with almost everything on this list. here's why: |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
About the PR
Added a chameleon controller implant that you can get in the standard chameleon bundle!
Why / Balance
Right now it takes a very long time to switch all the clothing one by one. This will allow you to still have fine grained control, but also quickly switch entire jobs in a matter of seconds. With the AI ever watching hopefully this lets antags using the chameleon clothing get a little more of an edge. It also uses your loadout from your profile, so you can make a decent amount of customization changes!
I'm planning on adding more stuff to this implant as well (E.g chameleon ID icon change) but wanted to keep it simple for the first PR.
Technical details
It is a lot... Most of the file changes are just UI stuff, the thing that you should probably focus on is
ChameleonControllerSystem.cs
andSharedStationSpawningSystem.cs
. The loadout system is confusing so there is a lot of odd logic. Basically, I get the users profile, try to find if they have a loadout for a given job, if they do, use that as the clothing, if they don't and if they don't create a new one with the default!Then, I got through every slot and try to get the item stored for that slot with the new
GetGearForSlot
function.If their profile doesn't have anything for that slot, I see if there is any "starting gear" for that goes in the slot.
Media
2024-12-15.21-00-54.mp4
Requirements
Breaking changes
Changelog
🆑 Beck