SURPRISE! I hope you all had fun during the Psilence event! It was
really fun spending 6 months coding all the infrastructure I required to
make that encounter possible. Encountering an entire new enemy type was
no doubt incredibly exciting to happen during a big canon round. Well as
promised, these critters will start showing up more often now that the
big reveal has occured.
<img width="982" height="981" alt="image"
src="https://github.com/user-attachments/assets/c537afe6-9b97-4913-8572-85650556b871"
/>
<img width="979" height="981" alt="image"
src="https://github.com/user-attachments/assets/1049b564-eb54-45e8-a113-da48f5c4b67b"
/>
This PR adds new rare random events and overmap hazards for Psirens,
allowing the basic varieties of them to appear in normal gameplay. They
can also be summoned by technomancers. More to come later. :)
This PR tweaks an AI's can_use_remote_ui() proc to check for cameranet
visibility instead of distance to an AI's eye. This allows an AI to use
machines that aren't visible from the eye due to dense objects, but are
still visible from cameras. It also keeps the UI window open if the AI's
eye moves away, and closes the UI window if the viewing camera is
disabled or destroyed.
Fixes#22726
The conditioning skill was a little too harsh on Skrell, who suffered
heavily from being the lightest and smallest species, which made them
have extremely unfavorable interactions with mass and fireman carrying.
This PR gives them a higher than normal mob strength modifier to offset
their low mass, so that they can at least fireman carry a human without
requiring the conditioning skill. This makes both standard and Axiori
skrell start at a similar level as a human's limits for carrying before
the Conditioning skill is considered.
Reduces the chance for bones to break.
Fixes injury checks not respecting the DAMAGE_FLAG_BULLET flag.
The chance was: Brute damage + damage of the hit.
Then multiplied by 2 if the hit was blunt. (Bullets counted as blunt
previously)
The new chance is a linear scale, 0% at no damage, 100% at max health *
4. (Organs take damage up to 4* their max health).
Then 1/2 the damage of the hit, 1 times the damage of the hit if blunt.
To compensate, edged weapons now only decrease their chance to hit
organs by 40% if the ribs are not broken, instead of by 80%.
Example of the first hit to the chest:
STS35 bullet (damage 35):
Previously: 35% + 35% = 70% fracture chance. With 16% chance to hit an
organ.
Now: 8.75% + 17.5% = 26.25% fracture chance. With 49% chance to hit an
organ.
This one will probably need some testing!
There should be an opportunity cost to proning, which at the moment
there isn't and can't really be. When counting the amount of issues this
feature creates (making you artificially harder to it, looking extremely
silly, various layering issues...) it just needs to go at this point.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
<img width="1549" height="857" alt="image"
src="https://github.com/user-attachments/assets/3830233d-0635-4942-b2aa-024651e6cffa"
/>
Limbs make up roughly half of the "Per additional player" processing
overhead, while Organs make up most of the other half.
Not every organ is an easy candidate for "Event-only processing", but
external limbs are significantly easier to do so.
So this PR makes it so that External Limbs no longer require Processing
unless an event happens that would justify them requiring processing.
Which SIGNIFICANTLY reduces the overall additional cost to the
Processing subsystem per player that joins the server.
Oh and I also made the Appendix and Kidneys not require constant
processing. The Appendix will only process if it is hit by an
Appendicitis event, and the Kidneys will only process if they are either
damaged, or you get poisoned.
This PR does a few new things:
1. Adds a Mass var for Movables (/Mob, /Obj) which is literally required
for me to do anything at all with Kinematics (Very routine basic
physics)
2. Adds a derived "effective mass" statistic which is generated via
signal hook, allowing sources like Skills, Drugs, Cybernetics etc to
pitch in and contribute to a user's "Strength" in certain situations
without directly modifying mass.
3. Adds a mass modifier var for species datums, while painstakingly
calibrating each and every single species with consultation from every
lore team. A baseline human gets 72.0kg of Human Reference Mass. Any
species applied to it will multiply this by a constant that
algebraically cancels out the Human Reference Mass and replaces it with
a Species Reference Mass. Changing a species via the usual procs will
reset and then re-apply the correct values.
4. Refactored Lift/Drag/Fireman to have limits and penalties based on
relative effective mass
5. Finally, to make use of all this, I've added a new Conditioning
Skill, which modifies effective mass.
The standard assumption made for Lift/Carry is based in an assumption
that a typical character should realistically be able to
lift/carry/fireman a person 1.25x their mass. Previously the fireman
carry mechanic was heavily hardcoded, and didn't have much in the way of
granularity. If I wanted to RP a character that was a bodybuilder, there
wasn't really a way to do this. With this PR, there's now a fairly large
variety of interesting breakpoints.
This also allows there to be more granularity between different species
as desired by our lore teams. For example, a Zhan is in general stronger
than a M'sai. To give an example in the breakpoints for two different
species:
Human Lift Breakpoints:
Rank 1: 90kg (lift a Skrell, Human, Offworlder, M'sai, KA, or ZA)
Rank 2: 112.5kg (Lift a Zhan, Shell, or Diona Coeus)
Rank 3: 135kg (Lift a (Non-Industrial) IPC, Unathi)
Rank 4: 157.5kg (No new breakpoints, though you get less a movespeed
penalty from lugging around any of the above)
Can Never Lift: Industrial, Bullwark, Diona, Vaurca Ta'
Zhan Tajara Lift Breakpoints:
Rank 1: 116kg (Skrell, Human, Offworlder, M'sai, Ka, Za, Zhan, Shell, or
Diona Coeus)
Rank 2: 145kg (Non-Industrial IPC, Unathi)
Rank 3: 174kg (No new breakpoints, though you get less penalties from
the above)
Rank 4: 203kg (Juuuust barely lift an Industrial or Diona with heavy
slowdown)
<img width="1078" height="436" alt="image"
src="https://github.com/user-attachments/assets/a6802515-a827-4dc1-8734-55b604c589ab"
/>
Conditioning as a Skill sits in the Occupational category, which has
been carefully chosen and designed around to create a fairly compelling
web of opportunity costs. As a skill, it's very desireable for basically
any person that wants to play a "Muscular character" and also enjoys
fireman carrying people around, which makes it particularly useful for
hangar techs. By contrast a Paramedic might not actually need this
skill, since they can bypass the usual limits by just using rollerbeds.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Corrects some minor oversights. Kitchen supplies now spawn on the
kitchen counters once more, added a soda machine that I forgot to add,
removes an extra oven, and puts the dinnerware vendor where the oven
was.
The freezer is also less potentially lethal. Turns out I don't know the
Kelvin scale
Fixes several runtimes from the past few weeks, some additional material
repath regressions, and the fact that if I shoot you with a stream of
ionized deuterium particles, it doesn't riddle you with cancer.
changes:
- bugfix: "Fixes emergency shields runtiming when hit by thrown
objects."
- bugfix: "Fixes several stale global list runtimes."
- bugfix: "Fixes several health percentage checks that could use unset
initial health values."
- bugfix: "Fixes additional materials regressions in INDRA code."
- bugfix: "Fixes invalid fuel injector depletion math."
- bugfix: "Makes accelerated particles apply radiation damage to living
mobs they pass through."
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.
This PR nukes the single largest and most common source of unnecessary
Process() calls, the Air Tanks. Air tanks now dynamically add and remove
themselves from processing only when actually required (such as by being
actively used) or they contain a "reactive" gas mixture.
Gas tanks made up the overwhelming majority of all process calls, and
without them always being on, the Processing subsystem becomes extremely
cheap.
<img width="394" height="33" alt="image"
src="https://github.com/user-attachments/assets/a973b863-56ad-46f6-ac34-e3cd479dd76d"
/>
I have also tested gas tanks to make sure that they still work, being
chargable, dischargable, able to breathe from them, and that opening the
valve works. All 4 actions add the gas tank to processing. When the
actions are finished, the tank exits processing.
<img width="686" height="388" alt="image"
src="https://github.com/user-attachments/assets/e91c96d3-9031-4720-8e21-aa4d4afa84fc"
/>
Sticker spam makes the map really ugly and they're way too easy to come
by, so people can keep spamming offices and stuff constantly. This makes
them not be as much of an eyesore while still sticking around sometimes.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
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 shortens the length of the sounds loops introduced in #22789
(ventilation and SMES humming) in order to improve sound location source
update frequency.
By popular request, this PR adds a new minor skill to the Everyday
category. The "Resolve" skill is relatively straightforwards, providing
a small permanent morale point bonus. Which by virtue of how the Morale
system works, it also does double-duty as a "Psychic Damage Resistance",
since it allows you to take that many extra points of psychic damage
from psirens before the penalties kick in. At maximum ranks in Resolve,
you can take 3 shots from an Omen before the next shot inflicts the
psi-panic condition. Effectively giving a soak pool of 1 hit per rank
bought in the skill.
<img width="1274" height="527" alt="image"
src="https://github.com/user-attachments/assets/ac3da1fd-8053-42d5-97bb-38633d420921"
/>
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
# 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>
## About PR
- Adds a looping sound for the lore consoles which can be heard in a 11
tile radius in 6 second intervals. The loop stops once a human mob has
interacted with the console
- Removes abstract macro from loreconsole base types, since these are
intended to be spawned
- Slightly decreased font size of the body text so it feels less like
you're in your 60s and this is the font size of your phone
- Fixed being able to interact with power reliant loreconsoles without
power
## Images
https://github.com/user-attachments/assets/69c94128-d84a-426b-bc8c-27d94c5974cb
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| sound/machines/data_ping.ogg | Timbre
(https://freesound.org/people/Timbre/sounds/444876/) | CC BY-NC 4.0 |
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>
A much-less "Honey, I Overhauled The Horizon" remap of Service which
brings the Bar and Kitchen closer together, while also opening up the
Service part of the ship so that it's less of a dead end hallway and
more of someplace where crew can hang out.
The bar remains its own room, but shutters and dividers between the bar
and the kitchen allow for easier cooperation between the two sides.
idk how to put it on the changelog but major props and credit to
Hazelrat for helping with hydroponics, decor, and details on this
rework, couldn't have done it alone
---------
Co-authored-by: Hazelrat <ric.whe.don@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
As title. They still have access to the lockers, but officers are
currently gated from the room the lockers are in. An oversight from the
recent investigations remap.
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"
/>