This PR refactors get_pain() to be essentially performance free.
Previously it was a member of the top 5 most expensive procs.
I had to touch a metric shitton of files to make this happen. Notably
get_pain() was also 1/3rd of the entire processing cost for Mobs - Life
* Fixed tails layering oddly in character preview, holograms, photos,
etc.
AI usage disclosure: The code for this was created using GPT 5.6 Sol.
The sprite edits were all done by myself, manually.
Any ion currently oneshots a mech, by draining it's power cell to zero.
The amount of cell power drained is now random, up to the max charge of
the cell for a heavy EMP.
Up to half the max charge of the cell for a light EMP.
This PR makes EMPs respect energy armour, as the description of energy
armour says they should.
Energy armour is averaged across the mob, weighted for limb size.
This is then the chance to downgrade the EMP.
A heavy EMP can be downgraded into a light EMP, but no further.
A light EMP can either be negated completely, or only affect the mob's
contents.
Eg. A human wearing Ablative armour, (Energy 40), gives a 33% chance to
downgrade a heavy EMP to a light, as it leaves the hands and feet
uncovered.
The same mob struck by a light EMP has a 33% chance to have the EMP only
affect it and not it's contents (internal organs), if that is
successful, there is a further 33% chance to negate the EMP completely.
This means a mech with EM armour is guaranteed to downgrade a heavy EMP
to light, and to ignore light EMPs completely.
All other types of mech armour have Energy 10.
Almost all EMPs are heavy, with the edge of EMP grenades being the only
source of a light EMP.
Ion rifles EMP the target twice, 8 heavy EMP's downgraded to light, will
still seriously damage an unpowered EM armoured mech.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
**_- bugfix: "Fixes all rubber bullets dealing damage twice."_**
Rubber bullets were dealing their pain damage twice, while checking if
they should shake your screen or not.
_**- bugfix: "Fixes all attacks that dealt pain damage checking siemens
coefficient. This makes everything but hardsuits and voidsuits stronger
against rubber bullets. Insulated gloves are also no longer immune to
rubber bullets."**_
Hardsuits has siemens 0.1, meaning they took 10% damage from all stuns.
Now rubber bullets check their melee armor. Hardsuits are now weaker, or
the same against stuns.
Regular armor all has siemens 0.5, they took a flat 50% reduction.
Security armour is slightly weaker to rubbers, ablative and ballistic
are much weaker. Combat armour is roughly the same, or slightly better.
Riot armour is a lot better.
Voidsuits all had better siemens than armour, all voidsuits are now
weaker against stuns.
Finally, all jumpsuits had 0.75 siemens, but no (or nearly no) armor.
Combined with the fix of them hitting twice this means that rubber
bullets previously dealt 50% more damage against people in jumpsuits
than they do now.
**_- bugfix: "Fixes pain failing to make your blurt out whatever you
were typing. Now getting shot will cause you to say whatever was in the
typing window when you were hit and close the window immediately,
allowing you to move."_**
No more getting stuck in the typing window when you're getting sprayed
down by an STS!
_**- bugfix: "Fixes all attacks that had manually set armour checks,
previously they ignored the armour they were meant to check and decided
what armour affected them based only on their damage type."**_
Weapons that were set to specifically target armour types, such as
explosive projectiles (rockets, etc) were instead defaulting to the
damage type they dealt. So a rocket to the head was checking your melee
armour, not your bomb armour.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
-Adds Psiren cuisine
-Changes Psirens a bit to better fit cuisine purposes
-Adds a line of code to make sure the game doesn't freeze if flavors
don't get listed correctly for some reason
-Fixes the nutriment amount of Citrus Delight (I forgot to do that in
the generic food update)
---------
Signed-off-by: tomixcomics <11053204+tomixcomics@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Adds the stickbug of doom for admin use, plus a few QoL changes for
hivebots.
<img width="237" height="300" alt="image"
src="https://github.com/user-attachments/assets/7c8c1c29-f2f7-4532-b861-5674a3cd7ac5"
/>
- [x] Fix hivebot blood on the boss appearing red.
- [x] Verify the beacon creation ability is functional - could make it
spawn playables?
- [x] Implement the beacon boss sprite for future use.
Makes Greimorian egg implantation a little more fair, without removing
the intense danger factor.
1. Increases total incubation time by 33%.
2. Organ reroll chance is now not just for the head, but chest and groin
too (reduces odds of instakill, though still does not remove it.)
3. Removes late-stage reinfection chance from incubation stage 4.
NOTE: Helmizole is not just a medicine for curing greimorian parasites.
It's also an inoculation. So long as you have it in your system,
greimorian eggs might make you hungry and sleepy, but they WON'T be able
to start incubating, and they will be removed normally by your liver (or
by tox medicine).
Hey ISD! Tell Medical to make you medicine! It's their job!
Four major fixes. These are all pretty clearly bugs, but the result is a
substantial mech nerf (except EMPs against EM armor.)
First, EMP armour.
EMP armour did nothing, it was partially ported to use TG's Element flag
system, this finishes that.
Rather than make the EMP armour immune to EMP, it spends power to negate
it.
The cost is 1000 / severity. Heavy EMP is 1, Light EMP is 2. This is 5%
of a basic mech cell for light, 10% for heavy.
Also fixes the pilot getting EMP'd twice for every EMP act on the mech.
Second, open hatches let attacks hit the pilot. Chance is 80% from the
front, 20% from the sides.
The chance is mostly so that turrets that always aim torso don't shoot
mechs forever, always hitting the pilot inside.
Third, cockpit damage actually matters now. Previously shooting the mech
in the chest was nearly worthless, no important components were there
and destroying it did not destroy the mech.
Now if the cockpit is completely destroyed, attacks against it penetrate
through to hit the pilot.
These attacks still account for the mech's armour.
Combined with the hatch getting stuck closed, you can have tense rescues
of pilots bleeding out inside their suits.
Fourth, the mech running out of power actually stops it doing things.
Uranium and Phoron power cores allowed mechs to keep running forever,
even at fractional power, because they recharged slightly every tick.
Now if the mech ever cannot afford the power cost of an action it shuts
down.
It can be powered back up immediately if the power core recharges it,
but it cannot now do costly actions at single digit power.
I fixed mech combat shields.
They suck, they use the auras system which does not play nicely with the
new projectile code.
Recursive calls and spaghetti mess.
Works for now but could use a complete rewrite.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
- Represents phoron lore in telecomms stock part descriptions
- Represents phoron lore in SMES unit sprites/descriptions
- Adds a phoron-free cryogenic alternative to phoronic SMES units
- Replaces all instances of quantum mechanics being used for FTL Comms
with Bluespace (eg. the Quantum Relay -> Bluespace Relay)
Does not map the cryo SMES in anywhere, but use-cases would be Einstein
Engines, EE-supported factions, and less affluent indie groups
some basic recolouring:
<img width="333" height="107" alt="resprite1"
src="https://github.com/user-attachments/assets/8961274a-39bc-4523-8e11-9daadc652be7"
/>
<img width="559" height="106" alt="resprite2"
src="https://github.com/user-attachments/assets/3afefe66-5487-41f1-bbd7-59ea1bb37b40"
/>
changes:
- qol: "Mobs in animal traps can now be transferred directly to Stasis
Cages by click-dragging rather than requiring them to be in a net."
- bugfix: "Mobs can no longer use their ranged attacks while contained
inside objects (including animal traps)."
- bugfix: "Stasis cages now apply stasis only while powered and
correctly clear it when releasing simplemobs."
- bugfix: "Fixes stasis cage transfers race condition freeing trapped
animals randomly."
- bugfix: "Corrects stasis cage safety-wire status display."
Fixes https://github.com/Aurorastation/Aurora.3/issues/21944
Spiritual successor of
https://github.com/Aurorastation/Aurora.3/pull/22352
Cherrypicked changes from the C3 Crew Management branch, this PR
contains all NTNet extensibility features, including Field Relay
construction, off-site camera usage (contingent on standing up remote
hardware and being out of jamming), etc. This also fixes a handful of
outstanding telecomms and view/mobeye-related bugs adjacent to where I
was working.
changes:
- rscadd: "Adds NTNet extensibility, requires new machinery constructed
on away-site z-levels."
- rscadd: "Breaks NTNet Relay machinery into Quantum Relay ('core' obj
on Horizon) and Field Relay (deployable off-site constructions)."
- qol: "Embedded cameras (basically every video camera EXCEPT those
which are installed on walls) can now be viewed from NTNet-connected
z-level, not just connected ones."
- rscadd: "Adds several public camera monitor consoles to the Horizon
(near where public sensor grid feed consoles already exist)."
- rscadd: "Adds some spare camera console boards to Horizon technical
storage."
- qol: "Adds action button for 'cancel-camera-view' verb while viewing
cameras or looking up/down z-level."
- bugfix: "Fixes Jockey comms (frequency was missing from ANTAG_FREQS)."
- bugfix: "Fixes look-up/look-down actions intermittently failing
without first using cancel-camera-view."
Simple mobs don't dodge backwards anymore, it just doesn't really work
as an engaging mechanic.
To-do:
- [ ] Add armour to a bunch of simple mobs.
- [ ] Maybe make simple mobs attack with actual weapons instead of
magical damage numbers.
- [ ] Fix simplemob movement glide.
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Vaurcae can use Hivenet in the Lemurian Sea, but only on connected
Horizon z-levels. This extends to any far sector with Hivenet echoes
disabled (currently only Crescent Expanse Uncharted), though echoes
themselves are still disabled because they mostly come from greater
Hivenet.
Supported by lore staff.
Vaurcae having Hivenet fully blocked actually wasn't pre-existing canon
but was allowed as an experiment. This PR is the preferred form of
Hivenet restriction.
" Vaurca are known to exhibit a strong sense of dread while inside the
Sea, cut off from the greater hivenet and limited only to their ship for
communicating with others."
<img width="755" height="309" alt="image"
src="https://github.com/user-attachments/assets/95b32658-5446-4b1f-be00-cc7476fcf051"
/>
Since the Fog is an anomaly already, this doesn't even have to be a
retcon.
Saw Cargo drones still weren't properly named Viax and realized the
namegen code hasn't been touched since it was added (bar adding C'thur
in hive names)
<img width="491" height="139" alt="image"
src="https://github.com/user-attachments/assets/698b9bc3-1b7a-435f-b9e8-4b697bc6c526"
/>
Namegen now checks species to assign caste (finally, Ta & Ra are in),
Bound status is an optional override which Cargo drones use, and
Warforms are automatically made Viax too. Namegen also has way more name
variety now because it stitches together name parts, and occasionally
the defined syllables for Hivenet (which were otherwise unused because
you can't _not_ understand Hivenet)
https://github.com/user-attachments/assets/62da735c-bc17-4e12-b63c-7f2baaaceb63
Warforms also get body color set when spawning in now, they're
exclusively Zoleth brood because she has the most on standby.
Movement sounds for mobs are now handled by a single component. Movement
sounds are fed into it through signals, which contain both a movement
source (like an item for a mob, causing the sound) and a list of sounds
to pick from.
To-do:
- [x] Figure out how to do barefoot species sounds
- [x] Maybe movement sounds for simple mobs
- [x] More movement sounds for other items
---------
Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
No Breathe wasn't properly checked anywhere because Pressure Immunity
was doing its job by accident.
Also makes Runtime's shuttle area require power, for convenience.
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.
<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>
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."
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>
- 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
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.
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>
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>
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.
changes:
- refactor: "Refactors Gravity Generator UI from HTML to TGUI."
- rscadd: "Adds sector-based modifier var 'overmap_hazards_multiplier'
for generating total overmap hazard count."
- soundadd: "Adds new Lemurian Sea 'welcome' announcements."
- rscadd: "Added Lemurian Sea gravitic anomalies as overmap hazards and
random events."
- rscadd: "Adds ADPI/The Voices."
- rscadd: "Adds ADPI Panel for modmins to send ADPI messages to a single
character or all characters from their respective pools, or custom
messages."
- balance: "Vaurca Hivenet communication, the Hivenet Manifest, and
Hivenet Echoes are now disabled while the ship is in Lemurian Sea
sectors."
Rewrites Saycode and Langchat to add support for multiple languages in
one message, including audible emotes.
<img width="1139" height="338" alt="image"
src="https://github.com/user-attachments/assets/25e26932-7a6e-4c54-ab74-56fffb92ecad"
/>
Here's some samples to explain how to mix languages.
<img width="422" height="26" alt="image"
src="https://github.com/user-attachments/assets/e1b176cc-8625-4dc9-83c8-a053d3f310e6"
/>
`Languages ,2 can be mixed ,3 like this.`
<img width="540" height="21" alt="image"
src="https://github.com/user-attachments/assets/19156c67-4670-4d7a-84d7-26e527de2676"
/>
`!explains, ,2Emotes work too. ,0The text will get auto-quoted.`
<img width="592" height="18" alt="image"
src="https://github.com/user-attachments/assets/cfc31c5c-2383-41c8-82be-b36836339321"
/>
`,3Most languages ,0can be ,2mixed ,1arbitrarily, ,3any number of
,0times.`
<img width="636" height="20" alt="image"
src="https://github.com/user-attachments/assets/388b4f9d-192a-4374-ac31-bbd4e4e5dfe4"
/>
`,2Emotes. ,eAnd he nods. ,3They don't have to come first anymore.`
There are some exceptions. The exceptions are currently anything with
any of the flags `SIGNLANG`, `HIVEMIND`, `PRESSUREPROOF`,
`KNOWONLYHEAR`. Exceptions work the same as current languages do: they
must be the first language in the message. If so, they prevent switching
into any other language mid-message; if they're not first, they just
wont trigger.
They're exceptions currently because there's not really a clean way that
I or the people I asked for help on this one to make them look nice.
`SIGNLANG` for example doesn't scramble text, it shows it's own `
gestures a lengthy message.` text for those that don't understand. Could
we just replace every instance of sign language with that if somebody
doesn't understand? Probably. It would look pretty awful though. e.g.
`Alina Eskelinen says, "Hello." Alina Eskelinen gestures a short
message.`
This definitely needs testmerging because it more or less rewrites the
entire pipeline surrounding `say`. The `say` code itself had to be
rewritten to support the multiple languages, as well as all the existing
plumbing for listeners receiving messages. In return though, it's
significantly more straightforward and hopefully by extension easier for
people to add to in the future.
Primarily, instead of having four different `hear_say`, `hear_radio`,
`hear_sleep`, etc., routes for messages to come through, every single
audible message is received by `hear_message`, which is responsible for
figuring out how clear the message is (is the radio damaged? is it a
whisper we're eavesdropping on?), who needs to receive it in their
chatbox, formatting it correctly for each listener, and finally if any
npc or object within range needs to react to it in some way, like a
parrot or a mech.
changelog:
- rscadd: "Adds code-switching: you can now speak in multiple languages
in the same message."
- rscadd: "Adds audible emotes to the language list. They can be
triggered with ,e."
- rscdel: "Removes SSrunechat."
- refactor: "Rewrote langchat in order to support multiple languages and
partial comprehension."
- refactor: "Rewrote a vast majority of all saycode and the code
responsible for displaying saytext to clients."
- bugfix: "Sleeping mobs are no longer able to understand all
languages."
- bugfix: "Langchat now correctly shows the appropriate comprehension
for all viewers rather than all viewers sharing the comprehension of the
last viewer."
- bugfix: "Languages which are supposed to be invisible when not
understood no longer appear as scrambled overhead text."
Forgive me whoever has to review this. Biggest areas that have room for
error is stuff like a borer inside someone's head, and Dionae stuff. Old
langchat had odd exceptions for those and I was forced to rewrite it
entirely, but I think I got it all back to how it was working before.