Skip to content

TM patch: #522 with #491 - #523

Closed
Jackriip wants to merge 101 commits into
feature/hyperviolence-megafrom
tm/dock-terminal-lobby
Closed

Jackriip wants to merge 101 commits into
feature/hyperviolence-megafrom
tm/dock-terminal-lobby

Conversation

@Jackriip

Copy link
Copy Markdown
Member

Test-merge only. Do not merge.

#522 with #491 (ship saves) and the #520 test patch merged in, so they don't conflict on the test server. Both PRs had changed spend_parts() and added a refund_parts(); this keeps #522's version and #491's admin alert on a failed refund. Close once #522 or #491 is merged.

A captain whose ship sits in a player outpost's ship bay can spend ship parts
to store it in one of three save slots. Saves live in a new player_ship_saves
table (schema 5.35) with the map compressed by the database, and only small
metadata is cached in the game. Retrieval comes later.

A saved hull stores no per-machine data and comes apart into iron: walls and
mineral floors drop iron, false walls and mineral doors save as plain iron
versions, and valuable structures stay behind. Walls and floors now keep that
through shuttle moves, which rebuild each turf from its type.

Checkpoints of either kind now keep the ship's crew roster and class name.

spend_parts() gives back earlier classes when a later class fails. Setting a
new ship join password now costs ship parts; clearing it or entering the
current one again stays free.
A save is used once and costs nothing to retrieve. The lobby loads the
ship whole and seats the player; a shipyard console has drones rebuild it
in the outpost's bay. A lock covers both paths, the console spends the
save at the first piece and the lobby once the ship has loaded.

The stock scrub and machine restore are now global procs so the lobby can
use them. Saved ships come back at default tier with no plasma, no credits,
vendors and console matter zeroed, and a default APC cell.
A second save or an in-round checkpoint no longer gives walls and floors their
salvage back, mineral airlocks come apart into plain assemblies, and unfinished
mineral airlock assemblies are not saved. The construction drone refunds a
stripped wall or floor as iron.

A room or turf type removed since a save is replaced in the map text with a
plain ship room or plating, so the tile still loads.

The lobby retrieval now runs on the save controller, so a player who leaves
during a long wait cannot stop it before the save is spent. It refuses under the
late join lag switch before starting, and reopens the menu if seating fails.

A failed save insert logs a short line instead of the whole map. The full-slots
text no longer says how many slots there are.

Adds an in-game database test for the save store, and tests for the above.
Ship saves are now the only way to keep a ship. The console no longer stores
checkpoints for credits or rebuilds them. Every capture strips salvage and keeps
nothing per machine, so a rebuilt machine comes back at default tier with charged
batteries and engine fuel. Construction builds straight from a snapshot it owns,
and retiring the replaced hull moves to retire_replaced_hull() for the lobby to use.
The Outpost Manipulator keeps rebuild docked, the free order, rush and the job list.
…loading

A save now costs parts in the classes that match the machines on the hull, with a
5 part minimum and no cap. A survey of the hull's owned tiles gives the bill, mass,
crew and a plan for the screens, and is kept with the row in a new summary column.

Captains choose the slot and can overwrite a used one, which charges again and keeps
the old row if the write fails. A slot stays locked while it is retrieved, written or
deleted, and a slot that changes while the confirm box is open is refused.

A save can be loaded in the round it was made once the ship it came from is lost or
abandoned. The console and lobby both retire that hull and move its balance across.
Saved ships now go through crew registration on both load paths, a save made
this round restores its own crew, and a refused registration leaves the save unspent.
… ship saves

Credits stand in for misc parts only. Weapons, lab and cargo machines still
need their parts, and in return a save keeps their stock part upgrades, the
ship R&D server's researched nodes and completed experiments, and ship funds
bought with trade parts. Also keeps restocked fixtures stocked after master's
clear_stock and suit unit changes.
Defines for bands, effect tiers, triggers, energy kinds, pricing, research and dig sites;
the artifact and effect types with the shared vars later parts read; the sale value and
research point functions; the planet dig reserve and the specimen crate; and empty files
for the dig, study, use, trade and Polaris effect parts and their tests.
Fifteen artifact shapes with idle and active states and a label sticker, assembled from
NovaSector (artifacts.dmi states 7-13), Polaris (xenoarchaeology.dmi ano10, 70, 80, 120, 130,
140, 150) and Aurora (crystal_madness, with new active frames). All CC BY-SA 3.0. No Goon-derived
states.
Artifacts roll a main effect by the band they were dug in and sometimes a minor second effect,
each with its own trigger. A stimulus wakes a matching effect for a while; air and proximity
triggers hold it awake while they last. Auras spend charge faster than it refills, pulses fire
when the store is full, and touch effects act on whoever touches it.

Ported from NovaSector with fixes: planet air is only ever read, oxygen and nitrogen triggers are
gone, nothing generates free power, helpful effects never burst when smashed, healing shares one
cap per person, harmful effects log like weapons, and the scan lock frees itself. Artifacts do
nothing when crated or inside a trader outpost, can be bolted down, and are never saved with a
ship. Each energy kind has its own glow, particles, light, hum and wake sound.

Unit tests cover pricing, the effect catalogue, triggers, the lock, checkpoint exclusion, the
healing cap, cleanup and planet air.
A lead-grey recolour of the plain crate with padded straps and a
stencilled lid. A shut crate holding a find shows its field tag.
Each buyer gets a large-find row and (Barnaby, Boffin) a curio row on
their wanted ledger. A large find sells when the seller hauls it to the
counter, loose or in a shut crate: the trader looks it over, pays the
sale value into the usual account, hands over a receipt in their own
hand and says what they made of it. Vex adds a voucher for an extreme
find. Undug finds are refused. Traders remark on finds hauled in.

Outpost checkpoints turn back a loose find on the way in, with a line
from the guard. Sales record the artifact_sold metric and send
COMSIG_ARTIFACT_SOLD.
artifact_capped_heal() always asked for half brute and half burn, so a
one-sided wound (most wounds) healed only half the amount asked. It now
splits the heal in proportion to the brute and burn the target has. The
cap and ledger are unchanged.
Twenty effects rewritten for tg from Polaris 6cd19fe0dec6 and
VOREStation 9335d66b9fdf: extinguisher, animate, sweat, electric field,
fortify, faraday, sprint, berserk, disarm, force walls, gaia, plasma
vent, poltergeist, feysight, sleeping gas, life drain, gravity wave,
spines, life steal and resurrect. Polaris modifiers become tg status
effects. Gas vents are indoor only with a finite reserve; resurrect
gives three lives and only to a body whose player can come back.
Sarge buys none, but now says where to take a find hauled up to her
counter. Reword the loaded specimen crate's examine.
The harvester draws one awake effect off an artifact beside it into an
exotic battery. Each find gives three harvests; one is spent when the
first charge reaches the battery, and the find stays locked for the
draw and is released on finish, halt and deletion. A stream of motes in
the energy's colour runs from the find to the collector dome while it
hums, and its window is a phosphor scope over a glass charge tube.

The utilizer runs the battery's effect from the hand: a field or bursts
for about six and a half minutes, or ten contact uses. It hums, glows
and sounds in the energy's own colour and voice, logs whoever switched
it on, and goes dark inside trader outposts. Its window is a single
power button ringed by the charge.

Batteries and utilizers are items, so ship saves delete them; a saved
harvester comes back empty. Both are rated yellow in the gear catalog.
Art is Nova's harvester, battery and utilizer sprites with tint masks
drawn for the energy colours.
Credited when a Gorilla Arms, Mantis Blades or Widowline finisher lands.
Share one text field between CREWS and HOUSING, route the old join menu's
outpost and ship password popups through the lobby code limiter, clear
spawning_ship when a new hull can't seat its buyer, keep a refused
commission's fit, return SHIPYARD to its front page when pressed again,
limit the yard's DB refresh and the client metrics log, and tidy the bezel
CSS comments.
…hecklist

# Conflicts:
#	voidcrew/modules/unit_tests/voidcrew_zone_shops.dm
Give the Undertow checkpoint guard a desk instead of a window
… failed open

While the world initialises, send_assets() can sleep for seconds. Any message that reached the
page in that gap rendered tgui before its first update, crashed the Window layout on the empty
config and closed the terminal mid-open, so it never showed. The update is now queued first,
open() notices a close during the sleep, and a failed open is retried a few times.
…ck terminal

Every key, row, field and bezel button takes the focus on hover or with the arrow keys; Enter
or Space presses it, Escape or Backspace goes back, Tab and the number keys change tabs. The
terminal takes keyboard focus when it shows and hands it back to the map when it hides. The
page plays short terminal clicks on each move and press. The crew record lists who is aboard
with the captain first. The bill's totals are a parts table that can't overlap, and lists,
names and descriptions on every screen are cut, wrapped or paged to their boxes.
The page can report itself visible while open() is still sending assets. Without the UI set,
on_window_visible() took that for a stale page and hid the terminal over a working lobby.
@Jackriip Jackriip closed this Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant