This PR clears another server performance culprit, the Cargo Elevator.
It turns out that there was an unchecked processing call in Cargo
Exports, that would permanently increase the servers' proccessing cost
per tick for each and every single unique type sold. With this PR,
exports clear themselves from the processing list once their cost/time
recovers to its original value after being sold. They then re-add
themselves to processing once sold to start the price recovery.
<img width="1144" height="599" alt="image"
src="https://github.com/user-attachments/assets/675f645e-23c7-4c5b-905c-6ab259676fb3"
/>
Not a single one of these timers are doing anything, but they occupy
processing time. This PR makes them not do that. When you activate a
timer, they start processing. When the timer finishes, it stops
processing. No need for it to linger in the processing queue
indefinitely. There's like a hundred of these things on live.
Soft-ish port of https://github.com/NebulaSS13/Nebula/pull/540. Except
we call them singletons.
Repaths all materials as singletons instead of datums, and replaces
material defines from strings to paths so that we can just run
GET_SINGLETON instead of needing to use SSMaterials. This is Step One.
This PR has no player-facing changes.
changes:
- refactor: "Repaths /material to /singleton/material."
- refactor: "Replaces all material string defines to path defines,
replacing SSmaterials procs w/ GET_SINGLETON instead."
- refactor: "Removes all material var edited objects from all maps,
adding new presets where necessary."
- refactor: "Updates recipes unit test to run all recipes against all
material singletons."
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: kano-dot <bhutanlikanoxy@gmail.com>
Life() was wasting a bunch of processing time on "Every hardsuit
forever" regardless of if it was equipped or not. Additionally Life()
was responsible for double-processing hardsuits, which is extremely
improper. Since hardsuits are being moved to SSprocessing instead of
SSmobs, which has a different tickrate, I went ahead and tick
differentiated them to make sure that nothing will break.
# Summary
This PR adds a new grim spatial sound track to the lobby track list +
lemurian sea sector and adds an ambience loop tracks to vents+scrubbers
as well as SMES's.
## Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| sound/music/lobby/spatial_audio.ogg | [spatial audio 2 by
BadWolf23/freesound.org](https://freesound.org/people/BadWolf23/sounds/723957/)
| CC BY 4.0 |
| sound/machines/ventilation_humming.ogg | [humming machinery by
Lewooz/freesound.org](https://freesound.org/people/Lewooz/sounds/545952/)
| CC0 1.0 |
| sound/machines/electrical_humming.ogg |
[SFX_GEOFON-HUM-ELECTRICAL-BOARD_4824_01 by
pblzr/freesound.org](https://freesound.org/people/pblzr/sounds/785942/)
| CC0 1.0 |
**Changes made to original sounds:**
- Added fadein/out to spatial_audio, reduced volume, corrected file
metadata (author, trackname, comment).
- Cut background noise in ventilation_humming, shortened soundfile,
corrected file metadata (author, trackname, comment).
- Shortened electrical_humming soundfile, corrected file metadata
(author, trackname, comment).
Oh look at that, every modular computer in existence was always
processing at all times, regardless of if it was actually needed.
There's a couple more small examples I caught in my first pass, but all
of the rest are very low incidence. There are of course a very large
number of modular computers at any one point in time.
- Adds Psiren meat
- Tentacles can be easily gotten, a proper butcher is needed to get
rings of body meat.
- The meat is extremely dangerous, consume at your own peril.
- Recipes will be added later, when the Horizon learns some (soon(tm))
- Maybe these future recipes won't cause you health problems.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
Co-authored-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
These were some of the first given feedback for skills, so I may as well
implement it.
Piloting is now split into three levels like other skills which note
what pilot class of vessel you may comfortably pilot.
(Familiar) **Shuttle Pilot** is for all landables: Spark, Canary,
Intrepid, the Quark, and the like are all equal under it.
(Trained) **Class II Pilot** covers most ships, which are "overmap-only"
and unable to land or dock.
(Professional) **Class IV Pilot** covers only the Horizon normally, but
design-wise extends to whatever is the main player ship, or for anything
massive
**Antags get Professional Pilot, so they can always do ship hijack
gimmicks without worry.**
As a convenience to make Bridge personnel stand out, Professional/Class
IV Pilots can deduce their current overmap coordinate from examining
space on help intent for 3s. There's no way to directly link to the
overmap, so on the backend, this ability briefly references an existing
ship console.
### Design
Class II and IV are pre-existing terms in-lore, used on the Interstellar
Travel page to refer to civilian size classes.
With how important each level of piloting is, they cost _+4 points_ each
instead of going 2 -> 4 -> 8. This lets there exist the occasional pilot
character from any background, but it's _always_ an investment and
piloting the Horizon stays hard without training.
As Familiar currently costs 6 points, this is effectively a 2-point buff
for most cases as you'll rarely have to pilot non-shuttles.
(**EDIT**: Piloting levels are now 4 -> 8 -> 10 so there's a bit of
flexibility to have an extra skill for Professional Pilots from
Expeditionary Trade)
#### The _**real meat**_ of this PR...
is that you can now attempt to pilot vessels a level higher than you
with penalties, so there's now a failure spectrum should you manage to
access an adjacent-class ship rather than always being hard-locked. The
penalties affect acceleration, slowing, turning, and rolling. They're
most extreme for Shuttle and Class IV to represent how clueless an
unlicensed pilot would be and how complex the Horizon realistically is
to operate.
With smart usage of autopilot, you can actually find a way to travel
normal-ish. I think this is a fun interaction to have for underskilled
characters, and makes autopilot actually have a use as it otherwise
kills you. Maybe Bridge personnel can give lessons to Class II pilots
with it.
### Piloting Education Backgrounds
Coming are THREE piloting education backgrounds: Flight Academy, Fleet
Training, and Expeditionary Trade.
#### ALL GET _Familiar Electrical Engineering,_ _Familiar Atmospheric_
(EDIT: Flight Academy is now the only background that gets Familiar
Mechanical Engineering, this makes them stand out as being notably
handy/utility-ready for emergencies, but other backgrounds can still
easily match them with points.
Fleet Training has Tenacity down to Trained for character variety,
though tenacity is very slight buffs and hard to notice.
Expeditionary Trade now uses Familiar Firearms over Familiar Armed
Combat as it's more immediately important.)
Electrical Engineering now lets you use a power cell on an unpowered
ship console to give it emergency battery life based on the charge. This
helps with cases of being stranded from an APC broken by a meteor, a
high-capacity cell can give 10m or more based on Electrical level. I may
expand this bypass mechanic to all consoles in the future.
Atmospherics skill has no implementation currently, but dealing with
breaches or cycling on shuttles is too important.
Flight Academy - BC, XO, Captain
*Professional Piloting, Trained Leadership, Familiar Mechanical
Engineering*
> "You are at least 25 years of age, with the best navigation training
the Spur can offer, vessel handiness in a pinch, and the know-how for
reining in or assuring passengers for the voyage."
Flight Academy has Leadership honestly just because I didn't want Fleet
Training to look too good, and because I think they can rock the "this
is your pilot speaking" in a cool way. Bridge personnel are usually the
ones that have to wraggle people on away sites, especially during
events.
Mechanical Engineering allows them to make machine frames of ship
consoles in emergencies.
Fleet Training - BC, XO, Captain
*Professional Piloting, Trained Firearms, Trained Tenacity*
> "You are at least 25 years of age, with the most extensive navigation
training possible and military discipline to back it up. You're a steady
shot in emergencies and, damn it-- You. Go. Down. With. The. Ship."
This was made because a player informed me many BC and XOs choose
military backgrounds, and the +4 points design would prevent that. Fleet
Training isn't the same as Military Training, but having all of Piloting
gives you 6 points free to match MT if wanted. The high Tenacity is
primarily for surviving in ship combat, where you'll probably
bleed/suffocate to death.
Expeditionary Trade - Miners, Xenology roles, OM, RD
*Familiar Piloting, Familiar Firearms, Familiar Medicine*
> "You've developed trade skills for a career of expeditions. You are at
home in a shuttle piloting to and from for an average day's work. You
can even hit a shot or tend to wounds when things eventually get
unsafe."
This is for Miner and Xenoarch primarily. An expedition is just any
journey with an objective, all roles revolving around piloting shuttles
to an objective needs to be able to hold their own if they ever find
carp or have an accident, especially since they'll likely be alone.
#### MISC stuff
corrected shaper gear comments I left wrong
Hotwiring piloting consoles now checks for Familiar in Electrical
Engineering. Its visible emote also now looks identical to attempting an
emergency bypass at first glance, so you can sneakily attempt one with
an unpowered console.
The Doctor of Psychology education background now gives Trained in
Leadership. This was intended to be uncommented, but the person forgot
to do it.
Research Directors now need to have Familiar/Shuttle Pilot. According to
the Guide to Piloting wikipage, they're supposed to be able to fly the
Intrepid and Quark for expeditions, and likely mirroring how the OM can
fly the Spark, but an RD can spawn completely incapable of piloting
currently.
---------
Signed-off-by: runecap <43975590+runecap@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Energy shields weren't updating their sprite when they overloaded.
Only one held shield was ever checked for block chance.
Adds a colour change from red to blue as the shield power gets lower.
Also adds it's current strength to the examine text.
https://github.com/user-attachments/assets/9f378084-f529-4138-bcaf-5e5e66f5377a
So one of the most important 'features' of the Skills System is that
Skills are supposed to have a fairly interconnected web of **Opportunity
Costs** against each other. EG: Points spent in Surgery are points not
spent in Xenobiology and vice versa.
A significant problem with this however is that from the start we were
very wishy-washy about having skills actually tell the players what they
do, and were intentionally refraining from telling the players the
actual numbers behind them. This creates a few major problems:
1. It creates a knowledge difference between players who can code-dive
to find out what the skills do, and those who can't, effectively turning
skills into the same problem as "Secret Chem Recipes".
2. It prevents players from making informed decisions about how they
build their characters.
3. It turns out players are extremely unlikely to put points into a
skill if they don't know what it does.
4. It sabotages the "Opportunity Cost" factor of skills. If a player
doesn't know that Xenobiology for instance has some niche uses for their
role, they won't ever consider taking it over something more 'useful'
like Surgery.
There is also a side issue that players generally tend to overwhelmingly
despise skills that are 'reverse ordered', giving them penalties if they
don't buy the skill. They feel like this punishes them for not picking
something. In the case of Firearms/Unarmed/Armed my hands are tied right
now because of how the combat system is (not) balanced. But I can at
least fix that for the Mech piloting skill with some clever small tweaks
to the math. Players currently strongly don't like the new mech movement
because the non-forward directions tend to be too punishing. So I'm
tweaking the Pilot: Mechs math to be more player-friendly by actually
improving the handling experience of mechs.
The bulk of this PR is of course making as many skills as possible fully
transparent about what they do. Wherever possible, Skills now openly
state what they modify, and by how much at a given rank.
<img width="1270" height="982" alt="image"
src="https://github.com/user-attachments/assets/9619f2fa-8dd6-4021-8482-43a1f76f33f4"
/>
Adds a variety of loadout origin items from Reade and New Gibson.
_All sprites by Alsoandanswer/Wezzy._
---
**New Gibsonite Uranium Glass Accessories:**
- Adds a bracelet, ring, and necklace that are an emissive green.
- Only selectable by characters with the New Gibson origin, incl. Tau
Ceti Skrell and Tau Ceti IPCs (for lack of New Gibson-specific
skrell/ipc origins).
<img width="965" height="101" alt="accessories"
src="https://github.com/user-attachments/assets/4a235dee-28ce-485f-931d-4913853a22ef"
/>
---
**Readic Personalised Breath Mask:**
- Adds a recolourable breath mask with an oni mask-like design.
- Only selectable by characters with the Reade origin.
<img width="1331" height="107" alt="mask"
src="https://github.com/user-attachments/assets/ef500fed-bf0f-4b22-a037-0a21938e2928"
/>
---
**Reade Extreme Racing Jackets:**
- Adds an extreme racing jacket with a bi-colour design and various
decals that can be selected.
- The jacket has an action that temporarily hardens the wearer against
heat/near-void conditions for 1 to 2 minutes (though only covers the
torso and so cannot replace a soft/voidsuit).
- Only selectable by characters with the Reade or New Gibson origins,
incl. Tau Ceti Skrell and Tau Ceti IPCs (for lack of New Gibson-specific
skrell/ipc origins).
<img width="1393" height="97" alt="jacket"
src="https://github.com/user-attachments/assets/20ec051e-3fe5-49b0-ace3-5159ec8a9938"
/>
Coloured Example:
<img width="654" height="309" alt="image"
src="https://github.com/user-attachments/assets/0fc81d89-c1b3-452a-87c7-374cc1e6dd18"
/>
---
**New Gibsonite Voidsuit and Modkit:**
- Adds a sleek/high-tech engineering/ops voidsuit to contrast against
the lower tech ones.
- A modkit to convert engineering/atmospheric/mining/hangartech
voidsuits is available in the loadout.
- Has human, skrell, and tajara variants.
- A unathi variant has also been sprited but is not available ingame.
- Only selectable by characters with the New Gibson, incl. Tau Ceti
Skrell (for lack of New Gibson-specific skrell/ipc origins)
<img width="1625" height="110" alt="suit"
src="https://github.com/user-attachments/assets/330db8cd-2bc2-4745-a720-6a0409b97332"
/>
Unused vars take up memory and worsen proc overhead. By far the worst
offenders to this are vars on /atom and /mob since they more or less
globally stack lots and lots and lots and lots of proc overhead. So I'm
cleaning up unused vars on these to save resources. I also noted several
vars that are excellent candidates for making components or elements.
When I'm not drowning in school work anymore, their time is numbered.
Mfw every space carp forever has a CCIA record, no wonder mobs are
laggy.
I've had extended logging for Incomplete Destroys for about 2 weeks now,
so there's the promised PR that fixes each and every single poisoned
destroy that was recorded in the past 2 weeks by the sentry logs.
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.
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>
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.
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