518 Commits

Author SHA1 Message Date
VMSolidus 20bf497ee8 Read Mind Refactoring (#21828)
This PR refactors the Read Mind power to make it much more interactive
with differing levels of Psi-sensitivity. I also fixed issues with
improper sanitization of its inputs by just gently reworking it to use
the modern tgui_input_text(). It no longer has a hardcoded check for the
psi-receiver, since that check has long since been deprecated in favor
of the more modular check_psi_sensitivity().

I needed Hyperbolic Tangent for what I was doing here, so I just added
procs for all the Hyperbolic functions. They exist. Have fun.
2026-02-17 15:41:16 +00:00
Cody Brittain 3ff03b6dae Replaces return_file_text -> file2text (#21849)
Very ancient, decrepit proc that is somehow still used. Got rid of it in
favor of byond's proc, which has been around long enough there isn't a
version I can cite for it.

No user facing changes.
2026-02-14 08:51:16 +00:00
Arrow768 1bf7a822f4 Removes unneeded file access verbs. (#21852)
As it sais in the title.
-> If you need the logs files use either the WI, TGS, or the logging
infrastructure.

Co-authored-by: Werner <Arrow768@users.noreply.github.com>
2026-02-11 03:28:52 +00:00
VMSolidus 1e1c5dfda1 Fix Credit Symbol On Paper (#21829)
I have a massive migraine right now so I threw this problem at
Antigravity-Gemini3Flash. I have tested that the credit symbol works
correctly though, and have looked at several papers to make sure their
formatting wasn't messed up.

Tested: 

<img width="106" height="103" alt="image"
src="https://github.com/user-attachments/assets/56672122-5404-4d98-bb4f-65a254ca3d2a"
/>
2026-02-08 21:15:59 +00:00
Fyni f6e4c08fcb The Eye Opens - Part 1 (#21790)
- Add new flags for the Outer Eyes. Only available to mappers, ST and
modmins.
- Add new paperwork logo for the Outer Eyes. Available to anyone, if you
want to be scrawling random unknown icons onto your SCC paperwork.

---------

Signed-off-by: Fyni <itsfyni@gmail.com>
2026-02-06 19:57:01 +00:00
Cody Brittain 3f62424312 [MDB Ignore] [IDB Ignore] Kills off /obj/item/device (#21774)
This has zero reason to exist in our code base. We have no procs or
variables tied to this. I removed it to make future modifications
cleaner.

---------

Signed-off-by: Cody Brittain <1779662+Generalcamo@users.noreply.github.com>
2026-02-01 05:14:26 +00:00
Cody Brittain 9b5f89a717 Ports Turf Fires (#21659)
Adds turf fires (ported from Baystation, which ported them from
Shiptest), which are now used instead of ZAS fires for fuel decals and
flamethrowers. They also supplement ZAS fires in especially bad atmos
fires.

This makes flamethrowers and related objects more suitable for AOE
denial, rather than cooking the room (including yourself). They still do
the latter, but less so than a gaseous fire.

To make flamethrowers actually useful against them, simple mobs now take
brute damage when on fire.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| sound/weapons/flamethrower/flamethrower1.ogg |
[rye-rice](https://github.com/rye-rice) (Shiptest) | CC-BY-SA 3.0 |
| sound/weapons/flamethrower/flamethrower2.ogg |
[rye-rice](https://github.com/rye-rice) (Shiptest) | CC-BY-SA 3.0 |
| sound/weapons/flamethrower/flamethrower3.ogg |
[rye-rice](https://github.com/rye-rice) (Shiptest) | CC-BY-SA 3.0 |
| sound/weapons/flamethrower/flamethrower_empty.ogg |
[rye-rice](https://github.com/rye-rice) (Shiptest) | CC-BY-SA 3.0 |
| icons/effects/particles/smoke.dmi |
[rye-rice](https://github.com/shiptest-ss13/Shiptest/commits?author=rye-rice)
(Shiptest) | CC-BY-SA 3.0 |
| icons/effects/turf_fire.dmi | CM Dev (cmss13) | CC-BY-SA 3.0 |
2026-01-31 01:41:11 +00:00
VMSolidus ecd88fee14 Fix GPS Test Fail (#21760)
Fixes this test fail. One of our unit tests is randomly spawning a GPS
in a null location, which causes a runtime error when the GPS attempts
to print the coordinates of said null location. I've added sanity
checking to prevent this obnoxious test fail.

<img width="1379" height="759" alt="image"
src="https://github.com/user-attachments/assets/d5c15892-7272-4d24-886b-5c30432a35e5"
/>
2026-01-28 23:04:09 +00:00
SabreML ec22fccc6a TGUI Faction Select (#21737)
## Description
Hello! First PR here so I figured I'd do a big one ~~and stress out the
maintainers as quickly as possible~~. :)

While going through the process of creating a character the 'faction
select' UI stuck out to me as *functional*, but difficult to parse
visually and pretty dated looking by modern SS13 standards. (Not too
bad, but you know what I mean)
The new version is realistically *bit* too flashy for what it is (a
single-use interface hidden away in the character creation menu), but it
was very good practise for me to get back into DM/TGUI programming so it
works out either way.

I'm very happy to implement any feedback or suggested changes that could
help improve it.

## Actual Description
This PR replaces the old HTML 'faction select' interface with a new TGUI
one, and also cleans up and fixes some adjacent code I bumped into while
working on it.

A couple of notes about the current version:
* The 'Citizenship Check' line is currently non-functional and will
always show a checkmark. I know a lot of the corporations have specific
backgrounds/origins they won't hire people from, but I wasn't sure where
exactly that's enforced in code, if at all.
(I noticed `/datum/faction` has a `blacklisted_citizenship_types`
variable, but it's currently unused.)
* De-adminning or changing species doesn't immediately update the UI to
reflect the changes, you have to click on something new to trigger an
update manually. This doesn't have any actual consequences since I made
sure to sanitise everything, but it is a visual thing.

## Screenshots

<details><summary><b>Collapsed so it doesn't take up so much
room:</b></summary>

### Before
<img width="752" height="482" alt="xziPCYXbkn"
src="https://github.com/user-attachments/assets/334e0609-c2e3-4a33-92ad-15120b78ab35"
/>

### After
<img width="900" height="645" alt="NT"
src="https://github.com/user-attachments/assets/476702c7-c83c-4fee-a2cd-34d912468903"
/>

### Unathi attempting to join Zeng-Hu (Button disabled)
<img width="900" height="645" alt="Unathi fail"
src="https://github.com/user-attachments/assets/c5a256c1-5531-4cbe-8198-27411c1aab9a"
/>

### Faction Pages
<details><summary><b>Stellar Corporate Conglomerate</b></summary>
<img width="900" height="645" alt="SCC"
src="https://github.com/user-attachments/assets/6e8bdb64-a220-41d4-a503-1268f9f93a30"
/>

</details>
<details><summary><b>Nanotrasen</b></summary>
<img width="900" height="645" alt="NT"
src="https://github.com/user-attachments/assets/1ff107b5-7b3e-40e2-8f86-390ce29e165b"
/>

</details>
<details><summary><b>Hephaestus Industries</b></summary>
<img width="900" height="645" alt="HI"
src="https://github.com/user-attachments/assets/6fc23159-990d-4de2-9745-827e11ca0442"
/>

</details>
<details><summary><b>Idris Incorporated</b></summary>
<img width="900" height="645" alt="II"
src="https://github.com/user-attachments/assets/366a9824-81f1-4dd1-b385-4fa3968e39e0"
/>

</details>
<details><summary><b>Orion Express</b></summary>
<img width="900" height="645" alt="OE"
src="https://github.com/user-attachments/assets/5588f0fe-d6c3-44b4-8297-cca4ed991bd8"
/>

</details>
<details><summary><b>Private Military Contracting Group</b></summary>
<img width="900" height="645" alt="PMCG"
src="https://github.com/user-attachments/assets/a3dc6540-bfde-4fb2-939d-11e066b1e316"
/>

</details>
<details><summary><b>Zavodskoi Interstellar</b></summary>
<img width="900" height="645" alt="ZI"
src="https://github.com/user-attachments/assets/a8c2c33d-7138-4164-a9f1-6a2dc3eb3e61"
/>

</details>
<details><summary><b>Zeng-Hu Pharmaceuticals</b></summary>
<img width="900" height="645" alt="ZHP"
src="https://github.com/user-attachments/assets/4535ba80-efcb-4e50-9396-299bc16db2b5"
/>

</details>
<details><summary><b>Independent</b></summary>
<img width="900" height="645" alt="Independent"
src="https://github.com/user-attachments/assets/dcf7b46c-edce-4104-a4f5-000479a9f963"
/>

</details>
<hr>
</details>

## Changelog
- rscadd: "Revamped the 'Faction Select' UI in the occupation menu of
character setup."
- bugfix: "Fixed changing species in character setup not resetting your
faction if it became invalid."
  - Not player-facing:
- Fixed the TGUI dev server not working by bumping up the 'source-map'
version. You still have to manually refresh the interface with Ctrl+R or
Ctrl+F5 but it actually links now.
- Added a `wiki_page` variable to each faction to allow for it to be
manually set rather than being exclusively based on the name. (Mostly
just futureproofing)
- Added some line breaks to the faction descriptions to make them more
easily readable.

---------

Signed-off-by: SabreML <57483089+SabreML@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-01-26 23:39:22 +00:00
Batrachophreno 7d058fc613 Jukebox TGUI update, Earphones autoplay, sound keys refactor (#21630)
V2 of [previous music playing
PR](https://github.com/Aurorastation/Aurora.3/pull/21466). TLDR no
longer uses the connect_range component for implementation because it
turned out a bit too inflexible for overlapping music players.

Removes a NanoUI template for the [TGUI
update](https://github.com/Aurorastation/Aurora.3/pull/21046).

New changelog:
  - refactor: "Ported Jukebox's NanoUI interface to TGUI."
- refactor: "Ported Jukebox audio playing functionality to a component."
- refactor: "Sound keys refactored from singletons to datums, along with
larger breakout of sound.dm to allow for easier SFX updates in future."
  - code_imp: "Expanded track datums to include track lengths."
- code_imp: "Reorganized music file folders for more intuitive access."
  - rscadd: "Earphone status feedback text now includes track length."
  - rscadd: "Added autoplay functionality to earphones."
- bugfix: "Fixed earphones' 'Previous Song' verb not sending you to the
end of the playlist when used while the first track is selected."
- bugfix: "Fixed gain adjustment for 'Konyang-1' (-23 dB -> standard
-9.8 dB)."
- bugfix: "Fixed y-offset of audioconsole-running overlay animation to
line up with the actual screen."

---------

Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-01-22 16:54:40 +00:00
Batrachophreno db452842bf Greimorian Egg Cluster Implantation Refactor (#21554)
Fixes https://github.com/Aurorastation/Aurora.3/issues/21509

**Summary:**
Cleans up a lot of old Greimorian egg implantation code- rewrote the
actual worker injection behavior to use the organ/internal/parasite code
we have, instead of creating effects with their loc set to the organ
itself.

This largely means that not only is Greimorian implantation able to be
treated pharmaceutically (as you'd expect, with them being parasitic and
medicine including antiparasitics), but it also means that 'greimorian
eggs' also get the same treatment as nerve flukes, etc. That is to say,
antags can now purchase Greimorian Clade Kits from the uplink and inject
people or monkeys with them to cause Unhappy Tidings.

This code is also fairly easy to modify, if one wanted to create more
implantable parasites that burst out of people, unrelated to
Greimorians.

**Changes:**
- refactor: "Refactors the egg injection of Greimorian Workers to use
parasite code; it can now be treated with anti-parasitic medicines in
addition to amputation of the affected limb. Works on all playable
species, and monkeys."
- rscadd: "New reagent 'Greimorian Eggs' creates an egg cluster parasite
in a random organ when metabolized in the bloodstream. It also has very
mild soporific effects."
- balance: "Greimorian Workers and playable Greimorian Servants/Queen
now inject Greimorian Eggs instead of Soporific."
- rscadd: "Greimorian Clade Kit now available in Uplink under Bioweapons
section (Greimorians now able to be introduced to ship by egg cluster or
injectable reagent)."
- balance: "All parasite kit bioweapons have had their vial reagent
count increased from 2 -> 5."
- balance: "Helmizole no longer treats K'ois Mycosis, Black K'ois
Mycosis, Zombification, or Tumors (Benign or Malignant)."
  - code_imp: "Updates a lot of code documentation to dmdocs."
2025-12-02 10:53:54 +00:00
VMSolidus ee30451d9a Fix Ship Acceleration (Without Byond 516) (#21625)
This PR fixes some math errors in Overmap Ship math that were causing
ships to have entirely wrong acceleration when moving in any diagonal
direction. It was off by about 30% in the diagonal directions. This is
also an alternate PR to #21620 which doesn't require changing the repo
to Byond 516

I hate this so much more than the other PR, I really badly need Vectors
for doing what I do, and to do stuff like this PR so much better.
2025-11-30 11:18:35 +00:00
Casper3667 3541ce57fd Slight rework of how tajaran watches work and new papercode for taj time (#21582)
This does a few times, after the scope got bigger than I originally
planned:
- Watches now have an action button top left to check time.
- Taj time checking code was moved over to the time helper file to not
be watch exclusive.
- The taj wrist watches now shows the time on adhomai.
- Papercode now has the ability to show taj time and date, and to insert
the credit symbol.
2025-11-30 11:17:14 +00:00
Matt Atlas 94d92803b4 Replaces our lighting system with CM's. (#21465)
Depends on #21458.

Ports https://github.com/cmss13-devs/cmss13/pull/4229, with the original
authors as:

- https://github.com/tgstation/TerraGov-Marine-Corps/pull/1964 for the
lighting controller (A-lexa)
- https://github.com/tgstation/TerraGov-Marine-Corps/pull/4747 and
https://github.com/tgstation/TerraGov-Marine-Corps/pull/7263 for the
lighting (TiviPlus)
- https://github.com/tgstation/tgstation/pull/54520 for the dir lighting
component
- https://github.com/tgstation/tgstation/pull/75018 for the out of
bounds fix in lighting
- https://github.com/tgstation/TerraGov-Marine-Corps/pull/6678 for the
emissives (TiviPlus)

The main driving reason behind this is that current lighting consumes
way too much processing power, especially for things like odysseys/away
sites where a billion light sources are processing/moving at once and
the game slows down to a crawl. Hopefully this improves the situation by
a good margin, but we will need some testmerging to confirm that.
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/1059ba2b-c0c5-495a-9c76-2d75d0c42bf2"
/>
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/9704b0f6-4cf6-4dfd-a6cb-5702ad07d677"
/>


- [x] Resolve todos
- [x] Look into open space fuckery (border objects)

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: JohnWildkins <john.wildkins@gmail.com>
2025-11-04 21:27:42 +00:00
Mnemeory 277346c438 bar fixes round 2.1 (#21504)
- 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>
2025-10-22 09:13:13 +00:00
Kano aec06bc427 Adds an interactive away site: Outpost Nemora PART I (#20993)
## About PR

Adds an interactive away site. Full of evil, traps, point-defense horde
cleaning and story. This is part 1 of the changes. Currently incomplete
on some mechanics mostly pertaining north-east section of the ruin but I
believe this has enough content as is and a good step for the next
changes to come!


## Detailed Changelog
<details><summary>Contains spoilers, click to expand!</summary>
<p>

- `A revivable mob type`. If this mob wasn't burned or deleted by any
means within a 3 minutes period, it will revive.
- `Abominations`, a subtype of revivable mob. This type can spawn with a
chance to split into smaller creatures in death, if someone approaches
close enough. These mobs are also able to mimic appearance of humans,
being completely pacifist until it reaches to its unsuspecting prey or
gets attacked before it could.
- `Mob tracking console`, tracks any mobs/objects that exists in the
same Z level as the console itself, and included in a global list.
Displays its data in a TGUI screen.
- `Rigged (trapped) vents`, if it detects a player passing by within 1
tile radius from an unwelded rigged vent, it'll spawn up to 2 mobs. The
chances of triggering varies on following coniditons: running (100%),
walking (medium chance), throwing items near it (very small chance).
- `Storytelling holopads`, core logic is ported from Paradise Station,
made by Qwertytoforty. I did minimal modifications to make it work with
our codebase and do some additional things.
- `Footprint mapping helper`, allows mapping footprints of any type.
- `A light fixture subtype`, has a 50-50 chance to spawn as broken or
functional after Initialize.
- `An extraction mini game`, special to this ruin. It entails finding 5
canisters scattered randomly in the ruin and killing every creature
that's lurking around. If these conditions are met players are required
to hold off an extraction device and protect it from the waves of
creatures, while swapping said canisters. Modified from phoron deposit
ruin.

</p>
</details> 

---

### What's the overall story this ruin tries to convey, and where it's
allowed to spawn at?

This isn't final and a subject open for change where deemed fit. This
ruin is a remnant dating back to pre-Interstellar War. Solarian Alliance
Science Facility (SSF) Nemora, is a failed experiment/expedition
co-conducted by Department of Colonization. I believe it'd make sense to
find this ruin in the old Solarian frontiers far from the Core Worlds,
even so if the sector in question was colonized, nothing would've
stopped a department of a desperate nation in search for their gold in
blind hope. But not too close to an inhabited space.

***This needs to be evaluated by a lore nerd!***
**Possible Sectors:** 
- Valley Hale
- Badlands
- Weeping Stars
- Light's Edge
- Lemurian Sea (still up in the air for this one, but I like to think
Solarian suveyors took a swing at it at the time)
- All Crescent Expanse Sectors (east, west, far).

<details><summary>Details on story. I'd advise to skip this bit to not
spoil the experience if you're not reviewing this PR. Spoilers alert,
click to expand!</summary>
<p>

Shortly before the Second Great Depression, when the upcoming crisis had
begun to be felt within the nation's departments, some surveyors from
the Department of Colonization encountered an anomolous signal,
incalculable energy levels in deep space. When they decided to
investigate its source, small expedition teams went missing after a
while.

This drew the attention of the department, as seeing multiple expedition
teams went radio silent. A third-party incursion was suspected here,
pirates or worse. This led to the deployment of sufficiently armed Navy
corvettes to the last known coordinates of the expedition.

To no avail, all that was found was the vacant shuttles of the
surveyors, drifting in orbit around an anomolous asteroid. This gave
room for further discussion in the smaller parts of relevant
departments, after hearing what the inital expedition members had left
behind. The department conceded to pursue this further, funding a
thorough investigation to unearth what was hidden and to see if this was
a threat to demolish or an unexpected resource to exploit.

In time, an outpost was constructed and a researcher, eminent in their
field was commissioned to oversee operations on behalf of the
department. A majority of the attempts didn't go far enough beyond to
bear any fruit. As the progress was too slow and unsatisfactory in the
eyes of funders, this led to a review of the project and therefore
forced Nemora's hand to commence an experimental approach, which proved
a success, _so to say_.

Following this incident, the outpost crumbled under the weight of the
crises that had befallen it. All subsequent requests and communications
fell on the deaf ears of the nation in the midst of a large scale
economic crisis, forced Nemora to join the caravan of "low priority"
demands along with many other pressing nation affairs. In the end, the
facility remained forgotten, burried beneath the many rubble inflicted
by the inevitable storm of change Spur has known, Interstellar War. But
this may yet change, now the same Spur has turned their gaze back to
those uncharted heights, in a desperate attempt to exhaust what is
little known.

</p>
</details> 

---

### What does "interactive" part entail exactly?

This ruin contains some coded elements (traps, objectives, consequences
of some choices made), attempting to imitate a gameplay loop what a
player would expect from an admin controlled event. While this may not
go further than some coded/scripted events, I think this ruin has some
fun content for security/engineering/medical departments.

Currently this PR contains some core functionality for actual "choices
matter™" stuff for part 2 (if this gets approved).

Also most of the functions used in this ruin was made so it could be
used in any maps.

## Images

this:
https://discord.com/channels/157516682288562176/1162868440814600232/1393057047443931197

and this:
https://discord.com/channels/157516682288562176/1162868440814600232/1395312791925166160

<img width="4736" height="6144" alt="image"
src="https://github.com/user-attachments/assets/9526d40d-4da3-44b6-9220-80cf48ff2c72"
/>

## Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| /environmental_storytelling_holopad | Qwertytoforty (Paradise Station)
| CC BY-SA 3.0 |
| icons/obj/structure/bluespace_portal.dmi | Paradise Station | CC BY-SA
3.0 |
| icons/obj/structure/urban/bunk_beds.dmi | TGMC | CC BY-SA 3.0 |
| hospitalcurtain in icons/obj/structure/urban/tailoring.dmi | TGMC | CC
BY-SA 3.0 |
| roadbarrierwood in icons/obj/barricades.dmi | TGMC | CC BY-SA 3.0 |
| icons/obj/flora/rocks_brown.dmi and icons/obj/flora/rocks_grey.dmi |
TGMC | CC BY-SA 3.0 |
| the_thing and the_thing_chitin in icons/mob/npc/human.dmi | TG | CC
BY-SA 3.0 |
| sound/music/quarantined_outpost.ogg | Betrayer by Karl Casey --
https://karlcasey.bandcamp.com/track/betrayer | CC BY 3.0
| sound/effects/earthquake_rumble.ogg | Digging.wav by prozaciswack --
https://freesound.org/s/82722 | CC0 1.0 |
| sound/effects/robot_talk_1.ogg & sound/effects/robot_talk_2.ogg |
Robot Talk SFX by TheEndOfACycle -- https://freesound.org/s/674306/ |
CC0 1.0 |
| sound/effects/light_heavy_on.ogg | Light - Heavy lights turned on by
TILIADESIGN -- https://freesound.org/s/486536/ | CC0 1.0 |
2025-10-19 10:21:12 +00:00
Matt Atlas cca0dfe7b6 Ports /tg/ and CM planemasters to replace our renderers. (#21458)
Part one of our nefarious plans to destroy lag forever, and also
accomplish some cool shit.

This replaces our renderer system with plane masters, this will also be
used to turn skyboxes into backdrops and thus totally remove skybox
updating lag. Additionally, this will let us manipulate entire planes
very easily to do all sorts of zany shit. All credit goes to the
original coders, this is some seriously cool stuff.

Also fixes some bizarre smoothing behaviour, reduces updateoverlays
calls since now not every single structure in the game tries smoothing
with nothing.

<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/9b7cecd7-3c47-448b-9dd8-9b904640bf82"
/>
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/647d75a2-1bff-45ca-ab92-0aea10631afd"
/>

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2025-10-16 11:39:15 +00:00
Greenjoe12345 5e0866aa82 Chest pouch bag and new storage belts. (#21233)
Adds a new type of bag and two new storage belts. Also fixes being
unable to flip belts.
<img width="89" height="111" alt="image"
src="https://github.com/user-attachments/assets/6b1ec387-2f8d-4f70-a8f1-ab1d8e4b5ed8"
/>
<img width="88" height="87" alt="image"
src="https://github.com/user-attachments/assets/35a04494-7d83-4804-b1b8-9ac1be538e34"
/>
<img width="75" height="95" alt="image"
src="https://github.com/user-attachments/assets/7d1e97e4-f1e8-4e0e-8d4f-6ec0cb8e1253"
/>
<img width="89" height="86" alt="image"
src="https://github.com/user-attachments/assets/402451e7-42fc-4ed1-a73f-23dfafc0a360"
/>



### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

Sprites are by RatFromTheJungle, from this PR
https://github.com/NovaSector/NovaSector/pull/4651

---------

Signed-off-by: Greenjoe12345 <33647525+Greenjoe12345@users.noreply.github.com>
2025-09-06 10:36:14 +00:00
FabianK3 36d267d83e Persistent data framework (#21055)
# 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)*
2025-08-16 22:00:12 +00:00
Batrachophreno c2f054fd81 DMdocs (#21103)
Progress on DMDocs. PRing progress so far so there's not one mega PR
later with 1500 affected files.

I want my goddamn highlight text on what all these goddamn procs goddamn
do goddamnit. >:(

No actual code change anywhere in this PR, only comments.

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
2025-08-09 12:22:56 +00:00
Matt Atlas d7706ece53 Bug fixes, init signals for mobs, density updates. (#21108)
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>
2025-08-06 10:18:14 +00:00
Matt Atlas 531e2287d3 Ports CM wall leaning. (#21076)
All credit to the original coders, I only did minimal work to make it
work with Aurora code.

Something nice to steal would be the density rework, but that's for the
future.


https://github.com/user-attachments/assets/582edb20-5d86-4465-99bf-e4cec73c104a

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2025-08-03 16:12:42 +00:00
Batrachophreno 8c3e85f3fe Area display names (#21070)
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).
2025-08-01 19:51:44 +00:00
Batrachophreno 0851144182 Area definitions cleanup (Horizon/Runtime) (#20914)
**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.
2025-07-25 19:16:33 +00:00
4000daniel1 08fe54baf7 Phoron Deposit Away Site (#20730)
This site is something of an experiment. It features a special mineral
deposit with lots of phoron. When the deposit is drilled, it'll activate
four mob spawners some distance away that'll send fauna towards it.
There can be a total of 20 active fauna on the map at once (5 per
spawner.) There's no limit on how many mobs can spawn in total (for
now.)

The idea is to make an away site with a clear goal and challenge, which
requires multiple people across different departments to accomplish
safely. Security to defend against the waves of fauna, engineering to
construct and maintain barricades/other defenses (very important),
mining to handle the drill, and of course medical in case something goes
wrong. You can't do it solo, trust me I've tried.

Once the deposit has been fully depleted, (takes about 15 minutes or so)
the team will have to sally out of their barricades and fight their way
back to their shuttle. Cause again, the mobs won't stop coming. I think
it's more interesting that way. But it ends with LOTS of fauna corpses,
of which the performance impact on a populated server might be too
severe to justify? I've no clue.

I also added some atmospheric sound and music which plays once the
deposit is drilled. Hopefully sets the tone without being too
overbearing.

This required a lot of code. I do not know how to code. I've tried to be
thorough, but may still want to review it under some extra scrutiny.

See the changelog for some other small tweaks.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| sound/music/phoron_deposit.ogg | Reitanna Seishin & Zander Noriega
|CC0 & CC-BY 3.0 | https://creativecommons.org/publicdomain/zero/1.0/
https://creativecommons.org/licenses/by/3.0/
2025-07-12 17:21:49 +00:00
Greenjoe12345 6021ed948f Roundstart broken bones (#20936)
Partial revival of https://github.com/Aurorastation/Aurora.3/pull/19923
(just the broken bones part)

---------

Co-authored-by: Geeves <ggrobler447@gmail.com>
2025-07-10 21:40:00 +00:00
Werner 1bc5abd623 DBCore - Initial Implementation (#19593)
Ports the DBCore subsystem from tg.
A few things had to be dumbed down to make them work here.

Separate PRs will be created for different systems as they are moved
over to the new DBCore.

---------

Co-authored-by: Werner <Arrow768@users.noreply.github.com>
2025-03-26 20:57:06 +00:00
Fluffy 08b82baea4 516 Renderer update (#20579)
Updated the renderers to work with BYOND 516.
Some update of ZAS to hopefully be more efficient, and cold/hot air
effects.
Gas effects are now less prominent.

Ported from Bay
2025-03-22 11:20:21 +00:00
Matt Atlas 14d7425cee Expanded admin powers for full moderators. (#20522)
- Full moderators can now use rejuvenate.
- Full moderators can now spawn atoms.
- Full moderators can now remove/add languages.
- Full moderators can now teleport mobs.
- Repurposes R_BAN into a generic permission that full moderators and
above have, and locks teleport behind it.

None of these powers may be used for round-altering purposes. Pending
review by the head admin and the host.

To-do: check that Borealis and permissions in general don't explode with
these changes.

---------

Co-authored-by: realmattatlas <liermattia@gmail.com>
2025-03-04 17:02:49 +00:00
Fluffy 0f145d473e Some rework on the skin.dmf (#20494)
Removed the use of deprecated parameter icon-size.
Uniformed all clients to use fit to screen.
Fit to viewport is automatically attempted at login.
Statusbar is now hidden by default, giving more screen space.
Toggle fullscreen now works as expected, for even more screen space.

---------

Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: realmattatlas <liermattia@gmail.com>
2025-03-03 21:39:35 +00:00
Fluffy 3185c10cf1 516 internal links (#20428)
Convert all (appropriate) links to use the required `byond://` for 516

Added a grep to detect incompatible ones
2025-02-20 22:54:10 +00:00
Fluffy 7265630dde Turn more unmanaged global vars into GLOB (#20446)
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.
2025-02-17 23:34:02 +00:00
Fluffy f3dab68568 Area tweaks (#20391)
Reworked area changes and power define channels

No player visible changes (hopefully)
2025-02-16 18:53:46 +00:00
Fluffy 3c7a028366 Fix sign (#20483)
And the CI with it
2025-02-15 22:28:37 +00:00
ike709 2067d9474d Use native sign() in BYOND 516 (#20452)
https://www.byond.com/docs/ref/#/proc/sign

BYOND 516 adds `sign()` as a built-in proc.

Signed-off-by: ike709 <ike709@users.noreply.github.com>
2025-02-11 19:21:20 +00:00
Fluffy 1810ac27a8 Initiate 516 compatibility efforts (#20426)
Renamed all the "caller" vars to "requester", as the var would otherwise
overshadow the new one that is present in 516

No player facing changes
2025-02-05 13:09:42 +00:00
Ben 25569ce312 Poster Refactor + TCAF GPS Tags (#20278)
- TCAF Corvette given GPS tags and posters for recruitment
- In process ballooned into major poster refactoring, replacing global
list with singletons and adding defined poster subtypes for mappers
- All defined posters switched to subtype equivalent

Held of on placing any posters in Horizon, as that would be best for a
seperate PR if I ever do that

We also might need better names for some of these posters.

---------

Signed-off-by: Ben <91219575+Ben10083@users.noreply.github.com>
Co-authored-by: Ben10083 <Ben10083@users.noreply.github.com>
Co-authored-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
2025-01-31 13:53:23 +00:00
Matt Atlas eb3bc19014 A lot of bugfixes. (#20358)
- bugfix: "Fixed PDAs not being automatically updated by the Force
Change Name admin action."
- bugfix: "Announcements from non-Horizon ships drifting into hazards no
longer spawn observer chat. You will only get the announcements if you
are on the same z-level. The Horizon will still send its announcements
globally."
  - bugfix: "Offships no longer send newscaster announcements."
  - bugfix: "Fixed ling stings not working. Again."
- bugfix: "The robotics core console no longer reverts into a normal R&D
console when disassembled and reassembled."
- bugfix: "The robotics core console now has its own circuit that can be
made through R&D."
- bugfix: "Fixed the message that simple mobs print when they step on a
trap."
  - bugfix: "Fixed the foam sword sprite."
  - bugfix: "Fixed damaged wall overlays."
  - bugfix: "Fixed the INDRA field getting messed up by pointing at it."
  - bugfix: "Apple pies now count for the pie bounty."
- bugfix: "Changeling chameleon claws no longer spawn in the warehouse."
  - bugfix: "Admin click-drag to possess has been fixed."
- bugfix: "Added a minimum damage threshold to delimb, in order to stops
ridiculously small damage from taking off limbs. The threshold is the
organ's max damage divided by 3."
  - bugfix: "The Pull psionic ability no longer pulls anchored objects."

Fixes #17739
Fixes #17369
Fixes #19535
Fixes #19166
Fixes #20184
Fixes #20165
Fixes #20164
Fixes #20117
Fixes #19961
Fixes #20231
Fixes #20277
Fixes #20346

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2025-01-13 22:13:44 +00:00
Fluffy 457a091d9a Clicks refactor (#20321)
Added various events to the dcs system in regards to click handling.
Refactored various mouse related procs.
Fixed MUI mask.
Fixed AI jump on double click.
Fixed some runtimes with the click handler system.
Updated the click handler system.
Fixed fireman carry.
2025-01-09 23:04:48 +00:00
Fluffy 1ba0b35838 New opendream pragmas (#20260)
Enabled new opendream pragmas
Fixed some runtime access check operators (`:`) around the codebase (not
all, some are unfixable as they're used in macros)

No player facing changes (hopefully)
2024-12-29 11:12:09 +00:00
Fluffy df014f9bc0 Mouse drop refactor (#20256)
Refactored mousedrag procs, added signals, some safeguards, did some
cleanups around, renamed them to make a little more sense. Mostly put in
line with TG's code.
Fast clicking and releasing with a drag, depending on the grace period
and how fast it is done, can be counted as clicks, to aid in combat
scenarios where you spamclick.
2024-12-26 14:26:32 +00:00
Fluffy cb7f798e09 Comet expulsion event (#20205)
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.
2024-12-18 10:52:19 +00:00
Ben 534a0774eb AI Remote Control Fixes (#20198)
Fixes https://github.com/Aurorastation/Aurora.3/issues/13267
Fixes https://github.com/Aurorastation/Aurora.3/issues/16881
Fixes https://github.com/Aurorastation/Aurora.3/issues/14039
Fixes https://github.com/Aurorastation/Aurora.3/issues/14062

Also adds QoL where pressing eject on remote controlled mechs exits
remote control.

---------

Co-authored-by: Ben10083 <Ben10083@users.noreply.github.com>
2024-12-03 12:44:02 +00:00
Fluffy 389466360e Areas and station areas work (#20195)
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.
2024-11-27 13:13:44 +00:00
Matt Atlas 1da20ad33f Adds the Odyssey gamemode. (#18972)
https://forums.aurorastation.org/topic/20198-mission-briefing-auroras-gamemode-revolution

To-do:

- [x] Finish storyteller verbs.
- [x] Storyteller landmarks.
- [x] Proper storyteller spawning. Right now the gamemode system is
happy with just picking one storyteller and no actors.
- [x] Antagonist whitelists code.
- [x] Adding the Storyteller whitelist.
- [x] Mission map loading code.
- [x] Map in a bunch of missions.
- [ ] Storyteller adminhelps.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: DreamySkrell <>
2024-11-26 20:18:43 +00:00
Fluffy 0b4bb4ead1 Bluespace drive (#20053)
![immagine](https://github.com/user-attachments/assets/1e75f35b-b795-44ac-af96-0fecb0fedf9a)

Added the bluespace drive.
Fixed overmap projectiles not transferring correctly.
Code improvements. A lot of.

---------

Co-authored-by: courierbravo <73250577+courierbravo@users.noreply.github.com>
2024-11-06 17:10:10 +00:00
Fluffy d40d459d42 Refactored movement observable away (#20083)
Refactored movement observable away, use only the signal.
Some tweaks to the signal.
2024-10-26 15:53:07 +00:00
Fluffy d9c44532fc Refactored directionals (#20082)
Refactored directionals, ported lists of directions from TG, got rid of
useless proc to get the reverse direction.
2024-10-25 17:56:02 +00:00
Fluffy b8902e2e16 Runtime map now loads in ~11 seconds instead of ~40, sped up various other things (#19957)
Runtime map now has a bunch of new areas / items with often-tested
stuffs, and some hard-to-put-at-runtime stuffs.
Runtime map jobs now are positioned to make it faster to reach the
aforementioned often-tested stuffs.
Runtime map doesn't generate an overmap anymore by default, which speeds
up the process.
Runtime map now loads in ~11 seconds instead of ~40 seconds as it was
before.
Updated the maploader to be faster in parsing maps.
Bapi is not engaged anymore if we're only measuring the map size, which
speeds up the process.
In fastboot we do not generate the codexes anymore, which speeds up the
process.
In fastboot and if exoplanets and away sites are not enabled, we do not
parse the map templates anymore, which speeds up the process.
Updated the icon smoothing to be faster.
Optimized cargo area code.
Other optimizations.
2024-10-06 21:31:01 +00:00
Fluffy c24b4c7097 Projectile refactoring madness (#19878)
Refactored the projectile code, mostly in line with TG's now.
Refactored various procs that are used or depends on it.
Projectiles can now ricochet if enabled to.
Damage falloffs with distance.
Homing projectiles can now have accuracy falloff with distance.
Projectiles have a maximum range.
Muzzle flash is configurable per projectile.
Impact effect of the projectile is configurable per projectile.
Accuracy decreases with distance.
Projectiles work with signals and emits them, for easy hooking up from
other parts of the code.
Meatshielding is now less effective .
Impact sound is now configurable per projectile.

High risk.
2024-09-23 10:12:57 +00:00