Skip to content
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

[MIRROR] Prevent borgs resisting from grabs when they are locked down #2382

Merged
merged 1 commit into from
Mar 12, 2024

Conversation

Steals-The-PRs
Copy link
Collaborator

Mirrored on Nova: NovaSector/NovaSector#1407
Original PR: tgstation/tgstation#81904

About The Pull Request

Prevents borgs resisting from grabs when they are locked

image

(yes, there's small baloonies message barely visible)

Why It's Good For The Game

Isn't it fun to try and pull some locked down borg while they press B like hundred times per second so you can't even move them.

Changelog

🆑 Iajret
fix: As a borg you shouldn't be able to resist from grab while locked down
/:cl:

…#1407)

* Prevent borgs resisting from grabs when they are locked down (#81904)

## About The Pull Request
Prevents borgs resisting from grabs when they are locked


![image](https://github.com/tgstation/tgstation/assets/8430839/3fc8dee4-3539-4891-9a91-bc27b3610da2)

(yes, there's small baloonies message barely visible)
## Why It's Good For The Game
Isn't it fun to try and pull some locked down borg while they press B
like hundred times per second so you can't even move them.
## Changelog
:cl:
fix: As a borg you shouldn't be able to resist from grab while locked
down
/:cl:

* Prevent borgs resisting from grabs when they are locked down

---------

Co-authored-by: Iajret <[email protected]>
@Iajret Iajret merged commit cbcd96b into master Mar 12, 2024
24 checks passed
@Iajret Iajret deleted the upstream-mirror-1407 branch March 12, 2024 17:39
AnywayFarus added a commit that referenced this pull request Mar 12, 2024
Iajret pushed a commit that referenced this pull request May 8, 2024
* Fix pride pin reskinning (#82920)

## About The Pull Request

**Edit: Since writing, this pr has been updated to address failing CI
based on code-general suggestions, invalidating the previous
descriptions. The previous descriptions has been included as spoilers
for posterity**

Right, so, this has gone from just a simple pride pin fix to realizing
CI fails with it to doing a more complex lasting fix based on
suggestions.

Recap time. Objects get reskinning set up if they have `unique_reskin`
set when `Initialize(...)` runs.

https://github.com/tgstation/tgstation/blob/9145ecb7e1e44635a1056fc704adfa3d764325e6/code/game/objects/items.dm#L267-L269
Because pride pins use a global list, we set it in `Initialize(...)`...
After we call the parent.

https://github.com/tgstation/tgstation/blob/9145ecb7e1e44635a1056fc704adfa3d764325e6/code/modules/clothing/under/accessories/badges.dm#L196-L198
Obviously this fails.

However, moving this *before* `Initialize(...)`, while fixing the issue,
causes CI to fail due to calling `register_context()` twice.
Why? Well, it's simple. We automatically call `register_context()` if we
have `unique_reskin` set, as seen above, but we *also* call it on
accessory `Initialize(...)` due to it having its own context.

https://github.com/tgstation/tgstation/blob/0c562fd74299f8ce92a81c0a932b8ec4862189af/code/modules/clothing/under/accessories/_accessories.dm#L29-L31
This causes it to try register the same thing twice, which doesn't
_break_ things, but it sure as hell isn't clean.

So talking about this with San in code general, we decided to try go
with the following:
We add two new procs, `setup_reskinning()` and
`check_setup_reskinning()`, and handle all this fuckery within those.
This lets subtypes override them with their own new checks or
differences in setup.
Then we override `setup_reskinning()` for `/obj/item/clothing/under` and
`/obj/item/clothing/accessory` to not register context again, and do the
same for `/obj/item/clothing/accessory/pride` but while also setting
`unique_reskin`.

This fixes it.

<details>
  <summary>Previous implementation for posterity</summary>
  
Back from my short code break, time to fix some of the things I've been
annoyed by.

Firstly, I noticed pride pins could no longer be reskinned since the
alt-click refactor.
Looking into it, this seems to be because we now only register this on
`Initialize(...)` if `unique_reskin` has been set:

https://github.com/tgstation/tgstation/blob/9145ecb7e1e44635a1056fc704adfa3d764325e6/code/game/objects/items.dm#L267-L269
While due to using a global list we don't set this in the item
definition, but in `Initialize(...)` :

https://github.com/tgstation/tgstation/blob/9145ecb7e1e44635a1056fc704adfa3d764325e6/code/modules/clothing/under/accessories/badges.dm#L196-L198
Where we call the parent proc _before_ setting `unique_reskin`, and thus
not registering our ability to reskin.

So all we do is set this to our global list _before_ we call the parent
proc.
```dm
/obj/item/clothing/accessory/pride/Initialize(mapload)
	unique_reskin = GLOB.pride_pin_reskins // Set before parent proc checks for it.
	. = ..()
```
This fixes it.
  
</details>


## Why It's Good For The Game

Fixes pride pin reskinning.
Theoretically makes it easier to avoid this happening in the future, and
allows `setup_reskinning()` to be manually called in the case of values
being edited post-initialize.

<details>
  <summary>Previous pitch for posterity</summary>
  
Fixes pride pin reskinning.
  
</details>

## Changelog
:cl:
fix: Pride pins can be reskinned again with alt-click.
/:cl:

* Fix pride pin reskinning

---------

Co-authored-by: _0Steven <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants