- bugfix: "Fixed window frames blocking thrown grenades and bullets."
- bugfix: "Fixed grenades launched instead of being thrown getting stuck
on railings and tables."
- 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."
* Mining points now carry over between rounds for each character.
* Mining point carryover is capped at 15,000 points and expires after
one week of inactivity.
AI usage disclosure: The code for this was created in-part using GPT 5.6
Sol.
Fixes https://github.com/Aurorastation/Aurora.3/issues/22959
Fixes https://github.com/Aurorastation/Aurora.3/issues/22960
changes:
- bugfix: "Integrated circuits can now display screen text and other
examine related things."
- bugfix: "Fixed the direction of the wall mounted integrated circuit
when placed."
- bugfix: "Fixed that the integrated circuit kit had the wrong tools."
- bugfix: "Fixed that the integrated circuit printer put things on the
turf instead of in hand."
- bugfix: "Fixed that removing integrated circuit components put them on
the turf, and that they were dropped if they did not fit inside the
device."
- bugfix: "Harvesting a plant multiple times by clicking it repeatedly
before it finishes is no longer possible."
- bugfix: "The kitchen machinery can now be upgraded."
- bugfix: "The farmbot requirement in bounties was reduced."
- bugfix: "Fixes the inability to put custom pizzas in the pizza box."
Remaps the machinist workshop to fulfil a few criteria missing from
https://github.com/Aurorastation/Aurora.3/pull/22718. Particularly aims
to make the workshop more functional for IPC medical gameplay.
- The surgical theatre has been expanded so two machinists can more
practically work in the same space at the same time. In the existing
design, this portion of the workshop is far too claustrophobic. It also
has a desk.
- The exosuit chargers no longer obstruct access from the garage door.
- Resolved a lot of awkward uses of decals and platforms, which should
also make for more useable space.
- Cleaned up the wiring - both rooms are now wired to the civilian
subgrid. Previously, the main workshop area was hooked via a very
awkward line to the operations subgrid, while the theatre was wired to
civilian.
- Shifted a lot of the clutter into the robotics vendor, such as the
empty first-aid kits for medbots.
- Shifted materials crates + the crate shelf to a central position, to
make them easier to track.
Things of note for maintainers:
- It's never ideal to remap something very soon after the original
implementation, but having given this remap a full month, I think it's
had a fair chance. Having played machinist in it, the layout is very
tough to work in. It's a very cluttered environment, which becomes much
harder to look at once there's a disassembled mech cluttering the centre
with a dozen or so objects. This aims to be more intuitive to play in
and less overwhelming for players.
- The surgical theatre contains one additional IV drip, one extra O-
bag, and one organ cooler for borgings, and there are now two roller
beds accessible by the front desk. I'd rather have a more unique
solution for this problem long-term, but in the short-term it very much
sucks to have to ask to borrow a roller from medical just so you can
move a damaged industrial, given you can no longer pick that industrial
up unless you're playing a huge species.
- Otherwise, the workshop has the same resources as before and will be
able to make the same things.
(screenshot taken after testing, and prior to further changes)
<img width="1081" height="1080" alt="image"
src="https://github.com/user-attachments/assets/a8eef0e3-630b-463d-b3c3-22769001b513"
/>
<img width="480" height="448" alt="image"
src="https://github.com/user-attachments/assets/535dc851-7bab-48f7-a916-a5a1f12bf650"
/>
changes:
- bugfix: "Fixes C4 effects not correctly getting their parent item."
- bugfix: "Fixes C4 not being placed correctly."
- bugfix: "Fixes Dirty Bombs deleting their own radiation source."
- bugfix: "Fixes Dirty Bomb goop puddles disapearing long before the
radiation does."
- bugfix: "Fixes drinking radioactive waste not irradiating you."
3 dirty bombs set off. One on a floor, one on a wall one on a machine.
<img width="1191" height="1182" alt="image"
src="https://github.com/user-attachments/assets/584e7572-441c-4937-8e0e-7203010fcd54"
/>
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
replaces some old irl chocolates with lore chocolates (mostly GetMore)
- GetMore Chocolate, replacing Hersheys/Hearsay
- GetMore Nuts, replacing the Crispy Crunch(?)/Crunchy Crisp
- GetMore Bubbles, replacing the Aero/Spacewind
- GetMore Kelp, new
- Readies, new
- basic recolour/redesc of the tau ceti bar
- basic recolour/redesc of 100k credits bar into Idris' colours
<img width="880" height="104" alt="Capture"
src="https://github.com/user-attachments/assets/7a3bb3b5-bd9f-4a92-84fb-0951f8228e95"
/>
also removes non-vegan chocolates from the vegan MRE
Complete overhaul of Integrated Circuits Final Edition!
- Adds phoron cost to circuits (not assemblies).
- Printer searching capability.
- Changed names of assemblies to better match their description.
- Adds cloning and auto appending JSON for large builds.
- Adds database, debug, advanced math circuits.
- Reworks the list circuits to finally accept anything other than NUM.
- Adds plenty of list circuits to allow functional building and clearing
of lists.
- Reworks Complexity/Space to allow a bit better flexibility in creation
of devices.
- Adds a "Headroom" concept where space/complexity can go beyond the
maximum to a very slight degree. Concretely, unused space gives `2`
extra complexity per unused component slot, capped at `15%` of
`max_complexity`. Unused complexity gives `1` extra component slot per
`6` unused complexity, capped at `15%` of `max_components`.
- Groups math and logic circuits and adds subgroups.
- Doesn't mess with the circuit tool kit.
- Adds a xenoarch drill assembly with a nice sprite. Thank you
@EnchantedCrocolisk for the sprite!
- Changes activation limit time to 1 second from 2 seconds, adds a 1
second timer that is unique to the INTEGRATED CIRCUIT PRINTER with the
advanced design disk.
- Ports several Baystation integrated-circuit manipulation components,
primarily from
Baystation12/Baystation12https://github.com/Baystation12/Baystation12/pull/22458,
with anchoring bolts and hatch lock sourced from
Baystation12/Baystation12https://github.com/Baystation12/Baystation12/pull/25052.
- Changes the electronic ear piece into a workable radio headset with
working encryption keys capability and unique ways the Microphone and
TTS interacts with it.
- Removed the ability for all the electronic wearables to spawn with a
basic cell.
- Combines https://github.com/Aurorastation/Aurora.3/pull/22466,
https://github.com/Aurorastation/Aurora.3/pull/22456,
https://github.com/Aurorastation/Aurora.3/pull/22455,
https://github.com/Aurorastation/Aurora.3/pull/22446 that are now
closed.
Fixes large cages destroying the universe.
changes:
- bugfix: "Fixed captured creatures in large animal traps/cages
potentially causing runtimes when the cage was placed on tables or
racks."
- bugfix: "Fixed dragging large animal traps/cages onto tables or racks
being treated as the mover trying to step through the trap."
**The_Ill_Fated:** new flags/banners for heap of Solarian stuff
**Hazelmouse:** new flag/banner for Axiom
Stupid Solarian Canton officially gone, sickass stripe now. All worlds
affected (either updated or added):
Callisto
Ecclesiastical Axiom
Enceladus
Europa
Ganymede
Lhokgon
Luna
Lycoris
Lycoris (Provisional)
New Hai Phong
New Peoria
Northern Reconstruction Mandate
Novo Igman
Old Mars
Pluto
Provisional Mars
San Colette
Sankt Frederick
Silversun
Solarian Biesel
Early Solarian Biesel (Tau Cetian)
Solarian Mictlan
Solarian New Gibson
Solarian Xanu
Solarian Konyang
Southern Reconstruction Mandate
Sālamasian Republic
Unity Station
Venus
Visegrad
See icondiffbot for images.
# Summary
This PR is the next update to the persistency subsystem. The goal of
this PR is to provide more framework like functions to allow more types
of content to be made persistent.
Currently only volatile game objects created during a round can be (*in
a [clean](https://www.youtube.com/watch?v=rZ3ETK7-ZM8) way*) saved and
made persistent. This update attempts to provide methods to make
*everything*¹ persistent.
This introduces persistent generics and history.
## Database
The following things are going to be changed and added in the database
(open in new tab for better visibility, PNG file includes the drawIO
code):
<img width="1692" height="1041" alt="aurora_persistency_db drawio"
src="https://github.com/user-attachments/assets/ea53f419-f9aa-4592-af8f-3a8d5edf3177"
/>
**Deviations on database implementation from diagram:**
- Removed unique constraint on history table - Prevented adding multiple
records per round per attribute.
## Framework surface changes
- MC/VV: Moved global object track register to subsystem var space.
- MC/VV: Point of interest: Added history_cache and generic_cache to
subsystem var space.
- MC/VV: Updated subsystem stat entry message, now providing information
on cache sizes of new types.
- Added `singleton/persistent_type` defines (Type, clean-up rules,
finalization hook) and macros allowing new definitions of said types.
- Added cache structures that are also used for returns on public procs
in generics and history persistent types.
- Major new framework features: Persistent history (example: Mining
yield records) and persistent generics (example: Persistent Horizon
overmap position). See documentation for more information.
DrawIO diagram for documentation, includes source in it (open in new
tab):
<img width="200" height="200" alt="Persistence-subsystem-flowchart
drawio"
src="https://github.com/user-attachments/assets/51f28331-f999-49a2-a7cc-58278f7ae416"
/>
## Tasks
(These lists are not comprehensive.)
**General**
- [x] Update DB - Write SQL scripts.
- [x] Add subsystem modular files for generics and history.
- [x] Add type definition logic, macros.
- [x] Add type-DB init logic.
- [x] Logging.
- [x] A lot of testing. *A lot.*
- [x] Changelog.
- [x] Self-Review.
- [x] Update documentation on the persistence subsystem.
**"Persistent history"**
- [x] Add init logic.
- [x] Add finalize logic.
- [x] Add framework surface procs.
- [x] Get last record.
- [x] Get last X records.
- [x] Add record.
- [x] Add character ID related validation.
- [x] Add initial example mechanic.
**"Persistent generics"**
- [x] Add init logic.
- [x] Add finalize logic.
- [x] Add framework surface procs.
- [x] Save.
- [x] Load.
- [x] Add initial example mechanic.
## Changes
Too many changes to be listed here - Check changelog and actual changes.
## Warning
There are certain use/test cases that *cannot* be tested locally due to
missing preexisting data in the database. This should only affect new
data structures (new persistent types), not existing data.
¹ _Large scale persistent mapping is excluded for this version._
---------
Co-authored-by: Copilot <copilot@github.com>
This permits the impact drills to work for surgeries where a screwdriver
would work. For the regular uses that would be opening the hatches on
prosthetic limbs and prosthetic organ repairs. This was done as
machinists, who primarily do those surgeries, usually print an impact
drill for themself anyway so it was an annoyance to have a screwdriver
just for that one thing in their entire workshop.
While at it, I also changed a few hardcoded tool checks elsewhere to not
be as hardcoded.
With this, cell chargers can be constructed and upgraded. They are about
double the power of a regular recharger with an equal tier of
capacitors, as that is roughly the difference they were at tier 1.
I take no responsibility for people forgetting to upgrade their power
supply to handle the extra drain. Go fetch a better cell in the APC for
that, as it worked fine in local testing when done so.
A regular recharger was added to the machinist's workshop, as they had
no way to recharge device batteries before.
This changes up some of the possible warehouse spawn content. More book
options, couple of shield gens, slightly higher chance of some mats and
some other changes.
The big notable one is the chance of a big mob in the warehouse was
changed from 3% per round to 9% and the list for small and large mobs
was expanded. Particularly psirens were added, with a need to reduce the
spawn rate after the arc.
The warehouse spawn total was also reduced from 180 to 120, partly as a
test and to make the warehouse slightly less overloaded.
The closest thing to a balance change is the hardsuit boots being
deployable without the chestpiece again.
The SFX can be moved with the recent update to armour sounds if someone
wants, but the slowdown is a heavy enough penalty to discourage it.
- bugfix: "Fixed the Retract All Hardsuit Parts verb, by making hardsuit
boots retractable with the chestpiece deployed, at a heavy slowdown"
- bugfix: "Fixed the stealth system module not decloaking when the user
fires a gun or hits a mob."
- bugfix: "Fixed being able to instantly remove your hardsuit if it had
a storage module in it."
- bugfix: "Fixed mounted energy guns being stuck in taser mode. Also
extends support to other guns with multiple firemods."
- bugfix: "Fixed most hardsuit modules not having an on-mob sprite."
- bugfix: "Fixed synthetic chargers not charging the hardsuit, if the
wearer was an IPC."
- bugfix: "Fixed the hardsuit UI not updating when toggling jetpack
stabalizers."
- bugfix: "Fixed the advanced hacking tool searching the wearer's entire
contents to see if it had been dropped every tick."
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 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"
/>
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>
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
- 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>
Adds circuit boards and parts for rechargers and wall rechargers.
Rechargers can be built, deconstructed and upgraded. Wall rechargers can
only be upgraded.
The required parts can be printed in R&D.
<img width="1086" height="613" alt="image"
src="https://github.com/user-attachments/assets/9deb7917-4c59-4149-b1db-85e53b0447d3"
/>
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."
Makes ship combat significantly more destructive (and a bit deadlier),
especially with non-explosive projectiles.
**Additions:**
- A shell that penetrates a solid (dense) structure will cause spalling.
This spall does 2-30 damage, depending on range and has a high embed
chance. These embedded chunks are large enough to be ripped out by hand.
(But you probably shouldn't). The pilot's suit has 30 ballistic armor,
so a prepared bridge crew can survive a lot of spall.
- Adds a gun that shoots any ship weapon that admins can spawn. Useful
for testing, or for adminbus where they don't want to have to spawn a
whole overmap ship.
- Made several structures destructible, vending machines, computer
frames, grilles (these were just bugged) and watertanks (and their
children). These structures could just block infinite shots and were
common enough to serve as effective armor for the horizon. These now
spawn shrapnel (of their material if it's set), in addition to sheets of
steel when destroyed.
- Added support for negative maim chance. This allows chosen projectiles
to be prevented from decapitating. No more accidentally gibbing the
bridge crew's heads. (Unless they get hit with something really really
big).
**Balance:**
- All non-explosive anti ship rounds got significant buffs. Typically
2-3x Anti-Material numbers.
- Armour piercing anti-ship rounds got massively increased penetration
stats. Typically 4-8 from 1-2.
- Doors now get destroyed in less hits, if they are hit by anti-material
projectiles. Hits to destroy -= Antimaterial / 2
- Francisca frag shells now shoot less fragments but deal more damage.
394 projectiles for every shot was a bit laggy, now it's only 280.
**Shields:**
Shields now take more power. 13-14 megawatts for a 10 strength shield.
Just inside the ship's generation capacity with both the INDRA and
Supermatter running.
Instead of deleting any projectile they are hit by, shields now have
different failure modes.
- Firstly, a piercing projectile has it's penetration reduced by the
shield strength. Eg A shot that would go through 10 walls, only
penetrates 4 after going through a 6 strength shield.
- Secondly, a projectile has it's damage multiplied by 1 - shield
strength / 10, then has shield strength subtracted from it's damage. Eg.
A damage 100 projectile, hitting a 5 strength shield, has it's damaged
reduced to 50, (100 * 0.5), then to 45. (50-5)
- Thirdly, an explosive projectile (that does not penetrate per the
first step) does not explode, but instead deals it's full damage to the
shield.
Hits to the shield now also damage the field itself, not just the shield
tile. As such, a very big hit on the shield can bring the whole thing
down, requiring an engineer to reset it.
Shields can now be upgraded with research components. Additionally,
shield generators can now support more than one capacitor. The
roundstart capacitor on the Horizon is only good enough to support a 6
strength shield.
The upgrades increase efficiency, strength loss over time and charge
speed.
**Overmap Targetting**
Previously, shells would spawn within 20 tiles of their target and aim
directly forwards. This was bugged for shots with burst, which would
instead all aim inwards and mostly miss. This is the reason the Grauwolf
(in addition to the explosion bug below) and Fransisca felt so useless,
only one of every shell in a burst would hit.
Shots now spawn at the map edge, based on the orientation of the
projectile and ship. Diagonals are now accounted for.
Shots are then aimed directly at the target selected on the console,
with 3 degrees of dispersion.
**Bugfixes:**
- Fixes lots of explosions that didn't pass a turf to the explosions
subsystem. This caused the explosion not to happen if the thing hit got
qdeled before the subsystem could get the turf to spawn the explosion
on.
- Embedded shrapnel no longer gets the initial projectile name, this
prevents it getting named shrapnelshrapnel.
- Fixes a bunch of projectile piercing bugs, mostly with grilles and
windows. Shots now go past window frames without hitting them.
- Fixes shields not having a click delay when attacked.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
This is based on requests from the taj lore team. A future PR will do
more for the sensitive hearing as well, but the PR was growing by quite
a lot so it was best to split it up.
New:
- Tajaran eyes can now extend their vision by 3 tiles while they stand
still.
- Taj can hear people whispering and talking into radios from 1 tiles
further away, if they are listening intently.
Bugfixes:
- Flashbangs no longer fuck taj up as much unless they got intent listen
active.
- The message for autakh farseer eyes no longer gives the wrong message
if it is disabled by moving.
Balance & Change:
- Taj have new heights. Before it was 150 to 190 cm
- Hharar: 145-180
- M'sai: 155-175
- Zhan: 160-195
- The brute mod have been adjusted on tajara
- Zhan: 10% -> 5%
- Hharar: 20% -> 10%
- M'sai: 30% -> 15%
Backend stuff:
- Action buttons were changed to accept lists, so multiple actions can
be given to a single item.
- Duffelbags no longer give slowdown. Instead, you'll have to set them
down first before using them.
Slowdown is a pretty abhorrent malus, so much so that they've mostly
went extinct on the server.
Experimenting with this feature inspired from Eris. Might extend it to
backpacks (also very unused due to lack of drip) and look for it as an
alternative to trading something other than slowdown for slots.
**Modular laser changes**
- tl:dr Shooting mod laser at a mob counts up an improvement potential
variable, which when the gun is disassembled, gets spread across the
components.
- When the components are repaired, by someone with high skill, there is
a chance to increase a variable, such as damage, shot count, accuracy.
- Players give the biggest increase, followed by non-player humans
(protohumans & mechs fall in this catagory), then simple mobs and
finally monkeys. Non combat modlasers improve slowly when used for their
intended task (betarays slowly tick up when shooting hydroponics bays)
The philosophy for these changes is that research should continue to be
involved with the equipment they give out.
It should also be difficult (but not impossible) for research to upgrade
their weapons without support from other departments.
Xenobio slimes, protohumans, medical help to keep the protohuman alive
while you shoot it, security help to actually use the guns on real
targets (this gives the biggest increases).
The more powerful a weapon is the harder it is to upgrade, as it'll kill
it's targets quicker. The more upgraded a weapon is the more difficult
it is to upgrade further, improvement potential will get wasted on
components that have already hit their cap.
On their own, by the time the 5 monkeys research start with are dead,
it's possible for a max skill scientist to improve one gun's worth of
components by ~25%.
The weapons research can now make at roundstart (with max tech) are
significantly worse than what spawns in the armoury.
The weapons research can make with gold, silver, uranium and phoron are
equal to what spawns in the armoury.
The weapons research can make with diamonds are better than what spawns
in the armoury.
Major nerfs to heat vents, auxiliary capacitor and capacitor overcharge,
these were the problem children.
It is now impossible to make a weapon that does not take damage through
use. Safe designs will only break with heavy use, by people who don't
bring them back to research for repairs.
Powerful designs break quickly and need repeated repairs.
Adds two side grade capacitors that can be made at roundstart (with max
tech), one higher damage and fewer shots. One lower damage and more
shots.
High skill characters get much more information when examining modular
lasers and a chance to throw the gun away before it explodes.
Adds some defines to help balance these changes:
Improvement cap (the total percent a component can increase) Currently
100%.
Increase & Decrease Cap, how much an individual variable can be
increased or decreased. Currently 2x and 0.2x.
Improvement multiplier, multiplies all improvement gains. Currently 1x.
**Firing Pin fixes & changes**
Fixed ID locked firing pins and adds them to R&D.
Adds the inner research department to the firing range locked pins. This
is so xenobotanists, xenobiologists & xenoarchs can use the modular
lasers. Freeze rays for slimes, betarays for xenobotanists, laser
activation for artifacts for xenoarch.
It is still impossible for a scientist to make a weapon they can use
anywhere, but they can give them to security who can use them freely.
**Misc bug fixes**
The weapon analyzer UI now updates and only shows relevant statistics,
instead of displaying every variable even when they do nothing.
Replaces the buggy tesla zap with just electrocuting the holder.
Fixes a few broken visual messages.
Fixes the vermin modulator not killing anything, now it also works on
grems.
Fixes click delay on malfunction.
Fixes radiation damage numbers.
Fixes the temperature modulator.
Fixes the report printout showing the wrong numbers.
---------
Co-authored-by: Copilot <copilot@github.com>
* Please describe the intent of your changes in a clear fashion.
This PR addresses a runtime error "Cannot modify null.vis_contents."
occurring in `/obj/item/storage/proc/close`.
**Problem:** The `close()` procedure for storage items was crashing when
attempting to modify `storage_start.vis_contents` because
`storage_start` was null.
**Root Cause:** The issue stemmed from stale `s_active` references on
mobs. When a storage item was destroyed, its `Destroy()` proc called
`close_all()`. However, `close_all()` (via `can_see_contents()`) only
cleared `s_active` for mobs with an active client. If a mob was
clientless (e.g., due to a brief disconnect) during the storage's
destruction, their `s_active` would retain a reference to the
now-destroyed storage. Later, if `Move()` was called on this mob (e.g.,
due to inertial drift), it would attempt to call `s_active.close(src)`
on the stale reference. Since the storage object was already destroyed
and `storage_start` had been `QDEL_NULL`ed, accessing
`storage_start.vis_contents` resulted in a null dereference.
**Solution:**
1. **Clear all stale `s_active` references in `Destroy()`:** Modified
`/obj/item/storage/Destroy()` to explicitly iterate through all mobs in
`is_seeing` after `close_all()` and nullify their `s_active` if it
points to the current storage object, regardless of their client status.
This ensures no stale references persist after the storage is destroyed.
2. **Add null guard for `storage_start` in `close()`:** Implemented a
defensive `if(storage_start)` check before accessing
`storage_start.vis_contents` in `/obj/item/storage/proc/close`. This
prevents a crash even if, under unforeseen circumstances,
`storage_start` is null when `close()` is invoked.
* Please make sure that, in the case of mapping changes, you include
images of these changes in the PR's description.
* Please make sure to mark your PR as wip or review required by making a
comment with !wip or !review required
* If you include sprites/sounds/... (assets) that you have not created
yourself specify the license and original author below.
* Ensure that you also credit them in the appropriate location /
changelog as specified in the contributor guidelines
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/example.dmi | ExamplePerson (Example Station) | CC0 |
Fixes SERVER-PROD-TV
---------
Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Repaths obj/machinery to obj/structure/machinery. **Note for
reviewers:** the only meaningful changed code exists within
**code/game/objects/structures.dm** and
**code/game/objects/structures/_machinery.dm**, largely concerning
damage procs. With the exception of moving airlock defines to their own
file, ALL OTHER CHANGES ARE STRICTLY PATH CHANGES.
Objects, _categorically_, are largely divided between those you can hold
in your hand/inventory and those you can't. Machinery objects are
already subtypes of Structures behaviorally, this PR just makes their
pathing reflect that, and allows for future work (tool actions, more
health/destruction functionality) to be developed without unnecessary
code duplication.
I have tested this PR by loading up the Horizon and dismantling various
machines and structures with tools, shooting guns of various types
throughout the ship, and detonating a bunch of explosions throughout the
ship.
Several fixes to chemicals that deal brute or burn.
The problem was that their damage was being healed by autoheal faster
than it could add up.
Damage over time chemicals with more than 1dps would suddenly double in
how fast they killed you when they crossed the autoheal threshold.
This fixes that by adding a 60 second delay on wounds autohealing. This
also affects ALL wounds.
If a wound is bandaged it starts autohealing immediately, if it's still
under the authoheal threshold.
To compensate, I've reduced the damage of chlorine/phoron exposure, as
this change effectively increased the damage by 1.
Overall phoron/chlorine exposure is now more dangerous to naked people.
Less dangerous to clothed people.
Less dangerous to people who do the reasonable thing and put their
internals on, previously this was actually worse for you.
Also fixes contamination of items from chlorine and phoron:
- Contaminated items now only damage the bodyparts they cover.
- Contamination now checks if the item can be contaminated before
contaminating it.
- Contamination is now a 100% chance per tick, multiplied by the
permeability of an item. (Most items are permeability 1, labcoats &
other chem resistant medical clothing are 0.5, latex gloves are 0.1,
biosuits, gas masks, etc are 0).
- Contamination respects the permeability of your gloves, it's safe to
handle contaminated items with latex gloves now.
- Air tanks are now permeability 0, your internals won't get
contaminated and force you to take them off.
- Contaminated clothes now deal damage even if you put a spacesuit on
over the top of them.
- Life no longer checks every mob's internal organs for contamination
every tick.