Three for one.
- The ability to write in journals held in ones hand was restored.
- The quik-pay quick-input now works properly.
- The credit symbol use was standardised to use 5电 and inserted into a
few places where it used credit instead.
This PR updates the repo fully to Byond 516.1673. We now have access to
Associative Lists, Vectors, Matrices, and a huge number of math
improvements tha will allow us to catapult the repo into a new era of
simulationism.
I have tested this PR to verify that it works.
<img width="1076" height="1079" alt="image"
src="https://github.com/user-attachments/assets/c69a7276-7611-4a59-8630-46d8dd8a12a6"
/>
https://www.youtube.com/watch?v=9mPvZ96pHJI
A pull request commissioned by the Synthetic Lore Team to
comprehensively rework synthetics (read: IPCs) and how they work in
Aurora. The objective is to make IPCs as unique as possible from humans,
upgrading the robotic feel and atmosphere, while also preserving a good
sense of balance in-game.
Key features:
- A comprehensive expansion of synthetic organs, all of which now
fulfill a purpose: hydraulics, cooling units, power systems, actuators,
diagnostics units.
- Customizable organs with benefits and drawbacks, such as with cooling
units and power systems.
- Unique ways to repair the organs and more involved steps.
- Unique damage mechanics - every organ has wiring and electronics which
affect its functioning, and they are defended by plating which provides
natural armour.
- Improved and immersive diagnostics.
- Unique features, benefits, and drawbacks for every IPC frame.
- A rework of the positronic brain, which can be either destroyed or
shut down, alongside effects caused by low integrity.
- A rework of how EMPs affect IPC organs.
- Non-binary damage states for each organ.
To-do:
- [x] Finish the unique features for each frame.
- [x] Look into if mechanical synthskin is possible.
- [x] Power system.
- [x] Posibrain mechanics.
- [ ] Passive cooling expansion.
- [x] EMP mechanics.
- [x] Repair mechanics.
- [x] Mob weight mechanics.
- [ ] Gurney for heavy mobs.
- [x] New augments.
- [ ] IPC tag scanning and flashing.
---------
Signed-off-by: Werner <1331699+Arrow768@users.noreply.github.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: Geeves <22774890+Geevies@users.noreply.github.com>
Co-authored-by: Werner <1331699+Arrow768@users.noreply.github.com>
Swaps out the sound effects for the Comet Explusion event to something a
little less... loud.
I may come back in the future and create a voiced line so it matches
other events.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
OpenDream's `EmptyBlock` pragma had a bug that prevented it from firing
in certain cases of empty `for()` loops. That has been resolved and it's
uncovered a few issues with your code.
Please merge this ASAP as it has no impact on current behavior (besides
saving CPU cycles) and the bad code is currently blocking OpenDream CI
for the linked PR.
Finally tracked down the bug causing events to fire while no players
were in-game; a check in GetWeight() was running a for loop for
'var/mob/living,' not 'var/mob/living/living' as it ought to have been,
causing it to detect players observing and at the main menu as active
participants.
# Summary
This PR rebalances the spawn count and radius of overmap hazard
clusters, as well as adjusts some of their overmap movement behavior.
## Justification
Mining trips to exoplanets distant to the Horizon can force miners to
spend large portions of a given round just trying to navigate around
overmap hazards; in the worst cases, the sheer number of dead ends and
blind spots can result in their effective removal from the first 60-90
minutes of a round, and the worst delays can obviate the need for their
materials in the first place. While reducing these hazards would also
benefit the Horizon and offships, the primary motivation was to reduce
mining's "dead time" in any given round.
## Details
Most overmap hazard types have had their 'count' (the number of clusters
spawned) and radius reduced, to open up more navigable space on the
overmap. This has been compensated for by modifying movement
probabilities, speeds, and behaviors of overmap hazards.
The intervals between overmap hazards moving (their effective speeds)
has been made variable; different clusters of movable hazards will no
longer always proc movement at the same time.
Carp continue to have a random chance to move in a random direction
every interval. Space dust and meteors now also have a chance to spawn
in as movable hazards, but they will only ever move in one direction.
While more dangerous to passing shuttles and ships than carp, they are
also much more predictable.
The current numbers were based on observation of several randomly
generated maps during testing, but will likely need adjustment as it
faces actual miners and we accumulate their feedback. I erred on the
side of 'less difficult' to avoid overtuned rocks from smashing crew to
pieces every round.
- adds a new hostile_events check to prevent hostile events from
spawning in maintenance areas that are crew-facing, so far just the deck
3 crew lounge maintenance and bar maintenance.
- deletes errant holopad under the bartender scrubber
- relocates smartfridge interaction point so it's next to all the other
machines
---------
Signed-off-by: Mnemeory <227217321+Mnemeory@users.noreply.github.com>
Co-authored-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
Ship shields currently occupy something like 40% of every machinery
process ticks. Basically generators make a fuckhuge list of all
generated shields (1.5k in the Horizon's case) and then they iterate
over this list every tick strengthening the shields.
The idea in this PR is to shunt shield logic to an abstract datum.
Fields no longer store strength individually; they store damage taken.
They only process once they take damage, they reduce that damage by the
field gain tick value every tick, and then they stop processing when
they no longer need to. Shield strengthening is shunted off to a signal,
so we only need to traverse the big ass list once every round probably.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Blobs are too trivial, this should make them exciting.
Requirements for this event to proc are two engineers, so in the
worst-case you still have two people with an emitter each who can each
destroy one blob and circle to the third after.
Could use scrutiny from someone more familiar with event code than
myself, I feel I've stepped on something here.
<img width="980" height="895" alt="image"
src="https://github.com/user-attachments/assets/38e15dfb-70a1-475e-b9b0-120765b507d5"
/>
Slightly increases potency of Spacevines random seeds, and increases
range of areas which can spawn them.
Makes Comet Expulsion event populate a whole bunch of meteors on the
overmap, but most of them are just traveling in random directions. Makes
it less trivial for bridge crew to just scoot one tile to the left and
everything's fine. Tested it multiple times on local instance to find
numbers that tended to make the overmap dangerous, but not bullet-hell
levels. It should be okay for the Horizon to get hit once or thrice-
dodging them all ought to be a really nice trick. Also increased minimum
spawn distance from the edges of the overmap on round start to prevent
comet spawn from deciding 'hey fuck you' and nuking you with 4 meteors
to the face and 0 time to maneuver. That's too mean, even for me.
changes:
- balance: "Spacevines event has more area types to potentially spawn
in."
- balance: "Spacevines event potency_min increased from 70 -> 85."
- balance: "Comet Expulsion event chances slightly increased with
greater weighting towards Bridge Crew availability."
- balance: "Comet Expulsion event now generates many overmap hazards,
mostly in random directions, to make evasion less trivial."
- balance: "Comet Expulsion event meteors now have a small chance to do
greater damage."
- balance: "Horizon and other overmap visitable sites minimum spawn
distance from overmap edge increased from 2 to 4."
- qol: "Provided additional admin logging for Comet Expulsion event."
More locations where full area display name was not being used.
changes:
- bugfix: "Alarm Monitoring app now correctly provides full area names."
- bugfix: "Infestation event announcement now correctly provides full
area name."
- bugfix: "Supply Drop event announcement now correctly provides full
area name."
1. Look up now follows your mob (no more auto-removal when you move,
only when you go below a solid tile). Maybe add a hotkey?
2. Made the codebase work with the latest version of spacemandmm lint.
3. Advanced kits don't work on robotic limbs.
4. Density shifting should now always use set_density. Ported
TRAIT_UNDENSE from CM to better control the density of living mobs.
Fixes weird shifting behaviour with wall leaning -- what was happening
is that mob density was getting reset to TRUE because the mob wasn't
lying down.
5. TGUI say light prefs actually save.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Little more tuneup of area metadata, and also replaces area.name in
several locations with dynamic area display names (for example:
announcement that something was beamed aboard a thruster will once more
indicate whether it was the port or starboard thruster).
Because I'm not game to try to rewrite the entire system, this PR
changes the Communications Blackout event to, instead of hitting every
tcomms box with EMP effects, toggle a flag on the Processor units to
scramble all comms. The effect will be that instead of not transmitting
at all, radio communications will just come through as pure static
gibberish. Once the event is over, it will toggle the flag off. In the
event of the telecomms boxes still failing to come back, anyone with the
vv permission can easily restore the processors by editing the
"ion_storm" variable from true to false.
Few misc other fixes, see changelogs
**Goals:**
1. Delete area definitions no longer used in any map or file.
2. Update area definitions such that everything used in mapping the
Horizon exists in 'maps\sccv_horizon\areas' with the parent
'area\horizon\'.
3. Reorganize/rename/restructure those Horizon area definitions to make
future mapping easier and code that hooks into area properties easier.
4. Present area names and blurbs in the status panel.
This PR only handles Horizon and Runtime areas, for digestibility/ease
of reviewing. Offsite areas for another PR.
Naming convention reference:
The /area/ 'name' variable no longer contains either 'Horizon' or the
Deck# of the area or its approx location on the ship. All Horizon areas
now have several new variables as metadata-- area names now need only be
strictly descriptive, and the appropriate constants used in the area
definition, and a new function generates the display name with
consistent formatting for us.
Detailed documentation to follow after any adjustments are made to
mappers' preferences.
This also adds area blurbs to most areas- if not bespoke, then general
department-wide blurbs to parents. I know feature creep always sucks,
but while some areas having pre-existing blurbs, the overwhelming
majority of areas don't, and while testing it was very distracting to
see them randomly appearing and disappearing. Most blurbs are pretty
basic but I feel are entirely presentable- more clever individual ones
can follow in a separate PR.
First round of tuning after the addition of new electrical storms,
changes in behavior, etc. Details in the changelogs, but apart from
general balancing of event weights and effects, this PR also expands the
description info on Telecomms machinery to communicate that you need to
use Nanopaste to repair them (which I don't think was documented in-game
anywhere), and also adds a stack of Nanopaste to the TComms vestibule to
facilitate repairs if no one is around to produce the stuff.
Also you can beat Telecomms machinery with a stick to start garbling
them now! Take that, Medical channel!
There will probably be another round of balancing after this to make
sure the events all feel and play maximally right/fun.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
Some functional updates to events:
**Comms Blackouts:** Now has a variant (min. 6 pop,
engineering-weighted) which gives each machine a 10% chance to take a
little integrity damage. Additionally, Telecomms Processors now factor
their integrity damage into their ability to decompress messages, so
this alternative comms blackout might cause radio transmissions (either
global or for a given department) to start getting a little garbled- not
enough to genuinely impede comms, but enough to justify Engi to fix them
up.
**Prison Break:** Given how rarely we actually have people sitting
around in the prison waiting for breakouts over the course of a given
round, this event has been changed to be more akin to the existing
Containment events- the entire department (minus armory, nuke storage,
checkpoints, etc.) are at risk of lights blown, access issues, etc. Just
a little more variety added to the mix.
**Space Vines:** Minimum 4 pop to fire. Shouldn't matter much in the
grand scheme of things, just reduces annoyance factor for extremely
low-pop if they roll some vines that fuck them up. Will look into
refactoring that event so that the danger factor of the vines increases
with population, and remove the min pop requirement again.
**Drone Revolution:** Minimum 4 pop to fire. Again, shouldn't matter
much in the grand scheme of things but this highest tier event will
seriously fuck up anyone who latejoins and uses the maints to, say, help
set the ship up during low pop! No I'm not salty!
**Electrical Storm:** Refactored this and restored the Mundane and Major
variants. While we want this event to keep Engineers on their toes and
provide openings for people to break regs if they so wished, most of the
event is theater (lots of flickering lights now!) While the Mundane and
Moderate variants are mostly flavorful and will just give Engineers a
few excuses to visit different departments and RP with people, Major
events will be your 'all hands on deck' affairs (as Major events are
ought) and in very rare circumstances could even cascade into more
serious issues. Did a ton of unit testing on this and feel very good
about how each variant actually looks, will make any additional tweaks
if needed once we see how it plays with an actual population!
The Event Probabilities sheet was also very out of date, missing Comet
Expulsion, had the old Viral Outbreak, lots of old values, etc. Updated
all the events, and also updated the % formulas to factor in minimum
population- changing the 'Assumed Personnel' values at the top to a
level below the minimum population for a given event will now correctly
set its probability to 0%, making it clearer what actual odds are given
different pop levels.
I also don't think pop_needed was working correctly: various changes in
there to get it behaving.
Obv this PR grew in scope from outset and touches a small handful of
different things, so lmk anything to mix and match and change and drop.
!review
Electrical Storm event does nothing because it checks for valid target
APCs in SSmachinery, but SSmachinery currently doesn't hold a list of
APCs to use. This PR correctly registers APCs on init and unregisters
them on destroy so that Electrical Storms will actually upset Engineers
now.
This should proooobably come with an IG bulletin on the discord or
something warning engineers that their shit will actually get rocked
(especially since its kind of weird in-universe that electrical storms
that used to Do Nothing actually have an impact) now).
See title. Adds additional requirement of a minimum 8 pop to Greimorian
Infestation events to reduce common lowpop headaches.
Set min pop reqs for events to 1, reduce the likelihood of the Horizon
turning into a genestealer-infested space hulk during long uptime.
As the title says. Currently a 10% chance each time the random crate
spawn rolls but I'm open to reduce it if desirable.
---------
Signed-off-by: FlamingLily <80451102+FlamingLily@users.noreply.github.com>
This adds a foreboding warning at the beginning of hivebot invasions,
appearing exclusively to synthetic crew. This riffs off the unique
relationship positronics have with hivebots in lore, but isn't intended
to portray a resurgence of the hivebot signal on every single hivebot
invasion event.
**Must be greenlit by synthlore before being merged.**
Turned a ton of unmanaged globals into managed globals.
Refactored some UT output.
Removed some unused things, including vars.
Added a test to ensure people don't keep adding new unmanaged vars.
Fixed the APC damage event not working.
APC damage event now has actual damages instead of merely emagging the
APC.
Added APC damage event of level moderate and major to the rotation.
Added a comet expulsion event, coming towards the main map, if not
dodged causes some meteors that then explode, the explosion power can be
reduced by shields.
Some DMDocs, code cleanups and other things noone else cares about.
Refactored sorting.
Added test to verify all horizon areas (outside exceptions) are marked
as station areas.
Added test to verify shuttle areas are not marked as station areas.
Refactored how the area sorting var is made and used.
Added a global list of all areas.
Replaced the outside turfs with exoplanet ones for the digsite.
Fixed some exoplanet areas not having an exoplanet base turf.
Wrote a unit test for exoplanet areas to ensure they have an exoplanet
base turf.
Unified most of the procs into one definition, so there are no duplicate
around the codebase.
Marked some of the above as overridable if a good enough case can be
made for them (eg. external dependency or unlikely to be used).
* SSatlas.current_map
* hardsuit spell tab appears to clear correctly
* sdfsa
* from the moment i understood the weakness of my flesh, it disgusted me
* sdf
* SDQL2 update
* fix that verb
* cl
* fix that
* toworld
* this is pointless
* update info
* siiiiick..
* vv edit update
* fix that
* fix editing vars
* fix VV
* Port the /TG/ globals controller.
* part 1
* part 2
* oops
* part 3
* Hollow Purple
* sadas
* bsbsdb
* muda na agaki ta
* ids 1-15
* 16-31
* 41-75
* bring me back to how things used to be before i lost it all
* the strength of mayhem
* final touches
* cl
* protect some vars
* update sdql2 to use glob
* stuff?
* forgot that is not defined there
* whoops
* observ
* but it never gets better
* a
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
* autolathe 1
* FUCK MY LIFE
* more fixes
* autolathe queueing
* cl
* garbage collection
* wire fixes
* some final tweaks
* on second thought this might be annoying
* fix that
* whoopsies
* that didn't work for shit
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>