Commit Graph
571 Commits
Author SHA1 Message Date
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
EnterTheJakeandGitHub a2c7c8e57b Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request

Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.

For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

Code by Me, @Xander3359 and @Arturlang 

TGUI by @Arturlang 

Sprites by OrcaCora and GregorDM

Writing bits by @necromanceranne 

### Core changes

- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).

- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).

- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.

- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).

- Path specific robes have been introduced! They come with their own set
of quirks.

- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.

- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.

- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).

- Ascension now automatically calls the shuttle with no possibility of a
recall.

- Late join Heretic has been removed.

### New UI 
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>


### Knowledge shop

<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>




### Quality of life //General balance changes

- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).

- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.

- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.

- Codex Cicatrix no longer requires a special pen to be made.

### Passive abilities

- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.

- Crafting your first set of Eldritch robes will bump your passive to
level 2.

- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"

- Completing the ritual of knowledge or ascending will net you the final
level.

### Path Specific Robes

- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.

- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.

- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)

- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.

### Moon Path Rework

Moon path  rework.

Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.


**Cosmic Path Rework**

Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.

Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.

As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.

lastly The Star Gazer is now ghost controlled ; And they shoot lazers!

<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>


## Why It's Good For The Game


### Ok...but why do we want this?

Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".

### Cross Pathing my beloathed.

Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.

Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.

My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.

If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.


Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.

### Blade Breaking

I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.

## Less versatile, more specialized paths.

By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.

It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.

Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.

### What a horrible night to have a curse...., wait how do I curse
people again?

As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.

Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.

Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.

The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.

Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.

## Drip Of the Mansus

The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.

By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.

It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.

A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.

### Will this be 100% fair and balanced?

This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).

What I will say is that I'm not trying to change the core identity of
Heretic.

Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.

But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
2025-10-15 22:34:51 +00:00
dieandGitHub 0204ab8fdd Canreach refactor (#93165)
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147

full credit to @Kapu1178 for the juice

instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
2025-10-07 20:28:59 +02:00
xPokee 8aa39b75f0 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-04 05:28:09 -04:00
MrMelbertandGitHub ce50179f7c Mind readers can read what people are typing (#93059)
## About The Pull Request

When a Mind Reader examines someone who is typing, it will show them
what they are actively typing

<img width="518" height="97" alt="image"
src="https://github.com/user-attachments/assets/8d54aa56-85fc-4e03-b0a3-bfb8e475beff"
/>

No, it won't read OOC messages.

## Why It's Good For The Game

Your next line is, "This sounds really funny for gimmicks like security
interrogations or fortune telling, or for getting the jump on someone as
they try to get the jump on you, or just to be a badass by finishing
people sentences"

## Changelog

🆑 Melbert
add: When a mind reader examines a mob, they'll get a glimpse into what
that mob is currently typing, before they even send the message.
qol: Mind Reader now groups up all the information it gives you in a box
admin: Mind Reader now logs everything the reader gleamed from the
read-ee
/🆑
2025-10-04 01:29:31 +02:00
xPokee 5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
deltanedasandGitHub 49ae3ade8f fix elvis mutation constructor copy paste (#93144)
## About The Pull Request

fixed copy paste mistake where there are 2 constructors for chav, 1
below elvis since it was copy pasted without being changed

## Why It's Good For The Game

chav accent might have been using the elvis word replacements and elvis
didn't replace words at all??

## Changelog
nobody will notice this :trollface:
2025-09-30 17:20:49 +02:00
300b41d998 The Roidening: Getting swole improves your unarmed damage floor and possible stagger combo outcome. (#93125)
## About The Pull Request

Increases the minimum possible damage an unarmed attack can inflict by
your athletics level.

For a normal human punch, you would typically roll between 5 and 10
damage. For a legendary athlete, they will always roll 10 damage.

For a normal human kick, you would typically roll between 7 and 15. For
a legendary athlete, they will instead roll between 14 and 15.

This alteration cannot increase your maximum potential damage. Only
improve the floor. If your arm has a max value of 1, it will be still 1
even if you're a legendary athlete.

TRAIT_STRENGTH increases the maximum possible damage you can roll by 2,
regardless of limb values. You still need to roll that damage, and this
is not a flat increase to the damage you deal.

The Strength gene has a higher instability due to its new functionality.
(5 > 10)

Your athletics skill also improves the possible outcomes of a stagger
combo.

## Why It's Good For The Game

Kryson has been nudging about this for weeks at this point so I'm taking
him up on his offer and implementing athletics benefits to standard
unarmed attacks.

Damage consistency does improve the average unarmed damage output of the
standard spaceman's humble fist, but it still keeps it within a
particular damage bound. Effects that increase the actual damage are
still gated behind temporary buffs, limb improvements or genetics, which
mostly means you're interacting with other players in some fashion or
will need to interact with other players to get the full monty of
possible unarmed improvements.

It also just _feels_ right. Improving fitness gives a lot of minor
imrpovements, but this one seems obvious for what it otherwise
thematically should be doing. If you appear to be strong, getting
punched by you probably will hurt and you are probably pretty good at
hitting with a particular kind of explosive power consistently.

## Changelog
🆑
balance: Unarmed attacks deal more consistent damage and more impactful
against staggered opponents the more athletic you are.
balance: The strength gene now improves your unarmed upper potential
damage a bit. It increases instability slightly more as a result.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-09-27 17:39:36 +02:00
xPokee b308ee9d78 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-24 10:13:01 -04:00
necromanceranneandGitHub d556e92d52 Special version of hulk (wizard, warlord superhuman powers) no longer suffer recoil damage from breaking walls. Recoil actually uses wound rolls and not forced wounds (#92992)
## About The Pull Request

### Special versions are no longer vulnerable to recoil

There are two versions of hulk that are not available under normal
circumstances. The version given by wizard's Transformation, and the
version that Warlord pirates spawn with. These versions no longer break
their arms when destroying walls.

Normal versions, like the genetic hulks and the orc variant, still
suffer this effect.

### oof ow my bones

Hulk recoil damage now utilizes RNG wound determination. This allows for
the wound to escalate normally if the wound meets the threshold. The
damage passed means that there is a roughly 50/50 chance to cause a
dislocation, a very slim chance to roll a fracture, and this probability
will grow worse once the arm is wounded and threshold penalties start to
take effect.

This also means that the mutation respects wound resistance and wound
vulnerability, where as the previous behavior did not.

### Cleans up some mutation code a smidge

There is clearly some leftovers from prior refactors still littered
through mutation code, so I did some maintenance while I was here.

## Why It's Good For The Game

https://github.com/tgstation/tgstation/pull/51389 introduced this
weakness to dissuade hulks from flattening walls all the way to the
armory (for the fuckbillionth time). However, it applies to all versions
of hulk, including instances where it is an antagonist's ability or
power. Rather than have antagonists suffer from balance considerations
largely aimed at crew/tiders, we make them exempt so that they can SMASH
to their heart's content.

Hulk wound determination was kind of weird. For one, it relied heavily
on the arm health consistently being 50. When it wasn't, you started
getting into less reliable behaviour. In addition, it does not at all
respect any kind of vulnerability or resistance to wounding.

It is possible that utilizing this system was so that the wounding
effects would be staggered out rather than sporadic, and so slightly
fairer on the user by being more reliable. However, I think letting it
operate similarly to how our natural wound determination effects work
provides some more interesting outcomes for those who might want to use
the mutation in an earnest fashion, and still otherwise limits those
people who are just looking to low effort grief.

I think in retrospect this might have been a pretty heavy-handed nerf,
but I'm not wholly reversing it, I'm just making it...different.
Outcomes should be largely the same.
2025-09-22 19:54:07 -05:00
xPokee 939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
MrMelbertandGitHub 135a09182b Refactors obscured (#92779)
## About The Pull Request

Fixes #85028

Obscured flags and covered flags are tracked on carbons, updated as
items are equipped and unequipped. It's that shrimple.

Closes #92760

Just removes the species exception checks for not making sense

Also refactors handcuffs / legcuffs removal. In all of these situations
they were hardcoded when they could easily just use an inventory proc to
work.

## Why It's Good For The Game

Stops a million excessive calls to `check_obscured_slots`

Makes obscured behavior more consistent

Makes obscured behavior easier to use

Cleans up human rendering (There was some cursed stuff before with
render item -> updated obscured -> update body -> cause side effects)

## Changelog

🆑 Melbert
del: Golems which somehow manage to grow wings and somehow manage to
equip something that covers their jumpsuit can no longer fly.
(Seriously, this will not affect anyone)
refactor: Refactored clothing obscurity entirely. Items should be a
loooot more consistent and what covers what, and should update a lot
snappier. As always, report any oddities, like mysteriously disappearing
articles of clothing, hair, or species parts
refactored: Refactored handcuffs and legcuffs a bit, report any odd
situations with cuffs like getting stuck restrained
/🆑
2025-09-07 09:24:34 +02:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
TimandGitHub dce0bf9f9a Correct bitwise logic for bitfield checks (#92609)
## About The Pull Request
This fixes several bitfield operations that were missing parenthesis
encapsulation. I noticed this problem in:
- #92601

And decided to use regex to search for similar patterns which I came
across in:
- Move loops bypassing the `MOVELOOP_STATUS_RUNNING` status
- Elastic arms mutation bypassing `ABSTRACT` object flags for picking up
objects
- Species radiation bypassing `HEAD_HAIR` hairstyle flags for balding
- Damaged APC board status bypassing `EMAGGED` and `BROKEN` status for
screentips
- Shuttle cleanup code bypassing `MOVE_CONTENTS` for moving old turfs
- Tram crossing signals bypassing `NORTH` and `EAST` direction checks

## Why It's Good For The Game
Code behaves as intended.
2025-09-01 02:16:22 +00:00
Arturlangandnevimer 1c0ac21cb4 Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead

(cherry picked from commit 0bc42d6940)
2025-08-08 15:31:08 -04:00
ArturlangandGitHub 0bc42d6940 Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead
2025-08-05 22:58:40 -05:00
Y0SH1M4S73RandRoxy 45cc222314 Allows blocking language speech and comprehension separately (#91884)
## About The Pull Request

There was a PR I wanted to make, but one of the features I wanted the
addition to have was for an affected mob to only speak aphasic, but
understand whatever languages they'd normally be able to understand.
This, in turn, required refactoring language holders to separately block
language speech and comprehension. This change, I decided, would be good
to split into its own PR.

## Why It's Good For The Game

Allows more fine-grained control over what languages an atom is blocked
from speaking or understanding. This will be useful for future PRs or
admin events.

## Changelog

no player-facing changes
2025-07-11 17:56:29 -04:00
Y0SH1M4S73RandGitHub aac161bce9 Allows blocking language speech and comprehension separately (#91884)
## About The Pull Request

There was a PR I wanted to make, but one of the features I wanted the
addition to have was for an affected mob to only speak aphasic, but
understand whatever languages they'd normally be able to understand.
This, in turn, required refactoring language holders to separately block
language speech and comprehension. This change, I decided, would be good
to split into its own PR.

## Why It's Good For The Game

Allows more fine-grained control over what languages an atom is blocked
from speaking or understanding. This will be useful for future PRs or
admin events.

## Changelog

no player-facing changes
2025-07-07 15:55:16 +12:00
GhomandRoxy 93b13deed1 Fixing more dna console / mutation issues [NO GBP] (#91717) 2025-06-21 22:36:03 -04:00
GhomandGitHub 5096b311b8 Fixing more dna console / mutation issues [NO GBP] (#91717) 2025-06-21 03:12:07 +02:00
GhomandRoxy 75e7ef6def Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-15 15:50:31 -04:00
GhomandGitHub 14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
SmArtKarandRoxy d841c9df40 [MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.

- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.

- Closes #91039

A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.

![dreamseeker_BSP7FE9pRB](https://github.com/user-attachments/assets/45711fa0-ae65-4ec2-9e89-753fa7dd876f)

![dreamseeker_zyv9ssh5VN](https://github.com/user-attachments/assets/7b112854-b7e3-4bfe-b78b-199a55b5b051)
2025-06-05 19:47:01 -04:00
SmArtKarandGitHub b4061f1800 [MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
## About The Pull Request

Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.

- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.

- Closes #91039 

#### Examples

A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


![dreamseeker_BSP7FE9pRB](https://github.com/user-attachments/assets/45711fa0-ae65-4ec2-9e89-753fa7dd876f)

![dreamseeker_zyv9ssh5VN](https://github.com/user-attachments/assets/7b112854-b7e3-4bfe-b78b-199a55b5b051)
2025-05-31 19:38:07 -05:00
34ba1755cb Mutation chromosomes code improvement (#91033)
I was about to start working on something, but then I've noticed
chromosomes-related code was looking quite old and had some magic
numbers in it, so I've decided to update it a little.

Better code.

N/A

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-05-22 21:19:04 -04:00
075ed50650 Mutation chromosomes code improvement (#91033)
## About The Pull Request
I was about to start working on something, but then I've noticed
chromosomes-related code was looking quite old and had some magic
numbers in it, so I've decided to update it a little.

## Why It's Good For The Game
Better code.

## Changelog
N/A

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-05-17 12:41:25 -07:00
MrMelbertandShadow-Quill 238371484f Clear Farsight and Rock Absorber effects on mutation removal (#90787)
## About The Pull Request

Fixes #90637

Adds on remove effects for Farsight and Rock Absorber, because I forgot.

## Changelog

🆑 Melbert
fix: Losing Farsight or Rock Absorber mutations will properly drop their
effects as well
/🆑
2025-04-29 18:23:24 -06:00
MrMelbertandShadow-Quill 7817527eb3 Adds some positive mutations (#90393)
## About The Pull Request

- Hypermetabolic Blood
   - You bleed 1.5x more, but regenerate blood 6x faster. 
- For reference: A moderate slash wound is ~2 blood loss per tick, a
crit slash wound is ~4 blood loss per tick, and you regenerate ~0.25
blood per tick.
- For weak bleed wounds, you will net lose less blood per tick with the
mutation than without.
- However, for strong bleed wounds you will net lose more blood per tick
with the mutation.
- Ultimately, you will (obviously) recover much faster once closing the
wound.
   - Affected by synchronizer and power
- Rock Eater
 	- You can eat materials like a golem.
- Rock Absorber
- You can eat materials like a golem, and you will also gain golem buffs
from them.
	- Combination gene from "Rock Eater" and "Stoner" 
- I didn't (deeply) vet if any of these effects would be OP combined
with other genes, but I'm chalking it up to emergent gameplay if I miss
something
- Farsight
	- Gives you an action button which lets you expand your view range
	- Affected by power
 - Inexorable
- Disables soft crit, but entering the threshold for soft crit will
cause ticking brute/toxin damage and force you to whisper.
       - No slimepeople can't cheese this 
    - Also is an innate "painkiller".
    - Affected by synchronizer

## Why It's Good For The Game

Just some random mutation ideas I had, for more genetics shenanigans.
They're all relatively unobtrusive but have some niche potential
(Bleeding more for Blood Cult? Farsight + Thermals? Inexorable +
Martyrdom?)

## Changelog

🆑 Melbert
add: "Hypermetabolic Blood" Mutation
add: "Rock Eater" Mutation
add: "Rock Absorber" Combination Mutation
add: "Farsight" Mutation
add: "Inexorable" Mutation
/🆑
2025-04-29 17:51:08 -06:00
MrMelbertandGitHub 19eb41a53c Clear Farsight and Rock Absorber effects on mutation removal (#90787)
## About The Pull Request

Fixes #90637

Adds on remove effects for Farsight and Rock Absorber, because I forgot.

## Changelog

🆑 Melbert
fix: Losing Farsight or Rock Absorber mutations will properly drop their
effects as well
/🆑
2025-04-25 15:17:19 +00:00
MrMelbertandGitHub e99048d37f Adds some positive mutations (#90393)
## About The Pull Request

- Hypermetabolic Blood
   - You bleed 1.5x more, but regenerate blood 6x faster. 
- For reference: A moderate slash wound is ~2 blood loss per tick, a
crit slash wound is ~4 blood loss per tick, and you regenerate ~0.25
blood per tick.
- For weak bleed wounds, you will net lose less blood per tick with the
mutation than without.
- However, for strong bleed wounds you will net lose more blood per tick
with the mutation.
- Ultimately, you will (obviously) recover much faster once closing the
wound.
   - Affected by synchronizer and power
- Rock Eater
 	- You can eat materials like a golem.
- Rock Absorber
- You can eat materials like a golem, and you will also gain golem buffs
from them.
	- Combination gene from "Rock Eater" and "Stoner" 
- I didn't (deeply) vet if any of these effects would be OP combined
with other genes, but I'm chalking it up to emergent gameplay if I miss
something
- Farsight
	- Gives you an action button which lets you expand your view range
	- Affected by power
 - Inexorable
- Disables soft crit, but entering the threshold for soft crit will
cause ticking brute/toxin damage and force you to whisper.
       - No slimepeople can't cheese this 
    - Also is an innate "painkiller".
    - Affected by synchronizer

## Why It's Good For The Game

Just some random mutation ideas I had, for more genetics shenanigans.
They're all relatively unobtrusive but have some niche potential
(Bleeding more for Blood Cult? Farsight + Thermals? Inexorable +
Martyrdom?)

## Changelog

🆑 Melbert
add: "Hypermetabolic Blood" Mutation
add: "Rock Eater" Mutation
add: "Rock Absorber" Combination Mutation
add: "Farsight" Mutation
add: "Inexorable" Mutation
/🆑
2025-04-12 14:02:53 +10:00
MichiRecRoomandRoxy 66c926b540 The radioactive mutation now ensures it has an owner before modifying the radioactivity (#89805)
## About The Pull Request
https://github.com/Monkestation/Monkestation2.0/pull/5690 exposed the
fact that `/datum/mutation/human/radioactive/modify()` assumes we have
an owner.

However, the parent proc, `/datum/mutation/human/modify()`, does not
make this assumption - and as such,
`/datum/mutation/human/radioactive/modify()` shouldn't either.

This PR modifies `/datum/mutation/human/radioactive/modify()` to check
if our `owner` variable is set (and valid!) before applying the
radioactivity changes.
2025-03-12 17:18:44 -04:00
MrMelbertandRoxy 5a16f74fb3 Pixel adjustments to mobs are now sourced / Refactors riding (#89320)
Fixes #85980

- Pixel adjustments are now sourced

When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets`
and must have a source string associated

- Refactors riding

Refactors how riding component selects the offsets to use. It's now all
done via the getter rather than a weird mix of a var, a cache, and a
getter.

- Moves a bunch of animations to use `pixel_w` / `pixel_z`

Largely to prevent conflicts with adjustments to a mob's pixel position,
but also as many animations are not actual movements, but visual
movements. Floating is one such example.

It just works

🆑 Melbert
fix: Fixed grab offsets not showing for anything but passive grab
fix: Fix jank with mob offsets when riding things
refactor: Refactored riding component, particularly how it selects layer
and offsets. Report any oddities
refactor: Refactored pixel offsets of mobs. Report any oddities
/🆑
2025-03-12 16:00:01 -04:00
MichiRecRoomandGitHub b458137f8c The radioactive mutation now ensures it has an owner before modifying the radioactivity (#89805)
## About The Pull Request
https://github.com/Monkestation/Monkestation2.0/pull/5690 exposed the
fact that `/datum/mutation/human/radioactive/modify()` assumes we have
an owner.

However, the parent proc, `/datum/mutation/human/modify()`, does not
make this assumption - and as such,
`/datum/mutation/human/radioactive/modify()` shouldn't either.

This PR modifies `/datum/mutation/human/radioactive/modify()` to check
if our `owner` variable is set (and valid!) before applying the
radioactivity changes.
2025-03-08 13:43:19 -06:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
MrMelbertandGitHub ffd97819c1 Pixel adjustments to mobs are now sourced / Refactors riding (#89320)
## About The Pull Request

Fixes #85980

- Pixel adjustments are now sourced

When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets`
and must have a source string associated

- Refactors riding

Refactors how riding component selects the offsets to use. It's now all
done via the getter rather than a weird mix of a var, a cache, and a
getter.

- Moves a bunch of animations to use `pixel_w` / `pixel_z`

Largely to prevent conflicts with adjustments to a mob's pixel position,
but also as many animations are not actual movements, but visual
movements. Floating is one such example.

## Why It's Good For The Game

It just works

## Changelog

🆑 Melbert
fix: Fixed grab offsets not showing for anything but passive grab
fix: Fix jank with mob offsets when riding things
refactor: Refactored riding component, particularly how it selects layer
and offsets. Report any oddities
refactor: Refactored pixel offsets of mobs. Report any oddities
/🆑
2025-02-12 17:16:13 -07:00
necromanceranneandnevimer b8ad0cd1f0 Finishes the reviews from #87187 that got missed before merge (#87363)
## About The Pull Request

As it says on the tin. This is just cleaning up some of the code from
reviews that got missed due to an early merge.

## Why It's Good For The Game

Oops. 

No real player facing changes since I doubt anyone has noticed anything
yet. They might during Halloween though so hopefully this is merged
before then.
2025-01-31 00:10:05 -05:00
a20a2834dd Fundamentally Evil People/Undead are burned horribly by Mending Touch. Chaplains are not shaken by discovering EVAAAAL! Pacifist safe! Evil unsafe! Empaths beware! (#87187)
## About The Pull Request

At a baseline, Mending Touch now burns anyone who is undead or
fundamentally evil.

Pacifists can still heal evil people, but avoid touching the undead with
the healing hand.

Evil people psychically crush empaths, so long as they're not undead.
Evil people can heal other evil people and undead (includeling evil
chaps)

Undead can heal as normal, including other undead, but not evil people
(its not a mutual friendship)

Chaplains incinerate potential targets especially well using mending
touch. Chaplains and spiritualists even shout out their god's name as
they do so. (but only chaps get the extra damage)

Empathic Chaplains are not shaken by identifying evil people. **THEY
JUST SEE A NEW TARGET TO SMITE FOR THE CRUSADE.**

## Why It's Good For The Game

**Consistency:** Undead are negatively impacted by healing effects of a
similar nature. Rather than make a whole new mutation to heal undead,
instead, we apply some different rules to allow undead or evil people
the opportunity to apply and have applied different effects based on
their status.

**Evil people are already arbitrarily shafted by niche aspects of the
game for fun:** It'd be funny if a well meaning medical staff member
tries to use mending touch on an evil guy and they just burst into
flames instead. Why? They took the quirk to screw over empaths and
nothing else.

**Undead are immensely uncommon:** This isn't going to come up much
whatsoever given that undead are almost unseen outside of Halloween.
~~What do you mean that's a few weeks away?~~

**Dumb Bullshit:** Empaths and Evil people are diametrically opposed for
silly reasons. If Empaths still hurt undead, it stands to reason that
evil people heal them out of pure spite. The two sides hurt one another
with the mutation.

**Chaplains smiting people is funny:** Chaplains aren't the main users
for the mutation, its mostly for medical staff, but they damn will seek
it out a lot of the time to augment their existing healing powers. Since
this is a feature about moral self-righteousness, its now especially
funny for chaplains to be either one of the quirk holders primary enemy
if they're on the opposing side.

## Changelog
🆑
add: Mending touch now has additional effects based on whether or not
the target or user is evil, an undead or an empath. Don't use mending
touch on evil people or undead, or they might go up in flames. Though
evil people can get back at empaths specifically and heal udnead as
normal.
add: Chaplains engulf people using mending touch's harmful reactions to
diametrically opposed entities especially well. Because of religious
zeal, of course.
add: Empath chaplains ignore the fear consequences of examining an evil
person. They instead get additional information about what to do to
these people if the need arises.
/🆑

---------

Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
2025-01-31 00:09:03 -05:00
necromanceranneandGitHub 705da6a08f Removes TRAIT_ALLOWED_HONORBOUND_ATTACK since it is deprecated (#89151)
## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/89149

## Why It's Good For The Game

This trait not only no longer is needed, but functionally allows for an
exploit! Let's get rid of it.
2025-01-30 14:24:42 -06:00
SmArtKarandGitHub 3499727a6d Implements datumized embedding handlers in place of element-component-datum triad (#88511)
## About The Pull Request

This PR completely rewrites our embedding system in favor of embedding
datum handlers which acts as containers for all embedding-related data
and logic.

Currently embedding logic relies on an element-component-datum triad,
where elements on the items handle embedding logic, singleton datums
store embedding data and components (which get assigned to ***mobs*** in
whom the item embedded) handle pain and the item being ripped out. How
do we access all the procs? By using comsigs as procs, which is really
bad. This code was written back in 2020 when DCS was hot stuff but in
hindsight this implementation was a mistake, as it heavily restricts
custom embedding behaviors unless you're willing to constantly run
GetComponent (bad, ugly, incarnation of evil)

This PR rewrites all that logic to be handled by lazyloaded
``/datum/embedding``, which is stored similarly to current
``/datum/embed_data``. Upon being requested, it is initialized and
assigned to a parent from whom all the logic is handled, from being
embedded to pain and having the item ripped out. On projectiles this
only handles one proc, after which it copies itself down to the shrapnel
item instead and runs the chain further from there.
Ideally, most embedding-related logic now should be handled purely
datum-side - in most cases items should not be hooking up to themselves
like they did before (unless said logic is for when the item is made
sticky or smth) and instead the code should be handled by the embedding
datum (see sholean grapes implementation in this PR). This should allow
us to do fancy stuff like syringe guns embedding syringes into targets
and injecting them that way, and fix some bugs along the way.

Closes #88115
Closes #87946

Also fixed a bug with scars not displaying when examined closely from
#86506 because i was in the area anyways
2025-01-02 23:18:27 +00:00
SmArtKarandGitHub 7ddc30783a Adds better attack animations and alternate attack modes (#88418)
## About The Pull Request

This is the first PR in a series attempting to modernize our damage and
armor, both from a code and a gameplay perspective. This part implements
unique attack animations, adds alternate attack modes for items and
fixes some minor oversights.

Items now have unique attack animation based on their sharpness - sharp
items are now swung in an arc, while pointy items are thrust forward.
This change is ***purely visual***, this is not swing combat. (However,
this does assign icon rotation data to many items, which should help
swing combat later down the line).

Certain items like knives and swords now have secondary attacks - right
clicks will perform stabbing attacks instead of slashing for a chance to
leave piercing wounds, albeit with slightly lower damage - trying to
stick a katana through someone won't get you very far!

https://github.com/user-attachments/assets/1f92bbcd-9aa1-482f-bc26-5e84fe2a07e1

Turns out that spears acted as oversized knives this entire time, being
SHARP_EDGED instead of SHARP_POINTY - in order for their animations to
make sense, they're now once again pointy (according to comment,
originally they were made sharp because piercing wounds weren't very
threatening, which is no longer the case)

Another major change is that structure damage is now influenced by armor
penetration - I am not sure if this is intentional or not, but attacking
item's AP never applied to non-mob damage.

Additionally, also fixes an issue where attack verbs for you and
everyone else may differ.
2024-12-17 12:35:52 -06:00
lessthanthree 5428483694 Revert "Changes variable_color on limbs to use a priority system (#87216)"
This reverts commit a8135da379.
2024-12-01 12:05:51 -08:00
a8135da379 Changes variable_color on limbs to use a priority system (#87216)
## About The Pull Request

Its now a priority -> color assoc list with a pair of helper procs to
wrap lazylist stuff. New priorities should go to
``code/__DEFINES/bodyparts.dm`` as defines as to be seen and not
overridden.

## Why It's Good For The Game

Wasn't a problem until carps came along as before only hulks used this
thing, now we've got clashing.

## Changelog
🆑
fix: Losing hulk after becoming a carp no longer turns you black
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-12-01 11:55:57 -08:00
SmArtKarandGitHub bbb7a41743 Guncode Agony 4: The Great Projectile Purge (#87740)
## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.

### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.

<details>

<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>


Before:


https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e

After:


https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915

</details>


<details>

<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>


Before:


https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348

After:


https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238

</details>

### But how will this affect the ~~trout population~~ gameplay?

Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.

This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.

Closes #71822
Closes #78547
Closes #78871
Closes #83901
Closes #87802
Closes #88073

## Why It's Good For The Game

Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.

Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.

## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
2024-11-23 04:02:35 -08:00
carlarctgandGitHub 3c81163f65 Reverts change that altered pyrokinesis recipe to require firebreath instead of fiery sweat (#87949)
## About The Pull Request

Reverts change that altered pyrokinesis recipe to require firebreath
instead of fiery sweat

## Why It's Good For The Game

I don't know who did this and why. Fiery breath is a PITA to obtain and
I never wanted it to need it.

## Changelog

🆑
fix: Reverts change that altered pyrokinesis recipe to require
firebreath instead of fiery sweat
/🆑
2024-11-17 04:18:12 +01:00
Bloopandlessthanthree 5961aa3b53 Fixes improper static list declarations + adds grep for it (#87207)
## About The Pull Request

I randomly came across a `var/list/static` in the code, which does not
actually do what was intended, and thought it was silly. A ctrl+f
revealed that this was a fairly common mistake, so I went and fixed all
the instances of it I could find.

~~Including one in lighting code, which it looked like they were trying
to create a global list to cache generated lighting sheet values for
speed, but it was just a normal list that got created each time
pointlessly. Now those values are actually being cached (using a global
var, because a `static` list was not the right thing to use there in the
first place).~~

Nevermind, it seems that this was in fact being cached even if it
shouldn't have been, because byond. Just rearranged it there seeing as
it works either way.

## Why It's Good For The Game

Code that does what it's supposed to

## Changelog

🆑
fix: fixes a bunch of improper static list declarations
/🆑
# Conflicts:
#	code/game/objects/items/kirby_plants/kirbyplants.dm
2024-11-16 00:44:53 -08:00
necromanceranneandlessthanthree c77f9806d9 Pyro/Cryokinesis cast range is the same as the projectile's range. Pyro and ash mutations are no longer subtypes (#87144) 2024-11-16 00:38:42 -08:00
necromanceranneandlessthanthree 8d733c4f2d Adds the Fundamentally Evil quirk. Interactions with Empathy and Honorbound. (#87045)
## About The Pull Request

Adds the Fundamentally Evil quirk. The quirk does nothing in of itself.

If an Empath examines you, they will be shaken up by the fact that you
are totally evil.

Mindreaders can literally see that you're evil. If they're ALSO evil, it
gives a gives a unique message.

Honorbound chaplains can freely attack you without first declaring you
evil. You are already evil. There is no outward tells for this fact, but
if the chaplain pays attention to the medical records, you might have a
problem on your hands.

You are significantly harmed by holy water and holy explosions. So don't
drink holy water if you can help it.

## Why It's Good For The Game

I just think it'd be funny to have some crew, for whatever reason, be
fully committed to being evil for no reason other than it is funny to
bother empaths.

I want a chaplain to come to the realization that I'm evil and see what
happens.

## Changelog
🆑
add: Fundamentally Evil quirk. You might act normal, but you know deep
down that you totally don't give a shit about anyone but yourself.
Empaths better watch out.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
# Conflicts:
#	code/controllers/subsystem/processing/quirks.dm
2024-11-14 15:57:13 -08:00
RoxyandGitHub 413207b9c2 Refactor gene combination recipes to not use strings (#87629)
## About The Pull Request
Rewrite `/datum/generecipe` to have two variables, `input_one` and
`input_two` that hold the type path of the ingredients for the recipe,
instead of it being a semicolon-separated string.

## Why It's Good For The Game

Better code, will catch invalid type paths in recipes at compile-time.

## Changelog

No player-facing changes
2024-11-03 14:40:42 +01:00
RoxyandGitHub 1a1365efc8 Fix two broken gene combination recipes (#87581)
## About The Pull Request
Changes the required genes for `/datum/generecipe/cindikinesis` and
`/datum/generecipe/pyrokinesis` to have the correct path to the fire
breath gene.

## Why It's Good For The Game
Bug fix is good.

## Changelog
🆑
fix: The gene recipes for cindikinesis and pyrokinesis should now work
properly.
/🆑
2024-11-01 00:24:57 +01:00
GhomandGitHub 778ed9f1ab The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.

This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).

And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.

## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.

Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.

Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

![immagine](https://github.com/user-attachments/assets/2bb625c9-9233-42eb-b9b8-e0bd6909ce89)

## Changelog

🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
2024-10-30 08:03:02 +01:00