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>
## About PR
- Fixes#21487
- Fixes#21634
- Fixes#21639
- Fixes#21640
- Also turns some comments into dmdocs in touched files, documents some
missing stuff
# Summary
This PR has the goal of adding a base framework for tracking, saving and
otherwise managing persistent data between rounds, written from scratch.
Persistent data can be anything - Most expectedly noticeboards, dirt,
papers, etc.
_Technical details about the PR below are subject to change._
## Estimated scope
The first iteration of the persistence framework should include the
functioning subsystem and the first implementation of a persistent type
using said subsystem.
- [x] Prepare database for persistent data
- [x] Add new features to `/obj/`
- [x] Logic to get and load persistent data into objects for the
subsystem
- [x] Internal logic for tracking and other
- [x] Implement subsystem
- [x] Basics, files, integration of subsystem
- [x] Database queries for different operations
- [x] Methods for registering and de-registering object tracking for
`/obj`
- [x] Round start logic
- [x] Round end logic
- [x] Implement first persistent type: Papers on notice boards
- [ ] Code review
- [x] Scope validation
- [x] Testing
- [x] Full changelog
- Merge
- [ ] Setup logging config for new subsystem
- [x] Documentation for developers ([How to add new persistent
types](https://github.com/Aurorastation/Aurora.3/wiki/Persistence))
## Inner workings
The new persistence subsystem has the following concept:
At round start the subsystem reads existing data from the database and
creates objects for them.
During the round objects can be added to the tracking using a register
function (or removed by a de-register function).
At round end the subsystem goes over all it's actively tracked objects:
Create new objects (that don't have a persistent ID from the database),
update objects that changed during the round and expire objects that are
no longer tracked.
The objects in questions can register themselves, de-register themselves
and decide themselves what content should be stored and handle how to
set themselves up during the subsystems init phase.
## Information on the new table
`id` - database generated ID for tracking persistent objects over
multiple rounds, objects without an ID are considered new and created
during the round.
`author_ckey` - With the first implementation unused, but expected to be
required in the future to allow any staff/moderation on persistent data.
Nullable as persistent data also can be things like decals without an
actual owner.
`type` - Type of persistent data used for creating objects at round
start.
`created_at` - Statistical values.
`expire_at` - Used for cleaning the database and setting limits for
persistent data types. It's optional and allows permanent persistent
data (command notice boards?).
`content` - JSON formatted data containing the actual properties of an
individual tracked object (e.g. what's written on a paper, what's its
title).
`x`, `y`, `z` - Coordinates taken and given from/to the object during
save/load. Those can be null for future purposes.
## The goal on how to add new persistent data types
`/obj` received two new methods which need to be overriden in the to-be
added new persistent type:
`persistence_get_content()` and `persistence_apply_content(content, x,
y, z)`.
The first method has the responsibility to provide all custom content of
a new type to the subsystem in the form of an associated list (`["title"
= "Hello, World!", "value" = 1337].
What does that mean?
In the example of a piece of paper, the method needs to put the papers
title and text content into a an associated list, that list will be
saved by the persistence subsystem.
The second method has the responsibility to apply the previously saved
content when persistent data is initialized at the start of the round:
The associated list needs to be read back and applied to the paper,
additionally coordinates are provided for the object that have been
taken during saving. Note that the coordinates might be null and could
be ignored during setup.
During the round, when a new object is created, like a paper, you need
to call the subsystem and register a track:
`SSpersistence.register_track(your_object_to_track, ckey (optional)`.
The subsystem will be using the methods above when the round ends and
saves the object - and loads it at the start of the round using the
second method. The ckey needs to be given for all persistent that
contains user generated content, e.g. papers.
In case a persistent object gets removed, you need to call
`SSpersistence.deregister_track(your_tracked_object)`. At the end of the
round the object will be removed from the storage.
`/obj` contains the variable (along some other technical vars)
`persistance_initial_expiration_time_days`, which has a default value of
30 days, but can be safely overriden on a per-type basis. This value (in
days) will be used for the persistent data entry expiration date when a
new object of said type is stored in the database.
## PR description changelog
- Added *The goal on how to add new persistent data types*.
- Updates *Estimated scope* format.
- Updates *Inner workings*.
- Final iteration.
*(Grammer and formatting not tracked manually)*
Extends and reworks how various extended information text (desc_info,
desc_build, desc_upgrades) are handled to make object interactions and
mechanics A.) much more clearly documented in-game and B.) much easier
to support from the back-end.
Almost certainly a candidate for test merge.
Assembly/Disassembly instructions are noticeably sporadic, largely due
to our current lack of a unified framework. That's a future thing I'd
like to attack so that it can be handled programmatically, but for now I
only targeted the biggest culprits as I came across them.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
This PR is mostly about fixing body/cryo bag layering issues.
Currently live and annoying to try and treat around:

Currently, bags are are below roller beds when first deployed. If
buckled and unbuckled, they are then above, because of the + 0.1 on
buckling.
If buckled on a roller bed, dragged, and then unbuckled, they are then
above player mobs, because of the `layer + 1` on roller bed `Move()`
proc, which also doesn't get reset. I removed this +1 on Move() because
it was older than the +0.1 and seems to serve the same purpose.
The +0.1 did not have a method of reverting to the original buckled
atom's layer, so I added a var and check to handle that.
I also changed bullet casing's layer to `BELOW_TABLE_LAYER` with the
intent of not having them on top of stasis bags and roller beds, because
it causes issues as someone trying to treat wounded after a firefight.
Changing bullet casing's layer does have a consequence of putting
bullets underneath, for example, the soil in the public garden. Putting
the soil on `BELOW_TABLE_LAYER` would fix this, but with the consequence
of having the bushes be on top, making clicking the soil difficult for
farming purposes. Adding bushes to that layer causes consequences with
side window layering (like on deck three outside the public lounge.)
For this PR I only adjusted the bullet casing layer. I'm sure it has
other unintended layering interactions. Let me know if it would be
better to leave them where they are or on some other layer.
Current changes in PR: Bullets under soil/roller beds/stasis bags.

(Example of why making bullets on top of soil is difficult) Screenshot
shows both bullets and the soil being `BELOW_TABLE_LAYER` with bushes on
top, as a reference. PR Currently has bullets underneath soil.

Unfortunately most of the map is kind of unplayable or not mapped in
mind with stairs being untraversable for roller beds or wheelchairs.
Remapping every map to work with this mechanic is also not something I
am interested in.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Standard examination was in an examine box. This makes it so fluff
examines are also in a box.
Fixes#18438
---------
Co-authored-by: Cody Brittain <cbrittain10@live.com>
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).
This is part 1 of a project to, eventually, bring the render planes
system from /tg/ and bay into Aurora. This is a prerequisite and blocker
for many things the development team and community want to have, and
this was long overdue.
Many objects have been re-assigned layers, which are now thoroughly
defined. Maps have had their custom layer defines purged, as we should
be moving away from this in favor of saner definitions in the base
items.
This should be a test-merge due to the sheer amount of layers changed,
which will very likely create issues that I cannot possibly discover and
debug in a reasonable amount of time myself.
---------
Co-authored-by: Cody Brittain <cbrittain10@live.com>
* sdaf
* sdaf
* sdfa
* sadf
* sfda
* gfd
* reduce thrusters volume
* sdafsadsdaf
* sdfa
* Reduced some sound ranges and made some/more not ignore walls for loops
* health analyzers too
* ivdrip adjustment
* most tools now use play_tool_sound to have the sound played, reduced range for it
* after dark
* FIXES
* breakin
* butt
* Update code/game/objects/items/devices/floor_painter.dm
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
* Update code/game/objects/items/devices/floor_painter.dm
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
* Update code/game/objects/structures/lattice.dm
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
* testing 1
* a
* FUCK THIS PRESET!!!
* allah
* OTEMACHI
* tis' done
* Project Exorcism : Sneed's Snairs (Formerly Chuck's)
* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm
* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm
* Update stools.dm
* Update code/game/objects/structures/stool_bed_chair_nest/stools.dm
* Update code/game/objects/structures/stool_bed_chair_nest/stools.dm
* Update stools.dm
* Update chairs.dm
* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm
* inhand fixes
* airlocks (matt has cooked)
fuck
* my cody plays the mamba
* fuck
* fixes layering issue
* airlocks and everything else Please fucking kill me
* underlays
* unfuck blending
* finished replacing old ass shit
* your ass is geass
* conflicts die now
* public fat'wa
* progress on walls and windows
* more mapping
* baltimore accents be like
* minor progress
* monitors
* fire alarms and apc adjustments
* apcs pixel adjustments, final airlock look
* also grilles
* shuttle wall start plus shuttle windows
* starting consoles
* table outlines
* I love broke ass sprites
* fixing the stupid ass exterior walls
* light fuckery
* terminal directionals, external airlocks, table fixes, blahblahblah
* fix 1
* fix 2
* some more fixes
* fix chairs
* basic untested railings and updating colors from atteria
* bridge and some fixes
* removing some artifacts on the new walls
* breaking wood tables and adding 4 wall materials
* fix
* compile & wood fixes
* make the horizon compile again
* railings, firedoors, ATMs, intercomms and tables again
* mapping begins also some tweaks to map view of icons
* full tile steel walls
* i sure hope nothing bad happens
* airlock updates (untested)
* reverts most wall machinery
* skull
* wall coloring
* makes the tg wood chill out
* work on airlocks
* hull consistency
* cause you live forever in the lights you make
* whoops can't show that in a christian manga
* terminals should be on walls and everything's hunky dory now
also i changed the wood stuff as per atteria's suggestion
* fixing airlocks
* fixes
* window resprite, coloring adjustments
* scc hull resprite
* new grilles, frame edits, and borosilicate
* greyscale wood palette improvement
* shuttle windows
* window frame fix
* apc update
* refit and reshaded fire alarms
* mapping icon fixes
* table fixes
* map fixes, platforms and stairs
* updates cutter, new walls and terminals
* mapping fixes
* fix preview
* preview fix stone
* stairs
* initial work for the map
* railing and windowpane fuckery
* new external airlocks
* a
* fix the maps in preparation
* wall object pixel offsets
* air alarms D1
* extinguisher cabinets
* APC DESTROYED MISSION ACCOMPLISHED GOOD WORK
* deck 3: floor decals, APCs, air alarms, fire extinguisher cabinets
* deck 3: fireaxe cabinet
* /shuttle_landmark/distress/blue, move base_turf from map to obj def
* intercom presets
* formatting
* deck 1: floor decals
* deck 2: named area fix (LMAO), signs to use single quotes
* deck 2: floor decals, APCs, air alarms, fire extinguisher cabinets, fireaxe cabinets
* Platforms and stairs!
* grates and bugfixes
* Angled ship walls + grate color fix
* corrects apc anim overlay
* deck 2 and away site fixes
# Conflicts:
# maps/sccv_horizon/sccv_horizon-2_deck_2.dmm
* deck 2 missing grate
* warning stripes
* railings and ledges
* windows and fixtures
* windoorsagain
* airlocks pt1
* windows de-seamed and transparent
* airlocks and pixel offsets
* fixes for airlocks
* more airlock fixes
* presets for ringer, request console and newscaster
* 132
* asfsaf
* kitchen tiling
* thicker freezer tile bevels
* More angled walls
* New shutters and blast doors
* directional corrections
* ops railing fixes
* updated window map things and shutters
* value changes and blast door changes
* Ledges and platforms galore (D2/D3)
* all decks: fix door dirs
* all decks: newscasters, intercoms, requests consoles, ringer consoles
* helm light blue decals to dark blue
* supermatter door dir fix
* fix directional presets (dirs/offsets): newscaster, intercom, requests console, ringer console
* firedoor changes
* deck 3: overlapping wall mountables fixes
* map changes
* airlock changes
* map tweaks
* airlock & stair icons
* various mapping modifications
* Double airlocks + fixing denied states + fixing airlocks on all levels
* Rebase
* directional terminals buttons and lights again, platform tweaks
terminal north facing sprites, atm/food terminal directionals
proper door control and lightswitch directionals (presets still need to be set up, mapping)
re-adds new light tube sprites, again
new sprites for floor lights and the other stuff that got added
adjusted platforms to be recolorable, added light and dark versions, fixed some shading
* missing ERT outfit thingy fix
* floor lights fixed
* deck 3: various small fixes
* deck 1: various small fixes
* deck 2: various small fixes
* fixes
* d2 fixes & multitile door fix
* d2 fixes, remove unused airlock files, button icon fixes, window icon fixes
* make it actually compile, oops!
* make it actually compile, pt2
* CE office camera
* pew pew pew
* pew pew pew 2
* fixes
* deck 3: buttons fixes
* deck 3: button and other fixes
* deck 3: fixes and stuff
* D1 fixes & skrell airlocks
* minor D2 tweaks
* a lot of airlock-related fixes, glass tables, paint sprayer fixes, decal fixes, changelog
* maintenance hatch sprites
* fixing double doors
* flips multi-tiles, fixes multi-tiles, adds desk windoors
* new plastic flaps
* deck 2: a few buttons
* side + middle doors
* created paths for 3-tiles doors
* apply to map the 3 tiles airlocks
* some fixes, windoor alpha
* remove this random ass potted plant
* more map fixes
* holodeck disposal pipe fix
* secure airlock sprites
no code or obj definitions yet
* vault airlock
* vault door fixes
* scc window alpha
* adjusts double door glass, firedoor open state
* adjusts construction states for doors
* remove some defunct icons and fix anims
* assembly stuff
* pharma fixes
* vault door dir
* firedoor smart generation moved to its own proc
* lift doors, d1 fixes
* firedoor smart generation: adjacent wall check
* firedoor smart generation: adjacent firedoor check
* all decks: missing firedoor and other fixes
* deck 2: weird maint stairs fix
* oops
* diona airlock fix
* the shuttle wall gigadeath
* fixes
* some fixes for leftover map item paths, and double lattices
* new diona walls
* more fixes
* and more
* deck 1: fix out of bounds keys
* deck 3: fix out of bounds keys
* runtime 3: duplicate APCs fix
* all decks: make all 3 tile wide doors glass
---------
Co-authored-by: Wezzy <wowzewow@gmail.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
Co-authored-by: kyres1 <noodle.buster31@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: atteria <tarkona@protonmail.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com>
Co-authored-by: naut <nautilussplat@gmail.com>
Co-authored-by: naut <55491249+nauticall@users.noreply.github.com>
* tgui the beginning
* binaries and the like
* Bring in the last of it
* Example radio UI
* delete example
* NTOS Main Menu, start on manifest, tgui states
* tasks.json
* gunnery ui pt 1
* okay
* fix everything
* scss update
* oops
* manifest gigablast
* downloader part 1
* download prt 2
* NTOSDownloader final
* mfw committing to_worlds
* gunnery console pt2
* i cooked
* targeting (finished)
* one vueui down
* voting ui almost done
* MY MIND FEELS LIKE AN ARCH ENEMYYYY
* voting ui down
* photocopier
* ntos config + download fixes
* photocopier 2
* refactor define
* NTOS client manager + fixes
* fax machine final (it also uses toner now)
* marching forwards... left behind...
* ntnrc part 1
* canister
* add quotes
* portable pumps pt1 + more backgrounds
* oops
* finish the portable pump
* freezers
so I'll keep on pushing forward... you haven't seen the last of me... oooooooh...
* doors ui pt1
* finish doors UI (forgive me wildkins it's a bit of shitcode)
* vitals monitor, make things use labeled lists, new backgrounds
* mais j'envoyé aucun mayday...
* maglock pt1
* pour ça je me suis perdu...
* infrared
* fix that
* prox sensor pt1
* prox sensor
* signaler (this was actually pretty hard)
* atmos control pt1
* atmos control pt1.1
* atmos pt 2
* fuel injector
* multitool UI
* jammer
* list viewer
* APC
* portgen
* targeting console updates + SMES ui
* new themes, shield generator
* supermatter
* Add ore detector and (shitty) NTNet Relay
* orderterminal pt1
* orderterminal pt2
* smartfridge
* Add (air-)tank GUI update ore detector size
* Adds Transfer Valves
* Add AtmoScrubber
* analyzer pt1
* weapons analyzer pt2
* bodyscanner pt1
* bodyscanner pt2
* fix this shitcode
* seed storage
* appearance changer
* appearance changer final
* sleeper pt1
* sleeper
* gps
* vehicles
* chem dispenser
* lily request
* holopad
* tgui modules pt1
* ppanel
* damage menu
* fixes
* im here too now
* follow menu, search bars
* quikpay
* quikpay fixes
* circuit printer
* ppanel
* ppanel updates
* pai
* turret controls (i want to kill myself)
* tweak
* remove the boardgame
* guntracker
* implant tracker
* penal mechs
come close to me, come close to me
* chem codex
* pai radio
* doorjack
* pai directives
* signaler removal, sensors
* ghost spawner
* spawnpoint
* fixes
* teleporter
* one more to the chopping block
* account database
* remove divider
* scanner, atmos
* latejoin ui pt1
* latejoin
* records pt1
* RECORDS UI DONE
* delete interpreter & records
* CHAT FUCKING CLIENT
* data updates
* fix some things
* final UI, log
* basic nanoui fix
* antag panel
* remove vueui
* atm update
* vending update
* warrants, cameras
* ntmonitor
* time comes for all
* preserve this legacy
* bring that back (oops)
* rcon, ui auto update for computer UIs, remove rcon computers
* alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles)
* A LIKE SUPREME
* a
* power monitor
* lights on
* fuck this code, fuck nanoui modules, and fuck nanoui
* LEAVE IT OH SO FAR BEHIND
* fix alarm monitoring for synths
* I SAW IN YOU WHAT LIFE WAS MISSING
* comms console
* idcard and record updates
* turn the light on
* arcade
* pt2
* news browser
* static
* crusher
* f
* COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO
* codeowners & suit sensors
* html ui style removal
* make lint happy
* resist and disorder
* i slowly get up and turn off the noise, already fed up...
* pleaseeeeeeeeeeeeeee
* THE CREDIT LARP IS NECESSARY
* i hold the keys
* RISE UP
* fix that?
* harry's suggestions xoxo
* runtime fix pt2
* You are the only thing that I still care about
* adds build workflow
* Update update_tgui.yml
* adds some needed steps
* ATM
* misc fixes and tweaks
* fixes 2
* make newscasters usable and fix use power on freezers
* turret control is clearer
---------
Co-authored-by: John Wildkins <john.wildkins@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
Co-authored-by: Geeves <ggrobler447@gmail.com>
Co-authored-by: harryob <me@harryob.live>
* Ports SStyping from Nebula.
* the spook
* a
* fix
* bring the fanfare to its knees
* add a speech bubble type pref
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
* Update the codebase to 515.
* edit that
* WHOOPS
* maor
* maybe works
* libcall and shit
* do that too
* remove that
* auxtools isnt updated so get rid of it
* actually remove auxtools lol
Co-authored-by: Matt Atlas <liermattia@gmail.com>
* AI Firedoor Rebalance
* Update geeves-because-the-question-is-incorrect.yml
* improve the implementation considerably
* Update geeves-because-the-question-is-incorrect.yml
* put this back
* jammer UI
* Mitigates research recycling exploits by minimizing what can be recycled
* Moves the research design check into a new unit test
* Adds unit test for stack material recipes costs and fixes these costs
* Instead of changing recipes the resulting materials are worth less
* Crap fix
changes:
rscadd: "Ported a new chat system, Goonchat, that allows for cool things like changing font style, size, spacing, highlighting up to 5 strings in the chat, and DARK MODE."
rscadd: "Repeated chat messages can now get compacted. You can disable this in goonchat settings."
rscadd: "You can change icon style to any font on your system."
tweak: "The game window has been altered a bit to adjust for this."
rscdel: "Removed skin style prefs as they are no longer used."
* Ports a psionic system from Bay.
* Rip out this shitcode.
* shitcoden't
* fixes
* it should work fully now
* Admin fixes
* Remove todos
* remove todos part 2
* Removes psi-armour. We don't need this for now.
* Skrell are now operants. Tweaks coercion.
* Adds thralls.
* Temp removal of psiarmour. Fixes psigrabs.
* Thrall assay.
* fixes
* More fixes
* unused define cleanup
* Log and powers
* Skrell powers are done.
* Update code/modules/psionics/events/mini_spasm.dm
Co-Authored-By: Geeves <ggrobler447@gmail.com>
* Update code/modules/psionics/events/mini_spasm.dm
Co-Authored-By: Geeves <ggrobler447@gmail.com>
* Update code/modules/psionics/equipment/cerebro_enhancers.dm
* did this work???
* jargon
* arrow's fixes
Co-authored-by: Geeves <ggrobler447@gmail.com>
How to build machine blueprints!
Use steel sheets like normal, then rotate the frame how you like it using the directional arrow. From here use a Multitool to finalize it and then wire it up like you would before.
This PR will lead us towards the Promised Day, for in its wake there shall be much celebration and ecstasy as this world becomes a world suitable for developer hegemony. The first strike is thusly;
All << is converted into to_chat().
This PR fixes Tesla not having miniballs. Problem was that it would delete its own generated balls. Fixes#5749
Tesla that has 9 or more balls will start to melt down any tesla coils or grounding rods.
Tesla that has 10 or more balls will start to target and melt down emitters
Tesla with no balls looses power as intended, thus dying with less than 0 power.