2026-08-13 21:39:05 +02:00
|
|
|
[gd_scene load_steps=23 format=3]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
|
|
|
|
[ext_resource type="Script" path="res://Starfield.gd" id="1"]
|
|
|
|
|
[ext_resource type="Script" path="res://Fleet.gd" id="2"]
|
|
|
|
|
[ext_resource type="Script" path="res://GameController.gd" id="3"]
|
|
|
|
|
[ext_resource type="Script" path="res://EnemySpawner.gd" id="4"]
|
|
|
|
|
[ext_resource type="Shader" path="res://starfield.gdshader" id="5"]
|
|
|
|
|
[ext_resource type="Script" path="res://ExplorationTracker.gd" id="6"]
|
|
|
|
|
[ext_resource type="Script" path="res://AsteroidField.gd" id="7"]
|
|
|
|
|
[ext_resource type="Script" path="res://WorldMap.gd" id="8"]
|
|
|
|
|
[ext_resource type="Script" path="res://WorldMapContent.gd" id="9"]
|
|
|
|
|
[ext_resource type="Script" path="res://IconButton.gd" id="10"]
|
|
|
|
|
[ext_resource type="Script" path="res://PlanetField.gd" id="11"]
|
|
|
|
|
[ext_resource type="Script" path="res://PlanetAtmosphereController.gd" id="12"]
|
|
|
|
|
[ext_resource type="Script" path="res://TouchJoystick.gd" id="13"]
|
|
|
|
|
[ext_resource type="Script" path="res://BuildingField.gd" id="14"]
|
|
|
|
|
[ext_resource type="Script" path="res://BuildController.gd" id="15"]
|
|
|
|
|
[ext_resource type="Script" path="res://ResourceCounter.gd" id="16"]
|
|
|
|
|
[ext_resource type="Script" path="res://FormationEditor.gd" id="17"]
|
|
|
|
|
[ext_resource type="Script" path="res://NeonNumber.gd" id="19"]
|
|
|
|
|
[ext_resource type="Script" path="res://NeonPanel.gd" id="20"]
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
[ext_resource type="Script" path="res://SkillTreeView.gd" id="21"]
|
2026-08-11 16:04:40 +02:00
|
|
|
[ext_resource type="Script" path="res://CargoCounter.gd" id="22"]
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
[ext_resource type="Script" path="res://TransporterField.gd" id="23"]
|
2026-08-12 13:07:52 +02:00
|
|
|
[ext_resource type="Script" path="res://ResourceBar.gd" id="24"]
|
2026-08-13 21:07:35 +02:00
|
|
|
[ext_resource type="Script" path="res://GasCounter.gd" id="25"]
|
2026-08-13 21:39:05 +02:00
|
|
|
[ext_resource type="Script" path="res://VesselDeliveryField.gd" id="26"]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
|
|
|
|
[sub_resource type="ShaderMaterial" id="1"]
|
|
|
|
|
shader = ExtResource("5")
|
|
|
|
|
shader_parameter/camera_pos = Vector2(0, 0)
|
|
|
|
|
shader_parameter/camera_zoom = 1.0
|
|
|
|
|
shader_parameter/viewport_size = Vector2(720, 1280)
|
|
|
|
|
shader_parameter/cell_size = 60.0
|
|
|
|
|
shader_parameter/bg_color = Color(0.02, 0.02, 0.08, 1)
|
|
|
|
|
|
|
|
|
|
[node name="Main" type="Node2D"]
|
|
|
|
|
script = ExtResource("3")
|
|
|
|
|
|
|
|
|
|
[node name="BackgroundLayer" type="CanvasLayer" parent="."]
|
|
|
|
|
layer = -10
|
|
|
|
|
|
|
|
|
|
[node name="Starfield" type="ColorRect" parent="BackgroundLayer"]
|
|
|
|
|
material = SubResource("1")
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchors_preset = 15
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
grow_horizontal = 2
|
|
|
|
|
grow_vertical = 2
|
|
|
|
|
script = ExtResource("1")
|
|
|
|
|
|
|
|
|
|
[node name="Fleet" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("2")
|
|
|
|
|
|
|
|
|
|
[node name="Camera2D" type="Camera2D" parent="."]
|
|
|
|
|
position = Vector2(0, 0)
|
|
|
|
|
zoom = Vector2(1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="EnemySpawner" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("4")
|
|
|
|
|
|
|
|
|
|
[node name="ExplorationTracker" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("6")
|
|
|
|
|
|
|
|
|
|
[node name="AsteroidField" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("7")
|
|
|
|
|
|
|
|
|
|
[node name="PlanetField" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("11")
|
|
|
|
|
|
|
|
|
|
[node name="BuildingField" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("14")
|
|
|
|
|
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
[node name="TransporterField" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("23")
|
|
|
|
|
|
2026-08-13 21:39:05 +02:00
|
|
|
[node name="VesselDeliveryField" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("26")
|
|
|
|
|
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
[node name="BuildController" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("15")
|
|
|
|
|
|
|
|
|
|
[node name="LandingController" type="Node2D" parent="."]
|
|
|
|
|
script = ExtResource("12")
|
|
|
|
|
|
|
|
|
|
[node name="UI" type="CanvasLayer" parent="."]
|
|
|
|
|
layer = 1
|
|
|
|
|
|
|
|
|
|
[node name="ResourceCounter" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 28
|
|
|
|
|
offset_top = 24
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = 320
|
|
|
|
|
offset_bottom = 92
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("16")
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
digit_height = 60.0
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
2026-08-13 21:07:35 +02:00
|
|
|
[node name="OreCaption" type="Label" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 28
|
|
|
|
|
offset_top = 22
|
|
|
|
|
offset_right = 120
|
|
|
|
|
offset_bottom = 48
|
|
|
|
|
theme_override_font_sizes/font_size = 18
|
|
|
|
|
text = "ORE"
|
|
|
|
|
|
|
|
|
|
[node name="GasCounter" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_left = 294
|
2026-08-13 21:07:35 +02:00
|
|
|
offset_top = 24
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_right = 468
|
2026-08-13 21:07:35 +02:00
|
|
|
offset_bottom = 92
|
|
|
|
|
script = ExtResource("25")
|
|
|
|
|
digit_height = 60.0
|
|
|
|
|
|
|
|
|
|
[node name="GasCaption" type="Label" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_left = 294
|
2026-08-13 21:07:35 +02:00
|
|
|
offset_top = 22
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_right = 380
|
2026-08-13 21:07:35 +02:00
|
|
|
offset_bottom = 48
|
|
|
|
|
theme_override_font_sizes/font_size = 18
|
|
|
|
|
theme_override_colors/font_color = Color(0.85, 0.52, 1, 1)
|
|
|
|
|
text = "GAS"
|
|
|
|
|
|
2026-08-11 16:04:40 +02:00
|
|
|
[node name="CargoCounter" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 28
|
|
|
|
|
offset_top = 96
|
|
|
|
|
offset_right = 320
|
|
|
|
|
offset_bottom = 146
|
|
|
|
|
script = ExtResource("22")
|
|
|
|
|
digit_height = 42.0
|
|
|
|
|
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
[node name="PlanetNameLabel" type="Label" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 156
|
|
|
|
|
offset_right = 696
|
|
|
|
|
offset_bottom = 282
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="EnterAtmosphereButton" type="Control" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
|
|
|
|
offset_top = -720
|
|
|
|
|
offset_bottom = -572
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 3
|
|
|
|
|
|
|
|
|
|
[node name="BuildButton" type="Control" parent="UI"]
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
2026-08-13 20:49:15 +02:00
|
|
|
offset_top = 160
|
|
|
|
|
offset_bottom = 308
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 5
|
|
|
|
|
|
|
|
|
|
[node name="BuildActionButton" type="Control" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
2026-08-13 20:49:15 +02:00
|
|
|
offset_top = 324
|
|
|
|
|
offset_bottom = 472
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
|
|
|
|
[node name="BuildingActionButton" type="Control" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
|
|
|
|
offset_top = 488
|
|
|
|
|
offset_bottom = 636
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
2026-08-12 22:47:46 +02:00
|
|
|
[node name="HangarButton" type="Control" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
2026-08-13 20:49:15 +02:00
|
|
|
offset_top = 488
|
|
|
|
|
offset_bottom = 636
|
2026-08-12 22:47:46 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="TransferButton" type="Control" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
2026-08-13 20:49:15 +02:00
|
|
|
offset_top = 488
|
|
|
|
|
offset_bottom = 636
|
2026-08-12 13:07:52 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 14
|
|
|
|
|
glow_color = Color(1, 0.78, 0.25, 1)
|
|
|
|
|
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
[node name="MapButton" type="Control" parent="UI"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 0
|
|
|
|
|
|
|
|
|
|
[node name="KeyboardHintLabel" type="Label" parent="UI"]
|
|
|
|
|
visible = false
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 28
|
|
|
|
|
offset_right = 360
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = -120
|
|
|
|
|
theme_override_font_sizes/font_size = 36
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "WASD / arrows move Q / E pivot wheel zoom"
|
|
|
|
|
|
|
|
|
|
[node name="Joystick" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 424
|
|
|
|
|
offset_top = -424
|
|
|
|
|
offset_bottom = -24
|
|
|
|
|
script = ExtResource("13")
|
|
|
|
|
|
|
|
|
|
[node name="PivotCCWButton" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -344
|
|
|
|
|
offset_right = -196
|
|
|
|
|
offset_top = -172
|
|
|
|
|
offset_bottom = -24
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 7
|
|
|
|
|
|
|
|
|
|
[node name="PivotCWButton" type="Control" parent="UI"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = -172
|
|
|
|
|
offset_bottom = -24
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 6
|
|
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="WorldMap" type="Control" parent="UI" groups=["modal_menus"]]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
visible = false
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
script = ExtResource("8")
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/WorldMap"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.96)
|
|
|
|
|
|
|
|
|
|
[node name="MapContent" type="Node2D" parent="UI/WorldMap"]
|
|
|
|
|
script = ExtResource("9")
|
|
|
|
|
|
|
|
|
|
[node name="RecenterButton" type="Control" parent="UI/WorldMap"]
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = 172
|
|
|
|
|
offset_top = -620
|
|
|
|
|
offset_bottom = -472
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
|
|
|
|
[node name="CloseButton" type="Control" parent="UI/WorldMap"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="BuildMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
visible = false
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 70
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 196
|
|
|
|
|
text = "Build"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="StatusLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 206
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 330
|
|
|
|
|
theme_override_font_sizes/font_size = 40
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="MothershipButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = -204
|
|
|
|
|
offset_right = -76
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = -172
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 8
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="MothershipLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -290
|
|
|
|
|
offset_right = 10
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_top = -166
|
|
|
|
|
offset_bottom = -100
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Mothership"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="MothershipCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = -200
|
|
|
|
|
offset_right = -80
|
|
|
|
|
offset_top = -96
|
|
|
|
|
offset_bottom = -44
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 20
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
digit_height = 40.0
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
|
|
|
|
[node name="CrafterButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = 76
|
|
|
|
|
offset_right = 204
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = -172
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 9
|
|
|
|
|
glow_color = Color(1, 0.72, 0.25, 1)
|
|
|
|
|
|
|
|
|
|
[node name="CrafterLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -10
|
|
|
|
|
offset_right = 290
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_top = -166
|
|
|
|
|
offset_bottom = -100
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Ship Crafter"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="CrafterCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = 80
|
|
|
|
|
offset_right = 200
|
|
|
|
|
offset_top = -96
|
|
|
|
|
offset_bottom = -44
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 12
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
digit_height = 40.0
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
|
|
|
|
[node name="CommandButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = -204
|
|
|
|
|
offset_right = -76
|
|
|
|
|
offset_top = -10
|
|
|
|
|
offset_bottom = 118
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 10
|
|
|
|
|
glow_color = Color(0.55, 0.6, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="CommandLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -290
|
|
|
|
|
offset_right = 10
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_top = 124
|
|
|
|
|
offset_bottom = 190
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Command Center"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="CommandCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = -200
|
|
|
|
|
offset_right = -80
|
|
|
|
|
offset_top = 194
|
|
|
|
|
offset_bottom = 246
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 15
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
digit_height = 40.0
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
|
|
|
|
[node name="ExtractorButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = 76
|
|
|
|
|
offset_right = 204
|
|
|
|
|
offset_top = -10
|
|
|
|
|
offset_bottom = 118
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 11
|
|
|
|
|
glow_color = Color(0, 0.62, 0.7, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ExtractorLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -10
|
|
|
|
|
offset_right = 290
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_top = 124
|
|
|
|
|
offset_bottom = 190
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Extractor"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ExtractorCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
offset_left = 80
|
|
|
|
|
offset_right = 200
|
|
|
|
|
offset_top = 194
|
|
|
|
|
offset_bottom = 246
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 25
|
Transport Hub building
Forgejo #18, part 5 of #12. The building only - the vessels that do the
hauling are #19. Placeable, costed at 30, gated behind a new "Freight
Handling" research node hanging off Logistics, with its own info popup,
build-menu glyph and map marker.
Drawn as an octagonal dock ring with berth arms and a squared-off freight
core: deliberately radial-but-flat so it does not read as a small
mothership, which is the only structure with swept arms. Its stationed
transports are NeonPiece children of one rotating holder, per #10 - the
geometry is rasterised once and only the holder's rotation changes, so
the traffic costs no redraws.
Building._draw()'s match has a catch-all that renders anything
unrecognised as a ship crafter, so a missing case is silent and looks
almost right. The test checks for the hub's own _hub_traffic holder
rather than trusting that something plausible appeared - which caught
exactly that: a _ready() patch had silently not applied and the hub was
rendering through the crafter branch.
The build menu grew a third row. Every button, label and price moved:
the old row occupied 332px against a 372px pitch, and three of those do
not fit above a 1280px screen. Rows are now shorter (128px buttons, 40px
price digits) at a 290px pitch, ending at y=1176. Rendered and looked at
- the first attempt tightened the pitch alone and left every price
overlapping the row beneath it, which no headless test would have seen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 17:45:07 +02:00
|
|
|
digit_height = 40.0
|
|
|
|
|
|
|
|
|
|
[node name="TransportHubButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -64
|
|
|
|
|
offset_right = 64
|
|
|
|
|
offset_top = 280
|
|
|
|
|
offset_bottom = 408
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 12
|
|
|
|
|
glow_color = Color(0.95, 0.55, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[node name="TransportHubLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -150
|
|
|
|
|
offset_right = 150
|
|
|
|
|
offset_top = 414
|
|
|
|
|
offset_bottom = 480
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Transport Hub"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="TransportHubCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -60
|
|
|
|
|
offset_right = 60
|
|
|
|
|
offset_top = 484
|
|
|
|
|
offset_bottom = 536
|
|
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 30
|
|
|
|
|
digit_height = 40.0
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="ShipLabButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = 76
|
|
|
|
|
offset_right = 204
|
|
|
|
|
offset_top = 280
|
|
|
|
|
offset_bottom = 408
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 13
|
|
|
|
|
glow_color = Color(0.55, 0.95, 0.9, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ShipLabLabel" type="Label" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -10
|
|
|
|
|
offset_right = 290
|
|
|
|
|
offset_top = 414
|
|
|
|
|
offset_bottom = 480
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Ship Lab"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ShipLabCost" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = 80
|
|
|
|
|
offset_right = 200
|
|
|
|
|
offset_top = 484
|
|
|
|
|
offset_bottom = 536
|
|
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 35
|
|
|
|
|
digit_height = 40.0
|
|
|
|
|
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
[node name="CloseButton" type="Control" parent="UI/BuildMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="InfoPopup" type="Control" parent="UI/BuildMenu" groups=["modal_menus"]]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
visible = false
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Dim" type="ColorRect" parent="UI/BuildMenu/InfoPopup"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.01, 0.01, 0.03, 0.55)
|
|
|
|
|
|
|
|
|
|
[node name="Panel" type="Control" parent="UI/BuildMenu/InfoPopup"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -352
|
|
|
|
|
offset_right = 352
|
|
|
|
|
offset_top = -600
|
|
|
|
|
offset_bottom = 600
|
|
|
|
|
script = ExtResource("20")
|
|
|
|
|
glow_color = Color(0, 0.62, 0.7, 1)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/BuildMenu/InfoPopup/Panel"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 44
|
|
|
|
|
offset_right = -44
|
|
|
|
|
offset_top = 30
|
|
|
|
|
offset_bottom = 150
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="MessageLabel" type="Label" parent="UI/BuildMenu/InfoPopup/Panel"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 44
|
|
|
|
|
offset_right = -44
|
|
|
|
|
offset_top = 160
|
|
|
|
|
offset_bottom = -440
|
|
|
|
|
theme_override_font_sizes/font_size = 48
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
vertical_alignment = 1
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
|
|
|
|
|
[node name="CostNumber" type="Control" parent="UI/BuildMenu/InfoPopup/Panel"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -70
|
|
|
|
|
offset_right = 90
|
|
|
|
|
offset_top = -424
|
|
|
|
|
offset_bottom = -334
|
|
|
|
|
script = ExtResource("19")
|
|
|
|
|
amount = 0
|
|
|
|
|
digit_height = 78.0
|
|
|
|
|
|
|
|
|
|
[node name="BuildButton" type="Control" parent="UI/BuildMenu/InfoPopup/Panel"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -200
|
|
|
|
|
offset_right = -40
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = -140
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 5
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="CloseButton" type="Control" parent="UI/BuildMenu/InfoPopup/Panel"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 40
|
|
|
|
|
offset_right = 200
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = -140
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
glow_color = Color(0, 0.62, 0.7, 1)
|
|
|
|
|
|
2026-08-12 22:47:46 +02:00
|
|
|
[node name="HangarMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
|
|
|
|
visible = false
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 60
|
|
|
|
|
offset_right = -210
|
|
|
|
|
offset_bottom = 170
|
|
|
|
|
text = "Hangar"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ListLabel" type="Label" parent="UI/HangarMenu"]
|
2026-08-12 23:08:43 +02:00
|
|
|
visible = false
|
2026-08-12 22:47:46 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 32
|
|
|
|
|
offset_top = 200
|
|
|
|
|
offset_right = -32
|
|
|
|
|
offset_bottom = -420
|
|
|
|
|
theme_override_font_sizes/font_size = 30
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="StatusLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 32
|
|
|
|
|
offset_top = -410
|
|
|
|
|
offset_right = -32
|
|
|
|
|
offset_bottom = -300
|
|
|
|
|
theme_override_font_sizes/font_size = 30
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="NextButton" type="Control" parent="UI/HangarMenu"]
|
2026-08-12 23:08:43 +02:00
|
|
|
visible = false
|
2026-08-12 22:47:46 +02:00
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -230
|
|
|
|
|
offset_right = -110
|
|
|
|
|
offset_top = -280
|
|
|
|
|
offset_bottom = -160
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 6
|
|
|
|
|
glow_color = Color(0.55, 0.95, 0.9, 1)
|
|
|
|
|
|
|
|
|
|
[node name="CrewButton" type="Control" parent="UI/HangarMenu"]
|
2026-08-12 23:08:43 +02:00
|
|
|
visible = false
|
2026-08-12 22:47:46 +02:00
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 110
|
|
|
|
|
offset_right = 230
|
|
|
|
|
offset_top = -280
|
|
|
|
|
offset_bottom = -160
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="HintLabel" type="Label" parent="UI/HangarMenu"]
|
2026-08-12 23:08:43 +02:00
|
|
|
visible = false
|
2026-08-12 22:47:46 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = -150
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = -60
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Next Crew"
|
|
|
|
|
|
2026-08-12 23:08:43 +02:00
|
|
|
[node name="AvailableTitle" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_top = 190
|
|
|
|
|
offset_bottom = 240
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
|
|
|
|
text = "AVAILABLE — TAP TO CREW"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="AvailableInterceptor" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -250
|
|
|
|
|
offset_right = -130
|
|
|
|
|
offset_top = 255
|
|
|
|
|
offset_bottom = 375
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
|
|
|
|
[node name="AvailableInterceptorLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -300
|
|
|
|
|
offset_right = -80
|
|
|
|
|
offset_top = 380
|
|
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="AvailableShield" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -60
|
|
|
|
|
offset_right = 60
|
|
|
|
|
offset_top = 255
|
|
|
|
|
offset_bottom = 375
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.8, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="AvailableShieldLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -110
|
|
|
|
|
offset_right = 110
|
|
|
|
|
offset_top = 380
|
|
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="AvailableTransporter" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 130
|
|
|
|
|
offset_right = 250
|
|
|
|
|
offset_top = 255
|
|
|
|
|
offset_bottom = 375
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 12
|
|
|
|
|
glow_color = Color(0.95, 0.55, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[node name="AvailableTransporterLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 80
|
|
|
|
|
offset_right = 300
|
|
|
|
|
offset_top = 380
|
|
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="FleetTitle" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_top = 500
|
|
|
|
|
offset_bottom = 550
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
|
|
|
|
text = "FLEET — TAP TO STORE"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="FleetInterceptor" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -250
|
|
|
|
|
offset_right = -130
|
|
|
|
|
offset_top = 565
|
|
|
|
|
offset_bottom = 685
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
|
|
|
|
[node name="FleetInterceptorLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -300
|
|
|
|
|
offset_right = -80
|
|
|
|
|
offset_top = 690
|
|
|
|
|
offset_bottom = 770
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="FleetShield" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -60
|
|
|
|
|
offset_right = 60
|
|
|
|
|
offset_top = 565
|
|
|
|
|
offset_bottom = 685
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.8, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="FleetShieldLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -110
|
|
|
|
|
offset_right = 110
|
|
|
|
|
offset_top = 690
|
|
|
|
|
offset_bottom = 770
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="FleetTransporter" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 130
|
|
|
|
|
offset_right = 250
|
|
|
|
|
offset_top = 565
|
|
|
|
|
offset_bottom = 685
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 12
|
|
|
|
|
glow_color = Color(0.95, 0.55, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[node name="FleetTransporterLabel" type="Label" parent="UI/HangarMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 80
|
|
|
|
|
offset_right = 300
|
|
|
|
|
offset_top = 690
|
|
|
|
|
offset_bottom = 770
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 22:47:46 +02:00
|
|
|
[node name="CloseButton" type="Control" parent="UI/HangarMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="LabMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
|
|
|
|
visible = false
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/LabMenu"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 36
|
|
|
|
|
offset_right = -200
|
|
|
|
|
offset_bottom = 166
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
text = "Ship Lab"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="Bar" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 180
|
|
|
|
|
offset_right = 520
|
|
|
|
|
offset_bottom = 260
|
|
|
|
|
script = ExtResource("24")
|
|
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="VesselA" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -290
|
|
|
|
|
offset_right = -170
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 274
|
|
|
|
|
offset_bottom = 394
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="VesselB" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -60
|
|
|
|
|
offset_right = 60
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 274
|
|
|
|
|
offset_bottom = 394
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.8, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="VesselC" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 170
|
|
|
|
|
offset_right = 290
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 274
|
|
|
|
|
offset_bottom = 394
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 12
|
|
|
|
|
glow_color = Color(0.95, 0.55, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[node name="VesselLabel" type="Label" parent="UI/LabMenu"]
|
2026-08-13 16:45:08 +02:00
|
|
|
visible = false
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 402
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
offset_right = -24
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_bottom = 460
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
theme_override_font_sizes/font_size = 34
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
2026-08-13 16:45:08 +02:00
|
|
|
[node name="VesselALabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -330
|
|
|
|
|
offset_right = -130
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 376
|
2026-08-13 16:45:08 +02:00
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Interceptor"
|
|
|
|
|
|
|
|
|
|
[node name="VesselBLabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -100
|
|
|
|
|
offset_right = 100
|
|
|
|
|
offset_top = 400
|
|
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Shield"
|
|
|
|
|
|
|
|
|
|
[node name="VesselCLabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 130
|
|
|
|
|
offset_right = 330
|
|
|
|
|
offset_top = 400
|
|
|
|
|
offset_bottom = 460
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Transporter"
|
|
|
|
|
|
2026-08-13 20:13:32 +02:00
|
|
|
[node name="VesselUpgradeSeparator" type="ColorRect" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 48
|
|
|
|
|
offset_top = 462
|
|
|
|
|
offset_right = -48
|
|
|
|
|
offset_bottom = 466
|
|
|
|
|
color = Color(0.25, 0.85, 1, 0.6)
|
|
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="UpgradeList" type="Label" parent="UI/LabMenu"]
|
2026-08-13 16:45:08 +02:00
|
|
|
visible = false
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 32
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 470
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
offset_right = -32
|
|
|
|
|
offset_bottom = -470
|
|
|
|
|
theme_override_font_sizes/font_size = 30
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="DetailLabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 32
|
|
|
|
|
offset_top = -460
|
|
|
|
|
offset_right = -32
|
|
|
|
|
offset_bottom = -330
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="StatusLabel" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 32
|
|
|
|
|
offset_top = -324
|
|
|
|
|
offset_right = -32
|
|
|
|
|
offset_bottom = -256
|
|
|
|
|
theme_override_font_sizes/font_size = 30
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="NextButton" type="Control" parent="UI/LabMenu"]
|
2026-08-13 16:45:08 +02:00
|
|
|
visible = false
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -230
|
|
|
|
|
offset_right = -110
|
|
|
|
|
offset_top = -240
|
|
|
|
|
offset_bottom = -120
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 6
|
|
|
|
|
glow_color = Color(0.55, 0.95, 0.9, 1)
|
|
|
|
|
|
|
|
|
|
[node name="BuyButton" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 110
|
|
|
|
|
offset_right = 230
|
|
|
|
|
offset_top = -240
|
|
|
|
|
offset_bottom = -120
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 4
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="HintLabel" type="Label" parent="UI/LabMenu"]
|
2026-08-13 16:45:08 +02:00
|
|
|
visible = false
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = -110
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = -20
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Next upgrade Buy"
|
|
|
|
|
|
2026-08-13 16:45:08 +02:00
|
|
|
[node name="Upgrade0" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -240
|
|
|
|
|
offset_right = -120
|
|
|
|
|
offset_top = 470
|
|
|
|
|
offset_bottom = 580
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 13
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade0Label" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -310
|
|
|
|
|
offset_right = -50
|
|
|
|
|
offset_top = 585
|
|
|
|
|
offset_bottom = 655
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade1" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 120
|
|
|
|
|
offset_right = 240
|
|
|
|
|
offset_top = 470
|
|
|
|
|
offset_bottom = 580
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 13
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade1Label" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 50
|
|
|
|
|
offset_right = 310
|
|
|
|
|
offset_top = 585
|
|
|
|
|
offset_bottom = 655
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade2" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -240
|
|
|
|
|
offset_right = -120
|
|
|
|
|
offset_top = 660
|
|
|
|
|
offset_bottom = 765
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 13
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade2Label" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -310
|
|
|
|
|
offset_right = -50
|
|
|
|
|
offset_top = 770
|
|
|
|
|
offset_bottom = 815
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade3" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 120
|
|
|
|
|
offset_right = 240
|
|
|
|
|
offset_top = 660
|
|
|
|
|
offset_bottom = 765
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 13
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="Upgrade3Label" type="Label" parent="UI/LabMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 50
|
|
|
|
|
offset_right = 310
|
|
|
|
|
offset_top = 770
|
|
|
|
|
offset_bottom = 815
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="CloseButton" type="Control" parent="UI/LabMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
glow_color = Color(0.55, 0.95, 0.9, 1)
|
|
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="CraftMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
visible = false
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/CraftMenu"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 36
|
|
|
|
|
offset_right = -200
|
|
|
|
|
offset_bottom = 166
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
text = "Build a ship"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="Bar" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 180
|
|
|
|
|
offset_right = 520
|
|
|
|
|
offset_bottom = 260
|
|
|
|
|
script = ExtResource("24")
|
|
|
|
|
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
[node name="StatusLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 274
|
2026-08-12 22:47:46 +02:00
|
|
|
offset_right = -200
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_bottom = 420
|
|
|
|
|
theme_override_font_sizes/font_size = 36
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="InterceptorButton" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
offset_left = -234
|
|
|
|
|
offset_right = -86
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 60
|
|
|
|
|
offset_bottom = 208
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
|
|
|
|
|
[node name="InterceptorLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
offset_left = -300
|
|
|
|
|
offset_right = -20
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 216
|
|
|
|
|
offset_bottom = 296
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
theme_override_font_sizes/font_size = 32
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
text = "Interceptor"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
[node name="TransporterButton" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = 86
|
|
|
|
|
offset_right = 234
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 60
|
|
|
|
|
offset_bottom = 208
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 12
|
|
|
|
|
glow_color = Color(0.95, 0.55, 0.85, 1)
|
|
|
|
|
|
|
|
|
|
[node name="TransporterLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = 20
|
|
|
|
|
offset_right = 300
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 216
|
|
|
|
|
offset_bottom = 296
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
theme_override_font_sizes/font_size = 32
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Transporter"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
[node name="ShieldButton" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -74
|
|
|
|
|
offset_right = 74
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = -200
|
|
|
|
|
offset_bottom = -52
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.45, 0.8, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ShieldLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -160
|
|
|
|
|
offset_right = 160
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = -44
|
|
|
|
|
offset_bottom = 16
|
Ship Lab: per-vessel research, and the shield vessel
Forgejo #5. A new building gated behind a "Vessel Science" research
node. Its own screen upgrades each vessel type - weapon, movement,
shield and freight - and unlocks the shield vessel, which the ship
crafter can then build.
Vessel research is deliberately NOT more nodes in the mothership tree:
that tree gates what may be built at all and is a strategic spine, while
these are repeatable tuning on vessels already owned. Levels cost
base * (level + 1), so the third point in something is not the price of
the first. Upgrades are read live rather than baked in at build time, so
researching one improves the ships already flying.
The shield is personal, not a bubble: it absorbs a hit that would
destroy the vessel - ships have no health, contact kills - and is then
down until it cycles. Its ring is a NeonPiece child toggled with
`visible` per #10, not a redraw of the hull.
The build menu now holds six entries across three rows, which the #21
repacking already handles.
Enemies still have no weapon, so "blocks shots" has nothing to block
yet; that is filed separately rather than widened into this ticket.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:31:49 +02:00
|
|
|
theme_override_font_sizes/font_size = 32
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Shield Vessel"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 22:47:46 +02:00
|
|
|
[node name="QueueLabel" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -200
|
|
|
|
|
offset_right = -10
|
|
|
|
|
offset_top = -450
|
|
|
|
|
offset_bottom = -390
|
|
|
|
|
theme_override_font_sizes/font_size = 26
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = "Queue"
|
|
|
|
|
|
|
|
|
|
[node name="QueueDetail" type="Label" parent="UI/CraftMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = -150
|
|
|
|
|
offset_bottom = -30
|
|
|
|
|
theme_override_font_sizes/font_size = 26
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
text = ""
|
|
|
|
|
|
|
|
|
|
[node name="QueueSlot0" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -140
|
|
|
|
|
offset_right = -30
|
|
|
|
|
offset_top = -380
|
|
|
|
|
offset_bottom = -270
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="QueueSlot1" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -140
|
|
|
|
|
offset_right = -30
|
|
|
|
|
offset_top = -262
|
|
|
|
|
offset_bottom = -152
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="QueueSlot2" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -140
|
|
|
|
|
offset_right = -30
|
|
|
|
|
offset_top = -144
|
|
|
|
|
offset_bottom = -34
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="QueueSlot3" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -140
|
|
|
|
|
offset_right = -30
|
|
|
|
|
offset_top = -26
|
|
|
|
|
offset_bottom = 84
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 2
|
|
|
|
|
glow_color = Color(0.25, 0.85, 1, 1)
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="CloseButton" type="Control" parent="UI/CraftMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
|
|
|
|
|
[node name="TransferMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
|
|
|
|
visible = false
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 36
|
|
|
|
|
offset_right = -200
|
|
|
|
|
offset_bottom = 166
|
|
|
|
|
text = "Move ore"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="Bar" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 180
|
|
|
|
|
offset_right = 520
|
|
|
|
|
offset_bottom = 260
|
|
|
|
|
script = ExtResource("24")
|
|
|
|
|
|
|
|
|
|
[node name="StatusLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 274
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 396
|
|
|
|
|
theme_override_font_sizes/font_size = 34
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ToBuildingLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 376
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_right = -24
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_bottom = 426
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
2026-08-12 13:07:52 +02:00
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ToBuildingBatchButton" type="Control" parent="UI/TransferMenu"]
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_left = -184
|
|
|
|
|
offset_right = -36
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 438
|
|
|
|
|
offset_bottom = 586
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 3
|
2026-08-12 13:07:52 +02:00
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ToBuildingBatchLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -230
|
|
|
|
|
offset_right = 10
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 592
|
|
|
|
|
offset_bottom = 638
|
|
|
|
|
theme_override_font_sizes/font_size = 24
|
2026-08-12 13:07:52 +02:00
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ToBuildingAllButton" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-13 23:02:09 +02:00
|
|
|
offset_left = -180
|
|
|
|
|
offset_right = -32
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 438
|
|
|
|
|
offset_bottom = 586
|
2026-08-12 13:07:52 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 3
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ToBuildingAllLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-13 23:02:09 +02:00
|
|
|
offset_left = -230
|
|
|
|
|
offset_right = 10
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 592
|
|
|
|
|
offset_bottom = 638
|
|
|
|
|
theme_override_font_sizes/font_size = 24
|
|
|
|
|
text = "Unload all"
|
2026-08-12 13:07:52 +02:00
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ToFleetLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 680
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_right = -24
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_bottom = 730
|
|
|
|
|
theme_override_font_sizes/font_size = 28
|
2026-08-12 13:07:52 +02:00
|
|
|
text = ""
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="ToFleetBatchButton" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -184
|
|
|
|
|
offset_right = -36
|
|
|
|
|
offset_top = 756
|
|
|
|
|
offset_bottom = 904
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 4
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
glow_color = Color(1, 0.78, 0.25, 1)
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="ToFleetBatchLabel" type="Label" parent="UI/TransferMenu"]
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_left = -230
|
|
|
|
|
offset_right = 10
|
|
|
|
|
offset_top = 910
|
|
|
|
|
offset_bottom = 962
|
|
|
|
|
theme_override_font_sizes/font_size = 30
|
|
|
|
|
text = ""
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="ToFleetAllButton" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-13 23:02:09 +02:00
|
|
|
offset_left = 32
|
|
|
|
|
offset_right = 180
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 438
|
|
|
|
|
offset_bottom = 586
|
2026-08-12 13:07:52 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 4
|
|
|
|
|
glow_color = Color(1, 0.78, 0.25, 1)
|
|
|
|
|
|
|
|
|
|
[node name="ToFleetAllLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
2026-08-13 23:02:09 +02:00
|
|
|
offset_left = 10
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_right = 230
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 592
|
|
|
|
|
offset_bottom = 638
|
|
|
|
|
theme_override_font_sizes/font_size = 24
|
|
|
|
|
text = "Load all"
|
2026-08-12 13:07:52 +02:00
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="CloseButton" type="Control" parent="UI/TransferMenu"]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
2026-08-12 13:07:52 +02:00
|
|
|
glow_color = Color(1, 0.78, 0.25, 1)
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
|
2026-08-13 22:17:24 +02:00
|
|
|
[node name="GasToBuildingButton" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = -180
|
|
|
|
|
offset_right = -32
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 742
|
|
|
|
|
offset_bottom = 890
|
2026-08-13 22:17:24 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 25
|
|
|
|
|
glow_color = Color(0.85, 0.52, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="GasToFleetButton" type="Control" parent="UI/TransferMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
offset_left = 32
|
|
|
|
|
offset_right = 180
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 742
|
|
|
|
|
offset_bottom = 890
|
2026-08-13 22:17:24 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 25
|
|
|
|
|
glow_color = Color(0.85, 0.52, 1, 1)
|
|
|
|
|
|
|
|
|
|
[node name="GasTransferLabel" type="Label" parent="UI/TransferMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
2026-08-13 23:25:46 +02:00
|
|
|
offset_top = 896
|
|
|
|
|
offset_bottom = 942
|
|
|
|
|
text = "Unload all Load all"
|
2026-08-13 22:17:24 +02:00
|
|
|
horizontal_alignment = 1
|
|
|
|
|
theme_override_colors/font_color = Color(0.85, 0.52, 1, 1)
|
|
|
|
|
theme_override_font_sizes/font_size = 22
|
|
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="FormationMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded
infinite world: tap/joystick steering, pinch zoom, formation pivoting,
planet landings, an ore economy with extractors and haulers, and player
built structures (mothership, ship crafter, command centre).
All art is hand-drawn with draw_* calls rather than textures, and the
backgrounds are camera-relative shaders so they stay precise at large
world coordinates.
Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot
tooling that renders real frames through Xvfb and Mesa softpipe, since
--headless has no GPU.
Excluded from version control: .godot/ (import cache, and it holds
export credentials), builds/, android/build/ and packaged APKs - all
regenerable, and ~325 MB combined.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:41:58 +02:00
|
|
|
visible = false
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/FormationMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/FormationMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24
|
|
|
|
|
offset_top = 70
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_bottom = 220
|
|
|
|
|
theme_override_font_sizes/font_size = 44
|
|
|
|
|
autowrap_mode = 2
|
|
|
|
|
text = "Fleet formation - drag to arrange"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="Editor" type="Control" parent="UI/FormationMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 0.5
|
|
|
|
|
anchor_bottom = 0.5
|
|
|
|
|
offset_left = -300
|
|
|
|
|
offset_right = 300
|
|
|
|
|
offset_top = -300
|
|
|
|
|
offset_bottom = 300
|
|
|
|
|
script = ExtResource("17")
|
|
|
|
|
|
|
|
|
|
[node name="ResetButton" type="Control" parent="UI/FormationMenu"]
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -74
|
|
|
|
|
offset_right = 74
|
|
|
|
|
offset_top = -270
|
|
|
|
|
offset_bottom = -122
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 3
|
|
|
|
|
|
|
|
|
|
[node name="ResetLabel" type="Label" parent="UI/FormationMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
|
|
|
|
anchor_right = 0.5
|
|
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
offset_left = -180
|
|
|
|
|
offset_right = 180
|
|
|
|
|
offset_top = -114
|
|
|
|
|
offset_bottom = -8
|
|
|
|
|
theme_override_font_sizes/font_size = 60
|
|
|
|
|
text = "Reset"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
|
|
|
|
[node name="CloseButton" type="Control" parent="UI/FormationMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172
|
|
|
|
|
offset_right = -24
|
|
|
|
|
offset_top = 24
|
|
|
|
|
offset_bottom = 172
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
|
|
|
|
|
[node name="FadeOverlay" type="CanvasLayer" parent="."]
|
|
|
|
|
layer = 10
|
|
|
|
|
|
|
|
|
|
[node name="FadeRect" type="ColorRect" parent="FadeOverlay"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchors_preset = 15
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
grow_horizontal = 2
|
|
|
|
|
grow_vertical = 2
|
|
|
|
|
color = Color(0, 0, 0, 0)
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
|
2026-08-11 20:17:58 +02:00
|
|
|
[node name="SkillMenu" type="Control" parent="UI" groups=["modal_menus"]]
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
visible = false
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
|
|
|
|
|
[node name="Backdrop" type="ColorRect" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
|
|
|
|
color = Color(0.03, 0.03, 0.08, 0.94)
|
|
|
|
|
|
|
|
|
|
[node name="TitleLabel" type="Label" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = 24.0
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 36.0
|
|
|
|
|
offset_right = -200.0
|
|
|
|
|
offset_bottom = 166.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
text = "Research"
|
|
|
|
|
horizontal_alignment = 1
|
|
|
|
|
|
2026-08-12 13:07:52 +02:00
|
|
|
[node name="Bar" type="Control" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
offset_left = 24.0
|
|
|
|
|
offset_top = 180.0
|
|
|
|
|
offset_right = 520.0
|
|
|
|
|
offset_bottom = 260.0
|
|
|
|
|
script = ExtResource("24")
|
|
|
|
|
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
[node name="Tree" type="Control" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
2026-08-13 16:25:41 +02:00
|
|
|
clip_contents = true
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
anchor_right = 1.0
|
2026-08-11 20:17:58 +02:00
|
|
|
anchor_bottom = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_left = 24.0
|
2026-08-12 13:07:52 +02:00
|
|
|
offset_top = 274.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = -24.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_bottom = -620.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
script = ExtResource("21")
|
|
|
|
|
|
|
|
|
|
[node name="DetailLabel" type="Label" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
2026-08-11 20:17:58 +02:00
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_left = 32.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_top = -610.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = -32.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_bottom = -462.0
|
|
|
|
|
theme_override_font_sizes/font_size = 34
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
2026-08-11 20:17:58 +02:00
|
|
|
text = ""
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
|
|
|
|
|
[node name="CostNumber" type="Control" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_left = 0.5
|
2026-08-11 20:17:58 +02:00
|
|
|
anchor_top = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
anchor_right = 0.5
|
2026-08-11 20:17:58 +02:00
|
|
|
anchor_bottom = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_left = -64.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_top = -456.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = 76.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_bottom = -392.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
script = ExtResource("19")
|
|
|
|
|
digit_height = 52.0
|
|
|
|
|
|
|
|
|
|
[node name="StatusLabel" type="Label" parent="UI/SkillMenu"]
|
|
|
|
|
mouse_filter = 2
|
|
|
|
|
anchor_right = 1.0
|
2026-08-11 20:17:58 +02:00
|
|
|
anchor_top = 1.0
|
|
|
|
|
anchor_bottom = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_left = 32.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_top = -386.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = -32.0
|
2026-08-11 20:17:58 +02:00
|
|
|
offset_bottom = -318.0
|
|
|
|
|
theme_override_font_sizes/font_size = 32
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
autowrap_mode = 2
|
|
|
|
|
horizontal_alignment = 1
|
2026-08-11 20:17:58 +02:00
|
|
|
text = ""
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
|
|
|
|
|
[node name="UnlockButton" type="Control" parent="UI/SkillMenu"]
|
|
|
|
|
anchor_left = 0.5
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
anchor_top = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
anchor_right = 0.5
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
anchor_bottom = 1.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_left = -74.0
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
offset_top = -304.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
offset_right = 74.0
|
Transporter vessels, an explicit store button, and bottom-anchored menus
Forgejo #19, part 6 of #12. Transporters are built at the ship crafter,
fly themselves to the nearest hub and wait there. When a building is
short of what its queue needs, the nearest idle transporter runs
hub -> mothership -> building -> hub. Ore leaves the bank when it is
loaded and lands in the building's stock on arrival, so what is drawn
and what happens are the same event - the extractor hauler's rule.
Production orders are now TYPED (interceptor / transporter) rather than
a bare count, since the crafter builds two different things. One at a
time is dispatched per building: without that, every idle transporter
chases the same shortfall and they all arrive carrying ore nobody needs.
Three fixes from play-testing feedback:
- Storing ore into a building is now a deliberate button press, not a
side effect of opening the menu.
- The mothership's load-ore controls were positioned from the TOP of the
screen, so on any viewport shorter than ~1300px the label fell off the
bottom. They are anchored to the bottom edge now, and the label had no
explicit font size so it inherited the theme's 78px and wrapped off
screen. Checked at 720x960 and 720x1280.
- The craft button looked live and did nothing. It was not the transport
work: BASE_FLEET_SIZE is 5 and a new game starts with exactly 5 ships,
so the fleet is at its cap from the first frame and every interceptor
order was refused. The button is now visibly disabled and says why.
The underlying balance (crafter useless until Wing Doctrine) is left
alone - that is a design call, not a bug to quietly change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 19:14:27 +02:00
|
|
|
offset_bottom = -156.0
|
Skill tree, node-based building animation, bigger UI, and a 19x faster test suite
Gameplay and UI
- Research tree at the mothership gates which structures can be built and
grants permanent fleet-capacity upgrades (GameState.SKILL_TREE,
SkillTreeView). Node depth is derived from prerequisites, so the layout
cannot drift out of step with the dependencies.
- Building info popup before committing to a build, with per-building cost
and description.
- Ship crafter redrawn as a space factory with an assembly animation;
mothership redrawn as a radial flagship; command centre as a plotting hub.
- Keyboard and mouse support (WASD, Q/E pivot, wheel zoom) for the web build.
- UI and font scaled up for phone use, via a custom Theme resource -
gui/theme/default_font_size does not reach the default theme.
- Asteroids no longer spawn on top of the fleet's start position.
- Fleet formation origin derived from the layout's own offsets rather than
the centroid, fixing the lurch when a lopsided formation started moving.
- Fleet.stop() brakes from the ship's TRUE motion (velocity +
fleet_velocity). Ship zeroes its velocity when seated in its slot even
while the anchor drags that slot forward, so braking from velocity alone
stopped the fleet dead instead of coasting - and whether it did depended
on the frame rate.
Animation architecture (issue #10)
- Buildings, projectiles and explosion VFX no longer animate by redrawing.
Static geometry is rasterised once in _draw(); moving parts are NeonPiece
children animated through node properties, which reuse the cached
geometry. Every NeonDraw call expands into four antialiased polylines, so
redrawing to move something re-tessellated all of it.
Test suite (issue #8): 1075s -> ~55s
- Runs from a copy on Termux's own filesystem. The project lives on
Android's FUSE bridge, read through proot, where load("res://Main.tscn")
alone cost 8.5s per test against ~2s natively - and nearly every test
loads it.
- Runs 6 tests at a time, in a single proot-distro login, with output
buffered per test and printed only on failure.
- --fixed-fps 60 pins delta instead of measuring the wall clock, so a test's
result no longer depends on how busy the machine is. Without it,
parallelism made two tests fail on 2 of 3 runs.
- A test passes only if it both exits 0 and prints ": PASS".
- 38 tests, green on three consecutive runs.
Bundles Carrois Gothic SC (Apache 2.0) with its licence text.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 15:00:41 +02:00
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 5
|
|
|
|
|
glow_color = Color(0.45, 0.9, 0.55, 1)
|
|
|
|
|
|
|
|
|
|
[node name="CloseButton" type="Control" parent="UI/SkillMenu"]
|
|
|
|
|
anchor_left = 1.0
|
|
|
|
|
anchor_right = 1.0
|
|
|
|
|
offset_left = -172.0
|
|
|
|
|
offset_top = 24.0
|
|
|
|
|
offset_right = -24.0
|
|
|
|
|
offset_bottom = 172.0
|
|
|
|
|
script = ExtResource("10")
|
|
|
|
|
icon = 1
|
|
|
|
|
glow_color = Color(0.55, 0.6, 1, 1)
|