Some QOL changes and mapping tweaks to Investigations and Forensics.
The Crime Scene kits now spawn in the investigators office, another
interrogation room has been added, Evidence Storage is larger and more
organized, Forensics and Autopsy have been neatened and enlarged.
The janitor closet in Security has been removed to make room for the
changes.
There's now a new decorative structure, the Evidence Shelf, with
included sprite (credit goes to the original creator of the Retail Shelf
sprite, I just added the impression of cardboard boxes onto it)
---------
Signed-off-by: ASmallCuteCat <neofelisnebulosa128@gmail.com>
Co-authored-by: TGW <CasperMC@hotmail.dk>
Co-authored-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
This PR adds a set_machine call to the base ship computer's attack_ai
procs, allowing AIs and borgs to view the overmap without their view
immediately being reset by the next life() call.
Fixes#22467
Mind blankers and psi-protect pills now display messages roughly every 2
minutes and 1 min respectively.
Mind blankers have a random chance for the message to also display on
the screen, as they're more invasive, being implants, but also safer.
A warning timer was also added for seizures from psi-protect, so people
have a short moment to react in.
## About PR
- Adds a latejoin landmark, this was causing a runtime when
`LateSpawn()` weren't able to find any (somehow missed this after the
remap, oops)
- Adds some sections for kitchen and disposal testing, among a few other
qol changes
- Removes some ancient area definitions (most of it unused) from the
code. Some of these were used in the old runtime map and
`vault_unique.dmm`, which is also removed in this pr since it no longer
spawns
Antagonists can now see what other types of antagonists there are and
how many in the Status tab.
Additionally, the Captain now receive this blurb when spawning in a
gamemode that contains revs:
> You are a Captain in a Revolution round!
> Remember that you are supposed to comply with all orders from SCC
Command. Although you may not spawn as a Loyalist, you are the person on
the ship that is most beholden to Central Command orders.
> This is both due to your status in the hierarchy of the SCC, and also
to allow the gamemode as a whole to work. Only very extreme factors may
justify you not joining the Loyalists. If this is the case, confirm it
with admins via adminhelp first!
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Modified the name and description of the portable cooling unit to
reflect its importance for keeping synthetics alive after their coolers
get shot up, and fixed its on-mobs not appearing on characters' backs.
Now you can see when someone is wearing it!
<img width="208" height="137" alt="image"
src="https://github.com/user-attachments/assets/d768d31b-d0aa-4fb8-8a67-4e1817355f6e"
/>
The admin commands to set off events that end the round (Supermatter
cascade and Summon Narsie) were in a category with a problematic name
(redid the PR after i broke it with a bad merge oops)
Human shields are no longer a 100% chance to block any frontal damage.
The opposite arm, legs and head are always exposed and can hit despite
the human shield, though this comes with the additional miss-chance from
targeting limbs.
Additionally, destroyed limbs allow shots to damage both the hostage and
the hostage taker when hit.
This doesn't make the situation much better for the hostage, but it does
mean that carrying around a corpse as a shield in combat is no longer
viable.
Size also matters, a Ta holding up a human as a shield isn't going to
get much cover.
<img width="1390" height="325" alt="image"
src="https://github.com/user-attachments/assets/cfe61f99-89bb-428d-9f96-4b1fff32c646"
/>
https://github.com/user-attachments/assets/593acc65-f327-4058-ba8d-9bb596a43d3b
- renames/redescs/etc existing stuff to fit new TCAF lore
- lots of 4 years defunct TCFL stuff has been deleted or
repathed/renamed
- the tcfl peacekeeper ship that was soft-removed has been deleted
- the uniforms has also been modified and have had the necessary amount
of blue added. essentially i kitbashed the old TCFL uniforms with the
new TCAF uniforms
i probably missed a lot of tcfl stuff still.
---------
Signed-off-by: c#min7 <sadkermit01@gmail.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
Includes a new voidic lantern for the voidtamer ship crew and as a
loadout item for the culture
It's a buffed lantern able to barely sustain a dionae, its a little
stong but only locked to the one specific culture and ship by default,
i'm not sure if it'll spawn in the warehouse tbh, but it's fine if it
does
---------
Signed-off-by: Yonnimer <31339047+Yonnimer@users.noreply.github.com>
This PR adds new Cross-Skill Interactions for both Cooking and
Xenobiology, the latter of which now provides a new Situational Skill
Modifier.
Cooking Skill now causes animals butchered by the character to drop
additional meat. A pretty simple small interaction that doesn't change
much in the grand scheme of things.
Xenobiology has gained two new interactions, aimed at making it a skill
"potentially useful" for players who think their character might be
fighting Space Fauna. The first is that it provides a melee damage
modifier (which can offset the penalties from low melee skill), but only
when attacking Space Fauna (that aren't player controlled). Normally
direct damage modifiers are very hard to balance as a consequence of
brainmed, but since this applies exclusively to a PVE interaction, the
balance concerns are significantly lessened. Its second new interaction
is to situationally modify the amount of butchering products gained from
Space Fauna (and only Space Fauna).
Particularly in the case of Xenobiology, this helps position the skill
in such a way that it provides Opportunity Cost for characters in
Cooking, Mining, and Security (to a much lesser extent, given they
almost never engage carp in melee). If points spent in Xenobiology helps
a miner fight off space fauna, then points spent in Surgery are not
points they're spending on being better at fighting carp. Almost all of
the skills in general should have care put into making sure that they
can provide viable Opportunity Cost against other skills in their same
category. Cross-Skill Interactions like this are an incredibly effective
method of doing so.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Updates the keycard swipe console to TGUI.
Did this to practice on something simple.
Mostly copied from #20880
The few things I'm unsure of:
<Button
content="Dispense"
Was flagged as depreciated so I changed it to
<Button
color="bad"
onClick={() =>
act('select_event', { event: 'Emergency Evacuation' })
}
>
I relied quite a lot on the autocomplete so hopefully there's no huge
problems.
<img width="633" height="402" alt="image"
src="https://github.com/user-attachments/assets/df8be821-947c-48cc-a289-31b658c967e1"
/>
- Abstracts edit and rename function in the File Manager.
- Files are now edited in the program and not a separate input box.
- File editor now has an editor toolbar with formatting buttons and
keybind functionality.
- File descriptions can now be edited.
- Forms can now be downloaded into a computer's file manager as a text
file.
- File browser now shows a file description.
- Fixed an issue where copying to/from a USB would throw an error
because it didn't read the ID of the device being held.
I was planning to add folder functionality, but that requires far more
work since we store our files directly into the hard drive, which does
file manipulation. Meaning, in order to add folders, I'd need to
completely redo how hard drives and the file structure works. I'll
tackle that later.
CCIA Forms currently generate the entire form, which can be edited
without reservation. This is fine, however a future PR may be viable for
converting forms to use limited edit-access on fields to streamline the
form-filling process. That or just adding the ability for files to
display [field] properly.
Forms tested by Fabian :)
- [x] Fix ID check for copying programs to/from work devices
- [x] Add editor/formatting functionality
- [x] Test Forms functionality (unless an ultra cool dev can for me :) )
- [x] Add description box for editing
- [x] Add actually good formatting to editing
- [x] Misc bugtesting with encrypting, decrypting
- [x] Fix USB files sticking in browser after USB is removed
<details><summary>Video</summary>
<p>
https://github.com/user-attachments/assets/c6c666de-18fd-41a0-9751-3961aeda48fc
</p>
</details>
---------
Signed-off-by: CatsinHD <31459154+CatsinHD@users.noreply.github.com>
This PR "gently refactors" surgery doafter timers to be deterministic
and variable. Instead of being simply a random number of seconds between
an upper and lower bounds, surgeries now have a base amount of time they
take to perform (in fractional seconds). This doafter time can then be
modified via signal interactions, such as coming from components.
The Morale component, Surgery skill, Anatomy skill, and Xenobiology
skill all have had signal hooks for surgery speed added, while the
latter two are uniquely conditional signal modifiers. Anatomy only
provides its modifier if the target's species matches your own, while
Xenobiology only applies its modifier if the target is an alien. Morale
can situationally either give a bonus or a penalty depending on your
current amount of morale points.
So to offset that this is now significantly more variable and that 4
different sources of bonus surgical speed exist, I've actually made the
base surgery times always on the upper end of what their previous
doafter duration range was, so surgeries are in general slower if you
aren't taking advantage of specializing in it.
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Moves the psi-protect pills out of the psych medicine selection to their
own selection. Allows characters to continue to bring their normal
medicine prescription but also select the psi-protect pills.
Some concerns were brought up about the potential for performance
concerns with wrapping Destroy() in a try catch. So let me make a trade.
/datum is the parent of all objects in existence, and is spending a
large chunk of time on proc overhead for 2.6 million qdel'ed objects.
<img width="1196" height="811" alt="image"
src="https://github.com/user-attachments/assets/06ca1596-2d56-40ca-9ec6-9215ed02113c"
/>
I'll trade you a faster global destroy() for the better logging so I can
finish destroying the garbage collector lag.
The cost reduction is from 0.01209ms per datum to 0.007525ms per datum,
about a 28% time saving.
Thanks to more extensive data from Sentry logging, I've discovered that
there's actually two distinct causes for Hard Dels.
1. **Unaccounted For References**: Any potential references that are not
nulled out during a Destroy() proc will eventually trigger a hard
delete. These are the classic "Memory Leaks" and were previously the
most common form of hard del.
2. **Poisoned Destroy()**: Some destroy procs are prone to runtime
errors. When a runtime error occurs, the destroy() proc returns .
instead of ..(), meaning all parents of an object will skip any
reference cleanup they would have wanted to do. Since there's ref
cleanup performed at every single step of a parent hierarchy all the way
down to /datum itself, these failed Destroy() procs are nearly
guaranteed to trigger a hard delete.
For example, nearly all current /human related hard deletes are caused
by this specific runtime error:
https://github.com/Aurorastation/Aurora.3/pull/22680
So this PR adds a try catch to the garbage collector to log runtime
errors generated by Destroy() procs, allowing me to far more easily
track down this specific variant of harddel.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Sets the NO_PAIN threshold to 200, instead of 100. Meaning painkiller
values above 100 are necessary to ignore all pain effects.
This is necessary because:
- CE_PAINKILLER stacks additively.
- Mobs get given adrenaline every time they are hit.
- Adrenaline gives between 15 and 5 CE_PAINKILLER.
- Inaprovaline (10), Perconol (35), Mortaphenyl (50), Synaptizine (30),
Adrenaline (15-5).
- There was no reason to use more powerful painkillers with worse side
effects, when easy to obtain, longer lasting painkillers do the same
job.
Removes CE_ADRENALINE, which was poorly named, only used for Synaptizine
and didn't use the desired movespeed
modification pathways.
Reduces Synaptizine's painkilling value from 30 to 10.
Synaptizine cancels stuns, cancels all other painkiller side effects and
10u of it lasts an hour.
It is still the best combat drug in the game even with these nerfs.
Slight buff to oxycomorphine, to make sure that it doesn't tick down and
can consistently keep analgesic above 200.
Slight buff to mortaphenyl. This means the painkilling effect of antag
stims will remain the same, but for a shorter duration. Also makes it
more useful to doctors.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
I've audited the entire destroy path between datum and human, this time
paying attention to byond's built-in vars to make sure that the built-in
refs are correctly being cleared. I've also gone and corrected some
null-access mistakes, which are most prominently caused by as anything
casts not being null checked, since as anything allows null entries in a
list to be read.
By far the worst offender I've found was the lack of clearing of the
atom.underlays var, which contains a list of refs. And when searching
for uses of this var across the repo, I've discovered it's associated
with an overwhelming majority of the remaining objects still in the hard
del trackers.
This adds the case dossier program. A program intended for investigators
to use for their cases, with the ability to record evidence, photos,
documents, people and their notes on a case. The rest of security is
able to view cases in the program, but not edit them.
Additionally, the forensic skill was added to evidence bags and photos,
allowing a person to add the time, place and the person using them,
mainly intended to be used with the case dossier program.
Fibers and prints can now be gathered from objects inside evidence bags,
to avoid contamination.
Also fixed some bugs with taking photos of certain objects, such as
airlocks.
https://github.com/user-attachments/assets/92a880e9-9032-46d4-88c0-43d45b64f979
Having had a chance to observe player behavior around morale during
events, it's become clear to me that the current actual mechanical
effects of morale are too small for anyone to notice, as it seems I
undershot their effects too much. Additionally, I realized from
experiencing it myself that the duration of the Leadership buff in
particular was too short to be able to last throughout a single combat
encounter, as there's a surprising amount of downtime in our event
combats. Plus the travel time eats into that timer.
So this PR does a few things to make Morale a bit more impactful and
noticeable. The first is to increase the pre-existing effects (other
than unarmed combat chances) by 50%. Players will never actually have
100% of the modifiers provided by the nature of these math equations,
and they tend to in-practice only go into fights with between 20% and
50% modifiers. The second part of this PR is adding two more
interactions for it, both for Engineering/Science and Hydroponics
characters. These being crafting speed and plant harvesting efficiency.
That should help make the effects more enticing to have for non-combat
characters.
I accidentally flipped a sign on the guard clause, making it so that
APDI was only sending messages to corpses.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
DO_UNIQUE prevented a second person scanning the same patient at the
same time.
This does let you spam the medscanner and get multiple scans in progress
at the same time, but that's much less of an issue than getting your
scan canceled by a second well meaning doctor.
## About PR
Removes the hardcoded `direction` var from throwers and instead uses
`dir`, so we no longer have to varedit these
Also removes some commented out code and turns some comments into dmdocs
ADPI wasn't obeying the standard rules for psionics, and was incorrectly
bypassing arbitrary sources of psionic protection. There was a lot of
unecessary hardcoding in the checks as well that meant it couldn't
account for edge cases. Luckily I made helper procs for handling every
single one of these edge cases automatically about 6 months ago.