Commit Graph

47 Commits

Author SHA1 Message Date
tonty 14d2514aa9 [MDB IGNORE] Refactors away /area/station/ai_monitored and its subtypes (with bonus neat repathing) (#93704)
## About The Pull Request

/area/station/ai_monitored's behaviour was isolated into a component,
`/datum/component/monitored_area`, which itself uses
`/datum/motion_group`s to query cameras. Functionally, it (should) work
identically to the old implementation. I'm sure that behaviour could
have been further cleaned up, camera code is quite dreadful, but it's
better to focus on isolating the behaviour first. Baby steps.

Areas that want to opt into monitoring can set `var/motion_monitored` to
TRUE (this approach was taken to make subtyping easier).

The following non-AI areas were changed:
- /area/station/ai_monitored/security/armory ->
/area/station/security/armory
- /area/station/ai_monitored/command/nuke_storage ->
/area/station/command/vault
- /area/station/ai_monitored/command/storage/eva ->
/area/station/command/eva

All other `/area/station/ai_monitored` subtypes were repathed into
`/area/station/ai` and cleaned up in a way that I thought made logical
sense. It is **much** more readable now. For example:

- /area/station/ai_monitored/turret_protected/aisat ->
/area/station/ai/satellite
- /area/station/ai_monitored/command/storage/satellite ->
/area/station/ai/satellite/maintenance/storage
- /area/station/ai_monitored/turret_protected/ai ->
/area/station/ai/satellite/chamber
2025-11-03 11:27:14 -06:00
die 99ecf864f9 door remote sounds (#93474) 2025-10-20 15:13:15 +02:00
Leland Kemble a9fe617721 Adds an emag function to door control remotes (#93251)
## About The Pull Request

Taken from https://forums.tgstation13.org/viewtopic.php?t=30905

Adds an emag function to door remotes. When emagged, the remotes will
gain the ability to shock and depower doors that they have access to.
The shock function shocks the door for 30 seconds, the default electrify
time. This function has a cooldown of ten seconds. The depower function
works as if you were multitooling it, as in the first hit depowers the
main supply, and the backup power comes back on in ten seconds. You can
then hit it again to disable the backup power for the full sixty seconds
of downtime.

To be clear, neither of these are toggles. They can shock and depower,
but they cannot unshock or repower. No unsabotaging.

## Why It's Good For The Game

Currently, the AI's the only person who gets real utility out of
shocking doors. Engineers can do it, but it's too slow and obvious to be
useful, and isn't often seen. I think that this would support the rather
rare gimmick of humans doing door antagonism, and that that gimmick may
be interesting.

I believe that there is some policy to avoid making emagged items
especially useful to non-antagonist crew, and I don't believe that this
is overstepping that much. It certainly doesn't seem as useful(to me) as
the numerous interactions with reagent dispensers, consoles and the
like. If this is a great point of contention, however, I believe it
would be remedied by simply removing some or all of the standard modes
of the door remote.

## Changelog

🆑

add: Added an emag interaction to door control remotes. Emagged remotes
can shock and depower doors.

/🆑
2025-10-07 02:45:40 +02:00
Retrino 9df295770e standardize door remote names (#90996) 2025-05-16 04:24:03 -07:00
Joshua Kidder 21f71c37f1 Updates door remote accesses + descriptions, implements logic for area-specific remote operation, moves remote definitions to the top of control_wand file (#90079)
## About The Pull Request

This updates door remote accesses to match the accesses of their owner
-- research remote = RD access, and so on. However, the Captain's door
remote does not inherit this increased access, and is still relegated to
command areas like the bridge, AI upload, etc.

As well, it implements a logic for a given "domain" per remote holder,
based on high-security areas that are iconic of the given role. As such,
even though they may have access to the Vault, no other Head besides the
Captain can open the Vault with their remote, the head remotes (beside
security) can't open the brig (Captain didn't have access anyway), and
so on. The restricted areas and the remote with authority to open that
area are as follows:

**Captain**
- The whole station
- Note: Still restricted by the remote access, which is: Bridge, Vault,
AI Upload, Teleporter, Gateway, Captain's Office, EVA

Head of Personnel
- Gets no special "domain" for their remote, but otherwise receives
HoP's round-start access

Head of Security
- Security

Chief Engineer
- Gets no special domain, because no other Head roundstart trims receive
access to the CE's high-security areas of Engine or Atmospherics
(besides Captain, who has a neutered remote already)

Research Director
- AI Upload, AI Core

Chief Medical Officer
- No special domain for the same reason as Chief Engineer; no other
heads have unmitigated medical access


Also updated remote descriptions with allusions to stereotypes/jokes for
a given head (Captain's authority is dubious, QM is not a Real Head,
Security remote was stolen from HoS by resentful Warden, HoP disappears
more than Carmen Sandiego, CMO shouldn't have a medical license, RD is
absolutely jacked)

Finally, moved the remote definitions to be above the sheer cliff of the
ranged interaction proc in the control_wand file.


## Why It's Good For The Game

Makes remote access have parity with the access of their respective head
of staff, while at the same time allowing other Heads of Staff to retain
their own control over doors in their department areas.
## Changelog
🆑 Bisar
balance: Door remotes now match the access of their owner (except for
the Captain, whose remote access is unchanged). Door remotes, however,
respect the high security area control of other remotes; as such, even
if a Head can enter an area like the brig, only the Security remote
works to open the entrance.
/🆑
2025-03-26 01:33:19 +01:00
MrMelbert 8486f2f7e2 Storage / table interactions at the bottom of the interaction chain (#85512)
Because the wings were in fact made of wax 

## About The Pull Request

Storage goes to the very bottom of the interaction chain, hardcoded in
on `/atom`.
This is not preferred, obviously, but it ends up being a lot less
snowflaking overall.

Tables also go at the very bottom by extending `base_item_interaction`. 

Fixes #83742
Fixes #84434 
Fixes #83982
Fixes #85516
Fixes #84990
Fixes #84890
Closes #85036
Closes #84025 (RMB places it on the table.)
Closes #86616

Other changes:

Refactored pod storage to be less jank. Patches some exploits around it.

## Why It's Good For The Game

Should make a lot more interactions a lot more reliable... hopefully

## Changelog

🆑 Melbert
refactor: Storage and Tables are now a lower priority action, meaning
some uses of items on storage should work... better, now. Here's hoping
at least, report any oddities.
refactor: Note: For an overwhelming majority of items, **combat mode**
will attempt to attack/insert into the target, while **non-combat-mode**
will attempt to use on a target. This means screwdrivering or emagging a
MODsuit must be done on non-combat-mode, as combat mode will simply put
the screwdriver or emag into its storage. Same applies to tables, though
when in doubt, RMB may help (for things which are also weapons, like
mops).
refactor: Refactored escape pod storage, now they actually properly show
as unlocked on red alert and above.
/🆑
2024-09-12 23:48:19 +02:00
MrMelbert ff6b41aa07 Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request

- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)


![image](https://github.com/tgstation/tgstation/assets/51863163/1e70f7be-0990-4827-a60a-0c9dd0e0ee49)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`

I have manually tested many of the refactored procs but there was 200+
so it's kinda hard

## Why It's Good For The Game

Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item

This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.

If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`

This does result in some instances of boilerplate as shown here:


![image](https://github.com/tgstation/tgstation/assets/51863163/a7e469dd-115e-4e5b-88e0-0c664619c878)

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution

~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~

## Changelog

🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
2024-06-11 21:58:09 -07:00
Thunder12345 cc800323da Throws gangtools into a bottomless pit (#82145)
## About The Pull Request

Resprites everything that used to use the old gangtool sprites (door
remotes, augment choice beacon, landing zone designators, and nuke op
borg spawners.)


![image](https://github.com/tgstation/tgstation/assets/5479091/346d4a1b-59cc-47c3-b6ff-b66c75d7730b)

- Added a new non-gangtool generic choice beacon, and a specific
S.E.L.F. one.
- Door remotes are now fancy garage door openers.
- Landing designators have cannibalised the cell phone sprites from the
less old version of gang.
- Nuke op borg spawners use the same walkie talkie as other
reinforcements

Door remotes now have individual sprites for each mode, so you can see
the mode at a glance.

## Why It's Good For The Game

Having a range of very different items sharing the same old sprites is
pretty confusing, better to have them all be unique and up to date.

## Changelog
🆑
image: Everything that used the old gangtool sprites (door remotes,
landing field designators, some choice beacons, windicate borg
reinforcements) has been resprited.
image: Door remotes now visibly show their current mode.
/🆑
2024-03-22 13:27:45 -04:00
Thunder12345 47ec445211 Adds logging to door remote bolting (#80723)
## About The Pull Request

Adds log entries when a player bolts or unbolts a door using a remote.

## Why It's Good For The Game

Letting people mess with door bolts completely unlogged is potentially
inconvenient.

## Changelog

Not player facing
2024-01-05 01:55:42 +01:00
YesterdaysPromise 71a1fee2f1 Explodes device.dmi (#80025)
## About The Pull Request

I woke up today and thought 'what would be easy thing to do today so I
can say I've done something?'. Then I remembered I saw several gangtool
usages the time I split radio up, and I could remedy those. 7 hours
later, device.dmi is split in a folder of its own, and I've also given
unique sprites to door remotes and landing desginators.


## Why It's Good For The Game

The device.dmi was kind of a mess.

## Changelog

🆑
/🆑
2023-12-09 13:31:50 +01:00
Mothblocks db2566f44d Remove NTNet from doors (saves 0.2s of init) -- Fixes windoors not working with remotes, and balloons them (#71735)
## About The Pull Request
Removes NTNet from doors. NTNet as a whole is getting excised, but this
was an enormous cost to initialize. Was only used for door remotes, so
just changes them to act on the door directly.

Windoors were supposed to be controllable, but were broken at some point
to always display an error message in chat.

Closes https://github.com/tgstation/dev-cycles-initiative/issues/3

## Changelog

🆑
fix: Door remotes now open windoors again.
qol: Door remotes now use balloon alerts for failures.
/🆑
2022-12-07 12:25:18 +00: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
LemonInTheDark 930c5e635e Moves "catch this var/flag" code from obj/init and datum/new into the types that use it (#69634)
* Optimizes away /obj/Initialize

We were spending like 0.15 seconds just checking for blueprints, obj
flags and network ids
All these things can just be applied where they're wanted, saves time

Oh and I replaced object flags with an emag injector. I'll give it a
sprite and name later I promise

* Requires a GenerateTag() call to set DF_USE_TAG, rather then doing a check in atom New

This is technically harder to use, but I don't really want people using
tags, and it saves 0.15 seconds

* Moves generatetag to /datum

* I am dumb

* Saves 0.5 seconds, makes init emissive blockers actually work

Ok so background. If an overlay is added with add_overlay, and not
"managed" somehow, it will effectively never be removed, because
nothing's tracking it.

Update_overlays uses the managed_overlays list/var (one of those) to do
this.
I'm gonna piggyback off this to make emissive overlays actually like,
respect overlay updates.

Oh and uh, I've saved maybe 0.5 seconds by caching the new emissive, and
not using add_overlay. There's a chance this will lead to overlay
corruption, but since we never readd the flattened, I think we'll be
safe

* Fixes plane not being set right, changes color logic too, since alpha will override past color sets

* Makes it actually work. also makes rand posters update appearance to clear away the overlay, since it shows on right click and looks bad

* Fixes blockers showing as emissives. It turns out alpha sets override the color list we use. Not sure why we pretend to support them

* Makes the injector support traits, adds an amazing sprite
2022-09-06 03:17:17 -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
tralezab 6c01cc2c01 every case of initialize that should have mapload, does (#61623)
## About The Pull Request

stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it

for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

![](https://media.discordapp.net/attachments/823293417186000909/875122648605147146/image0.gif)

## Regex used:

procs without args, not even regex

`/Initialize()`

procs with args
`\/Initialize\((?!mapload)((.)*\w)?`

cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
2021-09-24 17:56:50 -04:00
Watermelon914 375a20e49b Refactors most spans into span procs (#59645)
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs.
Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines.

Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing.
Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc.

(Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such)
2021-06-14 13:03:53 -07:00
dragomagol 4621deceb2 Door remote balloon alerts (#59290) 2021-05-25 00:18:11 -07:00
Kylerace e13fe75590 use SIGNAL_HANDLER REEEEEE (#59242)
makes as many procs as i can find use the SIGNAL_HANDLER define which i assumed they all already did
2021-05-24 15:28:02 -04:00
norill cdcc6a74e0 Adds using a door remote on a door's tile (#58943) 2021-05-08 22:57:53 -07:00
Timberpoes 890615856e Fully implements the ID Card design document (#56910)
Co-authored-by: Rohesie <rohesie@gmail.com>
2021-02-28 19:26:45 -08:00
Mothblocks 0f435d5dff Remove hideous inline tab indentation, and bans it in contributing guidelines (#56912)
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm

We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.

There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.

Hi codeowners!

Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
2021-02-14 16:53:29 -08:00
WarlockD c7bc210d19 Setting door wand to src instead of user (#55863) 2021-01-01 12:32:50 -08:00
WarlockD 56345975ba The Great Radio Rework: NTNET Part 1 of many. (#54462)
Machinery networking refactor.
2020-12-30 21:54:34 +01:00
nemvar 6ef421be42 Renames a few variables. Also reorders icon fallback order again. (#51060)
* Renames a few variables. Also reorders fallback order again.
Renames item_state to inhand_icon_state
Renames mob_overlay_icon to worn_icon
Renames mob_overlay_state to worn_icon_state
worn_icon_state/mob_overlay_state now never gets used for inhands.

* Fixes some comments

* Fixes map issue

* Restart lints

* Properly resolves conflicts
2020-05-25 06:47:19 +02:00
Fikou a59e4fb1b5 merges civilian and service departments (#50142)
* merges the service and civilian departments

* yee haw
2020-03-26 22:05:28 +08:00
kingofkosmos 280d416d4f Adds missing spans, missing periods and missing span endings. Also changes spans to suit the situation better. 2019-10-12 19:34:11 +03:00
Emmett Gaines c3f95024b2 Gets rid of the GetComponent macros (#44220)
* Removes the GetComponent macros

* Regex replacement for GET_COMPONENT

Search: `GET_COMPONENT\( *(.+?) *, *(.+?) *\)`
Replace: `var$2/$1 = GetComponent($2)`

* Regex replacement for GET_COMPONENT_FROM

Search: `GET_COMPONENT_FROM\( *(.+?) *, *(.+?) *, *(.+?) *\)`
Replace: `var$2/$1 = $3.GetComponent($2)`
2019-06-04 17:39:58 +02:00
81Denton ffc0a2dedd Improve supply remote desc (#39429)
The QM's door remote was lacking a description that hints at vault access.
2018-07-29 19:38:53 -07:00
bgobandit 8f71d71f1e Fix more spelling/grammar (#39450)
self explanatory
2018-07-29 16:19:42 -07:00
Trevor Serpas bee0b5b2c3 Afterattack() Signal (#38606)
* adds signal and modifies each call of afterattack to call it's inherited proc

* uses new macro for sendsignal()

* map fuck

* skip precommithooks

* combine and negate 2 ifs
2018-07-07 02:00:25 -04:00
kevinz000 19ce08f157 More integrated circuits and NTNET upgrade! (#37165)
rscadd: Circuit ntnet components buffed. Added a new low level ntnet component that can send custom data instead of just the two plaintext and one passkey format, which things will use by default. Ntnet now uses a list for their data instead of three variables. they also have lowered complexity for the now weakened normal network component, and has lower cooldowns.
2018-04-28 13:23:44 +12:00
ACCount 1f5b59190d NTNet airlocks (#35947)
* Standardizes access checks

* Makes SS Networks init before SS Atoms to prevent NTNet interfaces from initializing before them

* Adds passkey support to NTNet packets

* Adds NTNet support to airlocks, makes door remote use NTNet

* Access levels given by jobs are now shuffled

* Access code improvements

* Adds IC card readers

* Fixes a delay issue with opening/closing airlocks with NTNet or signalers

* code review memes

* Renames plaintext_passkey to encrypted_passkey

* death by thousand nitpicks
2018-03-08 18:39:17 -05:00
Jordan Brown af4d9a85c9 Repaths /obj/item/weapon to /obj/item (#29929) 2017-08-16 10:38:51 -03:00
ShizCalev d525b18d8d Completes major inhand split project (#29574)
* Completes split project

* More work on it. Should be more or less finished
2017-07-29 16:47:37 -03:00
ShizCalev 59ef81245b Changes some 1s and 0s to TRUE and FALSE (#29144) 2017-07-10 10:31:34 -04:00
Lzimann 5a618297ce Replaces the default output with the to_chat wrapper. 2017-03-10 01:32:05 -03:00
Mervill 09ea5ad2e5 w_class now uses defines 2016-12-01 21:33:14 -08:00
Joan Lung 59b26e9715 properly 2016-06-13 09:43:01 -04:00
Joan Lung 63998cb55d Can't use door remotes on doors you can't use 2016-06-13 08:30:00 -04:00
KorPhaeron 6f051bbccb Span Classes 2016-03-01 20:01:12 -06:00
KorPhaeron 2bb41cd5b3 Merge remote-tracking branch 'refs/remotes/tgstation/master' into control_wand
# Conflicts:
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
2016-03-01 19:18:29 -06:00
KorPhaeron 24e3d569f8 Door remotes 2016-03-01 01:43:12 -06:00
KorPhaeron 1bfd3eae34 Better inhands 2016-02-22 16:36:47 -06:00
KorPhaeron 20e9b2a8e2 Fixes control wand access 2016-02-22 16:32:38 -06:00
KorPhaeron b278741b19 Door remote config 2016-02-22 14:58:05 -06:00
KorPhaeron 537ac55162 Removes excess whitespace 2016-02-18 02:37:48 -06:00
KorPhaeron d6e6874206 Control Wand 2016-02-18 02:34:20 -06:00