Skip to content

Commit

Permalink
Buget cuts (#2942)
Browse files Browse the repository at this point in the history
* stuff

* works mirror

* cool stuff

* oh

* Update fire_ball.dm

* Wizard Spell Cooldown Changes (#76981)

Mutate prev = 40 / 37.5 / 35 / 32.5 / 30
Mutate now = 40 / 35 / 30

Spell cards prev = 6 / 5 / 4 / 3 / 2
Spell cards now = 6 / 4 / 2

Teleport prev = 60 / 50 / 40 / 30 / 20
Teleport now = 60 / 40 / 20

Shape change prev = 20 / 16.75 / 12.5 / 8.75 / 5
Shape change now = 20 / 12 / 4

Swap prev = 30 / 24 / 18 / 12 / 6
Swap now = 25 / 15 / 5

I also deleted the invocation for swap to make it more usable. When I
added the spell I thought it would be used more but I have never seen it
been used.
For a lot of spells it seems like it is useless to upgrade them, since
it costs a lot but does little in a lot of cases. Maybe this goes for
more spells than my pr changes but I wanted how this comes over first. I
rather do not do balance changes since it ruins my gbp even though I am
trying to improve the game but I still thought this was worth it since
it might also make the swap spell more relevant.
:cl:
balance: Changes some cooldowns and upgrades of spells.
/:cl:

* Update _base_event.dm

* fixes cursor catchers not working without widescreen (#77372)

## About The Pull Request
apparently vis x and vis y dont exist unless the object is transformed

## Changelog
:cl:
fix: sniper scope and kinesis should work without widescreen
/:cl:

* port (tgstation#75665)

* Restores drone holiday headwear and extends it to assistants (#78347)

drone_hat defined a piece of headwear that drones would spawn with when
the corresponding holiday is active. While peeking at holiday code for
my own amusement, I noticed that it wasn't actually used anywhere and
must have become deprecated at some point. I have re-implemented that
functionality, and extended it to assistants.

Now, all drones/assistants spawning without headwear during a holiday
will receive the holiday's defined holiday_hat (if there is one). This
modifies a few of the holiday_hat entries, particularly the mask entries
since the new system is head-only, and adds a few more in there as well.

![image](https://github.com/tgstation/tgstation/assets/28870487/f44d8499-957c-4b71-843b-26ab77f46ff4)

There's probably some balance implications to, say, spawning all the
assistants with fire helmets or pirate bandanas, but I see that as being
balanced out by the infrequency of these cases.

Restores an piece of drone code that fell off the wagon somewhere
amongst the removals and reworks.

As for implementing it for assistants, seeing assistants in funny hats
makes me laugh a lil bit :)
:cl: Rhials
qol: Restores holiday hats for drones.
qol: Extends holiday hat behavior to assistants. Get festive!
/:cl:

* Adds a sleeve of tiling colors for several holidays. (#79188)

Inspired by #79108. This concerns Christmas, many national holidays and
a few gimmicky ones where it'd make sense.

Oh, yeah, I've also added "Sacrebleu" to the list of possible station
prefixes for the Bastille day, since "Merde" is already there.

<details>
<summary>some screenshots (got tired of restarting the server over and
over halfway through)</summary>

![Booze Complex Fifty-Four 2023-03-17
090724](https://github.com/tgstation/tgstation/assets/42542238/c09e6c3d-8fab-45d6-802e-13687e83b9a7)

![Merde Tomb Seventeen 2023-07-14
084422](https://github.com/tgstation/tgstation/assets/42542238/045f7c32-9a17-4e24-9d33-c51596e348e6)

**No, it isn't the french flag again, it's the tram tiles that always
display the pattern in vertical stripes...**
![Southern Cross Outpost 39 2023-02-06
012622](https://github.com/tgstation/tgstation/assets/42542238/f6e24875-35b0-4b03-a4f8-72f8d976005d)

removed the white) :
![Festive Space-hulk XLIII 2023-12-25
013720](https://github.com/tgstation/tgstation/assets/42542238/8328ff54-88d9-4be6-9d5e-773fbba7046c)
</details>

Implemeting a smidge of festivity and/or celebration to several
holidays. Open to suggestions and thoughts.

:cl:
image: Several holidays now have themed floor and tram tiling.
/:cl:

* Dehardcodes HR core blacklist (#77075)

Alternative to / closes #77069

Their PR reminded me I wanted to de-hardcode this list at some point and
make it rely on a flag set on the jobs. So this pr does that.

I also made a combination flag of the flags copied across all station
jobs. Makes it easier to see at a glance which jobs have a unique flag
set and which are just copied across everything.

Makes it more maintainable for future us / downstreams to add new jobs
which may potentially be in this blacklist.

:cl: Melbert
fix: Prisoner slots can no longer be controlled by Plexagon HR Core.
(special things to distributivgesetz)
fix: HoPs can open more assistant job slots if a non-assistant job is
the overflow role
code: Dehardcode the HR core blacklist for jobs which cannot have more
slots opened by the HoP
/:cl:

* Blocks (most instances of) screen elements from entering base atom `/Click` (#82236)

Fixes #76495

This PR prevents (most) screen elements from running base
`/atom/proc/Click` and `/mob/proc/ClickOn()` when clickend.

(The only exception I found to it was the cursor catcher for scopes.)

Why?
Most, if not everything in `ClickOn` is considered "in world"
interacting. It abides by `incapacitated`, runs `faceAtom`, etc.
This means, currently, you can "interact" with screen elements using in
world elements. For example, TK-ing / pointing a gun at your mood face.

Right now this affects very little, but there is a large potential for
errors. All you have to do is forget a sanity check in `afterattack` and
suddenly you have an item that can affect your screen objects.
The only example I found was the `/item/godstaff`, which can color some
of your screen elements. But there may be more. Like guns.

Note:
Many, many screen elements ALREADY do not fall down into atom click.
They simply don't call parent. Which is totally fine.
I am just ensuring ALL* screen elements do not fall down into atom
click.

:cl: Melbert
fix: Blocks mobs from trying to "physically" interact with some of their
hud elements, such as using Telekinesis or point a gun at your mood
meter.
/:cl:

* spell cards fix

* Standardizes Adding Datum Actions into a proc/define (Bonus AI Support) (Bonus Useless Code Cleanup) (#79389)

The way we add multiple actions has been very unstandardized, with
several implementations of this code doing certain things wrongly (i.e.
not nullchecking `ai_controller`), so let's do something in the vein of
cases. There are still a few things that simply can't be done here, but
this gets the most generic "give my mob some actions and also maybe tell
the AI about it" stuff done.

This is only useful in cases where we don't ever need to reference the
ability ever again when it's added. In an ideal world we would never
need to reference the ability again and it would all be self-contained,
but this is not an ideal world. However, a lot of the latticework has
been built around certain implementations of this behavior making
refactoring it just a bit easier.

I also did a lot of auditing on `Destroy()` stuff, because
`/datum/action`s listen to signals when their parent is `qdel`ing, so we
don't need to neither hold nor clear references on our mob's
`Destroy()`. This was all cleaned up now because even if we couldn't use
`grant_multiple_actions()` (the new proc I add in this PR), it's just
not useful at all and will further hinder efforts to implement this new
proc.

Also also, I noticed in some places (such as megafauna) that we were
initializing a lot of datum actions _in nullspace_. We didn't pass the
`src` argument to `New()`. I quickly fixed that, as well as got rid of
the useless types we had going on.

Also also also, I added a define macro to handle some of the cases that
melbert was speaking about in his review down below. All you need to do
is invoke the define on the typepath, and you should be good to go from
there. There's probably a better way to do it, lmk though. we do the
whole `do while` thing in order to prevent code leakages.

* Very easy to change the implementation. In case we need to do
something different in how we add actions or anything like that, we can
simply just edit instances where this proc is located.
* Standardizes addition behavior. There's a lot of cases like the
aforementioned not-null-checking `ai_controller` that we really need to
look out for, so having it all in one accessible proc ensures standard
behavior.
* Reduces copy-pasta. A lot of mobs had their own individual
implementation of this, so let's just clean up all those lines of code.
:cl:
refactor: The way mobs get specialized actions (like revenants shocking
lights or regal rats summoning rats to their side when you slap them)
have been modified, please report any bugs.
/:cl:

This doesn't touch the following case FTR:
* Instances where we need to do work on the `/datum/action` after we
`Grant()` it, like if we were to edit some variable on the action or if
we need to call procs on said action. I don't like how the current code
is so reliant on storing a variable to it, but that's a windmill to
attack another time.

* Adds 'Bloody Spreader' component that bloodies everything it touches (#78743)

Adds 'Bloody Spreader' component that bloodies everything it touches!

For example inserting an item into it if it is a storage item. Or
entering it if it's a turf, or bumping onto it, or... you get the point,
hopefully.

Added this component to the MEAT backpack, meat slabs, bouncy castles,
meateor fluff, meateor heart, and the heretic sanguine blade.

Gave most of these the blood walk component as well, which spreads blood
if it's dragged around.

Meat slabs contain a limited amount of both components, eventually they
will 'dry out'.

Meat isn't meaty and squelchy enough, this will make it meatier. It also
makes the janitor suffer.
:cl:
code: Adds 'Bloody Spreader' component that bloodies everything it
touches!
code: For example inserting an item into it if it is a storage item. Or
entering it if it's a turf, or bumping onto it, or... you get the point,
hopefully.
add: Added this component to the MEAT backpack, meat slabs, bouncy
castles, meateor fluff, meateor heart, and the heretic sanguine blade.
add: Gave most of these the blood walk component as well, which spreads
blood if it's dragged around.
add: Meat slabs contain a limited amount of both components, eventually
they will 'dry out'.
code: Added a signal for when an item is entered into storage.
/:cl:

* new wizard ability and basic leaper refactor (#79237)

refactors leapers into basic mobs and adds a new ability for wizards.
for 2 points wizards can buy their own leaper pet. they will get a
contract which lets them pick their pet's name and color

![thefrogs](https://github.com/tgstation/tgstation/assets/138636438/8df9b893-d07d-4e51-a9fa-644830cc7a81)

after they sign the contract they will get a frog statue which is used
to contain the leaper. players can use this statue to release or recall
the leaper into the statue. when its in the statue it will slowly regain
health or even revive from the dead, but if it gets gibbed then the
statue will be useless.

also adds a new ai behavior for leapers which lets them go swim in water
(and splash around) for a period of time. i gave this behavior to frogs
and crabs too

when riding the leaper, the players will get access to all its
abilities, it now has new abilities, it can create frog minions that
suicide bomb the enemies and it can also create a shower of poisonous
structures.

https://github.com/tgstation/tgstation/assets/138636438/931aa7b4-09f0-493f-bdb6-f3bdd0915b22

also when riding the leaper, players can point at walls near it so it
will destroy it. alternatively players can give commands to their
leapers to use abilities and to follow them if they are not riding it.
wizards cant be force dismounted from their frogs, and only wizards can
ride the frogs.

this also removes leapers from cytology as they now are much more
dangerous and have a new home

refactors leapers into basic mobs, and gives more gameplay opportunities
for wizards
:cl:
refactor: leapers have been refactored into basic mobs please report any
bugs
add: wizards can now summon a leaper pet
removal: removes leapers from cytology
/:cl:

* double

* Re-pr of #70522 "Space Dragon Update: Up Close and Personal" (#75607)

This PR is a re-pr of ##70522 , with some tweaks:

Notably:

- Wavespeak is not a say override, but instead uses a mindlink. Meaning
carp and space dragons can still talk verbally, but they can also use
telepathy to talk to all carp and the dragon.
- I would refactor Mind Linker a bit further to be a full datum rather
than a component but that's for another time.
- Removed the gravity aura component in favor of using the existing
forced gravity proximity monitor.
    - Also fixed a bug involving that. Lol.
- Minor refactoring around the place.
- Reduced the volume on a lot of space dragon sounds.
- Edited the roundend report for Space Dragons to collate all entries
into one per player.

![image](https://github.com/tgstation/tgstation/assets/51863163/5c3222b2-a80c-4df9-a060-4c5733ab712f)

Space dragon still plays pretty "play lame win game" right now, the
optimal strategy for them is to find the cheesiest spot for a portal and
spam their stun / fire breath to make it unreachable.

I was a fan of the original PR so I updated it and brought it back.

:cl: IndieanaJones, Melbert
balance: Space Dragon can no longer choose its rift locations freely,
and instead is given 5 pre-determined locations to pick from instead
balance: Space Dragon itself has been buffed in order to support a more
confrontational playstyle, however its wing gust now requires a line of
sight to targets in order to affect them.
balance: Player Space Carp from rifts now have buffed health, but
reduced object damage values. They also gain a temporary speed boost
when hit by Space Dragon's fire breath instead of taking damage.
balance: Carp rift spawn times have been reduced, the healing AOE is now
a 3x3 instead of a 1x1, and apply normal gravity in a large radius
around them
balance: Space Dragon and rift carps now communicate on a private mind
link channel via action button similar to Raw Prophets and Slimepeople.
fix: Fixed Gravity Generator forced gravity not applying.
fix: Intern Announcer will no longer replace Space Dragon announcements.
qol: The roundend report for space dragons now collates all players who
played a carp into one entry, rather than one per carp spawned.
qol: Space Dragon sounds are much less ear piercingly loud.
/:cl:

---------

Co-authored-by: IndieanaJones <[email protected]>
Co-authored-by: IndieanaJones <[email protected]>

* Revert "new wizard ability and basic leaper refactor (#79237)"

This reverts commit 7d592d1.

* Revert "Standardizes Adding Datum Actions into a proc/define (Bonus AI Support) (Bonus Useless Code Cleanup) (#79389)"

This reverts commit ac0f461.

* Revert "Adds 'Bloody Spreader' component that bloodies everything it touches (#78743)"

This reverts commit 711c1f3.

* Revert "double"

This reverts commit 05409aa.

* Reapply "Adds 'Bloody Spreader' component that bloodies everything it touches (#78743)"

This reverts commit a48b8ea.

* feex

* Improves Cursed Items Wizard Event (#79941)

I was bored and stumbled upon this and I remembered how pissed off I got
that smoke would spawn on all humans during this event despite nothing
*magical* happening to them. So, I fixed that (as well as saving us from
iterating through `alive_mob_list` TWICE) and did some other code
improvements while in the area.

* We use define keys instead of raw strings (typo prevention)
* No more single-letter variables (way more readable too)
* Better indentation
* Better list multilining
* Some more documentation
* Use legitimate boolean dichotomy

yep it looks good

you don't get smoke spawning on you for no reason at all when you didn't
do anything
:cl:
fix: During the "Cursed Items" wizard event, you should only have smoke
spawn on you if you actually had a cursed item equipped to you.
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Bounty Hunters, Fugitives, and Paradox Clones now have orbit menu categories (#75774)

This adds Paradox Clones, Fugitives, and Bounty Hunters to their own
orbit category.

Paradox Clones use the hostile red color for the dropdown menu, while
Fugitives use orange and Hunters use yellow.

Here's how it looks:

![image](https://github.com/tgstation/tgstation/assets/28870487/1b3642da-ec0e-40e6-abd5-c21c7302010f)

This also fixes the wizard minion antag datum's antagpanel_category
being text, rather than the proper define.

Tracking these guys down doesn't need to be as hard as it is.
:cl:
qol: Fugitives, Bounty Hunters, and Paradox Clones will now appear in
the orbit menu.
/:cl:

* Deviant Crew antag panel category, Obsessed crew now shown in orbit menu, Paradox Clone orbit tab is now white (#80450)

## About The Pull Request

This rounds up the "Other" (Brainwashed, Hypnotised, Wizard Revenge, and
Obsession) antagonist category into the new "Deviant Crew" category.
This tab is white!

Obsessed crew are now displayed in the orbit panel (no other antagonists
in this group are though).

The Spacetime Aberrations (Paradox Clone) group has also been changed to
be white.

Here's how that looks:


![image](https://github.com/tgstation/tgstation/assets/28870487/415b8cbb-7ac3-4e24-9f74-466480c2aab0)
## Why It's Good For The Game

As was the case with paradox clones, observers can already discern when
a player is obsessed. It shouldn't be a pain to observe these guys,
especially when they're a more RP oriented antag that are (usually)
deserving of the audience.

I made paradox clones and obsessed the same color because they're both
in the broader spectrum of "fucked up crew".

Also converts common text entries to a single define. That is good
coding practice I think.
## Changelog
:cl: Rhials
qol: Obsessed crewmembers are now displayed in the orbit panel.
qol: The Paradox Clone orbit menu tab is now white. Neat!
/:cl:

* Wizard Apprentices now spawn at their summoning contract, instead of the Wizard Den (#80473)

## About The Pull Request

Wizard apprentices will now spawn on the summoning contract's turf,
instead of in the wizard den.

Originally, apprentices would be spawned on the contract with a puff of
smoke, and then sent to their spawn point by the wizard antag datum. It
makes more sense for them to spawn in with the smoke, and whoever
summoned them.
## Why It's Good For The Game

More consistency with how most other antag spawners work.

I watched a wizard get confused by this last night which was kind of
funny and prompted me to make this change.
## Changelog
:cl: Rhials
qol: Wizard apprentices now spawn on the same tile as the contract that
summoned them.
/:cl:

* Minor update to admin secrets panel (free antags for everyone) (#81292)

## About The Pull Request
Remakes a button in admin secrets panel from everyone is traitor to
everyone is admin chosen antag.


## Why It's Good For The Game
Slightly better buttons for admin to push


## Changelog
:cl:
admin: remade everyone is traitor into everyone is antag in secrets
panel
/:cl:

* Replace cigarette smoke with particles, add a big puff when taking cigarettes out of your mouth (#83101)

- Cigarette particles are now particles rather than baked in
- Taking a cigarette out of your mouth release a big puff of smoke

https://github.com/tgstation/tgstation/assets/51863163/183b39e7-3367-43a1-b750-99e66838d60f

Looks better

:cl: Melbert
add: Cigarette smoke is now more smokey.
add: Taking a cigarette out of your mouth will let out a big puff of
smoke.
/:cl:

---------

Co-authored-by: san7890 <[email protected]>

* Staff of Shrinking for the wizard (#83115)

<!-- 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. -->

Adds a new staff for the wizard that shoots shrink rays. Also a
corresponding wand that comes with the wand belt. Shrinking is a
mechanic already implemented by abductors, but it's not often used
because it doesn't fit their kit super well. That's a huge shame because
shrinking stuff/people is really funny. And you know where funny stuff
fits well? The wizard kit.

OH YEAH and being shrunken now gives you the squash component so you can
be squashed as though you were a roach, though this only deals 10 damage
instead of gibbing you

tiny staff

![68747470733a2f2f696462322e616666656374656461726330372e636f2e756b2f696d616765732f32353836323339392f38333131352f31333237383435323531373936343834343132322e706e67](https://github.com/tgstation/tgstation/assets/8345184/af777602-036f-4171-ad43-5dafa7b29414)
tiny wand

![68747470733a2f2f696462322e616666656374656461726330372e636f2e756b2f696d616765732f32353836323339392f38333131352f393439333932353034373033303238393530372e706e67](https://github.com/tgstation/tgstation/assets/8345184/81241789-404f-4d8e-8473-2ec74b171f55)
exhausted wand turns back to a big wand sprite :)

![68747470733a2f2f696462322e616666656374656461726330372e636f2e756b2f696d616765732f32353836323339392f38333131352f323039323438333731323537303338313239362e706e67](https://github.com/tgstation/tgstation/assets/8345184/c2073952-c16b-4113-9ca9-527cfdbcfd16)

Shrinking stuff is funny, plus it gives the wizard something new to do
besides polymorphing everyone or turning everybody to stone or ei
nathing people.

<!-- 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. -->

:cl:
add: New funny wizard staff/wand that shrinks stuff.
add: Being shrunken now leaves you vulnerable to being crushed to death.
/:cl:

<!-- Both :cl:'s are required for the changelog to work! You can put
your name to the right of the first :cl: 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. -->

* Adds 9 wizard perks (#83262)

Add new spells category for wizards: Perks. perks are not really spells,
but useful (and not so useful) improvements for your wizard which
provide more variety for builds.
https://youtu.be/eeVvUkVE3xQ
All perks cost 2 points, they work without wizard’s uniform, cannot
refund, effect start only at the station (perks will not work at the
wizard’s base). Perk can only be purchased once.

9 added perks:
1. Four Hands - gives you 2 extra hands.
2. Worm Born - on death, wizard turns into a large worm and can no
longer return to his previous form.
![Снимок экрана 2024-06-02
223645](https://github.com/tgstation/tgstation/assets/120736708/2dfac647-4c3c-4824-8320-73fc98cc61fd)
3. Dejavu - every 60 seconds returns wizard to where he was 60 seconds
ago and restores his health to the amount he had 60 seconds ago.
4. Sale Off - When buying something from a book of spells, wizard has a
chance not to spend points for the purchase, depending on the purchase
price. 1/2/3/4 price chance 50/25/15/10%. You can no longer refund
purchases.
5. Gamble - Give wizard 2 random perks.
6. Heart Eater - By eating someone's heart, the wizard has a chance to
either increase his maximum HP and stamina by 25 or lose 10 percent of
his maximum HP but get a random mutation.
7. Slime Friends - Slimes is your friends now. Every 20 Seconds you
spend 50 nutriments to spawn random big angry slime.
8. Transparence - wizard becomes half transparent, any projectiles pass
through, but you loses 25% of max HP and you get a stalker who will
follow you to the station to kill you.
9. Magnetism - Wizard gain gravitational anomaly that orbit around him,
which attracts objects and people.
https://youtu.be/gp6ZtTrZu7I

Gives the wizard more options to create a fun and interesting builds

:cl:
add: new wizard spells category - perks.
add: adds 9 wizard perks.
/:cl:

---------

Co-authored-by: Jacquerel <[email protected]>

* Use defines for spellbook categories (#82938)

Spellbook entries' categories now use defines

Prettier
Less of a chance for misspelling a category
Renaming a category is easier (for localized downstreams especially less
strain)

* Fixes the duration of wizard spell mutate (#84263)

## About The Pull Request
Fixes the remove_mutations proc of the wizard's spell mutate, so it
calls the parent and actually removes the said mutations. Honestly the
fact that it previously didn't call the parent function is byond me.

Fixes #79491

## Why It's Good For The Game
No more infinite hulk for wizards!

* Adds Untie Shoes, a 1-point wizard spell. (#84880)

Added Untie Shoes. This is a wizard spell that's seemingly weak but has
some power under the surface.

The first level unties, then knots shoes.
The second level allows you to tie jackboots and the like.
The third level allows you to summon shoes if the target has none.
And, for the true pranksters out there, the fourth level makes
invocations silent and gestureless.

Also, it always slows noncarbons down a bit.

It's also given to clowns after Jubilation, and the wizard themself, at
max level for the latter, if they dont have it already.

Knotted shoes make the wearer unable to walk without being stunned and
tripping on the floor. Let that sink in! Anyone hit twice by the spell
is forced to crawl around or risk stepping on broken glass. Worse, they
need to go through a looong process to untie their shoes to even drop
them.
This spell has infinite range, although casting from beyond screen range
or through zlevels multiplies the cooldown by ten, which is excellent
for softening up targets.
It's a 1-point, ranged, supportive spell with low cooldown, which makes
it excellent as a deterrent for harassing wizards at long range -
something they often lack answers to.
It's great for whittling down antimagic charges.
It's funny.

This spell is silly, comical, yet also very versatile and adds a rather
large amount of depth to Wizard while also expanding on shoe knotting,
which is inherently funny and rarely looked at.

I also wanted it to work through camera consoles because that's
EXTREMELY funny. The long cooldown should prevent it from being too
annoying.

:cl:
add: Adds Untie Shoes, a 1-point wizard spell. It can be upgraded to
untie jackboots, summon shoes to untie, and become completely silent!
/:cl:

* Allows for some locs to have spells cast while inside, such as PAI cards (for PAIs), AI cards (for AIs), and mechas (#77418)

Spiritual successor to #76716

- Some spells can now be cast while the mob is within the contents of
certain atoms.
  - PAIs can now cast if within a PAI card
  - AIs can now cast if within an AI card
  - People within vehicles (mechas and cars) can now cast their spells

- Repulse and Knock now have unique interactions for being cast within a
locker

Carlac's PR gave me an idea for how to tackle this in a relatively clean
way so I went ahead and adapted the suggestion to something that works
for the cast chain.

This isn't perfect, some spells will need to be updated, but they can be
done piecemeal.

This is something that, IN THEORY, should have already been wholesale
supported by the spell refactor - any atom you pass into the cast chain
should "just work ™️ ", either rejecting if it fails the valid target
check or doing the spell effects as if the atom passed was the caster.

🆑 Melbert
add: PAIs can now cast wizard spells should they have any.
add: AIs located in intellicards can now cast wizard spells should they
have any.
add: Some spells, such as AoE or conjure spells, are now castable from
within Mechas or Clown Cars. To varying degrees of success.
add: Knock will now unlock and open closets you are hiding within.
add: Repulse will now throw open closets you are hiding within.
/🆑

* Update _conjure_item.dm

* Revert " Adds 9 wizard perks (#83262)"

This reverts commit 67152e9.

* Monkeymancers can interact with runes (#85289)

Hey hey party people. I watched a monkeymancer round last night. It was
hilarious, but the guy couldn't activate his ritual rune. Sucks!

Turns out, monkies don't call `attack_hand()`, they call `attack_paw()`.
This means that monkey dexterity was never the problem stopping the rune
from activating, but the fact that the attack chain was never even
trying to interact with the rune effect in the first place.

I've added a new atom interaction flag that routes through attack_paw,
so now monkies can be given their own specific interaction behaviors for
cases like this.

![image](https://github.com/user-attachments/assets/db5bab0e-30ab-4e3b-b1a6-ae392b23fcab)

Closes #85267.

Also makes it a bit easier to make interact behaviors scalable to
monkies in the future.
:cl: Rhials
fix: Monkey wizards can now interact with grand ritual runes.
/:cl:

* DEAL WITH TOMORROW

* Adds Roach Infusion to the DNA infuser (#76393)

- Adds Roach Infusion to the DNA infuser.
   - Bonuses include:
- All infused organs are 2x as healthy, notably your heart: Meaning
getting revived after being dead a while is easier
- When being attacked from behind or while lying down, take 50% less
damage from brute attacks
      - Lose disgust 32x faster, making it a non-issue
      - Higher toxin purge threshold (5 units, up from 3)
      - Virus resistance (same as spaceacillin)
      - 100 innate bomb armor, preventing explosions from gibbing you
      - 90 innate bio armor
- Immunity to appendicitis, radiation, and to being gibbed by nuclear
bombs
   - Downsides include:
      - Knockdowns are 3x as long
      - get 3x as hungry
      - Ingest reagents to your stomach 1.5x slower
      - Take 2x as much damage from toxins
- Toxins over the purge threshold deal 4x more liver damage (effectively
2x, as the liver has 2x health)
      - Becoming a bug
      - Roaches are gross

- Adds a way to kill roaches without having them splat. If they are
sprayed with bug spray, they will simply fall over, and can be scooped
up.

https://github.com/tgstation/tgstation/assets/51863163/5078c493-9e28-42cb-ae51-45fa25b67a34

More content for the DNA infuser, which benefits greatly from variety.

While initially it may seem like a lot of bonuses, a lot of them are
very niche, with the exception being the brute resilience which is the
big "actually useful" bonus you gain.

The infusion is intended to be given to Engineers, offering innate
Radiation immunity to allow them to work on the Supermatter without
needing a rad suit. Likewise, if the work goes south and the Supermatter
goes boom, their body will more than likely survive the blast.

:cl: Melbert
add: Adds the Roach infusion to the DNA infuser. Do you want to survive
a nuclear apocalypse? Visit genetics today.
add: Adds a way to kill Roaches without splatting them. Visit botany for
a spray bottle of pestkiller.
qol: Infuser book is more book-like
fix: DNA infuser correctly gives on-success feedback messages
/:cl:

---------

Co-authored-by: Jacquerel <[email protected]>

* AHHHH

* pain

* oh

* ah

* h

* Space dragon no longer turns the entire roundend report bold (#81370)

## About The Pull Request

Fixes the entire roundend report turning bold if there was a space
dragon with carp.

## Why It's Good For The Game

yet another roundend report issue fixed.

## Changelog

:cl:
fix: Space Dragon's carp allies no longer turn the entire roundend
report into bold.
/:cl:

* min

* Fixes Shadow Walk (#77518)

## About The Pull Request

Phased mobs are not turfs so the new check failed.

Fixes this and adds a unit test for it.

Also makes shadow walk VV-able to any level of lightness.

## Changelog

:cl: Melbert
fix: Fixes Shadow Walk
/:cl:

* Update clockwork_cult.dm

* Update maintenance_loot.dm

* Update liver.dm

* Update liver.dm

* Update cockroach.dm

---------

Co-authored-by: Comxy <[email protected]>
Co-authored-by: Fikou <[email protected]>
Co-authored-by: Rhials <[email protected]>
Co-authored-by: Ghom <[email protected]>
Co-authored-by: MrMelbert <[email protected]>
Co-authored-by: san7890 <[email protected]>
Co-authored-by: carlarctg <[email protected]>
Co-authored-by: Ben10Omintrix <[email protected]>
Co-authored-by: IndieanaJones <[email protected]>
Co-authored-by: IndieanaJones <[email protected]>
Co-authored-by: Rhials <[email protected]>
Co-authored-by: Holoo <[email protected]>
Co-authored-by: PKPenguin321 <[email protected]>
Co-authored-by: Xackii <[email protected]>
Co-authored-by: Jacquerel <[email protected]>
Co-authored-by: larentoun <[email protected]>
Co-authored-by: MrDas <[email protected]>
Co-authored-by: John Willard <[email protected]>
Co-authored-by: Lucy <[email protected]>
Co-authored-by: dwasint <[email protected]>
  • Loading branch information
21 people authored Sep 15, 2024
1 parent ce87898 commit 6812ade
Show file tree
Hide file tree
Showing 226 changed files with 2,458 additions and 590 deletions.
4 changes: 4 additions & 0 deletions code/__DEFINES/antagonists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,10 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(
#define ANTAG_GROUP_SYNDICATE "Syndicate"
#define ANTAG_GROUP_WIZARDS "Wizard Federation"
#define ANTAG_GROUP_XENOS "Xenomorph Infestation"
#define ANTAG_GROUP_FUGITIVES "Escaped Fugitives"
#define ANTAG_GROUP_HUNTERS "Bounty Hunters"
#define ANTAG_GROUP_PARADOX "Spacetime Aberrations"
#define ANTAG_GROUP_CREW "Deviant Crew"

#define HUNTER_PACK_COPS "Spacepol Officers"
#define HUNTER_PACK_RUSSIAN "Russian Smugglers"
Expand Down
31 changes: 25 additions & 6 deletions code/__DEFINES/colors.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A"

#define COLOR_RED "#FF0000"
#define COLOR_CHRISTMAS_RED "#D6001C"
#define COLOR_OLD_GLORY_RED "#B22234"
#define COLOR_FRENCH_RED "#EF4135"
#define COLOR_ETHIOPIA_RED "#DA121A"
#define COLOR_UNION_JACK_RED "#C8102E"
#define COLOR_MEDIUM_DARK_RED "#CC0000"
#define COLOR_PINK_RED "EF3340"
#define COLOR_SYNDIE_RED "#F10303"
#define COLOR_SYNDIE_RED_HEAD "#760500"
#define COLOR_MOSTLY_PURE_RED "#FF3300"
Expand All @@ -50,7 +57,10 @@

#define COLOR_YELLOW "#FFFF00"
#define COLOR_VIVID_YELLOW "#FBFF23"
#define COLOR_TANGERINE_YELLOW "#FFCC00"
#define COLOR_VERY_SOFT_YELLOW "#FAE48E"
#define COLOR_GOLD "#FFD700"
#define COLOR_ETHIOPIA_YELLOW "#FCDD09"

#define COLOR_OLIVE "#808000"
#define COLOR_ASSISTANT_OLIVE "#828163"
Expand All @@ -63,6 +73,9 @@
#define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3"
#define COLOR_VERY_DARK_LIME_GREEN "#003300"
#define COLOR_GREEN "#008000"
#define COLOR_CHRISTMAS_GREEN "#00873E"
#define COLOR_IRISH_GREEN "#169B62"
#define COLOR_ETHIOPIA_GREEN "#078930"
#define COLOR_DARK_MODERATE_LIME_GREEN "#44964A"
#define COLOR_PAI_GREEN "#00FF88"
#define COLOR_PALE_GREEN "#20e28e"
Expand All @@ -72,6 +85,10 @@
#define COLOR_DARK_CYAN "#00A2FF"
#define COLOR_TEAL "#008080"
#define COLOR_BLUE "#0000FF"
#define COLOR_OLD_GLORY_BLUE "#3C3B6E"
#define COLOR_FRENCH_BLUE "#0055A4"
#define COLOR_UNION_JACK_BLUE "#012169"
#define COLOR_TRUE_BLUE "#0066CC"
#define COLOR_STRONG_BLUE "#1919c8"
#define COLOR_CENTCOM_BLUE "#134975"
#define COLOR_BRIGHT_BLUE "#2CB2E8"
Expand Down Expand Up @@ -99,6 +116,7 @@
#define COLOR_DARK_PURPLE "#551A8B"

#define COLOR_ORANGE "#FF9900"
#define COLOR_IRISH_ORANGE "#FF883E"
#define COLOR_ENGINEERING_ORANGE "#FFA62B"
#define COLOR_MOSTLY_PURE_ORANGE "#ff8000"
#define COLOR_TAN_ORANGE "#FF7B00"
Expand Down Expand Up @@ -248,12 +266,13 @@
#define CIRCUIT_COLOR_ENGINEERING "#F8D700"
#define CIRCUIT_COLOR_SUPPLY "#C47749"

/// Highly Saturated Colors
#define COLOR_BRIGHT_RED "#FF6666"
#define COLOR_BRIGHT_YELLOW "#EAFF51"
#define COLOR_BRIGHT_GREEN "#41FC66"
#define COLOR_BRIGHT_TEAL "#42FFF2"
#define COLOR_BRIGHT_PURPLE "#5D5DFC"
/// Colors for pride week
#define COLOR_PRIDE_RED "#FF6666"
#define COLOR_PRIDE_ORANGE "#FC9F3C"
#define COLOR_PRIDE_YELLOW "#EAFF51"
#define COLOR_PRIDE_GREEN "#41FC66"
#define COLOR_PRIDE_BLUE "#42FFF2"
#define COLOR_PRIDE_PURPLE "#5D5DFC"

/// The default color for admin say, used as a fallback when the preference is not enabled
#define DEFAULT_ASAY_COLOR COLOR_MOSTLY_PURE_RED
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,5 @@
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto"
///from base of mob/MouseWheelOn(): (/atom, delta_x, delta_y, params)
#define COMSIG_MOUSE_SCROLL_ON "mousescroll_on"
/// From /atom/movable/screen/click(): (atom/target, atom/location, control, params, mob/user)
#define COMSIG_SCREEN_ELEMENT_CLICK "screen_element_click"
2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals/signals_storage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@
/// Sent after dumping into some other storage object: (atom/dest_object, mob/user)
#define COMSIG_STORAGE_DUMP_POST_TRANSFER "storage_dump_into_storage"

/// Sent to the STORAGE when an ITEM is STORED INSIDE.
#define COMSIG_STORAGE_STORED_ITEM "storage_storing_item"
1 change: 1 addition & 0 deletions code/__DEFINES/holiday.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define HOLIDAY_HAT_CHANCE 20
8 changes: 8 additions & 0 deletions code/__DEFINES/interaction_flags.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@
#define INTERACT_ATOM_ALLOW_USER_LOCATION (1<<9)
/// ignores mobility check
#define INTERACT_ATOM_IGNORE_MOBILITY (1<<10)
// Bypass all adjacency checks for mouse drop
#define INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT (1<<11)
/// Bypass all can_perform_action checks for mouse drop
#define INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY (1<<12)
/// Bypass all adjacency and other checks for mouse drop
#define INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS (INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT | INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY)
/// calls try_interact() on attack_paw() and returns that.
#define INTERACT_ATOM_ATTACK_PAW (1<<13)

/// attempt pickup on attack_hand for items
#define INTERACT_ITEM_ATTACK_HAND_PICKUP (1<<0)
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
GLOBAL_LIST_INIT(book_types, typecacheof(list(
/obj/item/book,
/obj/item/spellbook,
)))
/obj/item/infuser_book)))

// Jobs
#define is_job(job_type) (istype(job_type, /datum/job))
Expand Down
7 changes: 5 additions & 2 deletions code/__DEFINES/jobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,11 @@
#define JOB_ASSIGN_QUIRKS (1<<7)
/// Whether this job can be an intern.
#define JOB_CAN_BE_INTERN (1<<8)
/// Whether this job is enabled/disabled by the spooktober config
#define JOB_SPOOKTOBER (1<<9)
/// This job cannot have more slots opened by the Head of Personnel (but admins or other random events can still do this).
#define JOB_CANNOT_OPEN_SLOTS (1<<9)

/// Combination flag for jobs which are considered regular crew members of the station.
#define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN)

#define FACTION_NONE "None"
#define FACTION_STATION "Station"
Expand Down
9 changes: 5 additions & 4 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -590,14 +590,15 @@

///Squash flags. For squashable element

///Whether or not the squashing requires the squashed mob to be lying down
/// Squashing will not occur if the mob is not lying down (bodyposition is LYING_DOWN)
#define SQUASHED_SHOULD_BE_DOWN (1<<0)
///Whether or not to gib when the squashed mob is moved over
/// If present, outright gibs the squashed mob instead of just dealing damage
#define SQUASHED_SHOULD_BE_GIBBED (1<<1)


/// If squashing always passes if the mob is dead
#define SQUASHED_ALWAYS_IF_DEAD (1<<2)
/// Don't squash our mob if its not located in a turf
#define SQUASHED_DONT_SQUASH_IN_CONTENTS (1<<3)

/*
* Defines for "AI emotions", allowing the AI to expression emotions
* with status displays via emotes.
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/time.dm
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#define FESTIVE_SEASON "Festive Season"
#define GARBAGEDAY "Garbage Day"
#define MONKEYDAY "Monkey Day"
#define PRIDE_WEEK "Pride Week"
#define MOTH_WEEK "Moth Week"
#define IAN_HOLIDAY "Ian's Birthday"
/*
Expand Down
10 changes: 5 additions & 5 deletions code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// This human is immune to the effects of being exploded. (ex_act)
#define TRAIT_BOMBIMMUNE "bomb_immunity"
/// This mob won't get gibbed by nukes going off
/* #define TRAIT_NUKEIMMUNE "nuke_immunity" */
#define TRAIT_NUKEIMMUNE "nuke_immunity"
/// Can't be given viruses
#define TRAIT_VIRUSIMMUNE "virus_immunity"
/// Won't become a husk under any circumstances
/* #define TRAIT_UNHUSKABLE "trait_unhuskable" */
/// Reduces the chance viruses will spread to this mob, and if the mob has a virus, slows its advancement
/* #define TRAIT_VIRUS_RESISTANCE "virus_resistance" */
#define TRAIT_VIRUS_RESISTANCE "virus_resistance"
#define TRAIT_GENELESS "geneless"
#define TRAIT_PIERCEIMMUNE "pierce_immunity"
#define TRAIT_NODISMEMBER "dismember_immunity"
Expand Down Expand Up @@ -1022,9 +1022,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Isn't attacked harmfully by blob structures
#define TRAIT_BLOB_ALLY "blob_ally"
/// Has the chuuni component
/* #define TRAIT_CHUUNIBYOU "chuunibyou" */
#define TRAIT_CHUUNIBYOU "chuunibyou"
/// Has splattercasting
/* #define TRAIT_SPLATTERCASTER "splattercaster" */
#define TRAIT_SPLATTERCASTER "splattercaster"

///Traits given by station traits
/* #define STATION_TRAIT_ASSISTANT_GIMMICKS "station_trait_assistant_gimmicks" */
Expand Down Expand Up @@ -1154,7 +1154,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// This atom can have spells cast from it if a mob is within it
/// This means the "caster" of the spell is changed to the mob's loc
/// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast
/* #define TRAIT_CASTABLE_LOC "castable_loc" */
#define TRAIT_CASTABLE_LOC "castable_loc"

/// Needs above trait to work.
/// This trait makes it so that any cast spells will attempt to transfer to the location's location.
Expand Down
11 changes: 11 additions & 0 deletions code/__DEFINES/turfs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,14 @@
#define TURF_PATHING_PASS_PROC 1
/// Turf is never passable
#define TURF_PATHING_PASS_NO 2

/// Define the alpha for holiday/colored tile decals
#define DECAL_ALPHA 60
/// Generate horizontal striped color turf decals
#define PATTERN_DEFAULT "default"
/// Generate vertical striped color turf decals
#define PATTERN_VERTICAL_STRIPE "vertical"
/// Generate random color turf decals
#define PATTERN_RANDOM "random"
/// Generate rainbow color turf decals
#define PATTERN_RAINBOW "rainbow"
8 changes: 0 additions & 8 deletions code/__DEFINES/~monkestation/blueshift.dm
Original file line number Diff line number Diff line change
Expand Up @@ -270,14 +270,6 @@ See the examinemore module for information.
#define BOOT_UNSEAL_MESSAGE "relax their grip on your legs"
#define BOOT_SEAL_MESSAGE "seal around your feet"

/// Colors for pride week
#define COLOR_PRIDE_RED "#FF6666"
#define COLOR_PRIDE_ORANGE "#FC9F3C"
#define COLOR_PRIDE_YELLOW "#EAFF51"
#define COLOR_PRIDE_GREEN "#41FC66"
#define COLOR_PRIDE_BLUE "#42FFF2"
#define COLOR_PRIDE_PURPLE "#5D5DFC"

/// Trait that changes the ending effects of twitch leaving your system
#define TRAIT_TWITCH_ADAPTED "twitch_adapted"

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/~monkestation/dcs/signals/signals_object.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
//flag to block the qdel that normally happens when a projectile is blocked
#define PROJECTILE_INTERRUPT_BLOCK_QDEL (4<<0)
2 changes: 2 additions & 0 deletions code/__DEFINES/~monkestation/jobs.dm
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
#define JOB_SECURITY_ASSISTANT "Security Assistant"
/// Whether this job is enabled/disabled by the spooktober config
#define JOB_SPOOKTOBER (1<<16)
14 changes: 14 additions & 0 deletions code/__HELPERS/matrices.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,20 @@
//doesn't have an object argument because this is "Stacking" with the animate call above
//3 billion% intentional

/// Similar to shake but more spasm-y and jerk-y
/atom/proc/spasm_animation(loops = -1)
var/list/transforms = list(
matrix(transform).Translate(-1, 0),
matrix(transform).Translate(0, 1),
matrix(transform).Translate(1, 0),
matrix(transform).Translate(0, -1),
)

animate(src, transform = transforms[1], time = 0.2, loop = loops)
animate(transform = transforms[2], time = 0.1)
animate(transform = transforms[3], time = 0.2)
animate(transform = transforms[4], time = 0.3)

/**
* Shear the transform on either or both axes.
* * x - X axis shearing
Expand Down
8 changes: 6 additions & 2 deletions code/_globalvars/lists/maintenance_loot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,12 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/pen/screwdriver = 1,
) = 8,

//monkestation edit start
list(//artifacts
/obj/effect/artifact_spawner = 4,
/obj/item/a_gift/anything/wiz_name = 2,
) = 8,
//monkestation edit end

list(//construction and crafting
/obj/item/beacon = 1,
Expand Down Expand Up @@ -349,14 +352,15 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
) = 1,

list(//misc
/obj/item/book/granter/crafting_recipe/maint_gun/pipegun_prime = 1,
/obj/item/book/granter/crafting_recipe/maint_gun/pipegun_prime = 1, //monkestation edit: added maint_gun
/obj/item/book/granter/crafting_recipe/trash_cannon = 1,
/obj/item/book/granter/crafting_recipe/maint_gun/laser_musket_prime = 1,
/obj/item/book/granter/crafting_recipe/maint_gun/laser_musket_prime = 1, //monkestation edit
/obj/item/book/granter/sign_language = 1,
/obj/item/disk/nuclear/fake = 1,
/obj/item/skillchip/brainwashing = 1,
/obj/item/tattoo_kit = 1,
/obj/item/folder/ancient_paperwork = 1,
/obj/item/seeds/tree/money = 1, //monkestation edit
) = 1,

))
Expand Down
10 changes: 5 additions & 5 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_AREA_SENSITIVE" = TRAIT_AREA_SENSITIVE,
"TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE,
"TRAIT_BLOCKING_EXPLOSIVES" = TRAIT_BLOCKING_EXPLOSIVES,
"TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC,
"TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP,
"TRAIT_FISH_CASE_COMPATIBILE" = TRAIT_FISH_CASE_COMPATIBILE,
"TRAIT_FISH_SAFE_STORAGE" = TRAIT_FISH_SAFE_STORAGE,
Expand All @@ -56,7 +57,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE,
"TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE,
/* "TRAIT_BOULDER_BREAKER" = TRAIT_BOULDER_BREAKER, */
/* "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC, */
/* "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, */
/* "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, */
/* "TRAIT_IMMERSED" = TRAIT_IMMERSED, */
Expand Down Expand Up @@ -179,6 +179,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CHEF_KISS" = TRAIT_CHEF_KISS,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
"TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON,
"TRAIT_CHUUNIBYOU" = TRAIT_CHUUNIBYOU,
"TRAIT_CLEANBOT_WHISPERER" = TRAIT_CLEANBOT_WHISPERER,
"TRAIT_CLIFF_WALKER" = TRAIT_CLIFF_WALKER,
"TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER,
Expand Down Expand Up @@ -365,6 +366,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM,
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
"TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
"TRAIT_OCCULTIST" = TRAIT_OCCULTIST,
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
"TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE,
Expand Down Expand Up @@ -443,6 +445,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST,
"TRAIT_SPIDER_CONSUMED" = TRAIT_SPIDER_CONSUMED,
"TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL,
"TRAIT_SPLATTERCASTER" = TRAIT_SPLATTERCASTER,
"TRAIT_SPRAY_PAINTABLE" = TRAIT_SPRAY_PAINTABLE,
"TRAIT_SPRINTING" = TRAIT_SPRINTING,
"TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
Expand Down Expand Up @@ -491,6 +494,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS,
"TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE,
"TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE,
"TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE,
"TRAIT_VORACIOUS" = TRAIT_VORACIOUS,
"TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED,
"TRAIT_WATER_BREATHING" = TRAIT_WATER_BREATHING,
Expand All @@ -516,7 +520,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, */
/* "TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, */
/* "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, */
/* "TRAIT_CHUUNIBYOU" = TRAIT_CHUUNIBYOU, */
/* "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, */
/* "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, */
/* "TRAIT_DISPLAY_JOB_IN_BINARY" = TRAIT_DISPLAY_JOB_IN_BINARY, */
Expand Down Expand Up @@ -559,7 +562,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_NO_STAGGER" = TRAIT_NO_STAGGER, */
/* "TRAIT_NO_THROWING" = TRAIT_NO_THROWING, */
/* "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, */
/* "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, */
/* "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, */
/* "TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE, */
/* "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, */
Expand All @@ -578,7 +580,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_SLOW_FLIP" = TRAIT_SLOW_FLIP, */
/* "TRAIT_SPEECH_BOOSTER" = TRAIT_SPEECH_BOOSTER, */
/* "TRAIT_SPELLS_LOTTERY" = TRAIT_SPELLS_LOTTERY, */
/* "TRAIT_SPLATTERCASTER" = TRAIT_SPLATTERCASTER, */
/* "TRAIT_STIMMED" = TRAIT_STIMMED, */
/* "TRAIT_STIMULATED" = TRAIT_STIMULATED, */
/* "TRAIT_STRENGTH" = TRAIT_STRENGTH, */
Expand All @@ -595,7 +596,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD, */
/* "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, */
/* "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED, */
/* "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, */
/* "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, */
/* "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, */
),
Expand Down
3 changes: 3 additions & 0 deletions code/_onclick/hud/alert.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1059,6 +1059,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
return 1

/atom/movable/screen/alert/Click(location, control, params)
SHOULD_CALL_PARENT(TRUE)

..()
if(!usr || !usr.client)
return FALSE
if(usr != owner)
Expand Down
Loading

0 comments on commit 6812ade

Please sign in to comment.