diff --git a/README.md b/README.md index 63a8fa5..f19147e 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,13 @@ Blender -b -P tools/build_level_osm.py -- area.json " assets/textures/.jpg +(creds read from .env, never printed). The builder box-projects UVs; facades pick +glass/brick/concrete/heritage by height and id hash. + ## Add a level Make a folder `levels//` containing `level.glb` (or `level.tscn`). Blender convention: diff --git a/assets/textures/asphalt.jpg b/assets/textures/asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/assets/textures/asphalt.jpg differ diff --git a/assets/textures/asphalt.jpg.import b/assets/textures/asphalt.jpg.import new file mode 100644 index 0000000..710132d --- /dev/null +++ b/assets/textures/asphalt.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lxwomhoym08j" +path="res://.godot/imported/asphalt.jpg-1a1bc5349dc19a883720beb65b87435e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/asphalt.jpg" +dest_files=["res://.godot/imported/asphalt.jpg-1a1bc5349dc19a883720beb65b87435e.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/assets/textures/concrete_ground.jpg b/assets/textures/concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/assets/textures/concrete_ground.jpg differ diff --git a/assets/textures/concrete_ground.jpg.import b/assets/textures/concrete_ground.jpg.import new file mode 100644 index 0000000..c338b44 --- /dev/null +++ b/assets/textures/concrete_ground.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d8h3s5caq73v" +path="res://.godot/imported/concrete_ground.jpg-e86ca3a0023a98dda7fb7669e24efd78.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/concrete_ground.jpg" +dest_files=["res://.godot/imported/concrete_ground.jpg-e86ca3a0023a98dda7fb7669e24efd78.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/assets/textures/facade_brick.jpg b/assets/textures/facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/assets/textures/facade_brick.jpg differ diff --git a/assets/textures/facade_brick.jpg.import b/assets/textures/facade_brick.jpg.import new file mode 100644 index 0000000..81b562f --- /dev/null +++ b/assets/textures/facade_brick.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://r8bu8m2uyqcg" +path="res://.godot/imported/facade_brick.jpg-54701a573b269f446c15c0b7b25244b8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/facade_brick.jpg" +dest_files=["res://.godot/imported/facade_brick.jpg-54701a573b269f446c15c0b7b25244b8.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/assets/textures/facade_concrete.jpg b/assets/textures/facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/assets/textures/facade_concrete.jpg differ diff --git a/assets/textures/facade_concrete.jpg.import b/assets/textures/facade_concrete.jpg.import new file mode 100644 index 0000000..8fb4bfd --- /dev/null +++ b/assets/textures/facade_concrete.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bchoeaxj1jvll" +path="res://.godot/imported/facade_concrete.jpg-ecd8f1b7175c7467c1621c2c6f6c38d8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/facade_concrete.jpg" +dest_files=["res://.godot/imported/facade_concrete.jpg-ecd8f1b7175c7467c1621c2c6f6c38d8.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/assets/textures/facade_glass.jpg b/assets/textures/facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/assets/textures/facade_glass.jpg differ diff --git a/assets/textures/facade_glass.jpg.import b/assets/textures/facade_glass.jpg.import new file mode 100644 index 0000000..dd14dd7 --- /dev/null +++ b/assets/textures/facade_glass.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c2p6xrvwp3eo0" +path="res://.godot/imported/facade_glass.jpg-42ce567669108461caad692bfe90c655.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/facade_glass.jpg" +dest_files=["res://.godot/imported/facade_glass.jpg-42ce567669108461caad692bfe90c655.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/assets/textures/facade_heritage.jpg b/assets/textures/facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/assets/textures/facade_heritage.jpg differ diff --git a/assets/textures/facade_heritage.jpg.import b/assets/textures/facade_heritage.jpg.import new file mode 100644 index 0000000..34d7c2a --- /dev/null +++ b/assets/textures/facade_heritage.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwt1qxntctha0" +path="res://.godot/imported/facade_heritage.jpg-ed63a0ac4cc7dc71bee02f832c435316.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/facade_heritage.jpg" +dest_files=["res://.godot/imported/facade_heritage.jpg-ed63a0ac4cc7dc71bee02f832c435316.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/assets/textures/grass.jpg b/assets/textures/grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/assets/textures/grass.jpg differ diff --git a/assets/textures/grass.jpg.import b/assets/textures/grass.jpg.import new file mode 100644 index 0000000..7c87e86 --- /dev/null +++ b/assets/textures/grass.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxtrhnltr2s0k" +path="res://.godot/imported/grass.jpg-54b02467e30e42c0c09e673c62eb447d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/grass.jpg" +dest_files=["res://.godot/imported/grass.jpg-54b02467e30e42c0c09e673c62eb447d.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/assets/textures/pavers.jpg b/assets/textures/pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/assets/textures/pavers.jpg differ diff --git a/assets/textures/pavers.jpg.import b/assets/textures/pavers.jpg.import new file mode 100644 index 0000000..c01f4a5 --- /dev/null +++ b/assets/textures/pavers.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3mr17mf7hwjq" +path="res://.godot/imported/pavers.jpg-e62bab185751bc69d6c980a5495a61f9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/pavers.jpg" +dest_files=["res://.godot/imported/pavers.jpg-e62bab185751bc69d6c980a5495a61f9.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/assets/textures/rock.jpg b/assets/textures/rock.jpg new file mode 100644 index 0000000..8cdf9e5 Binary files /dev/null and b/assets/textures/rock.jpg differ diff --git a/assets/textures/rock.jpg.import b/assets/textures/rock.jpg.import new file mode 100644 index 0000000..8253327 --- /dev/null +++ b/assets/textures/rock.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://broqibc8r23mg" +path="res://.godot/imported/rock.jpg-1c8572bce6e3fbb535b870d9e9396933.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/rock.jpg" +dest_files=["res://.godot/imported/rock.jpg-1c8572bce6e3fbb535b870d9e9396933.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/assets/textures/steel.jpg b/assets/textures/steel.jpg new file mode 100644 index 0000000..394b48e Binary files /dev/null and b/assets/textures/steel.jpg differ diff --git a/assets/textures/steel.jpg.import b/assets/textures/steel.jpg.import new file mode 100644 index 0000000..ff6e612 --- /dev/null +++ b/assets/textures/steel.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bs1ao5f6skr5o" +path="res://.godot/imported/steel.jpg-2625d5497ab69ef83b041034f7989904.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/steel.jpg" +dest_files=["res://.godot/imported/steel.jpg-2625d5497ab69ef83b041034f7989904.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/assets/textures/water.jpg b/assets/textures/water.jpg new file mode 100644 index 0000000..0ed0b39 Binary files /dev/null and b/assets/textures/water.jpg differ diff --git a/assets/textures/water.jpg.import b/assets/textures/water.jpg.import new file mode 100644 index 0000000..0e2f41c --- /dev/null +++ b/assets/textures/water.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkopoum6v87mg" +path="res://.godot/imported/water.jpg-eba32e6bbb53adabbfb2720c2da57651.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/water.jpg" +dest_files=["res://.godot/imported/water.jpg-eba32e6bbb53adabbfb2720c2da57651.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/levels/albert_parklands/level.glb b/levels/albert_parklands/level.glb new file mode 100644 index 0000000..f7db7b3 Binary files /dev/null and b/levels/albert_parklands/level.glb differ diff --git a/levels/albert_parklands/level.glb.import b/levels/albert_parklands/level.glb.import new file mode 100644 index 0000000..6f20163 --- /dev/null +++ b/levels/albert_parklands/level.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://2sfe3g28na0f" +path="res://.godot/imported/level.glb-4aa597fe23a02438c7c91aac8329adb8.scn" + +[deps] + +source_file="res://levels/albert_parklands/level.glb" +dest_files=["res://.godot/imported/level.glb-4aa597fe23a02438c7c91aac8329adb8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +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 diff --git a/levels/albert_parklands/level_asphalt.jpg b/levels/albert_parklands/level_asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/levels/albert_parklands/level_asphalt.jpg differ diff --git a/levels/albert_parklands/level_asphalt.jpg.import b/levels/albert_parklands/level_asphalt.jpg.import new file mode 100644 index 0000000..8a79c9f --- /dev/null +++ b/levels/albert_parklands/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dnopbj8e4ushf" +path="res://.godot/imported/level_asphalt.jpg-1ac2ae4fb3e445d6981aa783a949306d.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "61f0484dca5fc32f16b6163e4f2d82f7" +} + +[deps] + +source_file="res://levels/albert_parklands/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-1ac2ae4fb3e445d6981aa783a949306d.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/albert_parklands/level_concrete_ground.jpg b/levels/albert_parklands/level_concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/levels/albert_parklands/level_concrete_ground.jpg differ diff --git a/levels/albert_parklands/level_concrete_ground.jpg.import b/levels/albert_parklands/level_concrete_ground.jpg.import new file mode 100644 index 0000000..8ad4368 --- /dev/null +++ b/levels/albert_parklands/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b01u1eaxtya7b" +path="res://.godot/imported/level_concrete_ground.jpg-ef709039d84af6f29e8d0445c492333c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "94f81407db30c3621a4cfc3d4cc59777" +} + +[deps] + +source_file="res://levels/albert_parklands/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-ef709039d84af6f29e8d0445c492333c.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/albert_parklands/level_facade_brick.jpg b/levels/albert_parklands/level_facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/levels/albert_parklands/level_facade_brick.jpg differ diff --git a/levels/albert_parklands/level_facade_brick.jpg.import b/levels/albert_parklands/level_facade_brick.jpg.import new file mode 100644 index 0000000..0d1bca3 --- /dev/null +++ b/levels/albert_parklands/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc5b0mqhlv57h" +path="res://.godot/imported/level_facade_brick.jpg-24bd49b527dd8d4f43772981f5862d31.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "cc443eec121e9f1349f538ecdf2b8732" +} + +[deps] + +source_file="res://levels/albert_parklands/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-24bd49b527dd8d4f43772981f5862d31.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/albert_parklands/level_facade_concrete.jpg b/levels/albert_parklands/level_facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/levels/albert_parklands/level_facade_concrete.jpg differ diff --git a/levels/albert_parklands/level_facade_concrete.jpg.import b/levels/albert_parklands/level_facade_concrete.jpg.import new file mode 100644 index 0000000..a863eec --- /dev/null +++ b/levels/albert_parklands/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbfu4xrnd2w4f" +path="res://.godot/imported/level_facade_concrete.jpg-34a8a93b8c74d277a5dd137026850a2c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "797a8dc03abefe25eec80c9e4fbb396e" +} + +[deps] + +source_file="res://levels/albert_parklands/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-34a8a93b8c74d277a5dd137026850a2c.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/albert_parklands/level_facade_glass.jpg b/levels/albert_parklands/level_facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/levels/albert_parklands/level_facade_glass.jpg differ diff --git a/levels/albert_parklands/level_facade_glass.jpg.import b/levels/albert_parklands/level_facade_glass.jpg.import new file mode 100644 index 0000000..2c8ae08 --- /dev/null +++ b/levels/albert_parklands/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tqfx5gsd6pa1" +path="res://.godot/imported/level_facade_glass.jpg-18e307c0becea51123c7b60c2951eac0.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "e12fc674ce5e0ccfb17f8d06c372410a" +} + +[deps] + +source_file="res://levels/albert_parklands/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-18e307c0becea51123c7b60c2951eac0.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/albert_parklands/level_facade_heritage.jpg b/levels/albert_parklands/level_facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/levels/albert_parklands/level_facade_heritage.jpg differ diff --git a/levels/albert_parklands/level_facade_heritage.jpg.import b/levels/albert_parklands/level_facade_heritage.jpg.import new file mode 100644 index 0000000..4a412ed --- /dev/null +++ b/levels/albert_parklands/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://djjp73l1wkdhi" +path="res://.godot/imported/level_facade_heritage.jpg-a08e33b3814db2fcdd77d3149ae09e7b.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ed74e50bd0061f0567ff573f00ba52e8" +} + +[deps] + +source_file="res://levels/albert_parklands/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-a08e33b3814db2fcdd77d3149ae09e7b.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/albert_parklands/level_grass.jpg b/levels/albert_parklands/level_grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/levels/albert_parklands/level_grass.jpg differ diff --git a/levels/albert_parklands/level_grass.jpg.import b/levels/albert_parklands/level_grass.jpg.import new file mode 100644 index 0000000..86b1c58 --- /dev/null +++ b/levels/albert_parklands/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://caxxwafr3fm8v" +path="res://.godot/imported/level_grass.jpg-02115274ab7b7ae161b97964f2e0c549.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2b4b3320271b35c9a81f4cd8ddf7ea7a" +} + +[deps] + +source_file="res://levels/albert_parklands/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-02115274ab7b7ae161b97964f2e0c549.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/albert_parklands/level_pavers.jpg b/levels/albert_parklands/level_pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/levels/albert_parklands/level_pavers.jpg differ diff --git a/levels/albert_parklands/level_pavers.jpg.import b/levels/albert_parklands/level_pavers.jpg.import new file mode 100644 index 0000000..22cae5c --- /dev/null +++ b/levels/albert_parklands/level_pavers.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ev83fs768tlm" +path="res://.godot/imported/level_pavers.jpg-90f056c7ca15803eb06ef97e9b7a610e.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4a9175b67948bd01619ca6271457748b" +} + +[deps] + +source_file="res://levels/albert_parklands/level_pavers.jpg" +dest_files=["res://.godot/imported/level_pavers.jpg-90f056c7ca15803eb06ef97e9b7a610e.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/albert_parklands/level_water.jpg b/levels/albert_parklands/level_water.jpg new file mode 100644 index 0000000..0ed0b39 Binary files /dev/null and b/levels/albert_parklands/level_water.jpg differ diff --git a/levels/albert_parklands/level_water.jpg.import b/levels/albert_parklands/level_water.jpg.import new file mode 100644 index 0000000..331bf97 --- /dev/null +++ b/levels/albert_parklands/level_water.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b78j71vlc7h0a" +path="res://.godot/imported/level_water.jpg-d40f7d202a33caec44c959daab3c051c.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "0cc84403ee5cb5f5a87fd4df17c0af6b" +} + +[deps] + +source_file="res://levels/albert_parklands/level_water.jpg" +dest_files=["res://.godot/imported/level_water.jpg-d40f7d202a33caec44c959daab3c051c.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/kangaroo_point/level.glb b/levels/kangaroo_point/level.glb new file mode 100644 index 0000000..6bbde4b Binary files /dev/null and b/levels/kangaroo_point/level.glb differ diff --git a/levels/kangaroo_point/level.glb.import b/levels/kangaroo_point/level.glb.import new file mode 100644 index 0000000..4766877 --- /dev/null +++ b/levels/kangaroo_point/level.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dgc141hgvu6r0" +path="res://.godot/imported/level.glb-30461b4810ef38297351fb89cbe9aa18.scn" + +[deps] + +source_file="res://levels/kangaroo_point/level.glb" +dest_files=["res://.godot/imported/level.glb-30461b4810ef38297351fb89cbe9aa18.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +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 diff --git a/levels/kangaroo_point/level_asphalt.jpg b/levels/kangaroo_point/level_asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/levels/kangaroo_point/level_asphalt.jpg differ diff --git a/levels/kangaroo_point/level_asphalt.jpg.import b/levels/kangaroo_point/level_asphalt.jpg.import new file mode 100644 index 0000000..039d95c --- /dev/null +++ b/levels/kangaroo_point/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dfiiw08f8qmgr" +path="res://.godot/imported/level_asphalt.jpg-23c0384d78044660e730133c4c647819.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "61f0484dca5fc32f16b6163e4f2d82f7" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-23c0384d78044660e730133c4c647819.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/kangaroo_point/level_concrete_ground.jpg b/levels/kangaroo_point/level_concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/levels/kangaroo_point/level_concrete_ground.jpg differ diff --git a/levels/kangaroo_point/level_concrete_ground.jpg.import b/levels/kangaroo_point/level_concrete_ground.jpg.import new file mode 100644 index 0000000..de4ee62 --- /dev/null +++ b/levels/kangaroo_point/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0c3vjyv28amj" +path="res://.godot/imported/level_concrete_ground.jpg-3039b71c6429d182f8fb423eabd24012.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "94f81407db30c3621a4cfc3d4cc59777" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-3039b71c6429d182f8fb423eabd24012.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/kangaroo_point/level_facade_brick.jpg b/levels/kangaroo_point/level_facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/levels/kangaroo_point/level_facade_brick.jpg differ diff --git a/levels/kangaroo_point/level_facade_brick.jpg.import b/levels/kangaroo_point/level_facade_brick.jpg.import new file mode 100644 index 0000000..d0b372d --- /dev/null +++ b/levels/kangaroo_point/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bva58uq3c67i7" +path="res://.godot/imported/level_facade_brick.jpg-63618c624dfb6d17fc72f34972853a1f.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "cc443eec121e9f1349f538ecdf2b8732" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-63618c624dfb6d17fc72f34972853a1f.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/kangaroo_point/level_facade_concrete.jpg b/levels/kangaroo_point/level_facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/levels/kangaroo_point/level_facade_concrete.jpg differ diff --git a/levels/kangaroo_point/level_facade_concrete.jpg.import b/levels/kangaroo_point/level_facade_concrete.jpg.import new file mode 100644 index 0000000..5ffc1df --- /dev/null +++ b/levels/kangaroo_point/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxw4eywb53n3u" +path="res://.godot/imported/level_facade_concrete.jpg-adac43bfcb2b425e3377ad52d804bab5.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "797a8dc03abefe25eec80c9e4fbb396e" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-adac43bfcb2b425e3377ad52d804bab5.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/kangaroo_point/level_facade_glass.jpg b/levels/kangaroo_point/level_facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/levels/kangaroo_point/level_facade_glass.jpg differ diff --git a/levels/kangaroo_point/level_facade_glass.jpg.import b/levels/kangaroo_point/level_facade_glass.jpg.import new file mode 100644 index 0000000..97fe32f --- /dev/null +++ b/levels/kangaroo_point/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://53l8axasg7vr" +path="res://.godot/imported/level_facade_glass.jpg-36ad4c531e5c721102605a81e76be03d.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "e12fc674ce5e0ccfb17f8d06c372410a" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-36ad4c531e5c721102605a81e76be03d.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/kangaroo_point/level_facade_heritage.jpg b/levels/kangaroo_point/level_facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/levels/kangaroo_point/level_facade_heritage.jpg differ diff --git a/levels/kangaroo_point/level_facade_heritage.jpg.import b/levels/kangaroo_point/level_facade_heritage.jpg.import new file mode 100644 index 0000000..880af44 --- /dev/null +++ b/levels/kangaroo_point/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvbc5cplfqucf" +path="res://.godot/imported/level_facade_heritage.jpg-fbd854331bb878f6629cb153b7d7deb0.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ed74e50bd0061f0567ff573f00ba52e8" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-fbd854331bb878f6629cb153b7d7deb0.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/kangaroo_point/level_grass.jpg b/levels/kangaroo_point/level_grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/levels/kangaroo_point/level_grass.jpg differ diff --git a/levels/kangaroo_point/level_grass.jpg.import b/levels/kangaroo_point/level_grass.jpg.import new file mode 100644 index 0000000..127d8d9 --- /dev/null +++ b/levels/kangaroo_point/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://my2mpo8m875l" +path="res://.godot/imported/level_grass.jpg-2e59d2ff49ef13ecd25a8c4eba4532ca.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2b4b3320271b35c9a81f4cd8ddf7ea7a" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-2e59d2ff49ef13ecd25a8c4eba4532ca.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/kangaroo_point/level_pavers.jpg b/levels/kangaroo_point/level_pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/levels/kangaroo_point/level_pavers.jpg differ diff --git a/levels/kangaroo_point/level_pavers.jpg.import b/levels/kangaroo_point/level_pavers.jpg.import new file mode 100644 index 0000000..1f81eb2 --- /dev/null +++ b/levels/kangaroo_point/level_pavers.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bf5qxsgxdhm24" +path="res://.godot/imported/level_pavers.jpg-1230a0e12d447e6d21fd8af57b534605.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4a9175b67948bd01619ca6271457748b" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_pavers.jpg" +dest_files=["res://.godot/imported/level_pavers.jpg-1230a0e12d447e6d21fd8af57b534605.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/kangaroo_point/level_rock.jpg b/levels/kangaroo_point/level_rock.jpg new file mode 100644 index 0000000..8cdf9e5 Binary files /dev/null and b/levels/kangaroo_point/level_rock.jpg differ diff --git a/levels/kangaroo_point/level_rock.jpg.import b/levels/kangaroo_point/level_rock.jpg.import new file mode 100644 index 0000000..539a9d1 --- /dev/null +++ b/levels/kangaroo_point/level_rock.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfwc7pjj6mx50" +path="res://.godot/imported/level_rock.jpg-6b7fbc4ad06f4bf909541069dfa6e146.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "17b69eeff0d1d65076a44a6c6a51dddb" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_rock.jpg" +dest_files=["res://.godot/imported/level_rock.jpg-6b7fbc4ad06f4bf909541069dfa6e146.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/kangaroo_point/level_water.jpg b/levels/kangaroo_point/level_water.jpg new file mode 100644 index 0000000..0ed0b39 Binary files /dev/null and b/levels/kangaroo_point/level_water.jpg differ diff --git a/levels/kangaroo_point/level_water.jpg.import b/levels/kangaroo_point/level_water.jpg.import new file mode 100644 index 0000000..7163bf3 --- /dev/null +++ b/levels/kangaroo_point/level_water.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dla5ahca2hu1" +path="res://.godot/imported/level_water.jpg-9dbf85d41434bcbf41266739a016faad.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "0cc84403ee5cb5f5a87fd4df17c0af6b" +} + +[deps] + +source_file="res://levels/kangaroo_point/level_water.jpg" +dest_files=["res://.godot/imported/level_water.jpg-9dbf85d41434bcbf41266739a016faad.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/queen_st_mall/level.glb b/levels/queen_st_mall/level.glb index 512f2eb..5be711d 100644 Binary files a/levels/queen_st_mall/level.glb and b/levels/queen_st_mall/level.glb differ diff --git a/levels/queen_st_mall/level_asphalt.jpg b/levels/queen_st_mall/level_asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/levels/queen_st_mall/level_asphalt.jpg differ diff --git a/levels/queen_st_mall/level_asphalt.jpg.import b/levels/queen_st_mall/level_asphalt.jpg.import new file mode 100644 index 0000000..4affb2c --- /dev/null +++ b/levels/queen_st_mall/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3qpbim7rcrl1" +path="res://.godot/imported/level_asphalt.jpg-3d895746153fd66dc21078b9fe82f0f4.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "61f0484dca5fc32f16b6163e4f2d82f7" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-3d895746153fd66dc21078b9fe82f0f4.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/queen_st_mall/level_concrete_ground.jpg b/levels/queen_st_mall/level_concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/levels/queen_st_mall/level_concrete_ground.jpg differ diff --git a/levels/queen_st_mall/level_concrete_ground.jpg.import b/levels/queen_st_mall/level_concrete_ground.jpg.import new file mode 100644 index 0000000..dae31ce --- /dev/null +++ b/levels/queen_st_mall/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wtjcdsecfniu" +path="res://.godot/imported/level_concrete_ground.jpg-ec43a7977f078de2592c0e32f5c1d949.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "94f81407db30c3621a4cfc3d4cc59777" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-ec43a7977f078de2592c0e32f5c1d949.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/queen_st_mall/level_facade_brick.jpg b/levels/queen_st_mall/level_facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/levels/queen_st_mall/level_facade_brick.jpg differ diff --git a/levels/queen_st_mall/level_facade_brick.jpg.import b/levels/queen_st_mall/level_facade_brick.jpg.import new file mode 100644 index 0000000..85512eb --- /dev/null +++ b/levels/queen_st_mall/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1vnodmlo3npq" +path="res://.godot/imported/level_facade_brick.jpg-3d2ab9215be80fa2bea4019f5e083a58.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "cc443eec121e9f1349f538ecdf2b8732" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-3d2ab9215be80fa2bea4019f5e083a58.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/queen_st_mall/level_facade_concrete.jpg b/levels/queen_st_mall/level_facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/levels/queen_st_mall/level_facade_concrete.jpg differ diff --git a/levels/queen_st_mall/level_facade_concrete.jpg.import b/levels/queen_st_mall/level_facade_concrete.jpg.import new file mode 100644 index 0000000..23f0683 --- /dev/null +++ b/levels/queen_st_mall/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b33aim0yuh5p8" +path="res://.godot/imported/level_facade_concrete.jpg-ee349dbe566b7a0d3afbba0650d94658.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "797a8dc03abefe25eec80c9e4fbb396e" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-ee349dbe566b7a0d3afbba0650d94658.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/queen_st_mall/level_facade_glass.jpg b/levels/queen_st_mall/level_facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/levels/queen_st_mall/level_facade_glass.jpg differ diff --git a/levels/queen_st_mall/level_facade_glass.jpg.import b/levels/queen_st_mall/level_facade_glass.jpg.import new file mode 100644 index 0000000..b3b7d41 --- /dev/null +++ b/levels/queen_st_mall/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dld8ggynwnscd" +path="res://.godot/imported/level_facade_glass.jpg-3aec6add040ec226fd782ede740d6930.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "e12fc674ce5e0ccfb17f8d06c372410a" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-3aec6add040ec226fd782ede740d6930.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/queen_st_mall/level_facade_heritage.jpg b/levels/queen_st_mall/level_facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/levels/queen_st_mall/level_facade_heritage.jpg differ diff --git a/levels/queen_st_mall/level_facade_heritage.jpg.import b/levels/queen_st_mall/level_facade_heritage.jpg.import new file mode 100644 index 0000000..4d1ae2c --- /dev/null +++ b/levels/queen_st_mall/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3mfvmmjhps4k" +path="res://.godot/imported/level_facade_heritage.jpg-fb64f32489f7ba1d9a21e683bb9a4214.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ed74e50bd0061f0567ff573f00ba52e8" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-fb64f32489f7ba1d9a21e683bb9a4214.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/queen_st_mall/level_grass.jpg b/levels/queen_st_mall/level_grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/levels/queen_st_mall/level_grass.jpg differ diff --git a/levels/queen_st_mall/level_grass.jpg.import b/levels/queen_st_mall/level_grass.jpg.import new file mode 100644 index 0000000..0c829b3 --- /dev/null +++ b/levels/queen_st_mall/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl0oqlup5686p" +path="res://.godot/imported/level_grass.jpg-13d6035a6eeb80e112609ac3d84adc42.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2b4b3320271b35c9a81f4cd8ddf7ea7a" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-13d6035a6eeb80e112609ac3d84adc42.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/queen_st_mall/level_pavers.jpg b/levels/queen_st_mall/level_pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/levels/queen_st_mall/level_pavers.jpg differ diff --git a/levels/queen_st_mall/level_pavers.jpg.import b/levels/queen_st_mall/level_pavers.jpg.import new file mode 100644 index 0000000..db53bf8 --- /dev/null +++ b/levels/queen_st_mall/level_pavers.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqkposa7ei7ux" +path="res://.godot/imported/level_pavers.jpg-d87800716b7af0b9d073be732c636a9f.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4a9175b67948bd01619ca6271457748b" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_pavers.jpg" +dest_files=["res://.godot/imported/level_pavers.jpg-d87800716b7af0b9d073be732c636a9f.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/queen_st_mall/level_rock.jpg b/levels/queen_st_mall/level_rock.jpg new file mode 100644 index 0000000..8cdf9e5 Binary files /dev/null and b/levels/queen_st_mall/level_rock.jpg differ diff --git a/levels/queen_st_mall/level_rock.jpg.import b/levels/queen_st_mall/level_rock.jpg.import new file mode 100644 index 0000000..ecc5888 --- /dev/null +++ b/levels/queen_st_mall/level_rock.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q7k3jog18i6i" +path="res://.godot/imported/level_rock.jpg-2d1fd05ee0c034f0a006438e038aeaaa.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "17b69eeff0d1d65076a44a6c6a51dddb" +} + +[deps] + +source_file="res://levels/queen_st_mall/level_rock.jpg" +dest_files=["res://.godot/imported/level_rock.jpg-2d1fd05ee0c034f0a006438e038aeaaa.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/southbank/level.glb b/levels/southbank/level.glb new file mode 100644 index 0000000..df0095b Binary files /dev/null and b/levels/southbank/level.glb differ diff --git a/levels/southbank/level.glb.import b/levels/southbank/level.glb.import new file mode 100644 index 0000000..0145339 --- /dev/null +++ b/levels/southbank/level.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bbivnp8wb7dw6" +path="res://.godot/imported/level.glb-17af9cdeb05fd15a816097b7ae0fb96c.scn" + +[deps] + +source_file="res://levels/southbank/level.glb" +dest_files=["res://.godot/imported/level.glb-17af9cdeb05fd15a816097b7ae0fb96c.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +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 diff --git a/levels/southbank/level_asphalt.jpg b/levels/southbank/level_asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/levels/southbank/level_asphalt.jpg differ diff --git a/levels/southbank/level_asphalt.jpg.import b/levels/southbank/level_asphalt.jpg.import new file mode 100644 index 0000000..553b997 --- /dev/null +++ b/levels/southbank/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dw5hldh78jv83" +path="res://.godot/imported/level_asphalt.jpg-b793b32bb8f5247e53fce396641569e9.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "61f0484dca5fc32f16b6163e4f2d82f7" +} + +[deps] + +source_file="res://levels/southbank/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-b793b32bb8f5247e53fce396641569e9.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/southbank/level_concrete_ground.jpg b/levels/southbank/level_concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/levels/southbank/level_concrete_ground.jpg differ diff --git a/levels/southbank/level_concrete_ground.jpg.import b/levels/southbank/level_concrete_ground.jpg.import new file mode 100644 index 0000000..56229d5 --- /dev/null +++ b/levels/southbank/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dtdusjv2k2pxm" +path="res://.godot/imported/level_concrete_ground.jpg-bd2b53d43b87aa4c3e50860a7b180a0d.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "94f81407db30c3621a4cfc3d4cc59777" +} + +[deps] + +source_file="res://levels/southbank/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-bd2b53d43b87aa4c3e50860a7b180a0d.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/southbank/level_facade_brick.jpg b/levels/southbank/level_facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/levels/southbank/level_facade_brick.jpg differ diff --git a/levels/southbank/level_facade_brick.jpg.import b/levels/southbank/level_facade_brick.jpg.import new file mode 100644 index 0000000..a6859de --- /dev/null +++ b/levels/southbank/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxd5h16q8k0b2" +path="res://.godot/imported/level_facade_brick.jpg-414eb4097e7647c48311bc9245f6a8dc.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "cc443eec121e9f1349f538ecdf2b8732" +} + +[deps] + +source_file="res://levels/southbank/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-414eb4097e7647c48311bc9245f6a8dc.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/southbank/level_facade_concrete.jpg b/levels/southbank/level_facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/levels/southbank/level_facade_concrete.jpg differ diff --git a/levels/southbank/level_facade_concrete.jpg.import b/levels/southbank/level_facade_concrete.jpg.import new file mode 100644 index 0000000..a02bbf9 --- /dev/null +++ b/levels/southbank/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d34vl4cexgtf3" +path="res://.godot/imported/level_facade_concrete.jpg-8a6dd7665a26ab818b7ca82d1fed9e40.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "797a8dc03abefe25eec80c9e4fbb396e" +} + +[deps] + +source_file="res://levels/southbank/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-8a6dd7665a26ab818b7ca82d1fed9e40.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/southbank/level_facade_glass.jpg b/levels/southbank/level_facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/levels/southbank/level_facade_glass.jpg differ diff --git a/levels/southbank/level_facade_glass.jpg.import b/levels/southbank/level_facade_glass.jpg.import new file mode 100644 index 0000000..e21b329 --- /dev/null +++ b/levels/southbank/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c88a0xwiqc0v5" +path="res://.godot/imported/level_facade_glass.jpg-bd0b5599e4534fb1beee1f6030e87f02.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "e12fc674ce5e0ccfb17f8d06c372410a" +} + +[deps] + +source_file="res://levels/southbank/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-bd0b5599e4534fb1beee1f6030e87f02.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/southbank/level_facade_heritage.jpg b/levels/southbank/level_facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/levels/southbank/level_facade_heritage.jpg differ diff --git a/levels/southbank/level_facade_heritage.jpg.import b/levels/southbank/level_facade_heritage.jpg.import new file mode 100644 index 0000000..9a05bd0 --- /dev/null +++ b/levels/southbank/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbgk588g2kcb3" +path="res://.godot/imported/level_facade_heritage.jpg-c0a3bebaf42567b83c820573a8263c1b.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ed74e50bd0061f0567ff573f00ba52e8" +} + +[deps] + +source_file="res://levels/southbank/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-c0a3bebaf42567b83c820573a8263c1b.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/southbank/level_grass.jpg b/levels/southbank/level_grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/levels/southbank/level_grass.jpg differ diff --git a/levels/southbank/level_grass.jpg.import b/levels/southbank/level_grass.jpg.import new file mode 100644 index 0000000..568b3e6 --- /dev/null +++ b/levels/southbank/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dks4um1ylu4l6" +path="res://.godot/imported/level_grass.jpg-e747c7c3bfa74c3e8e81903abb92ca39.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2b4b3320271b35c9a81f4cd8ddf7ea7a" +} + +[deps] + +source_file="res://levels/southbank/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-e747c7c3bfa74c3e8e81903abb92ca39.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/southbank/level_pavers.jpg b/levels/southbank/level_pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/levels/southbank/level_pavers.jpg differ diff --git a/levels/southbank/level_pavers.jpg.import b/levels/southbank/level_pavers.jpg.import new file mode 100644 index 0000000..b0a6096 --- /dev/null +++ b/levels/southbank/level_pavers.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bluxg8vceh2rn" +path="res://.godot/imported/level_pavers.jpg-1330d2adc892acadea0e48e320586e6f.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4a9175b67948bd01619ca6271457748b" +} + +[deps] + +source_file="res://levels/southbank/level_pavers.jpg" +dest_files=["res://.godot/imported/level_pavers.jpg-1330d2adc892acadea0e48e320586e6f.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/southbank/level_rock.jpg b/levels/southbank/level_rock.jpg new file mode 100644 index 0000000..8cdf9e5 Binary files /dev/null and b/levels/southbank/level_rock.jpg differ diff --git a/levels/southbank/level_rock.jpg.import b/levels/southbank/level_rock.jpg.import new file mode 100644 index 0000000..84023b9 --- /dev/null +++ b/levels/southbank/level_rock.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpuau8lmmyxkj" +path="res://.godot/imported/level_rock.jpg-9890b8975d8ee215157e6f269b2ef3d2.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "17b69eeff0d1d65076a44a6c6a51dddb" +} + +[deps] + +source_file="res://levels/southbank/level_rock.jpg" +dest_files=["res://.godot/imported/level_rock.jpg-9890b8975d8ee215157e6f269b2ef3d2.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/southbank/level_water.jpg b/levels/southbank/level_water.jpg new file mode 100644 index 0000000..0ed0b39 Binary files /dev/null and b/levels/southbank/level_water.jpg differ diff --git a/levels/southbank/level_water.jpg.import b/levels/southbank/level_water.jpg.import new file mode 100644 index 0000000..2c0fc41 --- /dev/null +++ b/levels/southbank/level_water.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1m4p5c01f6c" +path="res://.godot/imported/level_water.jpg-d28915b84ac8cf257bdf892067b17e66.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "0cc84403ee5cb5f5a87fd4df17c0af6b" +} + +[deps] + +source_file="res://levels/southbank/level_water.jpg" +dest_files=["res://.godot/imported/level_water.jpg-d28915b84ac8cf257bdf892067b17e66.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/story_bridge/level.glb b/levels/story_bridge/level.glb new file mode 100644 index 0000000..9ad59de Binary files /dev/null and b/levels/story_bridge/level.glb differ diff --git a/levels/story_bridge/level.glb.import b/levels/story_bridge/level.glb.import new file mode 100644 index 0000000..e1cb2f7 --- /dev/null +++ b/levels/story_bridge/level.glb.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bggawagdgkqmy" +path="res://.godot/imported/level.glb-045fc5cf8c0e529ecdc2678ee7acde2a.scn" + +[deps] + +source_file="res://levels/story_bridge/level.glb" +dest_files=["res://.godot/imported/level.glb-045fc5cf8c0e529ecdc2678ee7acde2a.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +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 diff --git a/levels/story_bridge/level_asphalt.jpg b/levels/story_bridge/level_asphalt.jpg new file mode 100644 index 0000000..30b225f Binary files /dev/null and b/levels/story_bridge/level_asphalt.jpg differ diff --git a/levels/story_bridge/level_asphalt.jpg.import b/levels/story_bridge/level_asphalt.jpg.import new file mode 100644 index 0000000..51eaaeb --- /dev/null +++ b/levels/story_bridge/level_asphalt.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c68ug0eooevpv" +path="res://.godot/imported/level_asphalt.jpg-f0cf3564dd209cea769010f59e8665e5.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "61f0484dca5fc32f16b6163e4f2d82f7" +} + +[deps] + +source_file="res://levels/story_bridge/level_asphalt.jpg" +dest_files=["res://.godot/imported/level_asphalt.jpg-f0cf3564dd209cea769010f59e8665e5.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/story_bridge/level_concrete_ground.jpg b/levels/story_bridge/level_concrete_ground.jpg new file mode 100644 index 0000000..f8e5395 Binary files /dev/null and b/levels/story_bridge/level_concrete_ground.jpg differ diff --git a/levels/story_bridge/level_concrete_ground.jpg.import b/levels/story_bridge/level_concrete_ground.jpg.import new file mode 100644 index 0000000..5b58fc9 --- /dev/null +++ b/levels/story_bridge/level_concrete_ground.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c5n830vb2de0e" +path="res://.godot/imported/level_concrete_ground.jpg-6769fa78bed00c788c662183736d1f44.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "94f81407db30c3621a4cfc3d4cc59777" +} + +[deps] + +source_file="res://levels/story_bridge/level_concrete_ground.jpg" +dest_files=["res://.godot/imported/level_concrete_ground.jpg-6769fa78bed00c788c662183736d1f44.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/story_bridge/level_facade_brick.jpg b/levels/story_bridge/level_facade_brick.jpg new file mode 100644 index 0000000..fa42b9a Binary files /dev/null and b/levels/story_bridge/level_facade_brick.jpg differ diff --git a/levels/story_bridge/level_facade_brick.jpg.import b/levels/story_bridge/level_facade_brick.jpg.import new file mode 100644 index 0000000..5cc4deb --- /dev/null +++ b/levels/story_bridge/level_facade_brick.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8fs3qv3art7h" +path="res://.godot/imported/level_facade_brick.jpg-a44838e21c90b12d3e9fdfc4090052c0.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "cc443eec121e9f1349f538ecdf2b8732" +} + +[deps] + +source_file="res://levels/story_bridge/level_facade_brick.jpg" +dest_files=["res://.godot/imported/level_facade_brick.jpg-a44838e21c90b12d3e9fdfc4090052c0.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/story_bridge/level_facade_concrete.jpg b/levels/story_bridge/level_facade_concrete.jpg new file mode 100644 index 0000000..414e774 Binary files /dev/null and b/levels/story_bridge/level_facade_concrete.jpg differ diff --git a/levels/story_bridge/level_facade_concrete.jpg.import b/levels/story_bridge/level_facade_concrete.jpg.import new file mode 100644 index 0000000..5123d5b --- /dev/null +++ b/levels/story_bridge/level_facade_concrete.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://w4mip5jc7v2u" +path="res://.godot/imported/level_facade_concrete.jpg-2ef101d803ef61bec7262d52e6268419.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "797a8dc03abefe25eec80c9e4fbb396e" +} + +[deps] + +source_file="res://levels/story_bridge/level_facade_concrete.jpg" +dest_files=["res://.godot/imported/level_facade_concrete.jpg-2ef101d803ef61bec7262d52e6268419.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/story_bridge/level_facade_glass.jpg b/levels/story_bridge/level_facade_glass.jpg new file mode 100644 index 0000000..c690591 Binary files /dev/null and b/levels/story_bridge/level_facade_glass.jpg differ diff --git a/levels/story_bridge/level_facade_glass.jpg.import b/levels/story_bridge/level_facade_glass.jpg.import new file mode 100644 index 0000000..12a51ed --- /dev/null +++ b/levels/story_bridge/level_facade_glass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ewg16syop4y6" +path="res://.godot/imported/level_facade_glass.jpg-d4ecb4af3acbc2b60022ef6225e0cd9d.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "e12fc674ce5e0ccfb17f8d06c372410a" +} + +[deps] + +source_file="res://levels/story_bridge/level_facade_glass.jpg" +dest_files=["res://.godot/imported/level_facade_glass.jpg-d4ecb4af3acbc2b60022ef6225e0cd9d.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/story_bridge/level_facade_heritage.jpg b/levels/story_bridge/level_facade_heritage.jpg new file mode 100644 index 0000000..1fc72b8 Binary files /dev/null and b/levels/story_bridge/level_facade_heritage.jpg differ diff --git a/levels/story_bridge/level_facade_heritage.jpg.import b/levels/story_bridge/level_facade_heritage.jpg.import new file mode 100644 index 0000000..4f35f92 --- /dev/null +++ b/levels/story_bridge/level_facade_heritage.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gihhaoyvpycm" +path="res://.godot/imported/level_facade_heritage.jpg-eb10270dc1b932070b20f4daed832c39.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "ed74e50bd0061f0567ff573f00ba52e8" +} + +[deps] + +source_file="res://levels/story_bridge/level_facade_heritage.jpg" +dest_files=["res://.godot/imported/level_facade_heritage.jpg-eb10270dc1b932070b20f4daed832c39.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/story_bridge/level_grass.jpg b/levels/story_bridge/level_grass.jpg new file mode 100644 index 0000000..7120bc1 Binary files /dev/null and b/levels/story_bridge/level_grass.jpg differ diff --git a/levels/story_bridge/level_grass.jpg.import b/levels/story_bridge/level_grass.jpg.import new file mode 100644 index 0000000..189209f --- /dev/null +++ b/levels/story_bridge/level_grass.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cepj0yceqx2ea" +path="res://.godot/imported/level_grass.jpg-7c41cddf34130a29316e674e44920b09.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2b4b3320271b35c9a81f4cd8ddf7ea7a" +} + +[deps] + +source_file="res://levels/story_bridge/level_grass.jpg" +dest_files=["res://.godot/imported/level_grass.jpg-7c41cddf34130a29316e674e44920b09.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/story_bridge/level_pavers.jpg b/levels/story_bridge/level_pavers.jpg new file mode 100644 index 0000000..b1f0c4a Binary files /dev/null and b/levels/story_bridge/level_pavers.jpg differ diff --git a/levels/story_bridge/level_pavers.jpg.import b/levels/story_bridge/level_pavers.jpg.import new file mode 100644 index 0000000..970025f --- /dev/null +++ b/levels/story_bridge/level_pavers.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1alqxd6jrfyi" +path="res://.godot/imported/level_pavers.jpg-8a1de7ebebc0217e8c2136f2369d0ac1.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "4a9175b67948bd01619ca6271457748b" +} + +[deps] + +source_file="res://levels/story_bridge/level_pavers.jpg" +dest_files=["res://.godot/imported/level_pavers.jpg-8a1de7ebebc0217e8c2136f2369d0ac1.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/story_bridge/level_rock.jpg b/levels/story_bridge/level_rock.jpg new file mode 100644 index 0000000..8cdf9e5 Binary files /dev/null and b/levels/story_bridge/level_rock.jpg differ diff --git a/levels/story_bridge/level_rock.jpg.import b/levels/story_bridge/level_rock.jpg.import new file mode 100644 index 0000000..513473a --- /dev/null +++ b/levels/story_bridge/level_rock.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gw8yd4dmgolx" +path="res://.godot/imported/level_rock.jpg-8074cdd48614af40beb476fc3d5744ad.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "17b69eeff0d1d65076a44a6c6a51dddb" +} + +[deps] + +source_file="res://levels/story_bridge/level_rock.jpg" +dest_files=["res://.godot/imported/level_rock.jpg-8074cdd48614af40beb476fc3d5744ad.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/story_bridge/level_steel.jpg b/levels/story_bridge/level_steel.jpg new file mode 100644 index 0000000..394b48e Binary files /dev/null and b/levels/story_bridge/level_steel.jpg differ diff --git a/levels/story_bridge/level_steel.jpg.import b/levels/story_bridge/level_steel.jpg.import new file mode 100644 index 0000000..1681485 --- /dev/null +++ b/levels/story_bridge/level_steel.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbennx4bjc5fe" +path="res://.godot/imported/level_steel.jpg-946abcd9027d95aca826756822241ffc.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "8070ef37f69252d516ec9c3a8b004740" +} + +[deps] + +source_file="res://levels/story_bridge/level_steel.jpg" +dest_files=["res://.godot/imported/level_steel.jpg-946abcd9027d95aca826756822241ffc.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/story_bridge/level_water.jpg b/levels/story_bridge/level_water.jpg new file mode 100644 index 0000000..0ed0b39 Binary files /dev/null and b/levels/story_bridge/level_water.jpg differ diff --git a/levels/story_bridge/level_water.jpg.import b/levels/story_bridge/level_water.jpg.import new file mode 100644 index 0000000..5156330 --- /dev/null +++ b/levels/story_bridge/level_water.jpg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c8ffcgd5qn3bs" +path="res://.godot/imported/level_water.jpg-f55c5497258e6ba03f33896132c66b93.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "0cc84403ee5cb5f5a87fd4df17c0af6b" +} + +[deps] + +source_file="res://levels/story_bridge/level_water.jpg" +dest_files=["res://.godot/imported/level_water.jpg-f55c5497258e6ba03f33896132c66b93.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/tools/build_level_osm.py b/tools/build_level_osm.py index eb34fe2..cb904a0 100644 --- a/tools/build_level_osm.py +++ b/tools/build_level_osm.py @@ -1,14 +1,15 @@ -"""Build a stylized city level from OpenStreetMap data (Overpass JSON, `out geom`). +"""Build a textured, stylized city level from OpenStreetMap data. -Run: /Applications/Blender.app/Contents/MacOS/Blender -b -P tools/build_level_osm.py -- \ - [spawn_lat,lon,bearing_deg] [rp_lat,lon;lat,lon;...] +Run: Blender -b -P tools/build_level_osm.py -- \ + [spawn_lat,lon,bearing] [rp_lat,lon;...] [bridge_way_name|-] -Buildings extrude to building:levels height (else a hash-seeded CBD-ish height), -roads become dark strips, ground is one big slab. Meshes are suffixed -col so -Godot generates static collision on import. Spawn empty + RacePath empties -follow the game's level conventions. Exports levels//level.glb. +Buildings extrude with FLUX facade textures (box-projected UVs), roads/parks/ +water/cliffs get their own materials, tree nodes become low-poly trees, and an +optional named bridge way grows a steel cantilever truss (hello Story Bridge). +Meshes suffixed -col/-convcol get Godot collision on import. -ponytail: flat terrain only -- cliffs/bridges are hand-built hero pieces later. +ponytail: flat terrain -- no DEM yet, so bridges sit at water level and the +Kangaroo Point cliffs are walls beside the road rather than a drop. Data (c) OpenStreetMap contributors, ODbL. """ import json @@ -17,13 +18,16 @@ import os import sys import bpy import bmesh +from mathutils import Matrix, Vector argv = sys.argv[sys.argv.index("--") + 1:] 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 "" +TEX = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "assets", "textures") M_LAT = 110574.0 M_LON = 111320.0 * math.cos(math.radians(LAT0)) @@ -33,7 +37,17 @@ def xy(lat, lon): for obj in list(bpy.data.objects): bpy.data.objects.remove(obj, do_unlink=True) -def material(name, rgba, rough=0.8): +def tex_material(name, img, rough=0.85): + mat = bpy.data.materials.new(name) + mat.use_nodes = True + bsdf = next(n for n in mat.node_tree.nodes if n.type == "BSDF_PRINCIPLED") + bsdf.inputs["Roughness"].default_value = rough + tex = mat.node_tree.nodes.new("ShaderNodeTexImage") + tex.image = bpy.data.images.load(os.path.join(TEX, img)) + mat.node_tree.links.new(tex.outputs["Color"], bsdf.inputs["Base Color"]) + return mat + +def flat_material(name, rgba, rough=0.8): mat = bpy.data.materials.new(name) mat.use_nodes = True bsdf = next(n for n in mat.node_tree.nodes if n.type == "BSDF_PRINCIPLED") @@ -41,68 +55,159 @@ def material(name, rgba, rough=0.8): bsdf.inputs["Roughness"].default_value = rough return mat -PALETTE = [(0.75, 0.72, 0.66, 1), (0.62, 0.60, 0.58, 1), (0.55, 0.58, 0.62, 1), - (0.70, 0.63, 0.55, 1), (0.52, 0.55, 0.50, 1), (0.66, 0.66, 0.70, 1)] -MATS = [material("bld%d" % i, c) for i, c in enumerate(PALETTE)] -GLASS = material("bldglass", (0.35, 0.45, 0.52, 1), rough=0.3) -ROAD = material("road", (0.22, 0.22, 0.23, 1)) -MALL = material("mall", (0.55, 0.45, 0.38, 1)) # paved pedestrian brown -GROUND = material("ground", (0.42, 0.42, 0.43, 1)) +M_GLASS = tex_material("facade_glass", "facade_glass.jpg", 0.4) +M_CONC = tex_material("facade_concrete", "facade_concrete.jpg") +M_BRICK = tex_material("facade_brick", "facade_brick.jpg") +M_HERIT = tex_material("facade_heritage", "facade_heritage.jpg") +M_ROAD = tex_material("asphalt", "asphalt.jpg") +M_MALL = tex_material("pavers", "pavers.jpg") +M_GRASS = tex_material("grass", "grass.jpg") +M_WATER = tex_material("water", "water.jpg", 0.15) +M_ROCK = tex_material("rock", "rock.jpg") +M_STEEL = tex_material("steel", "steel.jpg", 0.5) +M_GROUND = tex_material("concrete_ground", "concrete_ground.jpg") +M_ROOF = flat_material("roofgrey", (0.30, 0.30, 0.32, 1)) +M_LEAF = flat_material("leaf", (0.18, 0.42, 0.16, 1)) +M_TRUNK = flat_material("trunk", (0.28, 0.20, 0.12, 1)) -d = json.load(open(src)) -buildings = 0 -roads = 0 +def uv_project(bm, scale): + uv = bm.loops.layers.uv.new("UVMap") + for f in bm.faces: + n = f.normal + ax = max(range(3), key=lambda i: abs(n[i])) + for l in f.loops: + c = l.vert.co + if ax == 2: + l[uv].uv = (c.x / scale, c.y / scale) + elif ax == 0: + l[uv].uv = (c.y / scale, c.z / scale) + else: + l[uv].uv = (c.x / scale, c.z / scale) -def add_mesh(name, mesh, mat): +def add_obj(name, bm, mats, uv_scale, roof_split=False): + if roof_split: + for f in bm.faces: + f.material_index = 1 if f.normal.z > 0.7 else 0 + uv_project(bm, uv_scale) + mesh = bpy.data.meshes.new(name) + bm.to_mesh(mesh) + bm.free() + for m in mats: + mesh.materials.append(m) obj = bpy.data.objects.new(name, mesh) - obj.data.materials.append(mat) bpy.context.collection.objects.link(obj) return obj +def poly_bm(pts, z, h=0.0): + """Filled (optionally extruded) polygon bmesh from closed pt list.""" + bm = bmesh.new() + verts = [bm.verts.new((x, y, z)) for x, y in pts[:-1]] + face = bm.faces.new(verts) + if h > 0.0: + res = bmesh.ops.extrude_face_region(bm, geom=[face]) + up = [v for v in res["geom"] if isinstance(v, bmesh.types.BMVert)] + bmesh.ops.translate(bm, vec=(0, 0, h), verts=up) + bmesh.ops.recalc_face_normals(bm, faces=bm.faces) + bmesh.ops.triangulate(bm, faces=bm.faces) + return bm + +def beam(bm, a, b, w, h): + """Oriented box from point a to point b (Vectors).""" + axis = b - a + L = axis.length + if L < 0.05: + return + quat = axis.to_track_quat("X", "Z") + mat = Matrix.Translation((a + b) / 2) @ quat.to_matrix().to_4x4() + res = bmesh.ops.create_cube(bm, size=1.0) + verts = res["verts"] + bmesh.ops.scale(bm, vec=(L, w, h), verts=verts) + bmesh.ops.transform(bm, matrix=mat, verts=verts) + +d = json.load(open(src)) +counts = {"bld": 0, "road": 0, "park": 0, "water": 0, "cliff": 0, "tree": 0} +GREEN_LEISURE = ("park", "garden", "recreation_ground", "pitch", "playground", "golf_course", "nature_reserve") +GREEN_LANDUSE = ("grass", "recreation_ground", "village_green", "meadow", "forest") + +tree_bm = bmesh.new() for e in d["elements"]: tags = e.get("tags", {}) + if e["type"] == "node": + if counts["tree"] >= 400: + continue + tx, ty = xy(e["lat"], e["lon"]) + res = bmesh.ops.create_cone(tree_bm, cap_ends=True, segments=6, + radius1=2.2, radius2=0.15, depth=5.5) + bmesh.ops.translate(tree_bm, vec=(tx, ty, 4.5), verts=res["verts"]) + counts["tree"] += 1 + continue + geom = e.get("geometry") if not geom: continue pts = [xy(g["lat"], g["lon"]) for g in geom] + closed = len(pts) > 3 and geom[0] == geom[-1] if tags.get("building"): - if len(pts) < 4: + if not closed or tags["building"] in ("roof", "bridge"): continue - if tags["building"] in ("roof", "bridge"): - continue # mall canopies / walkway bridges become solid blocks, skip try: levels = float(tags.get("building:levels", "0")) except ValueError: levels = 0.0 h = levels * 3.4 if levels > 0 else 8.0 + (e["id"] % 11) * 3.5 - bm = bmesh.new() try: - verts = [bm.verts.new((x, y, 0)) for x, y in pts[:-1]] - face = bm.faces.new(verts) - res = bmesh.ops.extrude_face_region(bm, geom=[face]) - up = [v for v in res["geom"] if isinstance(v, bmesh.types.BMVert)] - bmesh.ops.translate(bm, vec=(0, 0, h), verts=up) - bmesh.ops.recalc_face_normals(bm, faces=bm.faces) - bmesh.ops.triangulate(bm, faces=bm.faces) - mesh = bpy.data.meshes.new("bld") - bm.to_mesh(mesh) - mat = GLASS if h > 60 else MATS[e["id"] % len(MATS)] - add_mesh("bld_%d-col" % e["id"], mesh, mat) - buildings += 1 + bm = poly_bm(pts, 0, h) except Exception: - pass # self-intersecting footprint, skip - finally: - bm.free() + continue + if h > 55: + fac = M_GLASS + elif h < 15 and e["id"] % 3 == 0: + fac = M_HERIT + else: + fac = M_BRICK if e["id"] % 2 else M_CONC + add_obj("bld_%d-col" % e["id"], bm, [fac, M_ROOF], 13.0, roof_split=True) + counts["bld"] += 1 + + elif tags.get("natural") == "water" or tags.get("water"): + if not closed: + continue + try: + bm = poly_bm(pts, -0.35) + except Exception: + continue + # ponytail: water is solid (-col) so cars skim it instead of falling forever + add_obj("water_%d-col" % e["id"], bm, [M_WATER], 30.0) + counts["water"] += 1 + + elif tags.get("leisure") in GREEN_LEISURE or tags.get("landuse") in GREEN_LANDUSE \ + or tags.get("natural") in ("grassland", "scrub", "wood"): + if not closed: + continue + try: + bm = poly_bm(pts, 0.02) + except Exception: + continue + add_obj("park_%d" % e["id"], bm, [M_GRASS], 14.0) + counts["park"] += 1 + + elif tags.get("natural") == "cliff": + bm = bmesh.new() + for i in range(len(pts) - 1): + a = Vector((pts[i][0], pts[i][1], 7.0)) + b = Vector((pts[i + 1][0], pts[i + 1][1], 7.0)) + beam(bm, a, b, 2.0, 14.0) + add_obj("cliff_%d-col" % e["id"], bm, [M_ROCK], 12.0) + counts["cliff"] += 1 elif tags.get("highway"): hw = tags["highway"] if hw in ("footway", "steps", "path", "cycleway", "corridor", "platform"): continue if tags.get("tunnel") == "yes" or int(tags.get("layer", "0") or 0) < 0: - continue # underground busways/tunnels don't belong at street level + continue wide = {"primary": 9.0, "secondary": 8.0, "tertiary": 7.0, "pedestrian": 10.0}.get(hw, 6.0) - mat = MALL if hw == "pedestrian" else ROAD + mat = M_MALL if hw == "pedestrian" else M_ROAD bm = bmesh.new() for i in range(len(pts) - 1): (x1, y1), (x2, y2) = pts[i], pts[i + 1] @@ -117,33 +222,81 @@ for e in d["elements"]: (x2 - nx, y2 - ny, 0.03), (x2 + nx, y2 + ny, 0.03)]]) except Exception: pass - mesh = bpy.data.meshes.new("road") - bm.to_mesh(mesh) - bm.free() - add_mesh("road_%d" % e["id"], mesh, mat) - roads += 1 + add_obj("road_%d" % e["id"], bm, [mat], 8.0) + counts["road"] += 1 -# ground slab sized to content +if counts["tree"]: + trunk_bm = bmesh.new() + # trunks share the leaf-cone mesh's object for simplicity: one green mesh, one trunk mesh + add_obj("trees", tree_bm, [M_LEAF], 6.0) +else: + tree_bm.free() + +# steel truss along a named bridge way +if bridge_name: + cands = [e for e in d["elements"] if e.get("tags", {}).get("name") == bridge_name and e.get("geometry")] + if cands: + way = max(cands, key=lambda e: len(e["geometry"])) + pts = [Vector((*xy(g["lat"], g["lon"]), 0.0)) for g in way["geometry"]] + # arc-length resample the middle 65% (the steel section) + dists = [0.0] + for i in range(1, len(pts)): + dists.append(dists[-1] + (pts[i] - pts[i - 1]).length) + T = dists[-1] + def at(s): + for i in range(1, len(dists)): + if dists[i] >= s: + f = (s - dists[i - 1]) / max(dists[i] - dists[i - 1], 0.001) + return pts[i - 1].lerp(pts[i], f) + return pts[-1] + s0, s1 = 0.175 * T, 0.825 * T + N = 26 + bm = bmesh.new() + samples = [] + for i in range(N + 1): + t = i / N + s = s0 + (s1 - s0) * t + p = at(s) + h = 4.0 + 16.0 * (math.exp(-((t - 0.32) / 0.10) ** 2) + math.exp(-((t - 0.68) / 0.10) ** 2)) \ + + 6.0 * math.sin(math.pi * t) + fwd = (at(min(s + 4, T)) - p) + fwd.z = 0 + fwd.normalize() + perp = Vector((-fwd.y, fwd.x, 0)) + samples.append((p, perp, h)) + for side in (-1, 1): + for i in range(N): + p1, pe1, h1 = samples[i] + p2, pe2, h2 = samples[i + 1] + a = p1 + pe1 * side * 8.0 + b = p2 + pe2 * side * 8.0 + beam(bm, a + Vector((0, 0, h1)), b + Vector((0, 0, h2)), 0.7, 0.7) # top chord + beam(bm, a + Vector((0, 0, 0.5)), b + Vector((0, 0, 0.5)), 0.5, 0.5) # bottom chord + beam(bm, a + Vector((0, 0, 0.5)), a + Vector((0, 0, h1)), 0.5, 0.5) # vertical + if i % 2 == 0: + beam(bm, a + Vector((0, 0, 0.5)), b + Vector((0, 0, h2)), 0.4, 0.4) # diagonal + 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) # cross brace + add_obj("bridge_steel-col", bm, [M_STEEL], 6.0) + print("bridge truss built along %r (%.0fm span)" % (bridge_name, s1 - s0)) + +# ground slab sized to content (convex collider: huge trimesh tris break raycasts) xs = [v.co.x for o in bpy.data.objects if o.type == "MESH" for v in o.data.vertices] ys = [v.co.y for o in bpy.data.objects if o.type == "MESH" for v in o.data.vertices] gx, gy = (min(xs) + max(xs)) / 2, (min(ys) + max(ys)) / 2 bm = bmesh.new() -bmesh.ops.create_cube(bm, size=1.0) -bmesh.ops.scale(bm, vec=(max(xs) - min(xs) + 100, max(ys) - min(ys) + 100, 1.0), verts=bm.verts) -bmesh.ops.translate(bm, vec=(gx, gy, -0.5), verts=bm.verts) -mesh = bpy.data.meshes.new("ground") -bm.to_mesh(mesh) -bm.free() -# convcol: km-wide trimesh triangles break short suspension raycasts (float precision); -# a convex box collider is exact -add_mesh("ground-convcol", mesh, GROUND) +res = bmesh.ops.create_cube(bm, size=1.0) +bmesh.ops.scale(bm, vec=(max(xs) - min(xs) + 100, max(ys) - min(ys) + 100, 1.0), verts=res["verts"]) +bmesh.ops.translate(bm, vec=(gx, gy, -0.5), verts=res["verts"]) +add_obj("ground-convcol", bm, [M_GROUND], 18.0) 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, 0.1) - sp.rotation_euler = (0, 0, math.radians(-sbear)) # +Y = travel dir = compass bearing + sp.rotation_euler = (0, 0, math.radians(-sbear)) bpy.context.collection.objects.link(sp) if rp_arg: @@ -152,10 +305,10 @@ if rp_arg: for i, pair in enumerate(rp_arg.split(";")): plat, plon = [float(v) for v in pair.split(",")] px, py = xy(plat, plon) - e = bpy.data.objects.new("RP_%02d" % i, None) - e.location = (px, py, 0.1) - bpy.context.collection.objects.link(e) - e.parent = rp + emp = bpy.data.objects.new("RP_%02d" % i, None) + emp.location = (px, py, 0.1) + bpy.context.collection.objects.link(emp) + emp.parent = rp out = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "levels", level_id) os.makedirs(out, exist_ok=True) @@ -163,4 +316,4 @@ for obj in bpy.data.objects: obj.select_set(True) path = os.path.join(out, "level.glb") bpy.ops.export_scene.gltf(filepath=path, export_format="GLB", use_selection=True) -print("level built: %d buildings, %d roads -> %s" % (buildings, roads, path)) +print("level built:", level_id, counts, "->", path) diff --git a/tools/flux_texture.sh b/tools/flux_texture.sh new file mode 100755 index 0000000..370dfd5 --- /dev/null +++ b/tools/flux_texture.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Generate a texture via Cloudflare Workers AI FLUX (flux-1-schnell). +# Usage: flux_texture.sh "" +# Credentials: sourced from known .env files; accepts CLOUDFLARE_API_TOKEN/CF_API_TOKEN +# + CLOUDFLARE_ACCOUNT_ID/CF_ACCOUNT_ID. Values never printed. +set -euo pipefail +for f in ~/Documents/backnforth/.env ~/Documents/wardrobegod/.env; do + [ -f "$f" ] && set -a && source "$f" 2>/dev/null && set +a +done +TOKEN="${CLOUDFLARE_API_TOKEN:-${CF_API_TOKEN:-${CLOUDFLARE_TOKEN:-}}}" +ACCT="${CLOUDFLARE_ACCOUNT_ID:-${CF_ACCOUNT_ID:-${CLOUDFLARE_ACCOUNT:-}}}" +if [ -z "$TOKEN" ] || [ -z "$ACCT" ]; then + echo "MISSING_CREDS token_present=$([ -n "$TOKEN" ] && echo yes || echo no) acct_present=$([ -n "$ACCT" ] && echo yes || echo no)" + exit 1 +fi +PROMPT="$1" +OUT="$2" +RESP=$(mktemp) +HTTP=$(curl -s -w '%{http_code}' -o "$RESP" --max-time 120 \ + "https://api.cloudflare.com/client/v4/accounts/$ACCT/ai/run/@cf/black-forest-labs/flux-1-schnell" \ + -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ + -d "$(python3 -c 'import json,sys; print(json.dumps({"prompt": sys.argv[1], "steps": 6}))' "$PROMPT")") +if [ "$HTTP" != "200" ]; then + echo "HTTP $HTTP: $(python3 -c 'import json,sys; d=json.load(open(sys.argv[1])); print(d.get("errors"))' "$RESP" 2>/dev/null | head -c 200)" + rm -f "$RESP" + exit 1 +fi +python3 - "$RESP" "$OUT" <<'EOF' +import base64, json, sys +d = json.load(open(sys.argv[1])) +open(sys.argv[2] + ".png", "wb").write(base64.b64decode(d["result"]["image"])) +EOF +sips -Z 512 -s format jpeg -s formatOptions 80 "$OUT.png" --out "$OUT" > /dev/null 2>&1 +rm -f "$RESP" "$OUT.png" +echo "OK $OUT ($(du -h "$OUT" | cut -f1))" diff --git a/tools/osm_level_args.py b/tools/osm_level_args.py index b5aa38b..731814f 100644 --- a/tools/osm_level_args.py +++ b/tools/osm_level_args.py @@ -70,6 +70,18 @@ def nodes_of(name): out[nid] = (g["lat"], g["lon"]) return out +if loop[0].startswith("trace:"): + # follow the longest way of this name; the curve closes itself back + tname = loop[0][6:] + assert tname in ways, "no way named %r" % tname + geo = max(ways[tname], key=lambda w: len(w["geometry"]))["geometry"] + step = max(1, len(geo) // 12) + picked = geo[::step] + if picked[-1] != geo[-1]: + picked.append(geo[-1]) + print(";".join("%.6f,%.6f" % (g["lat"], g["lon"]) for g in picked)) + sys.exit(0) + corners = [] for i, street in enumerate(loop): nxt = loop[(i + 1) % len(loop)] diff --git a/tools/osm_xml_to_json.py b/tools/osm_xml_to_json.py new file mode 100644 index 0000000..12ad221 --- /dev/null +++ b/tools/osm_xml_to_json.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +"""Convert an OSM API XML dump to overpass-style JSON for build_level_osm.py. + +Usage: osm_xml_to_json.py + +Emits ways (tags+nodes+geometry), tree nodes, and assembles water multipolygon +relations (the Brisbane River is a relation, not a way) into synthetic closed +ways tagged natural=water. +""" +import json +import sys +import xml.etree.ElementTree as ET + +root = ET.parse(sys.argv[1]).getroot() +nodes = {} +elements = [] + +for n in root.iter("node"): + nid = int(n.get("id")) + lat, lon = float(n.get("lat")), float(n.get("lon")) + nodes[nid] = (lat, lon) + tags = {t.get("k"): t.get("v") for t in n.findall("tag")} + if tags.get("natural") == "tree": + elements.append({"type": "node", "id": nid, "tags": tags, "lat": lat, "lon": lon}) + +ways = {} +for w in root.iter("way"): + wid = int(w.get("id")) + tags = {t.get("k"): t.get("v") for t in w.findall("tag")} + nds = [int(nd.get("ref")) for nd in w.findall("nd")] + if not all(r in nodes for r in nds) or len(nds) < 2: + continue + ways[wid] = nds + if any(tags.get(k) for k in ("building", "highway", "leisure", "landuse", "natural", "water", "waterway")): + elements.append({"type": "way", "id": wid, "tags": tags, "nodes": nds, + "geometry": [{"lat": nodes[r][0], "lon": nodes[r][1]} for r in nds]}) + +# water multipolygons: join outer member ways into rings +def assemble(rings_nodes): + segs = [list(s) for s in rings_nodes if len(s) >= 2] + rings = [] + while segs: + ring = segs.pop() + grew = True + while grew and ring[0] != ring[-1]: + grew = False + for i, s in enumerate(segs): + if s[0] == ring[-1]: + ring += s[1:] + elif s[-1] == ring[-1]: + ring += list(reversed(s))[1:] + elif s[-1] == ring[0]: + ring = s + ring[1:] + elif s[0] == ring[0]: + ring = list(reversed(s)) + ring[1:] + else: + continue + segs.pop(i) + grew = True + break + if ring[0] == ring[-1] and len(ring) > 3: + rings.append(ring) + return rings + +synth = 1 +for r in root.iter("relation"): + tags = {t.get("k"): t.get("v") for t in r.findall("tag")} + if not (tags.get("natural") == "water" or tags.get("water") or tags.get("waterway") == "riverbank"): + continue + outers = [ways[int(m.get("ref"))] for m in r.findall("member") + if m.get("type") == "way" and m.get("role") in ("outer", "") and int(m.get("ref")) in ways] + for ring in assemble(outers): + elements.append({"type": "way", "id": 10**10 + synth, "tags": {"natural": "water"}, + "nodes": ring, "geometry": [{"lat": nodes[n][0], "lon": nodes[n][1]} for n in ring]}) + synth += 1 + +json.dump({"elements": elements}, open(sys.argv[2], "w")) +b = sum(1 for e in elements if e.get("tags", {}).get("building")) +h = sum(1 for e in elements if e.get("tags", {}).get("highway")) +w = sum(1 for e in elements if e.get("tags", {}).get("natural") == "water" or e.get("tags", {}).get("water")) +t = sum(1 for e in elements if e["type"] == "node") +print("converted: %d buildings, %d highways, %d water polys, %d trees" % (b, h, w, t))