Commit Graph

14729 Commits

Author SHA1 Message Date
Ben10Omintrix
444f1b5bc0 make the hive bot a basic bot (#77274)
## About The Pull Request
i make the hivebot a basic bot also the old hivebot simple bot he was
chaneged apperence when he finded a target so i maked a new element to
allowed this behavier so now when the basic finded a target he apperence
can also changed and this elememt can be gived to another basic monsters
so they can changed apperence when they found a target. i give him new
behaviers now the hivebot will look for ech other and when he finded ech
other they will comunicated with binyary messages and now the mechanic
hivebot he will go to look for broked machines so he can repair him

## Why It's Good For The Game
the hivebot is a basic and he have a better behaver 

## Changelog
🆑
refactor: the hivebot is now a basic please report any bugs
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-08-08 11:42:37 +01:00
necromanceranne
95ec0e6545 Dissection experiments are handled by autopsy surgery. Removes redundant dissection surgery. You can repeat an autopsy on someone who has come back to life. (#77386)
## About The Pull Request

TRAIT_DISSECTED has had the surgical speed boost moved over to
TRAIT_SURGICALLY_ANALYZED.

TRAIT_DISSECTED now tracks if we can do an autopsy on the same body
again, and blocks further autopsies if it is on the mob. A mob that
comes back to life loses TRAIT_DISSECTED. This allows for mobs to be
autopsied once again.

Since it is completely redundant now (and was the whole time TBH),
dissections have been removed in favour of just having the experiment
track autopsies.

Fixes https://github.com/tgstation/tgstation/issues/76775

## Why It's Good For The Game

Today I showed up to a round where someone autopsied all the bodies in
the morgue, not realizing they were using the wrong surgery. Since I
couldn't _redo_ the surgery, this rendered all these bodies useless.
This was not out of maliciousness, they just didn't know better. There
are two autopsies in the surgery list, but only one is valid for the
experiment and doing the wrong one blocks _both surgeries_. Dissection
is completely useless outside of experiments. This same issue also
prevents additional autopsies on the same person, even if they had come
back to life and died again after you had done the initial autopsy.
Surely you would want to do more than one autopsy, right? That's two
separate deaths!

This resolves that by giving you a method of redoing any screwups on the
same corpse if necessary. It only matters if the experiment is available
anyway, so there isn't much reason to punish players unduly just because
they weren't aware science hadn't hit a button on their side (especially
since it isn't communicated to the coroner in any way to begin with). It
also removes a completely useless surgery and ties in the experiment to
what the coroner is already going to be doing. They can dissect their
corpses to their hearts content without worrying about retribution from
science for doing so.

In addition, someone repeatedly dying can continue to have autopsies
done on them over the course of the round. The surgery bonus only
applies once, so the only reason to do autopsies after the first is to
discover what might have killed someone. No reason this should block
further surgeries, just block surgeries when the person remains a
corpse.

## Changelog
🆑
fix: You can do autopsies on people who were revived and died again
after they had already been dissected.
qol: Autopsies have become the surgery needed to complete the dissection
experiments. As a result, the dissection surgery has been removed as it
is now redundant.
qol: A coroner knows whether someone has been autopsied and recently
dissected (and thus hasn't been revived) by examining them.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-08-08 11:39:20 +01:00
MrMelbert
eea20b83e3 Kills seconds_per_tick from status effect tick, replaces it with seconds_between_ticks to clarify some things (#77219)
## About The Pull Request

https://github.com/tgstation/tgstation/pull/66573#discussion_r861157216

`status_effect/proc/tick(seconds_per_tick)` is wildly misleading and I
feel like I should address it

For a majority of status effects, they process on fast processing but do
not tick every fastprocessing tick

This means that using `seconds_per_tick` here is not giving you the
seconds between status effect ticks, it's giving you seconds between
processing ticks (`0.2`)

This is how it's misleading - If you have a tick interval of `1
SECONDS`, you'd think `seconds_per_tick` is, well, one. But it's
actually one-fifth. So all of your effects are now 80% weaker.

I have replaced the use of `seconds_per_tick` in tick with
`seconds_between_ticks`.

This number is, quite simply, the initial tick interval of the status
effect divided by ten.

An effect with the tick interval of `1 SECONDS` has a
`seconds_between_ticks` of 1.

As a consequence, some things which were inadvertently made weaker, such
as fire and some heretic things (at a glance), are now a little
stronger.

## Why It's Good For The Game

See above. Makes it more clear what you're doing when working with
effects.

## Changelog

🆑 Melbert
code: Updated some status effect tick code to be more clear of how long
is elapsing between ticks. Some effects that were inadvertently weakened
are now stronger as a result (fire and some heretic effects).
/🆑
2023-08-08 11:54:12 +12:00
Ghom
52e4638536 Adds an Indebted negative quirk to the game. (#77138)
## About The Pull Request
This Pull Request brings a new negative quirk to the list of negative
quirks: Indebted. As the title suggests, you start the round with a
pretty high debt of roughly 15.000 credits (give or take up to 1.250
credits), and everytime the account balance would increment, 75% of
what's earned will be pushed toward solving it instead.

Unlike other quirks, it is hidding from medical HUDs and the health
analyzers, because I frankly believe it's quite a stretch putting it on
the same plane as other quirks which are of a more "psycho-physical"
nature. However, examining the medical records will return a remark on
how the quirk holder has had some difficulties paying the checkup bill,
hinting it greatly. Examining their ID accurately will also report the
entity of the debt.

Ok, the PR is now ready. It fancies an achievement and a pin too, for
those who actually extinguish the debt.

## Why It's Good For The Game
I think it's cool to have a quirk that affects players from an angle
different than most of the others. It doesn't affect the mob directly,
brings no positive or negative moodlet, gives items, but it does cripple
what they can do with their own bank account. Sure, it can be
circumverted by "borrowing" another player mob's ID card, but frankly it
has a mild negative value on par with "Family Heirloom" so it's not a
big deal.

## Changelog

🆑
add: Added an Indebted negative quirk to the game, which gives the
holder's bank account a debt averaging at 15000 credits (with a
variation of 1250 cr) and forces 75% of all earnings towards solving it.
A little prize awaits those who actually extinguish it.
/🆑
2023-08-07 22:21:27 +01:00
Comxy
939ea4b369 Species change damage/wound transfer (#77162)
## About The Pull Request
You now keep the same damage on limbs when you species gets changed.
## Why It's Good For The Game
Fixes the first half of #77001
## Changelog
🆑
fix: Damage on limbs get transferred on species change.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-08-07 19:22:03 +00:00
GPeckman
416dc10609 Nobreath trait now properly allows things to heal oxyloss (#76985)
## About The Pull Request

Previously, the nobreath trait would constantly clear oxyloss and
suffocation damage from people with it. However, this functionality was
removed apparently by accident in #76209. Rather than re-adding that
functionality, this PR causes creatures with nobreath to regenerate
oxyloss at a fixed rate, as there are sources of oxyloss other than
suffocation (bloodloss). This also fixes #76804
## Why It's Good For The Game
2023-08-07 13:39:10 -05:00
Sealed101
297f7f88e8 Fixes things about goliaths: wallhacks/range hacks(no, really) and tentacles not spawning in mineral turfs; also fixes find_potential_targets wallhacks (#77393)
## About The Pull Request

Goliath's sand digging behaviour could potentially target a turf that's
actually unreachable by the goliath, e.g.
```
G#
#T
```
where G - goliath # - wall T - target turf. fixed that, but i think
there could be something easier here, maybe instead grabbing turfs in
goliath's `view()`? unsure

The component goliaths use to telegraph their attacks
(`basic_mob_attack_telegraph`) casts a `do_after()` to perform the
attack, but it was not actually checking for the target staying in melee
range, as it was using the source goliath as both `user` and `target`,
so it didn't actually care at all for the target. Implemented an
`extra_checks` to `Adjacent()` since that's the closest we get for melee
range shenanigans I suppose
This still allows the source basicmob to attack the target if the target
moves around the source basicmob.

`!`Goliaths were also able to summon tentacles on a target that moved
into cover and still stayed in the `find_potential_targets` target
range. Which meant more wallhacks. This was a thing for the base
`find_potential_targets`, meaning that every basic mob using it was a
dirty haxxor (or very vengeful). Fixed that by making
`find_potential_targets` also check for `can_see()` before proceeding
further down `find_potential_targets/perform()`. `!` The only exception
to this check currently are bileworms.

`!`Goliath tentacles were not spawning in mineral turfs as their
`Initialize()` checked for closed turfs before handling mineral turf
mining. Fixed that as well.

## Why It's Good For The Game

![Dr__Hax_by_Didgeridoo_Dealer](https://github.com/tgstation/tgstation/assets/75863639/fbcbfc1b-f489-435e-bb01-677f55398787)

## Changelog

🆑
fix: fixed goliaths digging sand that they can't actually reach (behind
windows or inbetween closed turfs)
fix: fixed goliaths melee attacking their target despite the target
running away from goliath melee range
fix: fixed goliath tentacles not spawning in mineral turfs
fix: fixed goliaths summoning tentacles on targets that moved behind
cover but stayed in their targeting range. this applies for most basic
mobs, really, so if any basic mob was targeting you despite you hauling
ass behind cover, they shouldn't anymore
/🆑
2023-08-07 13:02:09 +01:00
Ben10Omintrix
8aea1c8a89 (no gbp) make the bee care more about the polinating (#77293)
## About The Pull Request
the bee when he found a man he was focused on attacking him and he
forget about the pollinating until the man is gone or died. now he will
care more about polinating even if there is a man near him butbe care
because he will still atacked u if u dont wear a protect suit! and a
small thin now the raegent incompatibile proc will checked the raegent
type insted of the datum himself.

## Why It's Good For The Game
make the bee better at polinating

## Changelog
🆑
fix: the bee will now care more about polinating
qol: in case u miscliked the bee queen with a seringe 2 times, the
raegent will not be transfered to the quen if he alredy have this
raegent
/🆑
2023-08-07 12:49:22 +01:00
Ghom
47704d9ca1 'Mirrors now display your reflection' Redux. (#77202)
## About The Pull Request
This is a revamp of #62638, which is in turn a remake of #49833, a
whooping 3 years old PR, that adds one component to the game, used by
mirrors, to do what it reads on the title. Thanks ChungusGamer for
reminding me about it.

This time with vampires not being shown in mirrors.

## Why It's Good For The Game
I'm going to post the old screenshots here since I've forgot to take
some during the latests tests, while I was busy cussing about a tiny
little detail I couldn't achieve (see the documentation on the component
path so I don't have to be verbose about it). They look more or less the
same, except the visuals look a little less cropped now, ergo
nicer-looking:

![immagine](https://user-images.githubusercontent.com/42542238/140630271-b002fe97-59c6-4781-abc9-02046c002dac.png)
and here another from the previous attempt at PRing this:
![Bolshevik Spess Junk LV 2021-11-07
024750](https://user-images.githubusercontent.com/42542238/140630301-5ca687ec-153b-4f7d-9e37-76fa038c6299.png)

## Changelog

🆑
image: Mirrors now display a reflection of the mobs next to them...
except for vampires.
/🆑
2023-08-07 12:46:59 +01:00
BlueMemesauce
612da69c63 Emagged player-controlled bots now get antagonistic flavor text (#77100)
## About The Pull Request

The default flavor text is 'You are a malfunctioning bot! Disrupt
everyone and cause chaos!'
## Why It's Good For The Game

Bots are required to follow their flavor text, so meant emagged bots
couldn't use any of their new dangerous abilities since that would go
against their initial helping the station flavor text. This wouldn't be
fun for both the bot themselves and the person who emagged them. Now
that they get antagonistic flavor text after being emagged, they
actually can go out and use their abilities and act antagonistically.

It also makes it more clear what has happened to you, especially when an
AI emags you as there was no message for that before.

## Changelog
🆑
add: Emagged player-controlled bots now get different flavor text
(depends on policy)
add: Bots are now notified when a silicon toggles them malfunctioning
/🆑
2023-08-07 12:17:02 +01:00
Wisemonster
77913b221e Fixes Cell Message With Mulebots (#77374)
## About The Pull Request
Fixes the message when removing/adding a cell to mulebots using the
mulebot as the user, resulting in sentient mulebots receiving the
message "You add/pry out the cell in the mulebot" despite not being the
one adding/removing the cell. First time making a pr for this codebase,
so let me know if I fucked something up.
## Why It's Good For The Game
The mulebot isn't moving the cell, whoever IS moving it is. Also bug
bad.
## Changelog
🆑
fix: Fix mulebots receiving the wrong message when thier cell is
added/removed.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-08-06 12:07:52 -07:00
Fikou
fc4de530ce reorganizes the human sprite folder and replaces the human_basic sprite with an updated one (#77323)
instead of mob/species/human the icon folders are now mob/human/species,
this makes much more sense imo than having human stuff like hair or
bodyparts (which are a GENERAL thing, not human species only) be behind
a folder while you see shit like podperson hair and golem in the main
folder
the icon for human is replaced by the new sprites instead of the old
yellow guy with green eyes
2023-08-05 14:12:05 +00:00
Jacquerel
f491c747f6 [no GBP] Goliaths use TRAIT_NO_GLIDE instead of a movement cooldown element (#77370)
## About The Pull Request

Fikou noticed that Goliaths change their targets semi-randomly, this is
because the element I was using to curtail their movement caused the AI
pathfinding to fail and cancel the current action.
While investigating this I also realised that just "not gliding" makes
more sense than what I was doing anyway, and has fewer weird side
effects (like being unable to move diagonally).

At some point it would probably be sensible to figure out what speeds
make gliding look stupid and automatically apply this trait to
characters (maybe only basic ones rather than humans?) moving that
slowly, however I will do that in a future PR.

## Why It's Good For The Game

More reliable AI behaviour.
Better QoL when actually playing as a Goliath.

## Changelog

🆑
fix: Goliaths no longer intermittently reset their target and retarget
something else.
fix: Goliaths can once again step diagonally.
/🆑
2023-08-05 15:11:51 +02:00
Jacquerel
a0881f897c Lightgeist AI (#77287)
## About The Pull Request

The lightgeist AI controller was marked as "these aren't intended to
exist outside of player control" but this is actually untrue.
Lightgiests can appear under AI control either from a rare vent clog
event or in the "patch of eden" lavaland ruin.

As they heal things by "attacking" them, I made it so that they will
target wounded creatures to "attack" them, though they will only heal
them quite slowly, significantly less efficiently or effectively than a
medibot (for example).
While making this change I also added a couple more parameters to their
"healing hands" component, now they can no longer repair beepsky or heal
cyborg limbs. It's fleshies only.

Lightgeists will attempt to heal _anything_ they can see which is both
injured and has healable damage, which is notable because while this
makes the "Patch of Eden" ruin a nice place of respite for a wounded
miner you should be careful to let them finish up before you leave.
If they follow you out, they will attempt to heal any of the fauna that
you are attacking. Worse still, most Lavaland mobs are not signatories
of the Geneva convention and have no compunctions against killing field
medics.

The majority of listed file changes in this PR is that I made some
attempt at splitting our massive list of blackboard keys across several
files, in order to cause myself a headache based on which of my (or
other people's) open basic mob AI PRs gets merged first.
Also I fixed a bug where the goliath attack forecast would runtime if it
killed a mob which qdels itself on death (guess how I found that out).

## Why It's Good For The Game

Adds a bit more character to a lavaland area and rare event.

## Changelog

🆑
add: Lightgeists under AI control will selflessly heal any wounded
creature that they see.
balance: Lightgeists can no longer repair non-organic tissue.
/🆑
2023-08-04 12:35:53 -06:00
Sealed101
bece959d9c [NO GBP] Removes new player's status tab readiness; replaces it with a blip on Collapse Button (#77209)
## About The Pull Request
On the tin.
Ready blip will update with the new player's ready state, and upon game
start(or when a player joins an in-progress round) the blip is disabled.

<details><summary>Blip showcase (GACHI BGM WARNING)</summary>


https://github.com/tgstation/tgstation/assets/75863639/c3168e5d-f4de-4bec-bcea-bbdd150879aa

</details> 

## Why It's Good For The Game


![moth](https://github.com/tgstation/tgstation/assets/75863639/e6423c53-ff93-4e74-a152-24a8aaf7d6a0)


![moth2](https://github.com/tgstation/tgstation/assets/75863639/24a3336e-966d-43dd-a490-ba6c0d5dcff4)


## Changelog
🆑
del: removed new player status tab Readiness Status
add: added a Ready Status Blip on the Collapse Menu button
/🆑
2023-08-04 12:30:35 -06:00
distributivgesetz
ebbc45b161 Improved PDA Direct Messenger (#75820)
## About The Pull Request

Fixes #76708, Closes #76729 (sorry Zephyr)

This PR expands the Direct Messenger UI, adding a chat screen for each
available messenger that you can find, and moving message sending over
to TGUI.

This chat screen includes a message log that displays messages sent by
you as well as messages received from the recipient. This gets rid of
the previous chat log, which just had all messages thrown together that
you received or have sent, in one big list.

Furthermore, all messaging is now done inside the UI. This kills all
TGUI popups you would ever need to send messages forever (except for
quick replies). Use the input bar on the bottom, press Enter or the Send
button, and it sends your message. Spam mode is now done in the UI too,
via a text field you can find in the contacts list.

Additionally, because I have a habit of blowing things massively out of
scope, I've also completely refactored how messages and chat logs are
stored in the PDA messenger. I plan on using this in a PR that merges
the chat client with the messenger, sometime in the future. Sorry this
took so long.

Stuff left to do before I open this PR for review:
- [x] Add "recent messages"
- [x] Add "unread messages"
- [x] Add message drafts
- [x] Make photo sending not shit
- [x] Implement the edge cases for automated and rigged messages
- [x] Make sure shit isn't fucked
- [x] Profit

<details>
  <summary>Screenshots</summary>
  

![dreamseeker_HIrEfrap5X](https://github.com/tgstation/tgstation/assets/47710522/97c713b7-dda3-44d3-a8f5-d0ec11c92668)

![qIOWhVld4l](https://github.com/tgstation/tgstation/assets/47710522/3ab4e2c1-a38f-4b20-8e9f-509ea14c0434)

![dreamseeker_LIqwi05i4O](https://github.com/tgstation/tgstation/assets/47710522/c051c791-b595-4166-a4d3-82cb7568411f)

![BIYxNVjGL7](https://github.com/tgstation/tgstation/assets/47710522/b9c97eab-52b5-449f-b00f-a0d8aa5f865c)

![dreamseeker_IWdoSsUinC](https://github.com/tgstation/tgstation/assets/47710522/2a4cd76a-2bdc-4283-b642-09e92476fef5)

![L9DxzFHDEF](https://github.com/tgstation/tgstation/assets/47710522/6a5b0e29-d535-4c7e-a88e-e9b71198719b)

![rAuDgqBLNE](https://github.com/tgstation/tgstation/assets/47710522/128a0291-91da-4f9e-9bc5-a65cf411ea6d)

![dreamseeker_voui6S8MUf](https://github.com/tgstation/tgstation/assets/47710522/6e3ba044-b8df-492d-b58d-6c73ab07233d)

![image](https://github.com/tgstation/tgstation/assets/47710522/522c1d85-b9cf-4e0e-9588-9d3993eea03f)

</details>

## Why It's Good For The Game

The UI has largely stayed the same since modular tablets were added a
year ago. Even better, direct messaging has been the same since PDAs
were first added *more than a decade ago*. Imagine that.

Now we finally actually (!) make use of those brand new features that we
got from the TGUI switch in this regard.
## Changelog
🆑 distributivgesetz
add: Updated Direct Messenger to v6.5.3. Now including brand new
individual chat rooms, proper image attachments and a revolutionary
message input field!
add: Added a "Reset Imprint" option to the PDA painter.
refactor: Refactored PDA imprinting code just a bit.
fix: PDAs should now properly respond to rigged messages.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-08-03 14:43:31 -07:00
Vekter
762da01f71 Fixes formatting for derelict and syndicate drone job names (#77303)
## About The Pull Request
These were using the generic "ghost role" job names instead of the
defines that it's supposed to. This should fix it.

Note: This touches code I'm not intimately familiar with, but I did test
this and it works fine.

## Why It's Good For The Game
Fixes #76922

## Changelog
🆑 Vekter
fix: Fixes formatting for derelict and syndicate drone job names. They
should no longer tell you they're "the Ghost Role" when spawning as
them.
/🆑
2023-08-03 15:51:42 +02:00
distributivgesetz
9ef2971e5b Adds a sanity check to /mob/living/brain/Life() to make sure it's actually in an MMI (#77071)
## About The Pull Request

This PR adds a sanity check to /mob/living/brain in the offchance that
the reference to container is no longer valid. This has only happened
once before as far as I know, but it was catastrophical enough to
warrant a failsafe system. I'm not even sure if this is something that's
player-facing because there's no set of circumstances in the game that
would cause this bug to happen, outside of adminbus.
## Why It's Good For The Game

Fixes #68497
## Changelog
🆑
fix: Fixes an extremely rare bug where a /mob/living/brain with a client
would not be moved out of nullspace correctly, causing admin log spam.
/🆑
2023-08-03 13:56:41 +02:00
GPeckman
5cbe67e195 Replaces Upgraded Cybernetic Ears with two new variants (#75931)
## About The Pull Request
Adjusts the placement of basic and upgraded cybernetic ears in the
research tree and adds two new variants: Whisper-sensitive Cybernetic
Ears, which make it slightly easier to hear whispers from a tile away,
at the cost of higher vulnerability to flashbangs and other loud noises;
and Wall-penetrating Cybernetic Ears, which allow you to 'hear through
walls' so to speak, also at the cost of higher vulnerability to loud
noises.

Basic cybernetic ears are now in basic medical tech node, meaning that
medbay can print them roundstart the same as other basic cybernetics.
The upgraded cybernetic ears are now unlocked with the other tier 2
cybernetics. The two new ear variants are unlocked with the other tier 3
cybernetic organs, and the luminiscent and welding shield eyes have also
been moved there from the cybernetic implants node for consistency
reasons.

The whisper ears allow you to clearly hear whispers from up to seven
tiles away, the same range where you can hear normal speech. The
wall-penetrating ears allow you to hear normal speech within seven tiles
even through walls. Due to technical limitations, runechat popups do not
show up for people you can't see, but the messages will still show up in
chat.
## Why It's Good For The Game
Currently, upgraded cybernetic ears are very underwhelming compared to
other high-tier cybernetic organs. All other high tier organs provide
some sort of benefit; even if the benefit is minor like a built-in
flashlight, a slightly higher tolerance to alcohol and toxins, or higher
tolerance to disgusting food. This change is intended to grant similarly
minor but useful benefits to the cybernetic ears.
## Changelog
🆑
add: Added whisper-sensitive cybernetic ears, which make it much easier
for the user to hear whispers at the cost of being more vulnerable to
loud noises
add: Added wall-penetrating cybernetic ears, which allow you to hear
speech through walls
balance: Basic cybernetic ears and upgraded cybernetic ears are now
unlocked with the other basic/normal cybernetics
balance: The welding shield and luminiscent cybernetic eyes are now
unlocked with the other upgraded cybernetics
/🆑
2023-08-03 11:38:25 +02:00
Fikou
ba6c2ffa4c kinesis changes + smaller misc modsuit stuff (#77241)
## About The Pull Request
renames plasmaman helmet exempt flag to stackable helmet exempt. hat
stabilizer now cares about this instead of letting you stack eva helmets
on top of modsuit helmets
improves some code that dripped in quality when i was on break
kinesis has some tweaks
previously it used to stun for a set amount of time - i think this is
because the creator couldnt figure out how to stop movement while being
held? this is changed, now as long as youre holding someone they are
immobilized
you can cancel your kinesis without throwing or moving out of range by
using right click on the click catcher
adds an admin version of kinesis just for the admin suit. it can grab
(almost) ANYTHING and config menu lets you enable phasing, which makes
it so the atom you grabbed phases through everything. pick up that can.

## Why It's Good For The Game
its fun

## Changelog
🆑
balance: hat stabilizer module can now hold what plasmaman helmets can
hold
qol: kinesis module can be stopped without launching an object with
right click
balance: kinesis module stuns last until the kinesis stops
add: admin suit has a version of kinesis that can pick up anything at
any range and can be configured to make grabbed mobs phase through walls
:)
/🆑
2023-08-02 19:47:57 +00:00
RICK IM RI
cf86250ce4 Adds boss music functionality and gives hierophant it's own thematic fight song! (#77149)
## About The Pull Request

Adds compatibility to the code to assign music to individual mobs that
are played in full length to the player when aggro'd. Music maintains
for the entire length, ends, and is repeated if the mob isn't dead.
Music is instantly stopped if the mob generating it dies. Other coding
avenues were explored around dynamic music generation and allowing for
the music to end more naturally, but they were found to be very buggy or
impossible to code due to dreammaker having a very........... tense
relationship with audio. It also (had to be reminded of this!), lowers
the audio of hierophants attacks to make music more audible.

## Why It's Good For The Game

This has the potential to add so much thematic flavor to mobs and events
in game, it's great! Represents a big step forward in terms of sound
design on tg. Thanks to John Willard for fully coding!
Check out the theme here --> https://youtu.be/mWgv1CHtd4Y

## Changelog

🆑
add: Adds boss music functionality.
sound: Adds hierophants boss track, tweaks hierophant boss noises.
/🆑

---------

Co-authored-by: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com>
2023-08-02 09:42:40 -04:00
SpaceVampire
0cbfef6ee9 Fixes the Guard Spider Effigy disables attacking bug. (#77281)
## About The Pull Request

Fixes the Guard Spider Effigy disables attacking bug, as reported here
https://github.com/tgstation/tgstation/issues/77133

## Why It's Good For The Game

Fixing bugs is good.

## Changelog
🆑
fix: Guard Spiders are no longer unable to attack after using Web Effigy
/🆑
2023-08-02 14:54:28 +02:00
distributivgesetz
19454cc14a Fixes holopara owners not always dusting (#77262)
## About The Pull Request
Holoparas accidentally deleted themselves first when they die, which is
bad because this happens before they try to dust their owner, so the
owner reference is nulled before we can dust them too

## Why It's Good For The Game
Holoparas will always dust their owner now no matter what hopefully

## Changelog
🆑 distributivgesetz
fix: Fixes holoparasites not dusting their owners on death sometimes.
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-08-01 19:59:08 -06:00
Jacquerel
ddfdc70d73 Basic Lobstrosity (#77253)
## About The Pull Request

I'm slowly chipping away at mining mobs. These ones also got some new
sprites because the old ones were a bit weird except when facing South.

![image](https://github.com/tgstation/tgstation/assets/7483112/015b8819-bab8-471a-86ae-70b1597ae327)
Arctic Lobstrosities are now hairy to give them a little more visual
distinction from Lavaland ones.

In terms of behaviour, they're now a little faster and can charge you
from further away.
They will _only_ attack players who are incapacitated in some way
(primarily from being hit by their charge, but could be from a Goliath
or something too) and will otherwise keep their distance until they can
charge again. They move slower for a short duration after charging
though, so you have time to slap them a bit.

If a Lobstrosity downs you then it will try to snip off one of your
arms, then retreat in order to eat it.
Obviously nobody likes losing an arm, but this does give you an
opportunity to get away while it is distracted? Funnily enough the way
our health system works means that sometimes losing that arm actually
takes you out of soft crit so you can stumble back to the station for a
replacement (or try to wrestle yours back?)

All of these things are achievable also by a player if you make one
sapient, they will pull arms off mobs they attack which are in crit and
can eat arms if they see them lying around if they want.
I added an element to let you dismember people with your bare hands,
maybe someone evil can use it to add a beheading attack some day.

Here's a video of their new behaviours:
https://www.youtube.com/watch?v=9eKxsH7hD7Q

## Why It's Good For The Game

Gives mobs more character.
Reduces our list of frozen simple mobs.
Replaces some ugly side sprites.
Medbay enrichment?

## Changelog

🆑
refactor: Lobstrosities are now basic mobs and have different AI
behaviour. Please report anything which seems like it shouldn't be
happening.
add: Lobstrosities will now only opportunistically attack things they
have knocked over with their charge, and are otherwise timid.
add: Lobstrosities are hungry for fingers and will steal one of your
arms if they defeat you in combat, although this gives you time to crawl
away.
sprite: New sprites for Lobstrosities.
/🆑
2023-08-01 17:26:32 -06:00
MrMelbert
b985266089 Fix TTS leaking identity of TRAIT_UNKNOWN mobs (#77279)
## About The Pull Request

If you have `TRAIT_UNKNOWN`, your chat messages will not TTS. 

Maybe a more fun alternative is to pick a generic voice for
`TRAIT_UNKNOWN` mobs, with a filter that makes the voice sound obscured
or something, idk. This is easy though.

## Why It's Good For The Game

`TRAIT_UNKNOWN` is intended to leave no hint you are who you are, so to
suddenly speak in a very distinguishable voice that becomes useless
quick.

This means someone paying attention can easily pinpoint who the traitor
behind the suit is, or the heretic behind the cloak.

(It also probably means that this screws up for people wearing a
disguise (+voice changer) or lings. Should visit that later)

## Changelog

🆑 Melbert
fix: Traitors using the sneak suit and heretics under the effects of
cloak no longer leak their identity via Text to Speech
/🆑
2023-08-01 17:25:02 -06:00
carlarctg
35cb1556ad When Space Dragons devour people they get .extinguish()ed (#77248)
## About The Pull Request

When Space Dragons devour people they get extinguished, removing flames.
## Why It's Good For The Game

> When Space Dragons devour people they get extinguished, removing
flames.

I find it quite annoying that even after you die to a space dragon, the
jackass melts not just your jumpsuit, your suit, your hat, your mask, he
also melts your entire skin off, leaving your body husked with 400
million burn damage when and if the dragon finally dies. I don't think
there's any real reason for this to be necessary, it doesn't help the
dragon in any way - It's just kind of a middle finger to the dead guy,
or more accurately, an oversight.

Worse, because the flame sprite is stupidly noisy, when a dragon DOES
die the corpses are all thrown around randomly and they all look the
exact same, which makes it easier to ignore them.

If there's a concern about tracking sensors, I can make it disable them,
but honestly if you can do that with demons I don't see why this would
be a problem. Not even accounting for the fact that many jumpsuits
ingame are fireproof.
## Changelog
🆑
qol: When Space Dragons devour people they get extinguished, removing
flames.
/🆑
2023-08-01 11:38:08 +02:00
kawoppi
19da5cf2b9 *sigh visual and *glasses emote (#77210)
## About The Pull Request
Remake of PR #69981 by honkpocket.


https://github.com/tgstation/tgstation/assets/94711066/e9360ee8-983b-4258-861a-dbf177768fcb

Unfortunately I can't manage to make use of emote bodypart overlays
here, because I can't get them to properly display an animation that
only loops once.
## Why It's Good For The Game
Makes the emotes more lively and allows you to do the glasses thingy to
make whatever you're about to say sound smarter.
## Changelog
🆑 honkpocket
add: Adds an emote to push up glasses with *glasses
add: Adds a visual effect to *sigh
/🆑
2023-07-31 19:42:31 -06:00
Hatterhat
cd8678514a sets blood-drunk miner's initial attack speed to match their closed cleaving saw attack speed (#77056)
## About The Pull Request
As of now, the blood-drunk miner's initial `rapid_melee` isn't set, so
it inherits the basic hostile mob's - which is 1, which means they
attack pretty slowly until they use the weapon transforming ability
which properly sets it.

This PR fixes that by setting their initial `rapid_melee` to 5, so as to
match their behavior when they toggle their cleaving saw twice (opening
it, then closing it (its default state)).

This does mean that the strategy of preventing the blood-drunk from
transforming their saw to keep them attacking as slow as a watcher is
gone, but if you're going out of your way to rush down the blood-drunk,
you're probably looking for an actual fight.

Right?

(also makes some single-letter variables not single-letter variables)

## Why It's Good For The Game
blood-drunk attacking as slowly as a watcher isn't intended behavior, i
think

## Changelog

🆑
fix: The blood-drunk miner has remembered how to swing their cleaving
saw quickly without having to flick it out first.
/🆑

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-07-31 20:14:44 -04:00
san7890
2d0b4f053f Refactors Slaughter/Laughter Demons into Basic Mobs (#77206)
## About The Pull Request

On the tin, the former "imp" is now refactored into basic mob code. Very
simple since these are only meant to be controlled by players, and all
of their stuff was on Signal Handlers and Cooldown Actions anyways. Just
lessens the amount of stupidity.

Did you know that we were trying to make demons spawn in a `pop`'d cat
named "Laughter"? Embedded in the list? I've literally never seen this
cat, so I'm under heavy suspicion that the code we were using was broken
for the longest time (or may have never worked), and we now instead just
do it a much more sane way of having a cat spawn on our demise.

## Why It's Good For The Game

Cleaner code! Less simple mob jank to deal with. Trims down the list of
simple animals to refactor. No more duplicated code that we were already
doing on parent! It's so good man literally everything was seamless with
a bit of retooling and tinkering. The typepath is also no longer `imp`,
it's actually `demon`, which I'm happy with because there's no other
demons to have it be confused with anymore.

We were also doing copypasta on both the demon spawner bottle and the
demon spawning event so I also just unified that into the mob. I also
reorganized the sprites to be a bit clearer and match their new
nomenclature

## Changelog
🆑
refactor: Slaughter and Laughter Demons have been refactored, please
place an issue report for any unexpected things/hitches.
fix: Laughter Demons should now actually drop a kitten.
/🆑
2023-07-31 19:17:46 +01:00
Fikou
9b690fd0f8 ghost notifs now set the pixel x/y properly with scaling (#77239)
## About The Pull Request
ghost notifs set pixel x y to 0 (so wallmounts for example are centered)
and then large stuff like space dragons or singularities is properly
brought down by calculations
before

![image](https://github.com/tgstation/tgstation/assets/23585223/73b198a1-3a5f-4d00-94b1-ae9690c9d948)
after

![image](https://github.com/tgstation/tgstation/assets/23585223/7a4bb949-36a6-4ba4-9339-d36ed56c6695)


## Changelog
🆑
fix: ghost notification icons are now centered properly
/🆑
2023-07-31 16:42:21 +01:00
distributivgesetz
1511a8198d Reorders simplebot death code so that self-deletion happens last (#77216)
Simplebot code had stuff happen after they had already qdeleted
themselves (namely pai ejection if there was one in there, and more), so
this PR moves their self-deletion to the very end of death code
execution
2023-07-31 03:57:05 +00:00
MrMelbert
c92d338dad Refactors chameleon actions, Adds chameleon outfit saving, Adds chameleon scanner (#77140)
## About The Pull Request

- Refactors chameleon actions a good bit, reducing a lot of the
boilerplate copied around chameleon items.
- I noticed that the EMP comsig completely disregarded any EMP
protection the mob might have. I split the comsig into
`COMSIG_ATOM_PRE_EMP_ACT` and `COMSIG_ATOM_EMP_ACT` - the former now
used to aggregate protection flags and the latter to actually do EMP
stuff.
- As a result of above, this fixes a few oversights in which things
using `COMSIG_ATOM_EMP_ACT` disregarded EMP protection.

- Adds Chameleon Outfit saving. 
- RMB clicking the "Select Chameleon Outfit" will now save your current
chameleon setup as a custom outfit. They become selectable as any other
outfit afterwards.
- Because it might be *too* easy to bamboozle people / might make people
think you're a ling, I added a slight "animation" to swapping whole
chameleon outfits. It's less than a second long.

- Adds the Chameleon Scanner.
- The chameleon scanner is, surprise, a chameleon item that can disguise
as small gadgets or items (toys, cameras, analyzers, etc).
- On LMB, the chameleon scanner will copy the outfit of the target to a
custom outfit slot, allowing you to mimic them entirely without going
through all the menus.
- RMB does the same, but instantly equips the disguise you select in
addition to saving it to a slot.

## Why It's Good For The Game

Right now traitor stealth is very capable but cumbersome, which makes it
much less appealing than just running and gunning.

One big problem with it is that the chameleon kit is rather time
consuming to use. You have to sort through hundreds of items for each of
your chameleon items to find exactly the one you need.

These items seek to amend that time gate, allowing for much quicker
swapping between disguises or picking up the disguise of someone you
kill to replace them like a pseudo-changeling.

## Changelog

🆑 Melbert
refactor: Refactored chameleon actions a fair bit
add: Adds outfit saving to chameleon clothes. RMB the "chameleon outfit"
action to save your current chameleon setup for quick swapping.
add: Swapping between chameleon outfits now has a slight "animation"
associated, to distinguish traitors from lings slightly.
add: Adds a new chameleon item, the "Chameleon Scanner". Use it on other
crewmembers to stealthily save their current outfit as a custom outfit
to use later. And of course, it's chameleon too.
fix: Ethereals, the DNA lock mod, GPSs, and storage items now respect
EMP protection
/🆑
2023-07-29 15:39:06 -06:00
Jacquerel
0bb1b9ed8e Sapient bots can play voice lines (#76920)
## About The Pull Request

Part of the "throwing stuff at the wall and seeing what happens" series
of changes.
We were discussing player bots and there was some small support for
"what if bots couldn't talk except to other bots and primarily
communicated via emoting and playing their prerecorded lines".
I coded this but I'll be honest, my heart wasn't in it, especially
because we have _already_ released sapient bots who can talk so I'd have
to justify taking it away in a better way than "I want to see what would
happen", so I'm not doing that (feel free to revert the last commit in
this PR if you want to carry that cross yourself).

But I'm keeping the button that plays the prerecorded voice messages.
No these lists _aren't_ alphabetised, that's because I wanted to vaguely
order them in order of "this is something the bot regularly says" to
"this is something the bot rarely says (because it is rude or mean)".
This priority is possibly the inverse of how players will want to use
the button, but perhaps they should try being politer.

Additionally this PR ensures that if you put a pAI in a bot then it will
be able to speak any languages the pAI could.

## Why It's Good For The Game

Saying "I should have been a plastic surgeon" is iconic medbot behaviour
and players should be able to do it.
We don't currently have bot TTS voices which directly sound like the
bots themselves to apply, and it might be mildly concerning if we did
because I believe at least one of the voices is the IRL voice of a
community member with some filters added?

## Changelog

🆑
add: Player-controlled bots can now play the prerecorded lines
associated with that bot.
add: Placing a pAI into a bot temporarily teaches that bot all the
langauges the pAI could speak.
/🆑
2023-07-29 18:16:41 +02:00
ArcaneMusic
72379e9e8d Arconomy: Balance Update 2023 (#77055)
## About The Pull Request
Hey everyone I've been dead and tired and distracted and wage cage'd and
hopefully you'll see why in the coming weeks but this isn't that PR this
is something slightly different

So! Changes in this Pull Request:

- I've implemented the changes in #76999 but with the commented
suggestion so that now, mechanically, the foreign species modifier is
now considered to be the floor payment amount. This means a functional
buff to human paychecks, but in game it's still represented as a
non-human nerf.

- The inflation mechanic on vending machines has been removed. This
means that vending machines will keep a consistent cost at all times.
Inflation as a mechanic is still utilized for mail, as well as kept on
the SS level in order to ensure that the market crash events still works
properly.
- Market Crash event has been improved, with some new flavor messages
added, as well as using a new formula where inflation increases for the
period of the event along a 5.5*log(time) scale.

- Tweaks have been made to the accounting computer TGUI to better follow
standard conventions and not use a labeledList. It also properly shows
the player facing paycheck modifier as well. It also looks a bit better
now!

## Why It's Good For The Game

Justification for the change on the 90% paycheck modifier change has
been discussed in #76999 already, but going with the more positive spin
angle.

The inflation mechanic in general has rather unintuitive for a number of
reasons, but the biggest one being that the mechanic doesn't really have
any bearing that players in-game can really effect. Especially with
passive paychecks, the only way to work around inflation is to make...
other players spend their money. That's hardly an easy task with a 10
player crew, let alone a 90 player crew. Plus, the outcome is that it...
punishes players for engaging with the economy if done correctly? Point
being it was a decent idea but it doesn't mash with the desired outcomes
of the player economy in it's current state.

Improvements to the accounting TGUI showcase were necessary as a result,
and just look a bit nicer (I will get a screenshot in a moment). There
is still room to potentially look into command staff being able to give
raises/pay-cuts to crew but I'd want to treat that similar to opening up
crew slots, so I'm putting that off for now.

## Changelog

🆑
qol: Improvements to the accounting console in the HOP office.
balance: Non-human species now receive a 90% racial paycut, up from 75%.
balance: The inflation mechanic affecting vending machines has been
removed, except during the market crash event.
balance: The market crash event now stands as it's own separate event,
and ramps up the cost of vendor items until finally popping and
returning to normal. Market crash now lasts longer to have more impact
while it scales with time.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-29 15:39:27 +00:00
Time-Green
61abab479b Planetary station traits: Forever Storm and Forested (#76957)
Adds two new station traits for Icebox:
**Forever Storm**
The storm on icebox never stops and is more intense. You can wear a coat
and drink coffee and be fine

 **Forested**
Icebox top exterior has a different terrain generator, including way
more grass and trees. AND DEER. Natural chasms are replaced with plasma
rivers

<details>
  <summary>Outside</summary>
  

![image](https://github.com/tgstation/tgstation/assets/7501474/8f5cf57f-9323-473f-9c9b-33192a8777f2)

![image](https://github.com/tgstation/tgstation/assets/7501474/9114fcc5-89b0-46e8-9912-67ad9edf96b8)

![image](https://github.com/tgstation/tgstation/assets/7501474/a5d2cf03-a9a6-4ecf-bbcf-11c39fcacc7d)
(the emissives on the trees have been fixed)
  
</details>

## Why It's Good For The Game

There are no icebox specific station traits, so I added them! The
exterior is very static, samey and could honestly be a lot more
interesting. Having the outside area be varied is something that
freshens up icebox a little! (3x3 icebox is inevitable...)

Forever Storm: I think storms are pretty spooky and cool, and having a
permanent storm can change the ambience a bit and make everyone feel
more isolated. Exploration is not recommended, but you can totally still
go outside at increased risk. Pretty rare and can only happen on icebox

Forested: Forests are dope. It's pretty common for a station trait, but
factoring in that this only happens on icebox, I think it's fair

I've also had to split apart turf and object generation so stuff doesn't
spawn above rivers/chasms anymore. I tested it and I didn't seem to have
broken anything, so that's pretty cool

closes #75154

🆑
add: Adds a Forested planetary station trait! Icebox exterior is now a
forest!
add: Adds a Forever Storm planetary station trait! Sometimes, the storm
never stops. Stay inside or get some coffee and warm clothes
fix: fixes stuff spawning in rivers and above chasms
fix: emissive blockers on random flora not updating
code: Splits terrain generation and terrain population in SSmapping
/🆑
2023-07-29 07:59:34 +00:00
san7890
cb8fe9bbe8 Removed tails inherit their color (#77170)
## About The Pull Request

Hey there,


![image](https://github.com/tgstation/tgstation/assets/34697715/5fe5d71a-de67-463c-8381-b094d09d21a3)

Something that was pissing me off was that tails weren't inheriting the
color when they were removed from a carbon. I actually did a bit of
chicanery in cat surgeon code so I wouldn't be so pissed off about it,
but I think now is the time to fix it for real.
## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/34697715/53b1fb5a-3487-4649-866a-f5d83736d951)

Much better. I also got rid of one of my pet peeves since I decided to
do this in `on_remove()` (nothing should break as a consequence, though
let me know if anything looks cringe) and was able to remove the fugly
override of parent on `Remove()` which didn't need to be like that at
all
## Changelog
🆑
fix: Carbons with tails (felinids, lizards) who have that tail removed
will now have that tail actually look like it came from the person in
question, rather than just be a grey thing of sadness.
/🆑
2023-07-29 08:19:20 +02:00
Ghom
c70a89d3c7 [NO GBP] fixes the logic for mob size-related maptext height. (#77171)
## About The Pull Request
I've made a hiccup in the logic at the last moment and forgot that the
offset should be half of the size difference from trom the default
identity, not its entirety, this is because scaling is equally
distributed vertically and horizontally, we only have to deal with the
upper half of it.

## Why It's Good For The Game
Fixing a human error.

## Changelog
N/A, it's a barely noticeable whoopsie all in all.
2023-07-28 21:04:14 -06:00
Ben10Omintrix
cc64ed0ca4 convert the bear to a basic mobster (#77143)
## About The Pull Request
the bear now a basic and he have a new behaviers. the bear now can go to
climbed the trees! he will looked for a tree to climbing and if he
founded a tree he will go climb him. also the bear now love honey he
will look for a bee hives to stole the honey from it so botanists must
be care. the bear will drag the honey behind him so u must chased him to
get the honey back again

## Why It's Good For The Game
the bear is a basic now so he and have more behavier for more depth
mechanis

## Changelog
🆑
refactor: the bear is a basic now. please report any bugs
add: the bear will climb trees and search honey
/🆑
2023-07-28 19:34:39 -06:00
Time-Green
ec9434ea6b Adds cliffs to icebox (#77062)
## About The Pull Request

Adds cliffs to the game! They're tiles usable for mapping to make
mountainy area's and cliffs! I don't have any sprites for them yet, so
just imagine it's a cliff really hard


![image](https://github.com/tgstation/tgstation/assets/7501474/ab0f31b6-93d7-4964-8b9c-4fb3c774647a)

THESE DO NOT REPLACE MULTI-Z AND NEVER WILL! They're just a neat way to
add more depth to the game. You can’t really add 10 different z’s for
one mountain, so this can be used to help map area’s with depth without
overusing z-levels

They've been mapped into the top part of the icebox outside. There's not
a good way to do sides of cliffs yet (will need some thinking), so
they're mapped in such a fashion where it doesn't matter much. Later,
this area above icebox can be expanded with properly done side-cliffs,
something like in stardew-valley would work for our grid-system:


![image](https://github.com/tgstation/tgstation/assets/7501474/007964cc-49d5-489c-9a43-2140f29239ce)

Longer demonstration: https://www.youtube.com/watch?v=Eig4jXNZZRQ

Eventually, I'll redo mapgen and add 3x3 icebox (definitely not coping)

## Why It's Good For The Game

The incredible flatness of icebox drives me insane. While multi-z is
great at giving it more depth, the actual terrain itself is still
completely flat. Adding cliffs let's us add 'soft-mountains', which does
wonders for making an area feel more alive

(And I absolutely adore snowy mountains)

## Changelog
🆑
add: Adds cliffs to the north of icebox. Try not to fall of of them!
/🆑
<details>
  <summary>Additional images (now outdated)</summary>


https://github.com/tgstation/tgstation/assets/7501474/572dc749-596c-4cab-9693-43c2270aca96
 

![image](https://github.com/tgstation/tgstation/assets/7501474/e12236d1-fda8-406a-858b-84a9fe5b4dc7)

![image](https://github.com/tgstation/tgstation/assets/7501474/264ae9d8-2f84-4133-8eb3-29e8df6c976e)

![image](https://github.com/tgstation/tgstation/assets/7501474/15a7f378-b595-4d7b-b948-d405916cb431)

![image](https://github.com/tgstation/tgstation/assets/7501474/b058a184-9fd5-4fa9-b0de-9f687bdf4e43)
  
</details>

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-28 14:13:43 +00:00
Ghom
5d5492e111 Implements usage of the REVERSE_DIR macro throughout the code. (#77122)
## About The Pull Request
Replaces a ton of `turn(dir, 180)` calls with the aforementioned macro.

## Why It's Good For The Game
Afaik, `REVERSE_DIR` was coded to be faster than the classic `turn(dir,
180)` call, being a simple set of binary operations. To sum it up, micro
optimization.

## Changelog

N/A
2023-07-28 15:16:09 +02:00
Ghom
6f862d107f Adds a unit test to stop elements from using identical lists for their arguments. (#76322)
## About The Pull Request
Ok, so a few days ago I made an issue report about multiple instances of
identical elements being generated because of uncached lists.
ninjanomnom (the mind being the element datums) cleared it up and said
an implementation of GetIdFromArguments() that also checks the list
contents wouldn't be worth the performance cost, while adding that a
unit test should be written to check that it doesn't happen at least
during init, which should catch a good chunk of cases.

Also, i'm stopping RemoveElement() from initializing new elements
whenever a cached element is not found. Ideally, there should be a focus
only unit test for that too, but that's something we should tackle on a
different PR.

Some of the code comments may be a tad inaccurate, as much as I'd like
to blame drowsiness for it. Regardless, the unit test takes less than
0.2 seconds to complete on my potato so it's fairly lite.

## Why It's Good For The Game
This will close #76279.

## Changelog
No player-facing change to be logged.
2023-07-27 16:04:16 -07:00
Ghom
d9c8bd9bae [READY] Fishing and aquarium expansion. (#76531)
Listing the changes, off the top of my head:
- Resprited fishing rods, hooks, and the worm bait!
- Added a new, telescopic fishing rod, that can be bought as a goodie.
The master rod is also telescopic now.
- Added a couple hooks. One that lets you move the bait up and down,
otherwise keeping it in place, and another that stops the fish from
escaping, but slowly kills it. The former from the bepis fishing tech
node, the latter frm the black market.
- Added a fishing skill and relative legendary reward: A fishing hat,
like the one that recites "women fear me, fish fear me"
- You can now stop fishing by activating the fishing rod in your hand,
and stops it from stealing all clicks on other things if it isn't in
your active hand.
- Reworked fishing traits into fish traits, which can apply to fish
after it has been caught.
- Expanded the fish breeding system. Traits may be passed down to
offsprings, and offsprings may evolve (mutate?) into different kind of
fishes if conditions when conditions are met.
- Added half a dozen new fishes, each with its own traits: lubefish,
sludgefish (and its purple variant), slimefish, unmarine bonemass and
unmarine mastodon. Also, holodeck fish, as a joke.
- New traits: lubed skin, parthenogenesis, toxic (new reagent), toxin
immunity, predator, necrophage, no mating, crossbreeder, aggressive and
revival. Converted Emulsijack's ability and Donkfish's yuckiness into
traits as well.
- Added a fish analyzer that you can scan aquariums and fishes with.
- Fish can now be blended if you really want to. The number of reagents
from blending, w_class, and the number of fillets you get from cutting
fish now scale with size and weight.
- fish feed is no longer infinite (but it should still be plenty).
- Implemented temperature requirements for aquarium fish.
- You can now buy (dead) fish from the black market for dirt cheap.
- Last but now least, toilets are now valid fishing spots.
2023-07-27 22:50:36 +02:00
Sealed101
cc57581b73 Dog wit the butter (feat. a bunch of dog-related code improvements) (#77039)
## About The Pull Request
Adds a `dog_fashion` for the stick of butter.(screenshot is outdated as
Lisa won't have butter no more)
![butter
dawgs](https://github.com/tgstation/tgstation/assets/75863639/a22e702c-98a8-4283-abd9-28d4a9fb3bd0)

Also cleans up dog.dm because it was SHIT and FUCK and MY FUCKING GOD
TWO INITIALIZE()s TWO TIMES IN A SINGLE FILE WHAT IN THE GODDAMN

Most noticeably, Lisa properly won't wear any hats, and puppies properly
can't wear head/back items (by just removing those item slots from the
strip/equip menu. if some admeme wants to fumble around they may still
equip shit there. but otherwise for a normal player those slots are
inaccessible).
Basic mobs now also send signals when they run
`appear_dead`/`appear_alive` procs, which corgis hook into to update
their dead fashion overlays.
The side-effect of getting that to work is that dogs (and any basic mob
that uses `play_dead` ai behavior) are so good at feigning death, that
they fool medical HUDs and other related things. They're just that good.
There's a bunch of other things involved and I was mostly just being
angry at the state of the file so I'll check back when I gather all
things changed.


![strippy](https://github.com/tgstation/tgstation/assets/75863639/ec4d17a2-d4df-401c-bd1f-7c4ee1b95671)


## Why It's Good For The Game


https://github.com/tgstation/tgstation/assets/75863639/b34589cb-94d6-4b80-bf0f-1814c08da100



## Changelog
🆑
add: dog with a butter on 'em
add: dead dog with da butter on 'em (dogs feigning death are so good at
it, they appear dead to medical HUDs and other things)
add: Nars-Ian now can revive from the dead if he consumes a pet
fix: fixes dog fashion items with no speech modifiers set making dressed
up corgis unable to perform their speech or emote behaviors
fix: fixes old Ian losing his mobility ride when shaved with a razor
fix: fixes pets not dropping their collar when gibbed
fix: butter don't go on Lisa and corgi puppies (Lisa won't wear hats and
corgi puppies can't wear hats and back slot items)
/🆑
2023-07-27 12:54:07 -06:00
Jacquerel
e1762455f0 [no gbp] Goliaths make less mess (#77141)
## About The Pull Request

In an earlier PR I made Goliaths dig when they are bored. I still like
this behaviour as an ambient thing for them to do, but the consequence
is that after 30 minutes there were huge piles of sand all over
lavaland.
While convenient for actually having miners bring glass back to the
station, it was an eyesore and too much.

To resolve this I have made two changes:
- Goliaths dig 1/3 as often as they did before.
- Sand (and snow) which are left outside during a storm gets blown away
if it's not inside someone's inventory.

Together these prevent the accumulation of hundreds of piles of sand.

## Why It's Good For The Game

Fixes an unintended consequence of my actions.

## Changelog

🆑
add: Uncollected sand and snow will be blown away by the wind when
storms happen (but don't worry, storms also allow those turfs to be
freshly dug up again).
/🆑
2023-07-27 12:35:32 -06:00
Ghom
d9677e39be Converting crabs to basic mobs (#77109)
## About The Pull Request
Exactly what it reads on the tin. As a bonus, they will flee from
attacking targets, hunt tiny critters (crabs are now small-sized) and
actually move sideways (it's an element that covers both client and
basic movement)


## Why It's Good For The Game
Another simple to basic mob refactor.

## Changelog

🆑
refactor: Crabs refactored into basic mobs. They now hunt tiny critters
and flee from attackers.
fix: Fixed crabs not crab-walking.
/🆑
2023-07-26 17:52:18 -06:00
Kubisopplay
b3ac4e1c7d A small pile of borg combat changes (#75819)
## About The Pull Request
This PR rebalances borg combat. It is first part of broader set of
changes that I talked about with armhullen, which was then discussed in
discord player project channel. Ultimately arm decided to rewrite the
complete rebalance and grab combat, but to help with testing, and to
measure reaction to that changes, I wrote this much smaller change, that
should be usable as a TMd test.
Main points that changed:

- Flashing cyborgs for the first time blinds them, and scrambles their
movement. Flashing them while they are blinded immobilizes them as it
used to, but still allows them to talk, and use radio.
- Emping cyborgs still turns them completely off, but the code behind is
_slightly_ changed, because of how utterly incomprehensible cyborg code
is
- Borg stunarm deals 60 stamina damage, costs 200 energy (SUBJECT TO
CHANGE AS SOON AS I DECIDE ON HOW TO), and applies confusion,
stuttering, and jittering.
- Robot consoles used by humans can now lock down only one borg at a
time, they exhibit increased power draw while doing so. The borg is also
informed of the location of the console. If left alone, the borg will
unlock itself in 10 minutes, to avoid leaving it permanently locked down
in some faraway place. If the console gets destroyed (or depowered), the
borg will get unlocked
- laser pointer only blinds borgs, without the paralyze component. If
you flash a borg blinded this way it will paralyze it, so comboing it is
possible.
- Throwing things at borgs slows them down 


Not planned, but possible if testing shows its required:
- Changing borg health to malfunctions
- Whatever people convince me to add
- Portable lockdown solution for sec, or a way for them to do basic
check on borg.
- Usage of bucket/something else to restrict radio usage of cyborg

If you have ideas what would make this change better please use [discord
channel](https://discord.com/channels/326822144233439242/1113145741788065924),
or comments. Almost everything that I wrote here is subject to change,
as requested or suggested.

### DISCLAIMER
I had to change few functions in background of how borgs work. This WILL
have changes I couldn't predict, since some of them aren't linked in any
obvious way in code. I am aware of that, and will try fixing what needs
fixing when pointed out.
PS: Borg code is a nightmare

## Why It's Good For The Game
Borg combat sucks. It is absolutely binary, there is 0 capacity for
talking, because both sides fear losing in one click. Sec can't really
feasibly ask the borg to state laws while flashed, so their only
solution is to kill it and revive it.

- Turning most instastun solutions into less lethal versions should
lessen the pressure, since it reduces the chance that person that reacts
first survives.
- It causes minor reduction in traitor's capacity to emag borgs with
only a flash, but EMPs still hardstun, and they are plentiful both in
uplink, and in ghetto form, so that shouldn't be a problem.
- Since it allows borgs to scream for help while being flashed, it also
increases the potential of AI helping it, or at least noticing its
death.
- Lockdown console changes reduce its capability in completely turning
off malf ai, and leave it still highly capable of being an useful tool
in stopping emagged cyborgs.


## Changelog
🆑
balance: Flashing borgs requires two consecutive flashes to fully
immobilize
balance: Flashed borgs can speak
balance: Remote lockdown on cyborgs lasts 180 seconds
balance: Cyborg stun arm works like normal baton, and costs less energy
/🆑

---------

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-26 22:09:19 +01:00
Ghom
61e7f75fbd Resizing mobs also affects their maptext height (#77065)
## About The Pull Request
I'll make this brief: the maptext height isn't currently being affected
by mob resizing unlike pixel y, which means text may overlap with an
upsized mob's sprite. However, it's a mild issue to be frank.

## Why It's Good For The Game
Making runechat look nicer I guess.

## Changelog

🆑
fix: the height of runechat messages should now scale correctly with the
current size variable of living mob.
/🆑
2023-07-26 10:30:50 +02:00
zeroisthebiggay
1ed4b1a8ef gives the syndicate medical borg a bonesetter, blood filter, and bone gel so it can actually fix wounds (#77053)
## About The Pull Request

Does what it says on the tin. I thought it was really weird that the
dedicated `'physical trauma aid unit'` for nukies didn't have the tools
to fix fractures or even joint dislocations. Now they can do surgical
wound tendings that normal medborgs can.
## Why It's Good For The Game

Fixes a really weird discrepancy between syndicate and normal medborgs
where an emagged medborg could fix a nukie's shattered ribcage but the
thing they spent actual TC on couldn't.
## Changelog
🆑
balance: Huzzah! Interdyne Associates have finally upgraded their
medborgs' firmware. They'll now have bonesetters and bonegel available!
/🆑
2023-07-26 10:23:28 +02:00
Bloop
023dbf054e Fixes emissives blockers being broken on mobs (#77088)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/76065
Fixes https://github.com/tgstation/tgstation/issues/73860


![firefox_woFR1lmIQq](https://github.com/tgstation/tgstation/assets/13398309/e9b48e8d-4c0d-484f-b57e-94f06a456934)

https://github.com/tgstation/tgstation/pull/74453 _cough_

So it turned out that no emissive blocker overlays were being added to
mobs because `blocks_emissive` being `FALSE` no longer means that it
doesn't block emissives.

We have to check for `EMISSIVE_BLOCK_NONE` instead after the
optimization from the linked PR.

## Why It's Good For The Game


![dreamseeker_I9MuQEUjcC](https://github.com/tgstation/tgstation/assets/13398309/3a507c28-59e3-4276-b4f1-0babdcf952f1)

<details><summary>Fixes the window mesh prisons</summary>


![dreamseeker_wkCElt1Znp](https://github.com/tgstation/tgstation/assets/13398309/b9bb22a0-99f2-4ffa-ae32-6bc734be8353)


![dreamseeker_vhqFYt5X11](https://github.com/tgstation/tgstation/assets/13398309/b7364472-71c9-43e0-9ba8-bbb4bd5b489d)

</details>

<details><summary>No more of the weird partial transparency with buttons
and the like</summary>


![dreamseeker_IweBhZRpa3](https://github.com/tgstation/tgstation/assets/13398309/04938001-6201-45b0-9caa-5a305b40e116)


![dreamseeker_PK06VGj28o](https://github.com/tgstation/tgstation/assets/13398309/c482228b-988a-4861-8037-204471f2408e)

</details>

## Changelog

🆑
fix: fixes mobs missing most of their emissive blockers
/🆑
2023-07-26 09:54:56 +02:00
lessthanthree
f73b23a9a7 Check for surgery before wounds (#77090)
## About The Pull Request

When trying to use an item on a mob, check for surgery before wounds.

This fixes surgeries (such as compound fracture) that use consumables
such as bone gel being impossible to complete because it tries to use
the item on the wound as the 'quick' treatment instead of the surgery.

Moved the surgery check to its own mob/living proc because it's now used
in two places.

Closes https://github.com/tgstation/tgstation/issues/76832
Closes https://github.com/tgstation/tgstation/issues/76711

## Why It's Good For The Game

Compound fracture surgery completes successfully instead of making the
patient scream in pain and take brute damage.

## Changelog

🆑 LT3
fix: Consumables like bone gel will first be used for surgery before
wounds
/🆑
2023-07-26 09:48:40 +02:00