test(client): retire the top-down visual suite, aim the Atlas ladder at land
The visual gate had stopped measuring anything: 30 of 32 scenarios
failed, and the two that passed were the worst result of the lot.
Deleted the 15 top-down scenarios (fog, HUD, dialogue, NPC, minimap,
cursor) and their goldens. They all failed at a near-uniform ~12%, and
that uniformity across unrelated scenes is one global cause -- the
ultrawide UI stretch moved every element. They cover the renderer the
cascade freezes until Phase 5, which will need its own tests anyway, so
re-baselining would only have blessed a deprecated layer nobody is
reviewing. Jeroen's call.
The remaining problem was the goldens that PASSED. atlas_GJ338Bd_Block
and atlas_GJ445c-m1_Chunk matched at 0.0% because capture and golden
were both blank -- the same "goldens have been measuring nothing" trap
e024cfb3f caught at Global, still live at the bottom of the ladder. The
cause is that every below-Global golden descends at jump_to(ZERO), and
world-metre zero is merely the origin of the region grid, not anywhere
chosen. So _setup_atlas_golden_shot now takes an optional world_center
(default ZERO -- existing goldens are untouched), and a new
atlas_GJ820Bc_land_* set walks Region through Chunk at ONE land point,
so the rungs can be read as a descent instead of five unrelated frames.
aliveness_probe prints the placement's world metres alongside its pixel
and survey cell, since that is the coordinate the Atlas actually
navigates in.
Recorded because it will be asked again: the ladder is anchored via a
CityPlacement, but that is a match record -- a pixel, an archetype, an
orientation -- not built geography. No settlement exists anywhere yet
and none is due before T-1207, so the empty deep rungs are the expected
state. What the ladder judges is the nature layer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@@ -64,7 +64,7 @@ help:
|
||||
@echo " make checklist-generate Validate checklists + print condition summary"
|
||||
@echo " make perf-baseline Run performance benchmarks and save baseline"
|
||||
@echo ""
|
||||
@echo " make screenshot Ad-hoc visual capture (SCENARIO=name, default: fog_3state)"
|
||||
@echo " make screenshot Ad-hoc visual capture (SCENARIO=name, default: atlas_GJ820Bc_Global)"
|
||||
@echo " make visual-movie Flow capture with contact sheet (FLOW=name)"
|
||||
@echo " make test-visual Run visual golden regression tests"
|
||||
@echo " make visual-update Regenerate visual goldens and stage for commit"
|
||||
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qlxaaip3fqic"
|
||||
path="res://.godot/imported/cursor_menu.png-03cbe8a063e08efcd4283ce76f668ea1.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/cursor_menu.png"
|
||||
dest_files=["res://.godot/imported/cursor_menu.png-03cbe8a063e08efcd4283ce76f668ea1.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://oqbx8gwq1xta"
|
||||
path="res://.godot/imported/dialogue_open.png-2e5a2dd99abe2817e4bb7ede8f83b0bf.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/dialogue_open.png"
|
||||
dest_files=["res://.godot/imported/dialogue_open.png-2e5a2dd99abe2817e4bb7ede8f83b0bf.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b2hctv70ar7al"
|
||||
path="res://.godot/imported/dialogue_with_monologue.png-5193b3824e2195b1c7ca00bc005f9026.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/dialogue_with_monologue.png"
|
||||
dest_files=["res://.godot/imported/dialogue_with_monologue.png-5193b3824e2195b1c7ca00bc005f9026.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bw4kxsno66sv3"
|
||||
path="res://.godot/imported/fog_3state.png-b0193a736de6756c27053a3db24f9a12.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_3state.png"
|
||||
dest_files=["res://.godot/imported/fog_3state.png-b0193a736de6756c27053a3db24f9a12.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 46 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://7ol3rcrpienc"
|
||||
path="res://.godot/imported/fog_boundary.png-7da06d227319f9c43ef7017ee082732a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_boundary.png"
|
||||
dest_files=["res://.godot/imported/fog_boundary.png-7da06d227319f9c43ef7017ee082732a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://fpncie7mnyay"
|
||||
path="res://.godot/imported/fog_boundary_replay.png-3e1acf3ef35450d1df230400b3003250.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_boundary_replay.png"
|
||||
dest_files=["res://.godot/imported/fog_boundary_replay.png-3e1acf3ef35450d1df230400b3003250.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 100 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://71e1yuyjdxn7"
|
||||
path="res://.godot/imported/fog_debug.png-7d563b17499f08fbb82ec57bcdcc0e68.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_debug.png"
|
||||
dest_files=["res://.godot/imported/fog_debug.png-7d563b17499f08fbb82ec57bcdcc0e68.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://2owpogcjnewr"
|
||||
path="res://.godot/imported/fog_diagonal.png-06416ee4adae921b884280dc73761ed3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_diagonal.png"
|
||||
dest_files=["res://.godot/imported/fog_diagonal.png-06416ee4adae921b884280dc73761ed3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 34 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dufvsap028rfw"
|
||||
path="res://.godot/imported/fog_live_hub.png-a2756ff6cb45af238cc0a32ba70a705a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_live_hub.png"
|
||||
dest_files=["res://.godot/imported/fog_live_hub.png-a2756ff6cb45af238cc0a32ba70a705a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dmqmnfrjrk1u"
|
||||
path="res://.godot/imported/fog_live_replay.png-4604646d390fbfac6491f513f667c5c6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_live_replay.png"
|
||||
dest_files=["res://.godot/imported/fog_live_replay.png-4604646d390fbfac6491f513f667c5c6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dgdt2rmql6hbb"
|
||||
path="res://.godot/imported/fog_theater_replay.png-ef10fe62d9da045193422127e48853ba.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_theater_replay.png"
|
||||
dest_files=["res://.godot/imported/fog_theater_replay.png-ef10fe62d9da045193422127e48853ba.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8weq3wp6tybx"
|
||||
path="res://.godot/imported/fog_zone_tint.png-5a5cd0f27eaf991e1b39709de687dcf4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/fog_zone_tint.png"
|
||||
dest_files=["res://.godot/imported/fog_zone_tint.png-5a5cd0f27eaf991e1b39709de687dcf4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c5r4tk4yafj2r"
|
||||
path="res://.godot/imported/hud_default.png-d3286d0b35f8bfaeab8436d9645c0c0d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/hud_default.png"
|
||||
dest_files=["res://.godot/imported/hud_default.png-d3286d0b35f8bfaeab8436d9645c0c0d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://0pym2n4nq12a"
|
||||
path="res://.godot/imported/minimap_stance.png-abbfd0259479cd17651bee48cdc7f7b8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/minimap_stance.png"
|
||||
dest_files=["res://.godot/imported/minimap_stance.png-abbfd0259479cd17651bee48cdc7f7b8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -1,40 +0,0 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cc5nmdpumq6t"
|
||||
path="res://.godot/imported/npc_in_fog.png-e8a24e029e5c640a7daee7d3f2838bdc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tests/golden/visual/npc_in_fog.png"
|
||||
dest_files=["res://.godot/imported/npc_in_fog.png-e8a24e029e5c640a7daee7d3f2838bdc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@@ -5,7 +5,7 @@
|
||||
## Usage:
|
||||
## godot --rendering-driver opengl3 --fixed-fps 60 --resolution 960x540 \
|
||||
## --path client -s res://tests/visual_capture.gd -- \
|
||||
## --scenario fog_3state --output /abs/path
|
||||
## --scenario atlas_GJ820Bc_Global --output /abs/path
|
||||
##
|
||||
## godot ... -- --flow flow_dialogue --output /abs/path --interval 3
|
||||
## godot ... -- --list
|
||||
|
||||
@@ -9,91 +9,35 @@ extends RefCounted
|
||||
## look up autoloads via get_node("/root/...").
|
||||
|
||||
|
||||
## Ferrath and its system, shared by the descent-ladder cases below (the older
|
||||
## per-rung cases still inline their own copies — left alone rather than
|
||||
## churned, since touching them would move goldens for no reason).
|
||||
const _FERRATH := {
|
||||
"body_id": "GJ820Bc",
|
||||
"body_radius_km": 6062.0,
|
||||
"proper_name": "Ferrath",
|
||||
"terrain_reference": "wiki/star-systems/GJ-820B/bodies/GJ820Bc/heightmap.png",
|
||||
}
|
||||
const _CYGNI_B := {"system_id": "GJ 820B", "proper_name": "Cygni B"}
|
||||
|
||||
## A known-good LAND point on Ferrath, in world metres. Sourced from the
|
||||
## cascade's highest-scoring city placement (city 24386 @ heightmap pixel
|
||||
## (52, 395), survey cell (49, 6), score 7200 — printed by `cargo run --bin
|
||||
## aliveness_probe -- --body GJ820Bc`), but read it as "somewhere the
|
||||
## generator considers good ground", NOT as a settlement to look at: a
|
||||
## CityPlacement is a match record — a pixel, an archetype, a founding
|
||||
## orientation — and no streets, footprints or buildings exist anywhere yet.
|
||||
## Drawing settlements is T-1207 (wave 2), deliberately deferred.
|
||||
##
|
||||
## Re-run the probe if the cascade seed or placement rules change: a stale
|
||||
## value here silently reframes the ladder rather than failing.
|
||||
const _FERRATH_LAND := Vector2(29422009.0, -5675959.0)
|
||||
|
||||
|
||||
## Apply scenario-specific setup before tick advancement.
|
||||
## Returns true if the scenario is recognized, false otherwise.
|
||||
func apply_setup(scenario_name: String, tree_root: Node) -> bool:
|
||||
var sim_bridge := tree_root.get_node("/root/SimBridge")
|
||||
var fog_state := tree_root.get_node("/root/FogState")
|
||||
var game_state := tree_root.get_node("/root/GameState")
|
||||
|
||||
match scenario_name:
|
||||
"fog_3state":
|
||||
# Default TestHarness state — player at (10,10), 8x8 room.
|
||||
# All 3 fog states naturally visible: clear (cone), explored (out of cone), unexplored.
|
||||
pass
|
||||
|
||||
"fog_diagonal":
|
||||
# Diagonal LOS boundary — staircase regression target.
|
||||
# Default room works: the diamond-shaped visibility radius creates diagonal edges.
|
||||
# 10 ticks builds enough explored tiles to show the boundary.
|
||||
pass
|
||||
|
||||
"fog_boundary":
|
||||
# Explored/unexplored transition centered.
|
||||
# Move player south so the northern explored boundary is center-frame.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(10, 12)
|
||||
|
||||
"fog_zone_tint":
|
||||
# Bar zone warm amber tint (D-046).
|
||||
# Inject zone_id into visible_tiles so fog_state.gd writes bar tint.
|
||||
# TestHarness tiles don't include zone_id by default — patch them.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(10, 10)
|
||||
# Zone tint is written from visible_tiles with zone_id field.
|
||||
# We patch GameState.visible_tiles after the first snapshot in post_setup().
|
||||
|
||||
"fog_debug":
|
||||
# Raw exploration overlay (green/blue/red).
|
||||
fog_state.debug_exploration = true
|
||||
|
||||
"npc_in_fog":
|
||||
# NPC sprite visible above fog (D-033).
|
||||
# Position player so NPC at (12,9) is at the fog edge.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(10, 10)
|
||||
|
||||
"hud_default":
|
||||
# Full HUD: time, Careful stance, minimap, monologue.
|
||||
# Tick 1 triggers monologue from TestHarness.
|
||||
# Inject Careful stance for visible green indicator.
|
||||
game_state.player_stance = "Careful"
|
||||
|
||||
"dialogue_open":
|
||||
# Dialogue box + interaction prompt + key bar.
|
||||
# Move adjacent to NPC and interact.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(11, 9)
|
||||
sim_bridge.harness.process_input("Interact")
|
||||
|
||||
"dialogue_with_monologue":
|
||||
# Confrontation beat: dialogue + monologue overlap.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(11, 9)
|
||||
sim_bridge.harness.process_input("Interact")
|
||||
# Monologue will be injected in post_setup after dialogue is active.
|
||||
|
||||
"minimap_stance":
|
||||
# Minimap + Sprint stance indicator overlap (top-right).
|
||||
game_state.player_stance = "Sprint"
|
||||
|
||||
"cursor_menu":
|
||||
# Cursor rendering over dialogue option area.
|
||||
if sim_bridge.harness:
|
||||
sim_bridge.harness.player_pos = Vector2i(11, 9)
|
||||
sim_bridge.harness.process_input("Interact")
|
||||
|
||||
"fog_live_replay", "fog_theater_replay", "fog_boundary_replay":
|
||||
# Replay real server snapshots via MessagePack → Protocol.decode_snapshot().
|
||||
# Setup handled by visual_capture.gd (reads replay_snapshot from config).
|
||||
pass
|
||||
|
||||
"fog_live_hub":
|
||||
# Live server connection — Hub spawn position.
|
||||
# No setup needed: server starts in --test-mode with Gauntlet,
|
||||
# player spawns at Hub (50,58). Captures real fog pipeline output.
|
||||
pass
|
||||
|
||||
"implant_pending":
|
||||
# #960: overlay the diegetic Layer-1 "generating" indicator for
|
||||
# visual sign-off. Loaded via load() — class_name isn't available
|
||||
@@ -277,6 +221,42 @@ func apply_setup(scenario_name: String, tree_root: Node) -> bool:
|
||||
["gen_dw_temp"]
|
||||
)
|
||||
|
||||
# The descent ladder (2026-08-06): the SAME body at the SAME world point,
|
||||
# once per rung, so the rungs read as a sequence rather than as unrelated
|
||||
# frames. Anchored on land (see _FERRATH_LAND) instead of world-metre
|
||||
# ZERO, which is just the origin of the region grid and lands wherever it
|
||||
# happens to land.
|
||||
#
|
||||
# What this ladder is for: whether the NATURE layer stays legible as you
|
||||
# descend — relief, coast, watercourses, biome character. It is NOT
|
||||
# waiting for cities to appear; nothing civilizational is generated yet
|
||||
# and none is due before T-1207. No overlays, deliberately: a colour ramp
|
||||
# on top would mask the very thing being judged.
|
||||
"atlas_GJ820Bc_land_Region":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root, _FERRATH, _CYGNI_B, "Region", [], _FERRATH_LAND
|
||||
)
|
||||
|
||||
"atlas_GJ820Bc_land_District":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root, _FERRATH, _CYGNI_B, "District", [], _FERRATH_LAND
|
||||
)
|
||||
|
||||
"atlas_GJ820Bc_land_Quarter":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root, _FERRATH, _CYGNI_B, "Quarter", [], _FERRATH_LAND
|
||||
)
|
||||
|
||||
"atlas_GJ820Bc_land_Block":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root, _FERRATH, _CYGNI_B, "Block", [], _FERRATH_LAND
|
||||
)
|
||||
|
||||
"atlas_GJ820Bc_land_Chunk":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root, _FERRATH, _CYGNI_B, "Chunk", [], _FERRATH_LAND
|
||||
)
|
||||
|
||||
"atlas_GJ251c_Global":
|
||||
_setup_atlas_golden_shot(
|
||||
tree_root,
|
||||
@@ -337,37 +317,14 @@ func apply_setup(scenario_name: String, tree_root: Node) -> bool:
|
||||
|
||||
|
||||
## Post-tick setup — called after N ticks have been advanced.
|
||||
## Use for state that depends on tick processing (e.g. zone tint patching).
|
||||
func post_setup(scenario_name: String, tree_root: Node) -> void:
|
||||
var fog_state := tree_root.get_node("/root/FogState")
|
||||
var game_state := tree_root.get_node("/root/GameState")
|
||||
|
||||
match scenario_name:
|
||||
"fog_zone_tint":
|
||||
# Patch visible_tiles with zone_id for fog_state.gd zone tint pipeline.
|
||||
var patched: Array = []
|
||||
for tile in game_state.visible_tiles:
|
||||
if tile is Dictionary:
|
||||
var t: Dictionary = tile.duplicate()
|
||||
t["zone_id"] = "bar"
|
||||
patched.append(t)
|
||||
game_state.visible_tiles = patched
|
||||
# Force fog_state to re-process with zone tint data
|
||||
fog_state.update_from_state()
|
||||
|
||||
"dialogue_with_monologue":
|
||||
# Inject monologue to create the overlap condition.
|
||||
game_state.current_monologue = {
|
||||
"id": "test_confrontation",
|
||||
"text": "Something about that answer doesn't add up.",
|
||||
"duration_seconds": 5.0,
|
||||
"priority": "high",
|
||||
"is_urgent": true,
|
||||
}
|
||||
|
||||
"hud_default":
|
||||
# Ensure stance is still Careful after ticks (TestHarness may override).
|
||||
game_state.player_stance = "Careful"
|
||||
## Use for state that depends on tick processing.
|
||||
##
|
||||
## Currently a no-op: every scenario that needed it was a top-down/fog/dialogue
|
||||
## case, deleted 2026-08-06 (Jeroen's call) along with the rest of the legacy
|
||||
## suite. The hook stays because visual_capture.gd calls it unconditionally and
|
||||
## the stepped-Atlas scenarios may yet need a post-tick step.
|
||||
func post_setup(_scenario_name: String, _tree_root: Node) -> void:
|
||||
pass
|
||||
|
||||
|
||||
## Apply flow action — called for each step in a movie flow.
|
||||
@@ -408,8 +365,21 @@ func apply_flow_action(action: String, tree_root: Node) -> void:
|
||||
## and this extends RefCounted, different -s mode load contexts, and the
|
||||
## duplication is small and stable: both read the same public StepCanvasViewer
|
||||
## surface, jump_to()/get_overlay_defs()/set_overlay_visible()/get_request()).
|
||||
## `world_center` defaults to ZERO — the original fixed-center revisit point,
|
||||
## which every pre-2026-08-06 golden uses. But world-metre zero is just the
|
||||
## origin of the body's region grid, and on a real body that is almost never
|
||||
## anywhere interesting: on Ferrath the principal settlement sits at
|
||||
## (29 422 009, -5 675 959) m. So every deep-rung golden captured at ZERO was
|
||||
## framing an arbitrary patch — which is why Block and Chunk "passed" while
|
||||
## showing flat water. Pass a real coordinate (aliveness_probe prints the
|
||||
## principal settlement's world metres) to descend somewhere that has content.
|
||||
func _setup_atlas_golden_shot(
|
||||
tree_root: Node, body: Dictionary, system: Dictionary, rung: String, overlay_ids: Array
|
||||
tree_root: Node,
|
||||
body: Dictionary,
|
||||
system: Dictionary,
|
||||
rung: String,
|
||||
overlay_ids: Array,
|
||||
world_center: Vector2 = Vector2.ZERO
|
||||
) -> void:
|
||||
var hud_groups: Node = tree_root.get_node("/root/HudGroups")
|
||||
var registry: Node = tree_root.get_node("/root/ImplantRegistry")
|
||||
@@ -436,4 +406,4 @@ func _setup_atlas_golden_shot(
|
||||
# jump_to() is the fixed-center revisit intent that descends to any
|
||||
# other rung at a literal, reproducible world_center (D-255(a): every
|
||||
# body's region grid is centered on world-metre ZERO).
|
||||
viewer.jump_to(Vector2.ZERO, rung)
|
||||
viewer.jump_to(world_center, rung)
|
||||
|
||||
@@ -121,8 +121,20 @@ fn main() {
|
||||
// HEIGHTMAP_CELLS_PER_DISTRICT working pixels), never true DISTRICT_M.
|
||||
let anchor_cell = bws.placements.iter().max_by_key(|p| p.score).map(|p| {
|
||||
let cell = scale::heightmap_pixel_to_survey_cell(p.position);
|
||||
// World metres too, not just pixel/cell: this is the coordinate the
|
||||
// Atlas navigates in (StepCanvasViewer.jump_to takes world_center), so
|
||||
// printing it is what lets a capture descend the rung ladder ON a
|
||||
// settlement instead of at world-metre zero.
|
||||
let (sx, sy) = district_profile::survey_cell_centre_world_m(
|
||||
cell,
|
||||
scale::HEIGHTMAP_CELLS_PER_DISTRICT,
|
||||
bws.heightmap_width as usize,
|
||||
bws.heightmap_height as usize,
|
||||
body_params.body_radius_km,
|
||||
);
|
||||
println!(
|
||||
"\nprincipal settlement: city {} @ pixel {:?} → survey cell {:?} (placement score {})",
|
||||
"\nprincipal settlement: city {} @ pixel {:?} → survey cell {:?} \
|
||||
→ world ({sx:.0}, {sy:.0}) m (placement score {})",
|
||||
p.city_id, p.position, cell, p.score
|
||||
);
|
||||
// 150 chunks (9 600 m) ÷ one survey cell's ACTUAL metric width at this
|
||||
|
||||
@@ -37,7 +37,7 @@ trap '[[ -n "${SERVER_PID:-}" ]] && kill "$SERVER_PID" 2>/dev/null; wait "$SERVE
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--screenshot) MODE="screenshot"; TARGET="${2:-fog_3state}"; shift 2 ;;
|
||||
--screenshot) MODE="screenshot"; TARGET="${2:-atlas_GJ820Bc_Global}"; shift 2 ;;
|
||||
--movie) MODE="movie"; TARGET="${2:-flow_dialogue}"; shift 2 ;;
|
||||
--update) MODE="update"; shift ;;
|
||||
--filter) shift 2 ;; # Accept and ignore (run-all compat)
|
||||
|
||||
@@ -6,70 +6,6 @@
|
||||
"golden_dir": "client/tests/golden/visual",
|
||||
"_comment_atlas_goldens": "T-1157 (D-255 rewrite of the T-1120 matrix, PR #180 provenance carried forward, Tyre): the atlas_* golden scenarios below key on (body, rung) per the stepped Atlas ladder, captured AND verified (exact pixel match) on danoontje's Mesa/AMD stack. T-1121 documents that goldens do NOT port across boxes at the current tolerance (the 19 pre-existing goldens fail 12-14% on this same box) — an atlas_* golden failing on a DIFFERENT machine is expected baseline drift, not a regression, until T-1121 resolves the canonical-capture-box question.",
|
||||
"scenarios": {
|
||||
"fog_3state": {
|
||||
"ticks": 5,
|
||||
"description": "All 3 fog states — clear/explored/unexplored"
|
||||
},
|
||||
"fog_diagonal": {
|
||||
"ticks": 10,
|
||||
"description": "Diagonal LOS boundary (staircase regression target)"
|
||||
},
|
||||
"fog_boundary": {
|
||||
"ticks": 8,
|
||||
"description": "Explored/unexplored transition centered in frame"
|
||||
},
|
||||
"fog_zone_tint": {
|
||||
"ticks": 5,
|
||||
"description": "Bar zone warm amber tint in explored fog (D-046)"
|
||||
},
|
||||
"fog_debug": {
|
||||
"ticks": 5,
|
||||
"description": "Raw exploration overlay (green/blue/red)"
|
||||
},
|
||||
"npc_in_fog": {
|
||||
"ticks": 5,
|
||||
"description": "NPC sprite visible above fog overlay (D-033)"
|
||||
},
|
||||
"hud_default": {
|
||||
"ticks": 1,
|
||||
"description": "Full HUD: time, Careful stance (green), minimap, monologue"
|
||||
},
|
||||
"dialogue_open": {
|
||||
"ticks": 3,
|
||||
"description": "Dialogue box + interaction prompt + key bar positioning"
|
||||
},
|
||||
"dialogue_with_monologue": {
|
||||
"ticks": 4,
|
||||
"description": "Confrontation beat: dialogue + monologue simultaneously"
|
||||
},
|
||||
"minimap_stance": {
|
||||
"ticks": 2,
|
||||
"description": "Minimap + Sprint stance indicator overlap (top-right)"
|
||||
},
|
||||
"cursor_menu": {
|
||||
"ticks": 3,
|
||||
"description": "Cursor rendering over dialogue option"
|
||||
},
|
||||
"fog_live_replay": {
|
||||
"ticks": 1,
|
||||
"description": "Replay real server hub snapshot — full pipeline fog test",
|
||||
"replay_snapshot": "tests/fixtures/gauntlet/hub_spawn.msgpack"
|
||||
},
|
||||
"fog_theater_replay": {
|
||||
"ticks": 1,
|
||||
"description": "Replay Fog Theater — large room with NPCs at varying distances",
|
||||
"replay_snapshot": "tests/fixtures/gauntlet/fog_theater.msgpack"
|
||||
},
|
||||
"fog_boundary_replay": {
|
||||
"ticks": 1,
|
||||
"description": "Replay hub after movement — explored/visible tile boundary",
|
||||
"replay_snapshot": "tests/fixtures/gauntlet/hub_after_movement.msgpack"
|
||||
},
|
||||
"fog_live_hub": {
|
||||
"ticks": 10,
|
||||
"live": true,
|
||||
"description": "Live server: Hub spawn fog — real pipeline regression test"
|
||||
},
|
||||
"implant_pending": {
|
||||
"ticks": 1,
|
||||
"description": "ImplantPending — diegetic Layer-1 generating indicator (#960)"
|
||||
@@ -136,6 +72,32 @@
|
||||
"live": true,
|
||||
"description": "T-1157 curated Atlas golden (D-255): Ferrath (GJ820Bc), District rung, temperature overlay"
|
||||
},
|
||||
"_comment_descent_ladder": "The atlas_GJ820Bc_land_* set is one body at ONE world point, once per rung, so the ladder reads as a descent. Anchored on land rather than world-metre zero. It judges the NATURE layer (relief, coast, watercourses, biome character) — nothing civilizational is generated yet and none is due before T-1207, so an absence of settlements is the expected state, not a finding.",
|
||||
"atlas_GJ820Bc_land_Region": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
"description": "Descent ladder (2026-08-06): Ferrath (GJ820Bc), Region rung, land-anchored, no overlay"
|
||||
},
|
||||
"atlas_GJ820Bc_land_District": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
"description": "Descent ladder: Ferrath (GJ820Bc), District rung, land-anchored, no overlay"
|
||||
},
|
||||
"atlas_GJ820Bc_land_Quarter": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
"description": "Descent ladder: Ferrath (GJ820Bc), Quarter rung, land-anchored, no overlay"
|
||||
},
|
||||
"atlas_GJ820Bc_land_Block": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
"description": "Descent ladder: Ferrath (GJ820Bc), Block rung, land-anchored, no overlay"
|
||||
},
|
||||
"atlas_GJ820Bc_land_Chunk": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
"description": "Descent ladder: Ferrath (GJ820Bc), Chunk rung (deepest), land-anchored, no overlay"
|
||||
},
|
||||
"atlas_GJ251c_Global": {
|
||||
"ticks": 240,
|
||||
"live": true,
|
||||
|
||||