Commit Graph

400 Commits

Author SHA1 Message Date
MrMelbert 8c1e35e1c0 Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests (#76612)
## About The Pull Request

This PR refactors mind language holders into non-existence

As a result, `update_atom_languages` is no longer necessary

Mind-bound languages are transferred via `/mind/proc/transfer_to`

Species changing no longer deletes and re-creates the mob's language
holder, allowing them to keep any languages they have.

Species languages are sourced from `LANGUAGE_SPECIES` now, meaning they
are removed when they change species. If the mob is not a human with a
species datum, these are effectively just atom level languages.

Makes a bunch of unit tests to ensure language transfer over certain
events works as intended

## Why It's Good For The Game

Mobs with minds having two independent language holders results in a
good few bugs, and simply doesn't make sense when we have sources
(`LANGUAGE_MIND`).

Instead of tracking two language holders, we can simply use sources
better and only track one.

This means that the language holder you start with is your language
holder, period. It doesn't get deleted or re-instantiated or whatever.

## Changelog

🆑 Melbert
refactor: Refactored language holders, making species changes not delete
all of your known languages
/🆑
2023-07-10 18:34:57 +00:00
LemonInTheDark 064c8893bf Removes language encryption keys (#76309)
## About The Pull Request

We want languages to be special to species, these devalue that and make
them far too common.
The listen only thing does this especially badly. I'm sorry arcane I
know it's good for cargo but this vibes horrible and we shouldn't have
it

## Why It's Good For The Game

You should be able to talk privately via language with minimal snoopage

## Changelog
🆑
del: Removed language encryption keys from cargo, s bad for species
talking among each other, a thing we want them to do
/🆑
2023-07-01 15:28:30 +01:00
LemonInTheDark 63c365909e Removes per z level station relays, allows tcomms to reach across interconnected zs (#76360)
## About The Pull Request

The second layer of tram does not need its own relay, it is like 10 feet
max above the first.
Feels wrong in game, mappers tend to just sneak these off in corners, it
sucks.
Shouldn't need to do it.

Instead, tcomms z levels will be filled based off the z stack, rather
then just the layer itself.

Adds a list/helper to make this more efficient/more easily duplicable

## Why It's Good For The Game

Matches what people expect better, removes redundant map bits, better
vibes.

## Changelog
🆑
balance: Tcomms now works across connected (vertically) zlevels. No more
hunting in maint for the relay.
/🆑
2023-06-27 22:14:32 -06:00
LemonInTheDark 830d2e50b4 Fixes some stupid airlock sleeps (#75961)
## About The Pull Request

[A common problem with explosions is an overabundance of
sleeping](https://github.com/tgstation/tgstation/commit/6499077a09469ff401c224c0510bc184c663b118)

In an attempt to solve this issue, let's not continue to sleep and do
work in door closing if the door is already deleted

(This is caused by firelocks activating due to other adjacent objects
deleting, triggering an atmos update, and closing the firelocks before
they get bombed. I don't have a elegant way of resolving that core
problem, so let's just minimize the impact)

[Nukes a stupid sleep loop in airlock
code](https://github.com/tgstation/tgstation/commit/5b16360520526d6f5aa3b511049456b74f33f430)

When an airlock was depowered, it would enter a sleep loop, decrementing
its delay by 1 second every well, one second, so long as it had the
right wires flipped
This is very stupid

Instead, let's use signals off wire changes and a combo of timer and
remaining time var to do this with JUST a timer

Most of the changes here are just swapping over wires to a setter to
make signal registration work\

## Why It's Good For The Game

Less sleeping around explosions means less dropped ticks after a bomb
goes off. Good just in general
Also this excises dumb boomer code and adds some hooks for other devs to
use (we should use wires more man)
2023-06-19 02:18:48 +00:00
FlufflesTheDog 389e7e40a0 Fix radio playback on non-common frequencies (#75721)
## About The Pull Request
When enabling the speaker on a radio, it gets set to listen for signals
specifically on FREQ_COMMON, instead of whatever frequency it's
programmed to, which stops you from hearing talking on said channel.
This fixes that.

This applies to all the selectable frequencies on bounced radios and
headsets, and is something that has probably often messed with AIs that
try to talk to people on AI Private. Changing the frequency while the
speaker is enabled gets around this bug, until the speaker is reset
again.
## Why It's Good For The Game
Fix bugs, stop accidentally gaslighting people into thinking you're
ignoring them on the radio
## Changelog
🆑
fix: Radios tuned to things other than common respond properly to
turning on the speaker
/🆑
2023-05-31 14:30:30 -04:00
ChungusGamer666 ae97676647 Removes obsolete obj_flags flag (#75356)
This flag is literally only used in two objects in the game and
seemingly does nothing
2023-05-25 03:11:24 +00:00
John Willard 1674f25725 New Medical job: The Coroner (#75065)
## About The Pull Request

HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view

Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972

Adds a Coroner job to the game, they work in the Medical department and
have their office in the Morgue.
I was inspired to make this after I had played my first round on
Paradise and messed around in there. The analyzer is copied from there
(https://github.com/ParadiseSS13/Paradise/pull/20957), and their
jumpsuit is also mostly stolen from it (i just copied the color scheme
onto our own suits).

Coroners can perform autopsies on people to see their stats, like this

![image](https://user-images.githubusercontent.com/53777086/235369225-805d482c-56c0-441c-9ef8-a42d0a0192bc.png)

They have access to Medbay, and on lowpop will get Pharmacy (to make
their own formaldehyde). They also have their own Secure Morgue access
for their office (doubles as a surgery room because they are edgelords
or whatever) and the secure morgue trays.

Secure Morgue trays spawn with their beepers off and is only accessible
by them, the CMO, and HoS. It's used to morgue Antagonists. Security's
own morgue trays have been removed.

The job in action


https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4

### Surgery changes

Autopsies are a Surgery, and I tried to intertwine this with the
Dissection surgery.
Dissections and Autopsies both require the Autopsy scanner to perform
them, however you can only perform one on any given body. Dissections
are for experiments, Autopsies is for the paper of information.

Dissected bodies now also give a ~20% surgery speed boost, this was
added at the request of Fikou as a way to encourage Doctors to let the
Coroner do their job before reviving a body.
I also remember the Medical skill, which allowed Doctors to do surgery
faster on people, and I hope that this can do something like that
WITHOUT adding the potential for exploiting, which led to the skill's
downfall.

### Morgue Improvements

Morgue trays are no longer named with pens, they instead will steal the
name of the last bodybag to be put in them.

Morgue trays are also removed from Brig Medical areas and Robotics, now
they have to bring their corpses to the Morgue where the Coroner can
keep track and ensure records are properly updated.

### Sprite credits

I can't fit it all in the Changelog, so this is who made what

McRamon
- Autopsy scanner

Tattax 
- Table clock sprites and in-hands

CoiledLamb
- Coroner jumpsuits & labcoats (inhand, on sprite, and their respective
alternatives)
- Coroner gloves
- CoronerDrobe (the vending machine)

## Why It's Good For The Game

This is mostly explained in the hackmd, but the goal of this is:

1. Increase the use of the Medical Records console.
2. Add a new and interesting way for Detectives to uncover mysteries.
3. Add a more RP-flavored role in Medical that still has mechanics tied
behind it.

## Changelog

🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb
add: The Coroner, a new Medical role revolving around dead corpses and
autopsies.
add: The Coroner's Autopsy Scanner, used for discovering the cause for
someone's death, listing their wounds, the causes of them, their
reagents, and diseases (including stealth ones!)
qol: Morgue Trays are now named after the bodybags inside of them.
balance: The morgue now has 'Secure' morgue trays which by default don't
beep.
balance: Security Medical area and Robotics no longer have their own
morgue trays.
balance: Dissected bodies now have faster surgery speed. Autopsies also
count as dissections, however they're mutually exclusive.
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-05-05 21:31:28 -04:00
ArcaneMusic f2fd69a49a Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you
all here (through the automatic reviewer request system). So, mineral
balance! Mineral balance is less a balance and more of a nervous white
dude juggling spinning plates on a high-wire on his first day. The fact
it hasn't failed after going on this long is a miracle in and of itself.

This PR does not change mineral balance. What this does is moves over
every individual cost, both in crafting recipes attached to an object
over to a define based system. We have 3 defines:

`sheet_material_amount=2000` . Stock standard mineral sheet. This being
our central mineral unit, this is used for all costs 2000+.
`half_sheet_material_amount=1000` . Same as above, but using iron rods
as our inbetween for costs of 1000-1999.
`small_material_amount=100` . This hits 1-999. This covers... a
startlingly large amount of the codebase. It's feast or famine out here
in terms of mineral costs as a result, items are either sheets upon
sheets, or some fraction of small mats.

Shout out to riot darts for being the worst material cost in the game. I
will not elaborate.

Regardless, this has no functional change, but it sets the groundwork
for making future changes to material costs much, MUCH easier, and moves
over to a single, standardized set of units to help enforce coding
standards on new items, and will bring up lots of uncomfortable balance
questions down the line.

For now though, this serves as some rough boundaries on how items costs
are related, and will make adjusting these values easier going forward.

Except for foam darts.

I did round up foam darts.

Adjusting mineral balance on the macro scale will be as simple as
changing the aforementioned mineral defines, where the alternative is a
rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam
dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~

Items individual numbers have not been adjusted yet, but we can
standardize how the conversation can be held and actually GET SOMEWHERE
on material balance as opposed to throwing our hands up or ignoring it
for another 10 years.
2023-05-03 14:44:51 +00:00
san7890 ccef887efe Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.

## About The Pull Request

Hey there,

This took a while to do, but here's the gist:

Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.

Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.

Scenarios this PR corrects:

* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*

(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game

If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).

Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.

I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.

(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
2023-03-29 10:17:03 -07:00
Tim a1ada2c9ef Refactor, improve, and rename canUseTopic to be can_perform_action (#73434)
This builds on what #69790 did and improved the code even further.
Notable things:
- `Topic()` is a deprecated proc in our codebase (replaced with
Javascript tgui) so it makes sense to rename `canUseTopic` to
`can_perform_action` which is more straightforward in what it does.
- Positional and named arguments have been converted into a easier to
use `action_bitflag`
- The bitflags adds some new checks you can use like: `NEED_GRAVITY |
NEED_LITERACY | NEED_LIGHT` when you want to perform an action.
- Redundant, duplicate, or dead code has been removed.
- Fixes several runtimes where `canUseTopic` was being called without a
proper target (IV drips, gibber, food processor)
- Better documentation for the proc and bitflags with examples
2023-02-16 20:22:14 -05:00
Halcyon 604d3080f3 Fixes headsets not using their proper worn sprites (#72953)
## About The Pull Request

You're probably wondering "They had worn icons?"
Yes, yes they do. No one fucking noticed.


![headsets-export](https://user-images.githubusercontent.com/81479835/214505362-3e8cd173-ff09-4163-a820-69f1b86c6423.png)
## Why It's Good For The Game

Missing sprites fixed.
## Changelog
🆑
fix: Headsets now have their old worn sprites back, did you ever notice
it?
/🆑

---------

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2023-01-29 19:43:05 +08:00
Zergspower 4b5be90687 Fixes ERT Headsets not starting with their key (#72716)
## About The Pull Request
fixes an accident and assigns the second keyslot to null instead of the
first which removed the ability for ERT's to communicate.

## Why It's Good For The Game

Having comms when you're sent in somewhere deadly is a good thing

## Changelog
🆑
fix: ERT Headsets have the proper key
/🆑
2023-01-15 20:03:55 -08:00
Tim 8d67f614b5 Fix blood overlays on energy daggers (#72624)
## About The Pull Request
Fixes #72338 (again)

Energy blades had blood splatters on them and it looked very funky.  


![dreamseeker_wtugxswIzj](https://user-images.githubusercontent.com/5195984/211640855-f7c3e3fa-8a41-4bca-acc9-75a4c6397b4b.png)

Items now have a `NO_BLOOD_ON_ITEM` flag for to ignore the blood
overlay.

## Why It's Good For The Game


![dreamseeker_dOgOlhLEoU](https://user-images.githubusercontent.com/5195984/211640899-ab577045-9324-456a-ac6a-2cce8119e749.png)

## Changelog
🆑
fix: Fix blood overlays on energy daggers
code: Add `NO_BLOOD_ON_ITEM` bitfield for items
/🆑

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-01-13 04:31:53 +00:00
Fikou 77f0814f95 psyker gang fixes (#72330)
## About The Pull Request
adds more ammunition, and also signing on the psyker ship
fixes some minor stuff
you can see other echolocation receivers as fully purple now, rather
than just their outline
echolocating people have night vision, to prevent bugs with them not
being able to see echolocated tiles
psyker pirates have headsets that increase their echolocation range
partially fixes the shuttle docker. need someone smarter to look at it
with me though, you can physically use it at least, just cant see yet.

## Why It's Good For The Game
they are not very playable right now

## Changelog
🆑
balance: adds more ammunition, and also signing on the psyker ship
qol: you can see other echolocation receivers as fully purple now,
rather than just their outline
fix: echolocating people have night vision, to prevent bugs with them
not being able to see echolocated tiles
add: psyker pirates have headsets that increase their echolocation range
fix: partially fixes the psyker ship shuttle docker
/🆑
2023-01-02 15:13:56 +00:00
texan-down-under c2577638ef Refactors to add directly to desc less (#71996)
## About The Pull Request
Refactors some of the desc += calls to instead use examine() additions
## Why It's Good For The Game
There were a few parts in the code where the description was directly
written to after an action, where that extra note is information on the
status of the item. Moving it to examine() lets you call those procs
multiple time without worry and makes it look more consistent to players
(extra item info displayed as notice/warning spans under desc)
## Changelog
🆑
refactor: moved some description edits to examine hooks
/🆑

Co-authored-by: etherware-novice <candy@notarealaddr.com>
2022-12-15 11:53:00 +01:00
Tim 48e36ef2c7 Saycode refactor, unit tests, and fixes (#69799)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

Fixes #69798
Fixes #71621

When using hypnosis on a victim, the language should be accounted for
and whether the victim can properly hear it. Before the hearing code
would magically translate any message, this is no longer the case.

This also fixes the language barrier involving hearing for:
- Mind echo trauma
- Phobia trauma
- Hypnotic trigger trauma
- Split Personality brainwashing trauma
- Codeword hearing
- Hypnotize status effect
- Impure Inacusiate reagent

## Why It's Good For The Game

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

Better consistency, improved readability, and less bugs in the future.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
fix: Fix hypnosis, mind echo trauma, phobia trauma, hypnotic trigger
trauma, split personality brainwashing trauma, codeword hearing, and
impure inacusiate reagent all bypassing language and hearing checks. If
you try to give commands to a victim in a language they don't
understand, they will no longer magically understand the words.
fix: Fix sign language having accent modifications
refactor: Refactored saycode to be more robust, readable, and have more
unit tests.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-12-09 20:28:17 +01:00
Mothblocks 6a2c7965b2 Don't update radio icon unless necessary, don't create radios in vending machines until needed -- Saves 0.091s of init time (#71682)
#71006 introduced a large regression in init times by forcing them to
update their icons for every single proc being called. This is very
slow. Defers the icon creation until initialize is finished, and only if
necessary.

Also learned that basically everything has a radio by making a station
bounced radio and putting it inside them. Yay...Removes the one in
vending machines until it's actually necessary. Was thinking of making
it a PDA message instead but nah
2022-12-06 00:28:26 -08:00
texan-down-under 49ede0973f Overlays for notifying when radios are on broadcast (#71006)
## About The Pull Request
Adds overlays for when the radios are on broadcast snd speaker

Theres 4 overlay settings, an "idle" (broadcasting or speaker enabled)
and "active" (flicked when recieving or sending a radio msg)

### SBR
The base icon is the screen being off, and the bars are seperated into
ovelays with the top one being broadcasting. The idle overlay displays
the bar short, while the active will make the bars animate like the
current animation)

having both off will make the antenna go down since its "not being used"

### Intercoms
Intercoms are simpler, just having lights on the speaker flash green if
the corresponding mode is active

### Headsets
Headsets are unaffected because of the small sprites.

except miner and explo headsets where the antenna will go down if both
are disabled bc its "not being used"

## Why It's Good For The Game
Helps you tell whether somone (like ai) is spying, makes it easier to
notice whether youee in broadcasting range of an intercom, and its a
cool immersion thing to ""see"" the mic readings on a sbr
## Changelog
🆑
add: radios have overlays for showing broadcasting settings
/🆑

Co-authored-by: candycanes <eastereggman@nothing.com>
Co-authored-by: etherware-novice <candy@notarealaddr.com>
Co-authored-by: Candycaneannihalator <candycane@thisisnotarealaddr.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-21 11:43:36 -08:00
texan-down-under d9998c8167 Ports Beestation's radio uplink (#71210)
## About The Pull Request
A port of https://github.com/BeeStation/BeeStation-Hornet/pull/7363

The radio uplink is now reworked to require saying a codeword over the
secret .d channel. This means that you can do it hands free, but people
around you can hear you whispering the codeword
## Why It's Good For The Game
Current radio uplink is dumb, it has a lot of drawbacks (losing common
radio, fiddling with the tgui slider, having to reset the frequency
after) that its almost unusable. This new uplink has a more unique
trigger method with its own ups and downs
## Changelog
🆑
add: New radio uplink! Simply speak your codeword into the :d channel to
unlock it
code: new COMSIG_RADIO_NEW_MESSAGE signal
/🆑

Co-authored-by: Candycaneannihalator <candycane@thisisnotarealaddr.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-16 16:06:28 -08:00
AnturK 4d6a8bc537 515 Compatibility (#71161)
Makes the code compatible with 515.1594+

Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword

And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.

@tgstation/commit-access Since the .proc/stuff is pretty big change.

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-15 03:50:11 +00:00
tattle ad5debaaa1 Add investigate_deaths (#71112)
## About The Pull Request
Adds INVESTIGATE_DEATHS, an investigate category intended to better show
causes of death.


![image](https://user-images.githubusercontent.com/66640614/200142461-c17b5e51-1116-4eef-bbfb-49bc024c0953.png)


![image](https://user-images.githubusercontent.com/66640614/200147306-09bef76e-68c6-4f0a-bdf9-0211eb274e66.png)

Also makes suicide_act take a `mob/living` as an argument instead of a
`mob`, and some minor style improvements since apparently I hate
atomicity.

## Why It's Good For The Game
Inspired by a mysterious death and dusting. More logging and leads for
admins investigating deaths.

Also fixes #59028

## Changelog
🆑 Tattle
admin: added investigate deaths to shed some more light on unusual
demises, dustings, and gibbings
/🆑

Co-authored-by: tattle <article.disaster@gmail.com>
2022-11-07 16:22:37 -08:00
MrMelbert 29350d704f Frequency locks Confessional intercoms, but an emag can bypass it (#70745)
* Confessional intercoms are frequency locked, but can be emagged to bypass the restriction.
2022-10-26 06:38:06 -04:00
texan-down-under fc9024d35d Refactors radios to not use the prison_radio var (#70713)
* done

* typos

* condense

Co-authored-by: Candycaneannihalator <candycane@thisisnotarealaddr.com>
2022-10-22 16:06:31 -04:00
Rhials 132508632b Adds the Command Intercom, kills off the varedited freerange intercoms on some maps. (#70287)
* Command intercoms now have a unique sprite and are standardized on all maps.
* Also prevents freerange intercoms from accessing syndicate radio.
2022-10-18 19:06:39 -04:00
MrMelbert ced20c8e63 Converts silent to status effect + small cleanup of can_speak / can_speak_basic / IsVocal, and sign language (#69963)
* Gets rid of a lot of weird vocal checks
- unifies all vocal checks under can_speak and try_speak
- de-spaghettis a bit of sign language stuff
- introduce a silence status effect
2022-10-09 23:46:57 -04:00
ShizCalev 1a32f60cf4 [ready] adds unit test for missing inhand icons. fixes a bunch of missing inhand icons (#70037)
fix: Fixed a bunch of missing inhand icons.
fix: Fixed cables in electrical toolboxes not randomizing their colors.
fix: Fixed the wrong colored icon showing when trying to make cable cuffs out of cables.
fix: The collectable SWAT helmet is now using the proper icon again!
refactor: Pipecleaners and power cables now share a unified color system, so they're once again available in ALL the same colors.
imageadd: Updated the screwdriver belt overlay to represent the newer sprite.
imageadd: Added a bunch of new inhand icons. Special thanks to Twaticus for doing the helmets! <3
fix: Wirecutters now have an icon when inside a belt again!
admin: Added a new omnitool subtype that allows you to spawn all items in a typepath!
fix: Explorer gaskmasks now properly reflect their adjusted state when held.
fix: Fixed balaclavas having the wrong icon when pulled up.
fix: Fixed the base energy sword (admin spawn only) being invisible.
fix: The rainbow energy sword is now a little bit more rainbowy!
fix: Fixed an tk exploit with orange handcuffed shoes.
fix: The traitor outfit in the select equipment panel is now actually functional!
2022-10-04 10:20:24 -07:00
Fikou 9dddcb6f48 makes radios use paths instead of new (#70252)
* makes radios initialize in Initialize instead of init()
2022-10-03 09:46:02 +02:00
John Willard 91f02f2a6b canUseTopic now uses TRUE/FALSE instead of defines that just say TRUE (#69790)
* canUseTopic now uses TRUE/FALSE instead of defines that just say TRUE

The most idiotic thing I've seen is canUseTopic's defines, they literally just define TRUE, you can use it however you want, it doesn't matter, it just means TRUE. You can mix and match the args and it will set that arg to true, despite the name.

It's so idiotic I decided to remove it, so now I can reclaim a little bit of my sanity.
2022-10-01 09:47:52 -07:00
tattle fd9f50c552 [IDB IGNORE] Renames the inhand/misc folder to inhand/items (#69573)
Also adds balloons to inhand/items
2022-09-01 03:29:10 +02:00
tattle d91390a447 [IDB IGNORE] The Great Sweep: Moving dmis into subfolders (part 1) (#69416)
Moves singulo and supermatter dmis into obj/engine, renamed from obj/tesla_engine
Moves Halloween, Christmas, and misc holiday items to obj/holiday
Moves lollipops to obj/food
Moves crates, closets, and storage to obj/storage
Moves assemblies to obj/assemblies
Renames decals.dmi to signs.dmi ...because they're signs and not decals
Moves statues, cutouts, instruments, art supplies, and crayons to obj/art
Moves balloons, plushes, toys, cards, dice, the hourglass, and TCG to obj/toys
Moves guns, swords, shields to obj/weapons
2022-08-24 20:49:35 -03:00
Wallem 04006c59cb GAGS most radio encryption keys (#69104)
* the radio star

* I think it's funny that I've had the same contrast problem on all of my GAGS PRS

* oops forgot to make the RD's key unique

* fine

* what if I said please

* swaps translation key to be in line with the other new ones
2022-08-12 10:00:58 -04:00
John Willard 952c3ee0d3 Removes ComponentInitialize() (#69118)
* Removes ComponentInitialize()

Completely removes ComponentInitialize() as a proc, which was called on every single atom in the game, twice in some instances (like new players), over something that can already be done with Initialize().
This is the second attempt at doing this, after the first attempt fell apart for some reason. This time it was way easier though, since storages are no longer a Component.

* update icon blocker added before calling parent

* Update code/game/machinery/porta_turret/portable_turret.dm

Co-authored-by: san7890 <the@san7890.com>

* adds a mapload while I'm here

* moves human mood

* Does some UNRELATED thing to the PR

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2022-08-11 19:01:32 -04:00
MrMelbert 92dc954ab5 Fixes 118(give or take) cases of mapload not being passed to initilaize (#69107)
fixes 114 cases of mapload not being passed to initilaize
2022-08-11 10:22:33 -04:00
necromanceranne 9e3a23b39f Nukie(ish) Rework 3.Eh: Syndicate encryption keys bypass radio jammers. (#68578)
Syndicate encryption keys bypass radio jammers.
2022-07-22 13:25:13 -04:00
Kylerace fe7513d282 addresses reviews on the tram pr made after merge, fixes diagonal movement bugs (#68033) 2022-07-16 21:44:41 -07:00
MrMelbert 860da279c8 Fixes for language headset keys. (#67881) 2022-06-23 17:17:44 -07:00
ArcaneMusic 7f52ff0e39 Arconomy expansion pack 1: Convenience and Luxury goods (#67417) 2022-06-19 09:24:46 -07:00
Iamgoofball aebd156a43 CARGONIA THE FREE: The Quartermaster is now a head of staff. (#67518)
* The Quartermaster is officially a head of staff, with new accesses, a silver ID, ect ect.
* The HoP lost their cargo-related equipment and access, including the Vault monitor, and frequency.
2022-06-07 21:38:02 -04:00
Zonespace 5cb7a2c124 The regular HoS headset is no longer sound-protective (their bowman keeps it). (#65840) 2022-04-01 23:05:20 -05:00
Kylerace ea50ace23a Fixes bug with headsets unsetting channels after moving them (#64763)
Readds them to the global radio channels they belong to as opposed to setting what they belong to on equipped.
2022-02-09 01:44:24 -06:00
ArcaneDefence e421db76bc Adds an intercom interference malf ai module (#64670)
* Adds a radio interference malf ai module

* uses on/listening getters
2022-02-07 23:07:27 -08:00
Luc 4fd16bcbdb Make more use of <tool>_act (#64375)
Replaces a bunch of tool behavior checks in attackby to instead use the respective procs.
For instance, the behavior under a if(I.tool_behaviour == TOOL_SCREWDRIVER) check in attackby() will instead be found under that same object's screwdriver_act() proc. This is the first of a few PRs that I'd like to make to address this, since there's going to be a lot of code shuffled around.

This shouldn't have any impact on players, though some super observant folks might notice that they don't bash some items with tools when they meant to interact with them. I've tested all of these in game and they seem to still have the same behavior as before.
2022-01-25 15:17:30 +00:00
Tortoise 7dda1fcc47 Suit storage items sprite fix (#64183)
This PR fixes the problem with missing texture when you put headset, spray can, card, crayon, seclite in suit storage.
I also fixes the cigpack suit storage east direction sprite because whoever ported it from belt forgot that sprite has different direction. (me)
2022-01-19 21:50:45 -08:00
Wallem 71162dee9b Sign Language translation glove changes (Plasmamen & MODsuits) (#64090)
Swaps the check for the gloves for people with the tongue-tied trait into a check for a clothing-based trait.
Makes a variant of the radio gloves for plasmamen, so they can be forced to use their hands too.
Makes a MODsuit mod that lets you sign over comms when your modsuit is activated.
2022-01-17 22:37:44 -06:00
John Willard 7bead07444 General pAI code improvements (#63688)
Fikou said they would've made MODsuits be controllable by pAI's rather than AI's, if pAI code wasn't as bad.

But pAI code ISN'T AS BAD AS AI CODE LIKE HOLY SHIT WHAT THE FUCK MAN???

Anyways, this is just general code improvements for pAIs that I thought would be nice to have.

Documents previously undocumented vars
Moves loose vars to be where they should be
Removes single-letter variables
Makes pAI a defined job
Moves vars around to where they should be while removing unused ones.
Makes pAI abilities its own .dm file
Replaces var/silent with Stun() (like cyborgs)
Reworks pAI's doorjack to not have a ton of procs, copy paste, and a reliance on Life(), instead it just uses a do_after()
Moves screwdrivering radios from attackby to screwdriver_act

Just general code improvement for Silicon, the thing no one likes or wants to touch.
2022-01-13 22:19:28 -08:00
Kylerace eef625cbce fixes the orion arcade machines broadcasting sec and medical comms and radios playing radio comms when theyre supposed to be off (#63647)
* fixes the orion console broadcasting sec and medical comms

* fixes radios broadcasting without a speaker if frequency is changed last
2021-12-29 23:49:21 -06:00
MrMelbert 7fefa76038 Binary key no longer tells players to shout at coders (#63572) 2021-12-24 20:32:19 -08:00
Kylerace d005d76f0b Fixes Massive Radio Overtime, Implements a Spatial Grid System for Faster Searching Over Areas (#61422)
a month or two ago i realized that on master the reason why get_hearers_in_view() overtimes so much (ie one of our highest overtiming procs at highpop) is because when you transmit a radio signal over the common channel, it can take ~20 MILLISECONDS, which isnt good when 1. player verbs and commands usually execute after SendMaps processes for that tick, meaning they can execute AFTER the tick was supposed to start if master is overloaded and theres a lot of maptick 2. each of our server ticks are only 50 ms, so i started on optimizing this.

the main optimization was SSspatial_grid which allows searching through 15x15 spatial_grid_cell datums (one set for each z level) far faster than iterating over movables in view() to look for what you want. now all hearing sensitive movables in the 5x5 areas associated with each spatial_grid_cell datum are stored in the datum (so are client mobs). when you search for one of the stored "types" (hearable or client mob) in a radius around a center, it just needs to

    iterate over the cell datums in range
    add the content type you want from the datums to a list
    subtract contents that arent in range, then contents not in line of sight
    return the list

from benchmarks, this makes short range searches like what is used with radio code (it goes over every radio connected to a radio channel that can hear the signal then calls get_hearers_in_view() to search in the radios canhear_range which is at most 3) about 3-10 times faster depending on workload. the line of sight algorithm scales well with range but not very well if it has to check LOS to > 100 objects, which seems incredibly rare for this workload, the largest range any radio in the game searches through is only 3 tiles

the second optimization is to enforce complex setter vars for radios that removes them from the global radio list if they couldnt actually receive any radio transmissions from a given frequency in the first place.

the third optimization i did was massively reduce the number of hearables on the station by making hologram projectors not hear if dont have an active call/anything that would make them need hearing. so one of hte most common non player hearables that require view iteration to find is crossed out.

also implements a variation of an idea oranges had on how to speed up get_hearers_in_view() now that ive realized that view() cant be replicated by a raycasting algorithm. it distributes pregenerated abstract /mob/oranges_ear instances to all hearables in range such that theres at max one per turf and then iterates through only those mobs to take advantage of type-specific view() optimizations and just adds up the references in each one to create the list of hearing atoms, then puts the oranges_ear mobs back into nullspace. this is about 2x as fast as the get_hearers_in_view() on master

holy FUCK its fast. like really fucking fast. the only costly part of the radio transmission pipeline i dont touch is mob/living/Hear() which takes ~100 microseconds on live but searching through every radio in the world with get_hearers_in_radio_ranges() -> get_hearers_in_view() is much faster, as well as the filtering radios step

the spatial grid searching proc is about 36 microseconds/call at 10 range and 16 microseconds at 3 range in the captains office (relatively many hearables in view), the new get_hearers_in_view() was 4.16 times faster than get_hearers_in_view_old() at 10 range and 4.59 times faster at 3 range

SSspatial_grid could be used for a lot more things other than just radio and say code, i just didnt implement it. for example since the cells are datums you could get all cells in a radius then register for new objects entering them then activate when a player enters your radius. this is something that would require either very expensive view() calls or iterating over every player in the global list and calling get_dist() on them which isnt that expensive but is still worse than it needs to be

on normal get_hearers_in_view cost the new version that uses /mob/oranges_ear instances is about 2x faster than the old version, especially since the number of hearing sensitive movables has been brought down dramatically.

with get_hearers_in_view_oranges_ear() being the benchmark proc that implements this system and get_hearers_in_view() being a slightly optimized version of the version we have on master, get_hearers_in_view_as() being a more optimized version of the one we have on master, and get_hearers_in_LOS() being the raycasting version currently only used for radios because it cant replicate view()'s behavior perfectly.
2021-12-16 19:49:27 -08:00
Wallem 96b81f6c7f Refactors Sign Language & Fixes Inconsistency (#62836)
Refactors Sign Language code so instead of copy-pasting the same giant wall of checks we can just use a proc.
Also now checks to see if your limb is disabled, which fixes people with disabled robotic limbs being able to sign still.
Finally, the tongue only has ORGAN_UNREMOVABLE if you attained it from the trait. I've been told that the tongue could be attained from meateors and I think that's funny as hell so I swapped that over.
2021-11-21 11:32:58 +00:00
Jack LeCroy 3d417c4591 Headset mousedrop like PDA (#62656)
* Headset mousedrop like PDA

* Change var names

* Forgot one var name
2021-11-09 00:55:25 -05:00