diff --git a/README.md b/README.md index fb35e54..c610901 100644 --- a/README.md +++ b/README.md @@ -373,6 +373,24 @@ asphalt (a summit lookout carpark is a burnout pad, not a dirt patch) and tower stands over its carpark. Race is 3 laps of the mountain; the summit carparks come pre-stocked with parked shitboxes. +### The Gateway (big-bridge support) + +`gateway` is the Sir Leo Hielscher Bridges and their industrial hinterland. +Big concrete bridges taught the builder new tricks, all driven by the bridge +arg's new form `Name:hump:style` (Story Bridge stays `Bradfield Highway`, +16 m truss): the **box style** computes deck height as a continuous field from +**distance to the river** (smoothstep to +57 m over the water) — the Gateway +is 13 OSM ways across twin carriageways, and both a per-way hump and a +whole-bridge axis projection produced 52 m walls; the river being the thing +bridged is the only profile that can't seam. Concrete **piers** rise under +every bridge-tagged span, **guardrails** with collision chase the deck edges +(a 64 m deck with open edges is a cliff with lane markings), and the Spawn, +DragStart/End and RacePath markers all ride the deck field. The payoff: a +**1,422 m drag strip up and over the bridge** — the longest in the game — with +the ladder, tree and gearbox all live at altitude. Race mode's auto-traced +loop weaves the interchange ramps and is honestly chaotic; a hand-authored +carriageway loop is the known fix if bridge racing matters later. + ### Cashies tool props (dealgod → TRELLIS) `assets/tools/*.glb` are real secondhand-shop stock: photos pulled from the diff --git a/levels/gateway/level.glb b/levels/gateway/level.glb new file mode 100644 index 0000000..5b2f618 Binary files /dev/null and b/levels/gateway/level.glb differ diff --git a/levels/gateway/level.glb.import b/levels/gateway/level.glb.import new file mode 100644 index 0000000..84b0097 --- /dev/null +++ b/levels/gateway/level.glb.import @@ -0,0 +1,45 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://p2kk5p7n3i56" +path="res://.godot/imported/level.glb-59ab952b0aa80b55d127c24ee93cf646.scn" + +[deps] + +source_file="res://levels/gateway/level.glb" +dest_files=["res://.godot/imported/level.glb-59ab952b0aa80b55d127c24ee93cf646.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +mesh_library/use_node_names_as_mesh_names=false +array_mesh/deduplicate_surfaces=true +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 +gltf/texture_map_mode=1 diff --git a/levels/gateway/level_asphalt.jpg b/levels/gateway/level_asphalt.jpg new file mode 100644 index 0000000..488f4b4 Binary files /dev/null and b/levels/gateway/level_asphalt.jpg differ diff --git a/levels/gateway/level_asphalt.jpg.import b/levels/gateway/level_asphalt.jpg.import new file mode 100644 index 0000000..8d42f31 --- /dev/null +++ b/levels/gateway/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ygrhg1yi3row" +path="res://.godot/imported/level_asphalt.jpg-6686877c276e4a7d387b981ef649012a.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "6d4e58bce08ad885d626807f4870dd6b" +} + +[deps] + +source_file="res://levels/gateway/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-6686877c276e4a7d387b981ef649012a.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=true +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 diff --git a/levels/gateway/level_awning_cream.jpg b/levels/gateway/level_awning_cream.jpg new file mode 100644 index 0000000..ee8e490 Binary files /dev/null and b/levels/gateway/level_awning_cream.jpg differ diff --git a/levels/gateway/level_awning_cream.jpg.import b/levels/gateway/level_awning_cream.jpg.import new file mode 100644 index 0000000..ab218bf --- /dev/null +++ b/levels/gateway/level_awning_cream.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxn373g50iyh7" +path="res://.godot/imported/level_awning_cream.jpg-ae0a812958bfb924bae313ab5d9ba5ce.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "fd6eadc50ee05328df123d962ebcc1a2" +} + +[deps] + +source_file="res://levels/gateway/level_awning_cream.jpg" +dest_files=["res://.godot/imported/level_awning_cream.jpg-ae0a812958bfb924bae313ab5d9ba5ce.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=true +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 diff --git a/levels/gateway/level_awning_green.jpg b/levels/gateway/level_awning_green.jpg new file mode 100644 index 0000000..2acf8e8 Binary files /dev/null and b/levels/gateway/level_awning_green.jpg differ diff --git a/levels/gateway/level_awning_green.jpg.import b/levels/gateway/level_awning_green.jpg.import new file mode 100644 index 0000000..4f08d16 --- /dev/null +++ b/levels/gateway/level_awning_green.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6yyox7xw1gp5" +path="res://.godot/imported/level_awning_green.jpg-d882422066cb6b8afcd827624e891784.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "5f02e613fa470f9c1aae51f038c294a8" +} + +[deps] + +source_file="res://levels/gateway/level_awning_green.jpg" +dest_files=["res://.godot/imported/level_awning_green.jpg-d882422066cb6b8afcd827624e891784.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=true +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 diff --git a/levels/gateway/level_awning_grey.jpg b/levels/gateway/level_awning_grey.jpg new file mode 100644 index 0000000..bc89374 Binary files /dev/null and b/levels/gateway/level_awning_grey.jpg differ diff --git a/levels/gateway/level_awning_grey.jpg.import b/levels/gateway/level_awning_grey.jpg.import new file mode 100644 index 0000000..d18d478 --- /dev/null +++ b/levels/gateway/level_awning_grey.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxype2vxqci5o" +path="res://.godot/imported/level_awning_grey.jpg-58a1fbe977c658a521347b94aa582999.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "3dbfb0d5f478755a1370246878836a74" +} + +[deps] + +source_file="res://levels/gateway/level_awning_grey.jpg" +dest_files=["res://.godot/imported/level_awning_grey.jpg-58a1fbe977c658a521347b94aa582999.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=true +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 diff --git a/levels/gateway/level_bark.jpg b/levels/gateway/level_bark.jpg new file mode 100644 index 0000000..b79bb22 Binary files /dev/null and b/levels/gateway/level_bark.jpg differ diff --git a/levels/gateway/level_bark.jpg.import b/levels/gateway/level_bark.jpg.import new file mode 100644 index 0000000..f836560 --- /dev/null +++ b/levels/gateway/level_bark.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mrqco6irwje" +path="res://.godot/imported/level_bark.jpg-31551e36f2d4d2f2b91a104206b32625.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "21804a334d55f3bdba9fe0ac964afcd4" +} + +[deps] + +source_file="res://levels/gateway/level_bark.jpg" +dest_files=["res://.godot/imported/level_bark.jpg-31551e36f2d4d2f2b91a104206b32625.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=true +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 diff --git a/levels/gateway/level_billboard_ad.jpg b/levels/gateway/level_billboard_ad.jpg new file mode 100644 index 0000000..302fcdf Binary files /dev/null and b/levels/gateway/level_billboard_ad.jpg differ diff --git a/levels/gateway/level_billboard_ad.jpg.import b/levels/gateway/level_billboard_ad.jpg.import new file mode 100644 index 0000000..6a9b033 --- /dev/null +++ b/levels/gateway/level_billboard_ad.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cxp1atix7mm2d" +path="res://.godot/imported/level_billboard_ad.jpg-1876b6244d3a534ee4d89a62eab1e37c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "5f8c3c138d0015a36f7939ed07d448d6" +} + +[deps] + +source_file="res://levels/gateway/level_billboard_ad.jpg" +dest_files=["res://.godot/imported/level_billboard_ad.jpg-1876b6244d3a534ee4d89a62eab1e37c.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=true +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 diff --git a/levels/gateway/level_billboard_ad2.jpg b/levels/gateway/level_billboard_ad2.jpg new file mode 100644 index 0000000..fcd51b5 Binary files /dev/null and b/levels/gateway/level_billboard_ad2.jpg differ diff --git a/levels/gateway/level_billboard_ad2.jpg.import b/levels/gateway/level_billboard_ad2.jpg.import new file mode 100644 index 0000000..8f60d24 --- /dev/null +++ b/levels/gateway/level_billboard_ad2.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mry8ck4uyajd" +path="res://.godot/imported/level_billboard_ad2.jpg-34b8d12797c794101454d1bddd6951b7.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "6c5a71b34b1df4b677d4e45bc19bfd6a" +} + +[deps] + +source_file="res://levels/gateway/level_billboard_ad2.jpg" +dest_files=["res://.godot/imported/level_billboard_ad2.jpg-34b8d12797c794101454d1bddd6951b7.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=true +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 diff --git a/levels/gateway/level_billboard_ad3.jpg b/levels/gateway/level_billboard_ad3.jpg new file mode 100644 index 0000000..8aed5f0 Binary files /dev/null and b/levels/gateway/level_billboard_ad3.jpg differ diff --git a/levels/gateway/level_billboard_ad3.jpg.import b/levels/gateway/level_billboard_ad3.jpg.import new file mode 100644 index 0000000..973e136 --- /dev/null +++ b/levels/gateway/level_billboard_ad3.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cf8oys06eh10y" +path="res://.godot/imported/level_billboard_ad3.jpg-7595a58fe75c0cbae77906ba69bc96ef.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "91e97464e5959aab2873019597cd6a55" +} + +[deps] + +source_file="res://levels/gateway/level_billboard_ad3.jpg" +dest_files=["res://.godot/imported/level_billboard_ad3.jpg-7595a58fe75c0cbae77906ba69bc96ef.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=true +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 diff --git a/levels/gateway/level_concrete_ground.jpg b/levels/gateway/level_concrete_ground.jpg new file mode 100644 index 0000000..c7d0746 Binary files /dev/null and b/levels/gateway/level_concrete_ground.jpg differ diff --git a/levels/gateway/level_concrete_ground.jpg.import b/levels/gateway/level_concrete_ground.jpg.import new file mode 100644 index 0000000..d8f5195 --- /dev/null +++ b/levels/gateway/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd08ttva84yyi" +path="res://.godot/imported/level_concrete_ground.jpg-82ebde0bfb5cf985176032289238269c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "da8e49ed928188692e8b27f94880d0f0" +} + +[deps] + +source_file="res://levels/gateway/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-82ebde0bfb5cf985176032289238269c.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=true +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 diff --git a/levels/gateway/level_facade_brick.jpg b/levels/gateway/level_facade_brick.jpg new file mode 100644 index 0000000..3635f16 Binary files /dev/null and b/levels/gateway/level_facade_brick.jpg differ diff --git a/levels/gateway/level_facade_brick.jpg.import b/levels/gateway/level_facade_brick.jpg.import new file mode 100644 index 0000000..628b1a6 --- /dev/null +++ b/levels/gateway/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bgqf20y1ypg48" +path="res://.godot/imported/level_facade_brick.jpg-d8ef2c2f559e3faf57b7470493ef4026.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "9bbc1f659c3ae0f8ff50415e0e25b0a0" +} + +[deps] + +source_file="res://levels/gateway/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-d8ef2c2f559e3faf57b7470493ef4026.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=true +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 diff --git a/levels/gateway/level_facade_concrete.jpg b/levels/gateway/level_facade_concrete.jpg new file mode 100644 index 0000000..e29cb95 Binary files /dev/null and b/levels/gateway/level_facade_concrete.jpg differ diff --git a/levels/gateway/level_facade_concrete.jpg.import b/levels/gateway/level_facade_concrete.jpg.import new file mode 100644 index 0000000..3df798d --- /dev/null +++ b/levels/gateway/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkew67xa823kc" +path="res://.godot/imported/level_facade_concrete.jpg-1784d85c41566dbd0aac91d0112f4d75.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "01abc5a72c9b0db9fa03d6a8187d657e" +} + +[deps] + +source_file="res://levels/gateway/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-1784d85c41566dbd0aac91d0112f4d75.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=true +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 diff --git a/levels/gateway/level_facade_deco.jpg b/levels/gateway/level_facade_deco.jpg new file mode 100644 index 0000000..0980e33 Binary files /dev/null and b/levels/gateway/level_facade_deco.jpg differ diff --git a/levels/gateway/level_facade_deco.jpg.import b/levels/gateway/level_facade_deco.jpg.import new file mode 100644 index 0000000..1e97102 --- /dev/null +++ b/levels/gateway/level_facade_deco.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh3txxhdls552" +path="res://.godot/imported/level_facade_deco.jpg-67c56d2737631860a70ceef256aeb781.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ada93740d168d1ff3a8c4613a7859fc4" +} + +[deps] + +source_file="res://levels/gateway/level_facade_deco.jpg" +dest_files=["res://.godot/imported/level_facade_deco.jpg-67c56d2737631860a70ceef256aeb781.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=true +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 diff --git a/levels/gateway/level_facade_glass.jpg b/levels/gateway/level_facade_glass.jpg new file mode 100644 index 0000000..d0882db Binary files /dev/null and b/levels/gateway/level_facade_glass.jpg differ diff --git a/levels/gateway/level_facade_glass.jpg.import b/levels/gateway/level_facade_glass.jpg.import new file mode 100644 index 0000000..ac1c656 --- /dev/null +++ b/levels/gateway/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://duxxp11gr6ln6" +path="res://.godot/imported/level_facade_glass.jpg-c1ac96a5fc502aedd34cdfbf0c245aef.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "1e88904ab07ea05ef51b0ad5ef8a5176" +} + +[deps] + +source_file="res://levels/gateway/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-c1ac96a5fc502aedd34cdfbf0c245aef.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=true +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 diff --git a/levels/gateway/level_facade_glass2.jpg b/levels/gateway/level_facade_glass2.jpg new file mode 100644 index 0000000..bb732ab Binary files /dev/null and b/levels/gateway/level_facade_glass2.jpg differ diff --git a/levels/gateway/level_facade_glass2.jpg.import b/levels/gateway/level_facade_glass2.jpg.import new file mode 100644 index 0000000..ce74597 --- /dev/null +++ b/levels/gateway/level_facade_glass2.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv51rci5hhu7t" +path="res://.godot/imported/level_facade_glass2.jpg-c3b8c42cff72b2c117b0daac6ef149b7.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "09bf1228d59ce8eb5075472ecfafa796" +} + +[deps] + +source_file="res://levels/gateway/level_facade_glass2.jpg" +dest_files=["res://.godot/imported/level_facade_glass2.jpg-c3b8c42cff72b2c117b0daac6ef149b7.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=true +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 diff --git a/levels/gateway/level_facade_heritage.jpg b/levels/gateway/level_facade_heritage.jpg new file mode 100644 index 0000000..f1c496b Binary files /dev/null and b/levels/gateway/level_facade_heritage.jpg differ diff --git a/levels/gateway/level_facade_heritage.jpg.import b/levels/gateway/level_facade_heritage.jpg.import new file mode 100644 index 0000000..d0577fd --- /dev/null +++ b/levels/gateway/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcjghephcir6h" +path="res://.godot/imported/level_facade_heritage.jpg-438e999eb241704e97f5c1089dc1dbdf.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ba9e1709cb12bd8fdb4a19289f624abe" +} + +[deps] + +source_file="res://levels/gateway/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-438e999eb241704e97f5c1089dc1dbdf.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=true +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 diff --git a/levels/gateway/level_foliage.jpg b/levels/gateway/level_foliage.jpg new file mode 100644 index 0000000..600d981 Binary files /dev/null and b/levels/gateway/level_foliage.jpg differ diff --git a/levels/gateway/level_foliage.jpg.import b/levels/gateway/level_foliage.jpg.import new file mode 100644 index 0000000..50fb3ad --- /dev/null +++ b/levels/gateway/level_foliage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mvn6kahudvud" +path="res://.godot/imported/level_foliage.jpg-b1d98c42a1dd327edc11b935fcec1cd1.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ab3257b92ff0b75b17ceb374a6bfe480" +} + +[deps] + +source_file="res://levels/gateway/level_foliage.jpg" +dest_files=["res://.godot/imported/level_foliage.jpg-b1d98c42a1dd327edc11b935fcec1cd1.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=true +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 diff --git a/levels/gateway/level_foliage_jacaranda.jpg b/levels/gateway/level_foliage_jacaranda.jpg new file mode 100644 index 0000000..1135317 Binary files /dev/null and b/levels/gateway/level_foliage_jacaranda.jpg differ diff --git a/levels/gateway/level_foliage_jacaranda.jpg.import b/levels/gateway/level_foliage_jacaranda.jpg.import new file mode 100644 index 0000000..808f173 --- /dev/null +++ b/levels/gateway/level_foliage_jacaranda.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cq6nbbmrsq2ln" +path="res://.godot/imported/level_foliage_jacaranda.jpg-b72936de3a4f69572e89f35fdc88e17b.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "03eaf7e7939cd60d6eeae70a412aaa2a" +} + +[deps] + +source_file="res://levels/gateway/level_foliage_jacaranda.jpg" +dest_files=["res://.godot/imported/level_foliage_jacaranda.jpg-b72936de3a4f69572e89f35fdc88e17b.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=true +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 diff --git a/levels/gateway/level_footpath.jpg b/levels/gateway/level_footpath.jpg new file mode 100644 index 0000000..f4fb7ba Binary files /dev/null and b/levels/gateway/level_footpath.jpg differ diff --git a/levels/gateway/level_footpath.jpg.import b/levels/gateway/level_footpath.jpg.import new file mode 100644 index 0000000..9868e59 --- /dev/null +++ b/levels/gateway/level_footpath.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://couluxhx6hovw" +path="res://.godot/imported/level_footpath.jpg-9f8aa1f7dba7ea4e2e9b3470229e25a2.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "7cbdf662fc4a640b776d7b1845d41e45" +} + +[deps] + +source_file="res://levels/gateway/level_footpath.jpg" +dest_files=["res://.godot/imported/level_footpath.jpg-9f8aa1f7dba7ea4e2e9b3470229e25a2.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=true +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 diff --git a/levels/gateway/level_grass.jpg b/levels/gateway/level_grass.jpg new file mode 100644 index 0000000..f5ac6c5 Binary files /dev/null and b/levels/gateway/level_grass.jpg differ diff --git a/levels/gateway/level_grass.jpg.import b/levels/gateway/level_grass.jpg.import new file mode 100644 index 0000000..055a7b3 --- /dev/null +++ b/levels/gateway/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dp5nlufyol6i0" +path="res://.godot/imported/level_grass.jpg-184b276dcbd05ac25c28bf7286afe123.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "01321994e4e9a94eb2f15dbe2978140b" +} + +[deps] + +source_file="res://levels/gateway/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-184b276dcbd05ac25c28bf7286afe123.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=true +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 diff --git a/levels/gateway/level_roof_deck.jpg b/levels/gateway/level_roof_deck.jpg new file mode 100644 index 0000000..1e80376 Binary files /dev/null and b/levels/gateway/level_roof_deck.jpg differ diff --git a/levels/gateway/level_roof_deck.jpg.import b/levels/gateway/level_roof_deck.jpg.import new file mode 100644 index 0000000..ca39f51 --- /dev/null +++ b/levels/gateway/level_roof_deck.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk6fonqvl10a5" +path="res://.godot/imported/level_roof_deck.jpg-effc444ca55a919d90e47c0ec2f23947.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "abefe2c913e535b8e45c15c2fd64c035" +} + +[deps] + +source_file="res://levels/gateway/level_roof_deck.jpg" +dest_files=["res://.godot/imported/level_roof_deck.jpg-effc444ca55a919d90e47c0ec2f23947.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=true +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 diff --git a/levels/gateway/level_sandstone.jpg b/levels/gateway/level_sandstone.jpg new file mode 100644 index 0000000..5d77cc4 Binary files /dev/null and b/levels/gateway/level_sandstone.jpg differ diff --git a/levels/gateway/level_sandstone.jpg.import b/levels/gateway/level_sandstone.jpg.import new file mode 100644 index 0000000..7882f6e --- /dev/null +++ b/levels/gateway/level_sandstone.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ljulk85wgtvh" +path="res://.godot/imported/level_sandstone.jpg-92531ea78d4695305bd6559b99074f96.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4542fecfd809fc8ba6d5ffe37023980e" +} + +[deps] + +source_file="res://levels/gateway/level_sandstone.jpg" +dest_files=["res://.godot/imported/level_sandstone.jpg-92531ea78d4695305bd6559b99074f96.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=true +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 diff --git a/levels/gateway/level_shopfront.jpg b/levels/gateway/level_shopfront.jpg new file mode 100644 index 0000000..070ea5d Binary files /dev/null and b/levels/gateway/level_shopfront.jpg differ diff --git a/levels/gateway/level_shopfront.jpg.import b/levels/gateway/level_shopfront.jpg.import new file mode 100644 index 0000000..1bdcc46 --- /dev/null +++ b/levels/gateway/level_shopfront.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cikv026qwos3u" +path="res://.godot/imported/level_shopfront.jpg-5f8f87e13bc8236714ec0ca51135f89b.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "54365d23c4a16f4093874e323505f747" +} + +[deps] + +source_file="res://levels/gateway/level_shopfront.jpg" +dest_files=["res://.godot/imported/level_shopfront.jpg-5f8f87e13bc8236714ec0ca51135f89b.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=true +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 diff --git a/levels/gateway/level_signage_strip.jpg b/levels/gateway/level_signage_strip.jpg new file mode 100644 index 0000000..6085145 Binary files /dev/null and b/levels/gateway/level_signage_strip.jpg differ diff --git a/levels/gateway/level_signage_strip.jpg.import b/levels/gateway/level_signage_strip.jpg.import new file mode 100644 index 0000000..70a22ab --- /dev/null +++ b/levels/gateway/level_signage_strip.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcmt0jnj08vqn" +path="res://.godot/imported/level_signage_strip.jpg-591be2a71a659bcb8a7e953f7164cd3f.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "7bac04c3f15d3c6e34263659e61d8fe9" +} + +[deps] + +source_file="res://levels/gateway/level_signage_strip.jpg" +dest_files=["res://.godot/imported/level_signage_strip.jpg-591be2a71a659bcb8a7e953f7164cd3f.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=true +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 diff --git a/levels/gateway/level_steel.jpg b/levels/gateway/level_steel.jpg new file mode 100644 index 0000000..c3a953c Binary files /dev/null and b/levels/gateway/level_steel.jpg differ diff --git a/levels/gateway/level_steel.jpg.import b/levels/gateway/level_steel.jpg.import new file mode 100644 index 0000000..56bf5b2 --- /dev/null +++ b/levels/gateway/level_steel.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chvddpk3r606d" +path="res://.godot/imported/level_steel.jpg-e0572408174b419fa9e26cec20a2ad5c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "c89cb67b55ae73418f6c5eae7ee0f6ca" +} + +[deps] + +source_file="res://levels/gateway/level_steel.jpg" +dest_files=["res://.godot/imported/level_steel.jpg-e0572408174b419fa9e26cec20a2ad5c.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=true +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 diff --git a/levels/gateway/level_water.jpg b/levels/gateway/level_water.jpg new file mode 100644 index 0000000..abcba62 Binary files /dev/null and b/levels/gateway/level_water.jpg differ diff --git a/levels/gateway/level_water.jpg.import b/levels/gateway/level_water.jpg.import new file mode 100644 index 0000000..b8d991d --- /dev/null +++ b/levels/gateway/level_water.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dr3c1n2qgswrn" +path="res://.godot/imported/level_water.jpg-dbbe23ef57cc0347dd8b25b41f2bf01d.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "5c09ce05f3ec08d64ff6edccd71fef85" +} + +[deps] + +source_file="res://levels/gateway/level_water.jpg" +dest_files=["res://.godot/imported/level_water.jpg-dbbe23ef57cc0347dd8b25b41f2bf01d.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=true +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 diff --git a/levels/gateway/sky_day.jpg b/levels/gateway/sky_day.jpg new file mode 100644 index 0000000..5e5d188 Binary files /dev/null and b/levels/gateway/sky_day.jpg differ diff --git a/levels/gateway/sky_day.jpg.import b/levels/gateway/sky_day.jpg.import new file mode 100644 index 0000000..96d6288 --- /dev/null +++ b/levels/gateway/sky_day.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cykwpon5j1d2t" +path="res://.godot/imported/sky_day.jpg-ebc0287f7fa948751bd6248a6ba89548.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://levels/gateway/sky_day.jpg" +dest_files=["res://.godot/imported/sky_day.jpg-ebc0287f7fa948751bd6248a6ba89548.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 diff --git a/tools/build_all_levels.sh b/tools/build_all_levels.sh index 67fc7cd..e447d22 100755 --- a/tools/build_all_levels.sh +++ b/tools/build_all_levels.sh @@ -26,4 +26,5 @@ story_bridge|story_bridge.json|-27.4635|153.0355|Bradfield Highway|trace:Bradfie kangaroo_point|kangaroo_point.json|-27.4780|153.0345|River Terrace|trace:River Terrace|-|- mt_cootha|mt_cootha.json|-27.4735|152.9530|Sir Samuel Griffith Drive|trace:Sir Samuel Griffith Drive|-|-|grass mt_gravatt|mt_gravatt.json|-27.5520|153.0755|Mount Gravatt Outlook Drive|trace:Mount Gravatt Outlook Drive|-|-|grass +gateway|gateway.json|-27.4470|153.1000|Gateway Motorway|trace:Gateway Motorway|Gateway Motorway:57:box|-|- EOF diff --git a/tools/build_level_osm.py b/tools/build_level_osm.py index be544e4..b11bf87 100644 --- a/tools/build_level_osm.py +++ b/tools/build_level_osm.py @@ -34,7 +34,14 @@ src, level_id = argv[0], argv[1] LAT0, LON0 = float(argv[2]), float(argv[3]) spawn_arg = argv[4] if len(argv) > 4 else "" rp_arg = argv[5] if len(argv) > 5 else "" -bridge_name = argv[6] if len(argv) > 6 and argv[6] != "-" else "" +# bridge arg: "Name" or "Name:hump_m" or "Name:hump_m:style" (truss|box). +# Story Bridge is "Bradfield Highway" (16 m hump, steel truss); the Gateway is +# "Gateway Motorway:52:box" -- a 64.5 m concrete box girder needs no cage. +_bridge_arg = argv[6] if len(argv) > 6 and argv[6] != "-" else "" +_bparts = _bridge_arg.split(":") if _bridge_arg else [] +bridge_name = _bparts[0] if _bparts else "" +BRIDGE_HUMP = float(_bparts[1]) if len(_bparts) > 1 else 16.0 +BRIDGE_STYLE = _bparts[2] if len(_bparts) > 2 else "truss" canopy_name = argv[7] if len(argv) > 7 and argv[7] != "-" else "" # 9th arg: raw-terrain texture. City levels keep concrete (urban ground between # roads); "grass" also switches on forest fill -- bushland levels like Mt @@ -77,15 +84,49 @@ def H(x, y): WATER_Z = 0.3 # river surface: above the riverbed's DEM zero, below banks CARVE = [] # (x, y, h) of every draped road/path sample: terrain may not rise above these +_WATER_PTS = None # coarse point cloud of every water polygon + +def _water_pts(): + global _WATER_PTS + if _WATER_PTS is None: + _WATER_PTS = [] + for e2 in d["elements"]: + t2 = e2.get("tags", {}) + if (t2.get("natural") == "water" or t2.get("water")) and e2.get("geometry"): + geo = e2["geometry"] + for g in geo[::max(1, len(geo) // 80)]: + _WATER_PTS.append(xy(g["lat"], g["lon"])) + return _WATER_PTS + +BRIDGE_R = 650.0 # how far from the water the big-deck climb begins + +def named_deck_z(px4, py4): + """Box-girder deck field: height rises with PROXIMITY TO THE RIVER, not + per way. OSM splits the Gateway into 13 ways across twin carriageways; a + per-way sine hump turned every short approach span into a 52 m wall, and + a whole-bridge axis projection lifted segments 3 km from the water. The + river is the thing being bridged -- let it set the profile: full hump over + the water, smoothstep down to terrain within BRIDGE_R, seam-free at every + segment boundary because the field is continuous in x,y.""" + wp = _water_pts() + h = H(px4, py4) + if not wp: + return h + d2 = min((px4 - w[0]) ** 2 + (py4 - w[1]) ** 2 for w in wp) + t = 1.0 - min(math.sqrt(d2) / BRIDGE_R, 1.0) + s = t * t * (3.0 - 2.0 * t) + return max(h, h + BRIDGE_HUMP * s) + def bridge_profile(pts, named=False): """Deck heights for a bridge way: lerp between end terrain plus a hump, so - the deck spans the river instead of draping down into it.""" + the deck spans the river instead of draping down into it. The named + bridge's hump comes from the arg (Story Bridge 16 m, Gateway 52 m).""" cum = [0.0] for i in range(1, len(pts)): cum.append(cum[-1] + math.hypot(pts[i][0] - pts[i - 1][0], pts[i][1] - pts[i - 1][1])) T = max(cum[-1], 0.001) hA, hB = H(*pts[0]), H(*pts[-1]) - hump = 16.0 if named else 3.5 + hump = BRIDGE_HUMP if named else 3.5 return [max(H(*pts[i]), hA + (hB - hA) * (cum[i] / T) + hump * math.sin(math.pi * cum[i] / T)) for i in range(len(pts))] @@ -737,7 +778,27 @@ for e in d["elements"]: wide = ROAD_W.get(hw, 6.0) rkey = "mall" if hw == "pedestrian" else ("bus" if hw == "busway" else "road") deck = None - if tags.get("bridge") in ("yes", "viaduct") or (bridge_name and tags.get("name") == bridge_name): + if BRIDGE_STYLE == "box" and bridge_name and tags.get("name") == bridge_name: + # every named way, bridge-tagged or not: the field is continuous, + # so approach carriageways blend into the climb with no seams + deck = [named_deck_z(px4, py4) for (px4, py4) in pts] + # guardrails: a 64 m deck with open edges is a cliff with lane + # markings. Two low collision walls chase the deck edges. + rail = bmesh.new() + for i5 in range(len(pts) - 1): + (rx1, ry1), (rx2, ry2) = pts[i5], pts[i5 + 1] + rl = math.hypot(rx2 - rx1, ry2 - ry1) + if rl < 0.5: + continue + rnx, rny = -(ry2 - ry1) / rl, (rx2 - rx1) / rl + for rs in (-1.0, 1.0): + ox = rnx * rs * (wide / 2 - 0.2) + oy = rny * rs * (wide / 2 - 0.2) + beam(rail, + Vector((rx1 + ox, ry1 + oy, deck[i5] + 0.5)), + Vector((rx2 + ox, ry2 + oy, deck[i5 + 1] + 0.5)), 0.25, 1.0) + add_obj("bridge_rail_%d-col" % e["id"], rail, [M_STEEL], 4.0) + elif tags.get("bridge") in ("yes", "viaduct") or (bridge_name and tags.get("name") == bridge_name): deck = bridge_profile(pts, named=(tags.get("name") == bridge_name)) ribbon(road_bm[rkey], pts, wide / 2, 0.03, zs=deck) counts["road"] += 1 @@ -912,7 +973,8 @@ if bridge_name: s0, s1 = 0.175 * T, 0.825 * T N = 26 bm = bmesh.new() - deck_zs = bridge_profile([(pp.x, pp.y) for pp in pts], named=True) + deck_zs = (bridge_profile([(pp.x, pp.y) for pp in pts], named=True) + if BRIDGE_STYLE == "truss" else [named_deck_z(pp.x, pp.y) for pp in pts]) def deck_at(sd): for i2 in range(1, len(dists)): if dists[i2] >= sd: @@ -945,8 +1007,55 @@ if bridge_name: for i in range(0, N + 1, 3): p, pe, h = samples[i] beam(bm, p - pe * 8.0 + Vector((0, 0, h)), p + pe * 8.0 + Vector((0, 0, h)), 0.5, 0.5) - add_obj("bridge_steel-col", bm, [M_STEEL], 6.0) - print("bridge truss built along %r (%.0fm span)" % (bridge_name, s1 - s0)) + if BRIDGE_STYLE == "truss": + add_obj("bridge_steel-col", bm, [M_STEEL], 6.0) + print("bridge truss built along %r (%.0fm span)" % (bridge_name, s1 - s0)) + else: + bm.free() + if BRIDGE_STYLE == "box": + # concrete box-girder look: tall piers under EVERY bridge-tagged way + # of this name (both carriageways), from the ground/water up to the + # deck. The pier forest under a 64 m deck is the whole silhouette. + pier_bm = bmesh.new() + n_piers = 0 + for e2 in d["elements"]: + t2 = e2.get("tags", {}) + if t2.get("name") != bridge_name or not t2.get("bridge") or not e2.get("geometry"): + continue + bpts = [xy(g["lat"], g["lon"]) for g in e2["geometry"]] + if len(bpts) < 2: + continue + zs = [named_deck_z(px5, py5) for (px5, py5) in bpts] + bd = [0.0] + for i3 in range(1, len(bpts)): + bd.append(bd[-1] + math.hypot(bpts[i3][0] - bpts[i3 - 1][0], + bpts[i3][1] - bpts[i3 - 1][1])) + s = 40.0 + while s < bd[-1] - 40.0: + for i3 in range(1, len(bd)): + if bd[i3] >= s: + f3 = (s - bd[i3 - 1]) / max(bd[i3] - bd[i3 - 1], 0.001) + px3 = bpts[i3 - 1][0] + (bpts[i3][0] - bpts[i3 - 1][0]) * f3 + py3 = bpts[i3 - 1][1] + (bpts[i3][1] - bpts[i3 - 1][1]) * f3 + dz = zs[i3 - 1] + (zs[i3] - zs[i3 - 1]) * f3 + gz = min(H(px3, py3), 0.5) if dz > 30.0 else H(px3, py3) + if dz - gz > 9.0: + res3 = bmesh.ops.create_cube(pier_bm, size=1.0) + bmesh.ops.scale(pier_bm, vec=(2.6, 6.5, dz - gz), + verts=res3["verts"]) + ang = math.atan2(bpts[i3][1] - bpts[i3 - 1][1], + bpts[i3][0] - bpts[i3 - 1][0]) + bmesh.ops.rotate(pier_bm, cent=(0, 0, 0), + matrix=Matrix.Rotation(ang, 3, "Z"), + verts=res3["verts"]) + bmesh.ops.translate(pier_bm, + vec=(px3, py3, gz + (dz - gz) / 2.0), + verts=res3["verts"]) + n_piers += 1 + break + s += 85.0 + add_obj("bridge_piers-col", pier_bm, [M_CARPARK], 10.0) + print("bridge piers built along %r (%d piers)" % (bridge_name, n_piers)) # Winged shade canopies along pedestrian ways whose name starts with the given # one -- OSM splits Queen Street Mall into a 15 m stub named "Queen Street Mall" @@ -1137,7 +1246,8 @@ if best_run and best_run[0] >= 150.0: yaw = math.atan2(p1[1] - p0[1], p1[0] - p0[0]) for nm, p in (("DragStart", p0), ("DragEnd", p1)): emp = bpy.data.objects.new(nm, None) - emp.location = (p[0], p[1], H(p[0], p[1]) + 0.1) + dz2 = named_deck_z(p[0], p[1]) if BRIDGE_STYLE == "box" and bridge_name else H(p[0], p[1]) + emp.location = (p[0], p[1], dz2 + 0.1) emp.rotation_euler = (0, 0, yaw) bpy.context.collection.objects.link(emp) counts["drag_m"] = int(run) @@ -1146,7 +1256,8 @@ if spawn_arg: slat, slon, sbear = [float(v) for v in spawn_arg.split(",")] sx, sy = xy(slat, slon) sp = bpy.data.objects.new("Spawn", None) - sp.location = (sx, sy, H(sx, sy) + 0.1) + spz = named_deck_z(sx, sy) if BRIDGE_STYLE == "box" and bridge_name else H(sx, sy) + sp.location = (sx, sy, spz + 0.1) sp.rotation_euler = (0, 0, math.radians(-sbear)) bpy.context.collection.objects.link(sp) @@ -1157,7 +1268,11 @@ if rp_arg: plat, plon = [float(v) for v in pair.split(",")] px, py = xy(plat, plon) emp = bpy.data.objects.new("RP_%02d" % i, None) - emp.location = (px, py, H(px, py) + 0.1) + # box-bridge levels: the race line rides the DECK field, not the + # terrain -- at terrain height the grid spawns in the riverbed with + # the deck 57 m overhead and the AI races the ferry route + rz = named_deck_z(px, py) if BRIDGE_STYLE == "box" and bridge_name else H(px, py) + emp.location = (px, py, rz + 0.1) bpy.context.collection.objects.link(emp) emp.parent = rp diff --git a/tools/osm_level_args.py b/tools/osm_level_args.py index 1b34b5c..2422905 100644 --- a/tools/osm_level_args.py +++ b/tools/osm_level_args.py @@ -100,6 +100,30 @@ if loop[0].startswith("trace:"): segs.pop(i) grew = True break + # second pass: divided carriageways never share nodes, so exact-endpoint + # stitching leaves the twin deck behind. Join leftovers whose end lies + # within 60 m of the chain's ends -- a motorway loop closes up one + # carriageway and back down the other. + def _gd(a, b): + return math.hypot((a["lon"] - b["lon"]) * 111320 * math.cos(math.radians(a["lat"])), + (a["lat"] - b["lat"]) * M_LAT) + grew = True + while grew and segs: + grew = False + for i, s in enumerate(segs): + for rev in (False, True): + g = list(reversed(s["geo"])) if rev else list(s["geo"]) + if _gd(g[0], chain["geo"][-1]) < 60.0: + chain["geo"] = chain["geo"] + g + elif _gd(g[-1], chain["geo"][0]) < 60.0: + chain["geo"] = g + chain["geo"] + else: + continue + segs.pop(i) + grew = True + break + if grew: + break geo = chain["geo"] # dense sampling: a mountain road sampled every 16th point cuts hairpins # cross-country and grids the race start in a paddock