diff --git a/art/exported/creatures/101.png b/art/exported/creatures/101.png new file mode 100644 index 0000000..e6e431c Binary files /dev/null and b/art/exported/creatures/101.png differ diff --git a/art/exported/creatures/101.png.import b/art/exported/creatures/101.png.import new file mode 100644 index 0000000..3dc8865 --- /dev/null +++ b/art/exported/creatures/101.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://x5e744k11k70" +path.s3tc="res://.godot/imported/101.png-81f7f90e29292575c1a9727aa6060fa0.s3tc.ctex" +path.etc2="res://.godot/imported/101.png-81f7f90e29292575c1a9727aa6060fa0.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/101.png" +dest_files=["res://.godot/imported/101.png-81f7f90e29292575c1a9727aa6060fa0.s3tc.ctex", "res://.godot/imported/101.png-81f7f90e29292575c1a9727aa6060fa0.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/102.png b/art/exported/creatures/102.png new file mode 100644 index 0000000..b1b66a6 Binary files /dev/null and b/art/exported/creatures/102.png differ diff --git a/art/exported/creatures/102.png.import b/art/exported/creatures/102.png.import new file mode 100644 index 0000000..c958e5f --- /dev/null +++ b/art/exported/creatures/102.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1kla4jewitot" +path.s3tc="res://.godot/imported/102.png-2ab8ac9408a482b1042b6ba3cd3bd718.s3tc.ctex" +path.etc2="res://.godot/imported/102.png-2ab8ac9408a482b1042b6ba3cd3bd718.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/102.png" +dest_files=["res://.godot/imported/102.png-2ab8ac9408a482b1042b6ba3cd3bd718.s3tc.ctex", "res://.godot/imported/102.png-2ab8ac9408a482b1042b6ba3cd3bd718.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/103.png b/art/exported/creatures/103.png new file mode 100644 index 0000000..1a16a38 Binary files /dev/null and b/art/exported/creatures/103.png differ diff --git a/art/exported/creatures/103.png.import b/art/exported/creatures/103.png.import new file mode 100644 index 0000000..2972cde --- /dev/null +++ b/art/exported/creatures/103.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cfdsg4tevv0jm" +path.s3tc="res://.godot/imported/103.png-f8985f10e04b19499cd6f5ffbadc83c9.s3tc.ctex" +path.etc2="res://.godot/imported/103.png-f8985f10e04b19499cd6f5ffbadc83c9.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/103.png" +dest_files=["res://.godot/imported/103.png-f8985f10e04b19499cd6f5ffbadc83c9.s3tc.ctex", "res://.godot/imported/103.png-f8985f10e04b19499cd6f5ffbadc83c9.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/104.png b/art/exported/creatures/104.png new file mode 100644 index 0000000..09eec3c Binary files /dev/null and b/art/exported/creatures/104.png differ diff --git a/art/exported/creatures/104.png.import b/art/exported/creatures/104.png.import new file mode 100644 index 0000000..01a9393 --- /dev/null +++ b/art/exported/creatures/104.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://pgm364g5qlgs" +path.s3tc="res://.godot/imported/104.png-e164f67032648af2cc0a545d2a861c7d.s3tc.ctex" +path.etc2="res://.godot/imported/104.png-e164f67032648af2cc0a545d2a861c7d.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/104.png" +dest_files=["res://.godot/imported/104.png-e164f67032648af2cc0a545d2a861c7d.s3tc.ctex", "res://.godot/imported/104.png-e164f67032648af2cc0a545d2a861c7d.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/105.png b/art/exported/creatures/105.png new file mode 100644 index 0000000..3ba1000 Binary files /dev/null and b/art/exported/creatures/105.png differ diff --git a/art/exported/creatures/105.png.import b/art/exported/creatures/105.png.import new file mode 100644 index 0000000..de797a7 --- /dev/null +++ b/art/exported/creatures/105.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwanip2j561n7" +path.s3tc="res://.godot/imported/105.png-a2b440912e59b3375c6e61e17d08287b.s3tc.ctex" +path.etc2="res://.godot/imported/105.png-a2b440912e59b3375c6e61e17d08287b.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/105.png" +dest_files=["res://.godot/imported/105.png-a2b440912e59b3375c6e61e17d08287b.s3tc.ctex", "res://.godot/imported/105.png-a2b440912e59b3375c6e61e17d08287b.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/106.png b/art/exported/creatures/106.png new file mode 100644 index 0000000..61285cb Binary files /dev/null and b/art/exported/creatures/106.png differ diff --git a/art/exported/creatures/106.png.import b/art/exported/creatures/106.png.import new file mode 100644 index 0000000..3032c38 --- /dev/null +++ b/art/exported/creatures/106.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cr7tc11ievso5" +path.s3tc="res://.godot/imported/106.png-306ce449448588714e5a0e883ae441ac.s3tc.ctex" +path.etc2="res://.godot/imported/106.png-306ce449448588714e5a0e883ae441ac.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/106.png" +dest_files=["res://.godot/imported/106.png-306ce449448588714e5a0e883ae441ac.s3tc.ctex", "res://.godot/imported/106.png-306ce449448588714e5a0e883ae441ac.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/107.png b/art/exported/creatures/107.png new file mode 100644 index 0000000..c843bbe Binary files /dev/null and b/art/exported/creatures/107.png differ diff --git a/art/exported/creatures/107.png.import b/art/exported/creatures/107.png.import new file mode 100644 index 0000000..c4d28e8 --- /dev/null +++ b/art/exported/creatures/107.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c8rf4tnxx8mov" +path.s3tc="res://.godot/imported/107.png-062740d0bdad6e3ac4ecc1cf92ee6b9d.s3tc.ctex" +path.etc2="res://.godot/imported/107.png-062740d0bdad6e3ac4ecc1cf92ee6b9d.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/107.png" +dest_files=["res://.godot/imported/107.png-062740d0bdad6e3ac4ecc1cf92ee6b9d.s3tc.ctex", "res://.godot/imported/107.png-062740d0bdad6e3ac4ecc1cf92ee6b9d.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/3906.png b/art/exported/creatures/3906.png new file mode 100644 index 0000000..6cc1d1b Binary files /dev/null and b/art/exported/creatures/3906.png differ diff --git a/art/exported/creatures/3906.png.import b/art/exported/creatures/3906.png.import new file mode 100644 index 0000000..9bce5e4 --- /dev/null +++ b/art/exported/creatures/3906.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdmm1jfod7gq0" +path.s3tc="res://.godot/imported/3906.png-39cc349a6d3e716822bc9e12bd0ac7a2.s3tc.ctex" +path.etc2="res://.godot/imported/3906.png-39cc349a6d3e716822bc9e12bd0ac7a2.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/3906.png" +dest_files=["res://.godot/imported/3906.png-39cc349a6d3e716822bc9e12bd0ac7a2.s3tc.ctex", "res://.godot/imported/3906.png-39cc349a6d3e716822bc9e12bd0ac7a2.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/4401.png b/art/exported/creatures/4401.png new file mode 100644 index 0000000..48078fd Binary files /dev/null and b/art/exported/creatures/4401.png differ diff --git a/art/exported/creatures/4401.png.import b/art/exported/creatures/4401.png.import new file mode 100644 index 0000000..809a146 --- /dev/null +++ b/art/exported/creatures/4401.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://7dbcbicxwvlo" +path.s3tc="res://.godot/imported/4401.png-0fd242cb090b49614af9b4d07503b2db.s3tc.ctex" +path.etc2="res://.godot/imported/4401.png-0fd242cb090b49614af9b4d07503b2db.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/4401.png" +dest_files=["res://.godot/imported/4401.png-0fd242cb090b49614af9b4d07503b2db.s3tc.ctex", "res://.godot/imported/4401.png-0fd242cb090b49614af9b4d07503b2db.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/4701.png b/art/exported/creatures/4701.png new file mode 100644 index 0000000..afd6a85 Binary files /dev/null and b/art/exported/creatures/4701.png differ diff --git a/art/exported/creatures/4701.png.import b/art/exported/creatures/4701.png.import new file mode 100644 index 0000000..5f4ed32 --- /dev/null +++ b/art/exported/creatures/4701.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://do6hcv3omivv5" +path.s3tc="res://.godot/imported/4701.png-dcb44d4ce6dfdc812a2e185e7f9511be.s3tc.ctex" +path.etc2="res://.godot/imported/4701.png-dcb44d4ce6dfdc812a2e185e7f9511be.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/4701.png" +dest_files=["res://.godot/imported/4701.png-dcb44d4ce6dfdc812a2e185e7f9511be.s3tc.ctex", "res://.godot/imported/4701.png-dcb44d4ce6dfdc812a2e185e7f9511be.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/5702.png b/art/exported/creatures/5702.png new file mode 100644 index 0000000..2da5808 Binary files /dev/null and b/art/exported/creatures/5702.png differ diff --git a/art/exported/creatures/5702.png.import b/art/exported/creatures/5702.png.import new file mode 100644 index 0000000..527c367 --- /dev/null +++ b/art/exported/creatures/5702.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxwr7yv5h30s" +path.s3tc="res://.godot/imported/5702.png-b0cead42bd9a5851c3f6775a7d0e469e.s3tc.ctex" +path.etc2="res://.godot/imported/5702.png-b0cead42bd9a5851c3f6775a7d0e469e.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/5702.png" +dest_files=["res://.godot/imported/5702.png-b0cead42bd9a5851c3f6775a7d0e469e.s3tc.ctex", "res://.godot/imported/5702.png-b0cead42bd9a5851c3f6775a7d0e469e.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/5901.png b/art/exported/creatures/5901.png new file mode 100644 index 0000000..a75039f Binary files /dev/null and b/art/exported/creatures/5901.png differ diff --git a/art/exported/creatures/5901.png.import b/art/exported/creatures/5901.png.import new file mode 100644 index 0000000..e52ad8c --- /dev/null +++ b/art/exported/creatures/5901.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dovitajskavmi" +path.s3tc="res://.godot/imported/5901.png-10c9e77992ad31ce54d34b95a6db6f61.s3tc.ctex" +path.etc2="res://.godot/imported/5901.png-10c9e77992ad31ce54d34b95a6db6f61.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/5901.png" +dest_files=["res://.godot/imported/5901.png-10c9e77992ad31ce54d34b95a6db6f61.s3tc.ctex", "res://.godot/imported/5901.png-10c9e77992ad31ce54d34b95a6db6f61.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/6103.png b/art/exported/creatures/6103.png new file mode 100644 index 0000000..b382c4b Binary files /dev/null and b/art/exported/creatures/6103.png differ diff --git a/art/exported/creatures/6103.png.import b/art/exported/creatures/6103.png.import new file mode 100644 index 0000000..ac97dac --- /dev/null +++ b/art/exported/creatures/6103.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://k3ser2dy6wj7" +path.s3tc="res://.godot/imported/6103.png-5fc95bf908f801d5397114bde5081f55.s3tc.ctex" +path.etc2="res://.godot/imported/6103.png-5fc95bf908f801d5397114bde5081f55.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/6103.png" +dest_files=["res://.godot/imported/6103.png-5fc95bf908f801d5397114bde5081f55.s3tc.ctex", "res://.godot/imported/6103.png-5fc95bf908f801d5397114bde5081f55.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/6804.png b/art/exported/creatures/6804.png new file mode 100644 index 0000000..6f5e7fe Binary files /dev/null and b/art/exported/creatures/6804.png differ diff --git a/art/exported/creatures/6804.png.import b/art/exported/creatures/6804.png.import new file mode 100644 index 0000000..12be7af --- /dev/null +++ b/art/exported/creatures/6804.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5ejex5wtfoun" +path.s3tc="res://.godot/imported/6804.png-28bcc10060d656f6d7f080ea81e2d1d3.s3tc.ctex" +path.etc2="res://.godot/imported/6804.png-28bcc10060d656f6d7f080ea81e2d1d3.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/6804.png" +dest_files=["res://.godot/imported/6804.png-28bcc10060d656f6d7f080ea81e2d1d3.s3tc.ctex", "res://.godot/imported/6804.png-28bcc10060d656f6d7f080ea81e2d1d3.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/6905.png b/art/exported/creatures/6905.png new file mode 100644 index 0000000..296848e Binary files /dev/null and b/art/exported/creatures/6905.png differ diff --git a/art/exported/creatures/6905.png.import b/art/exported/creatures/6905.png.import new file mode 100644 index 0000000..f267dc2 --- /dev/null +++ b/art/exported/creatures/6905.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4d8x6qyhahvn" +path.s3tc="res://.godot/imported/6905.png-a52c1647421059618698e17d7a3f8f98.s3tc.ctex" +path.etc2="res://.godot/imported/6905.png-a52c1647421059618698e17d7a3f8f98.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/6905.png" +dest_files=["res://.godot/imported/6905.png-a52c1647421059618698e17d7a3f8f98.s3tc.ctex", "res://.godot/imported/6905.png-a52c1647421059618698e17d7a3f8f98.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/7403.png b/art/exported/creatures/7403.png new file mode 100644 index 0000000..ad73c17 Binary files /dev/null and b/art/exported/creatures/7403.png differ diff --git a/art/exported/creatures/7403.png.import b/art/exported/creatures/7403.png.import new file mode 100644 index 0000000..bef32c4 --- /dev/null +++ b/art/exported/creatures/7403.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl7ru6gm5xnpb" +path.s3tc="res://.godot/imported/7403.png-54b51089a6ff5c2091372d659ba4bdc7.s3tc.ctex" +path.etc2="res://.godot/imported/7403.png-54b51089a6ff5c2091372d659ba4bdc7.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/7403.png" +dest_files=["res://.godot/imported/7403.png-54b51089a6ff5c2091372d659ba4bdc7.s3tc.ctex", "res://.godot/imported/7403.png-54b51089a6ff5c2091372d659ba4bdc7.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/art/exported/creatures/7508.png b/art/exported/creatures/7508.png new file mode 100644 index 0000000..3f6c7f3 Binary files /dev/null and b/art/exported/creatures/7508.png differ diff --git a/art/exported/creatures/7508.png.import b/art/exported/creatures/7508.png.import new file mode 100644 index 0000000..a14d42f --- /dev/null +++ b/art/exported/creatures/7508.png.import @@ -0,0 +1,42 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnw0dw14iyxbh" +path.s3tc="res://.godot/imported/7508.png-555eff33a2cb66622ccca9d7f063522e.s3tc.ctex" +path.etc2="res://.godot/imported/7508.png-555eff33a2cb66622ccca9d7f063522e.etc2.ctex" +metadata={ +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true +} + +[deps] + +source_file="res://art/exported/creatures/7508.png" +dest_files=["res://.godot/imported/7508.png-555eff33a2cb66622ccca9d7f063522e.s3tc.ctex", "res://.godot/imported/7508.png-555eff33a2cb66622ccca9d7f063522e.etc2.ctex"] + +[params] + +compress/mode=2 +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=0 diff --git a/docs/ATTRIBUTION.md b/docs/ATTRIBUTION.md index 2eac3e5..d24f1ca 100644 --- a/docs/ATTRIBUTION.md +++ b/docs/ATTRIBUTION.md @@ -12,14 +12,14 @@ publicly credited as Voyager and Endeavour and operating collectively as the independent team Woofmeow. - Voyager: co-owner, developer, project director, creator of the game's - current provisional fish artwork and original 3D work except where another - creator is credited, and composer of the original title track + provisional fish placeholder artwork and original 3D work except where + another creator is credited, and composer of the original title track `audio/music/title/as_in_four_wolves.ogg`, dusk/world track `audio/music/world/craft.mp3`, and the synthesized robot animalese tones. - Endeavour: co-owner, developer, and 2D artist. Her incorporated work includes - character pattern/channel-map art, environment and UI art, and item art. - Planned work is not described as incorporated until its files enter the - project. + character pattern/channel-map art, environment and UI art, item art, and + finished fish and creature artwork. Planned work is not described as + incorporated until its files enter the project. - chillnfill: contributor of original 3D models for the character bodies and arms, ears and tails, and multiple world props and decorative assets, including trees and bridges. The contributor requested to be credited as @@ -132,17 +132,18 @@ locations only and must never appear in scenes or resources. ## Project-created artwork and music -The current in-game fish images are provisional artwork by Voyager. Endeavour -is creating replacement fish artwork, but work that has not been incorporated -into this repository is not presented here as part of the game or attributed -as a shipped asset. +Fish entries without finished replacement artwork use provisional placeholder +artwork by Voyager. Incorporated finished fish and creature artwork is by +Endeavour; work that has not entered this repository is not presented here as +part of the game or attributed as a shipped asset. Endeavour's incorporated 2D contributions include the inventory notepad, -environment and UI artwork, item artwork, and character customization pattern -and channel-map artwork. Voyager's incorporated original work includes 3D -assets, the provisional fish artwork, the title and dusk music identified -above, and the robot animalese tones. Specific contributor exceptions are -recorded below and in the in-game credits. +environment and UI artwork, item artwork, finished fish and creature artwork, +and character customization pattern and channel-map artwork. Voyager's +incorporated original work includes 3D assets, the provisional fish +placeholder artwork, the title and dusk music identified above, and the robot +animalese tones. Specific contributor exceptions are recorded below and in the +in-game credits. These credits intentionally describe work by creator and contribution family instead of maintaining a second file-by-file asset catalog. Runtime resources @@ -192,9 +193,10 @@ https://creativecommons.org/licenses/by/3.0/legalcode. ### Endeavour 2D contribution record Endeavour created the incorporated character customization patterns and -channel maps as well as additional UI, environment, and item artwork. The -current provisional fish artwork is not part of this credit. New or replacement -art is added to this record only after it is accepted into the repository. +channel maps as well as additional UI, environment, item, fish, and creature +artwork. Voyager's provisional fish placeholder is not part of this credit. +New or replacement art is added to this record only after it is accepted into +the repository. The exact current filenames and bytes are intentionally not copied into this document. The character appearance resources and Git history are the diff --git a/fish/species/betta_siamese/betta_siamese.tres b/fish/species/betta_siamese/betta_siamese.tres index d8e7ee5..4c9ca3c 100644 --- a/fish/species/betta_siamese/betta_siamese.tres +++ b/fish/species/betta_siamese/betta_siamese.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/7508.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/bowfin/bowfin.tres b/fish/species/bowfin/bowfin.tres index b87370e..7b2881f 100644 --- a/fish/species/bowfin/bowfin.tres +++ b/fish/species/bowfin/bowfin.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/101.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/chromis_blue_green/chromis_blue_green.tres b/fish/species/chromis_blue_green/chromis_blue_green.tres index 17061f8..65f35b4 100644 --- a/fish/species/chromis_blue_green/chromis_blue_green.tres +++ b/fish/species/chromis_blue_green/chromis_blue_green.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/5901.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres b/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres index 25bea8f..16566cb 100644 --- a/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres +++ b/fish/species/clownfish_ocellaris/clownfish_ocellaris.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/5702.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/crab_brown/crab_brown.tres b/fish/species/crab_brown/crab_brown.tres index 8f31b9c..7dec427 100644 --- a/fish/species/crab_brown/crab_brown.tres +++ b/fish/species/crab_brown/crab_brown.tres @@ -2,7 +2,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] -[ext_resource type="Texture2D" path="res://fish/species/crab_brown/crab_brown.png" id="3_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/3906.png" id="3_texture"] [resource] script = ExtResource("1_fish_data") diff --git a/fish/species/gar_longnose/gar_longnose.tres b/fish/species/gar_longnose/gar_longnose.tres index 28f6e7b..aaabbfe 100644 --- a/fish/species/gar_longnose/gar_longnose.tres +++ b/fish/species/gar_longnose/gar_longnose.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/103.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/gar_spotted/gar_spotted.tres b/fish/species/gar_spotted/gar_spotted.tres index faf4afc..3405ee9 100644 --- a/fish/species/gar_spotted/gar_spotted.tres +++ b/fish/species/gar_spotted/gar_spotted.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/106.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/hogfish/hogfish.tres b/fish/species/hogfish/hogfish.tres index bd4373d..0e94a20 100644 --- a/fish/species/hogfish/hogfish.tres +++ b/fish/species/hogfish/hogfish.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/6103.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/ladyfish/ladyfish.tres b/fish/species/ladyfish/ladyfish.tres index 55aa31a..57c277c 100644 --- a/fish/species/ladyfish/ladyfish.tres +++ b/fish/species/ladyfish/ladyfish.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/7403.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/lungfish_west_african/lungfish_west_african.tres b/fish/species/lungfish_west_african/lungfish_west_african.tres index 342a8f8..f049cff 100644 --- a/fish/species/lungfish_west_african/lungfish_west_african.tres +++ b/fish/species/lungfish_west_african/lungfish_west_african.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/107.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/mahi_mahi/mahi_mahi.tres b/fish/species/mahi_mahi/mahi_mahi.tres index c7bd6dd..691a52a 100644 --- a/fish/species/mahi_mahi/mahi_mahi.tres +++ b/fish/species/mahi_mahi/mahi_mahi.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/4701.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/mullet_striped/mullet_striped.tres b/fish/species/mullet_striped/mullet_striped.tres index 409d7d6..a285ee7 100644 --- a/fish/species/mullet_striped/mullet_striped.tres +++ b/fish/species/mullet_striped/mullet_striped.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/6804.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/paddlefish/paddlefish.tres b/fish/species/paddlefish/paddlefish.tres index 80cebe6..498730b 100644 --- a/fish/species/paddlefish/paddlefish.tres +++ b/fish/species/paddlefish/paddlefish.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/104.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/salmon_atlantic/salmon_atlantic.tres b/fish/species/salmon_atlantic/salmon_atlantic.tres index 122c3e3..1c77325 100644 --- a/fish/species/salmon_atlantic/salmon_atlantic.tres +++ b/fish/species/salmon_atlantic/salmon_atlantic.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" uid="uid://h7hg45b7wmst" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/bass_catch_profile.tres" id="2_profile"] [ext_resource type="Script" uid="uid://bs7cqi88csolc" path="res://fish/fish_availability.gd" id="3_availability_script"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/4401.png" id="4_texture"] [sub_resource type="Resource" id="AtlanticSalmonAvailability"] script = ExtResource("3_availability_script") diff --git a/fish/species/sheepshead/sheepshead.tres b/fish/species/sheepshead/sheepshead.tres index 5e3fcc0..d4b8cfa 100644 --- a/fish/species/sheepshead/sheepshead.tres +++ b/fish/species/sheepshead/sheepshead.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="99_fish_placeholder"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/6905.png" id="99_fish_placeholder"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/sturgeon_lake/sturgeon_lake.tres b/fish/species/sturgeon_lake/sturgeon_lake.tres index cf73e25..eef7789 100644 --- a/fish/species/sturgeon_lake/sturgeon_lake.tres +++ b/fish/species/sturgeon_lake/sturgeon_lake.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/102.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres b/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres index 03434b0..9f02593 100644 --- a/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres +++ b/fish/species/sturgeon_shovelnose/sturgeon_shovelnose.tres @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://fish/fish_data.gd" id="1_fish_data"] [ext_resource type="Resource" path="res://fishing/common_catch_profile.tres" id="2_profile"] [ext_resource type="Script" path="res://fish/fish_availability.gd" id="3_availability"] -[ext_resource type="Texture2D" path="res://art/exported/creatures/fish_placeholder.png" id="4_texture"] +[ext_resource type="Texture2D" path="res://art/exported/creatures/105.png" id="4_texture"] [sub_resource type="Resource" id="Availability"] script = ExtResource("3_availability") diff --git a/tests/fish_catalog_content_validation.gd b/tests/fish_catalog_content_validation.gd index 4a252b0..d7174a8 100644 --- a/tests/fish_catalog_content_validation.gd +++ b/tests/fish_catalog_content_validation.gd @@ -40,6 +40,25 @@ const StarterRegionScene = preload( const SharedFishPlaceholder: Texture2D = preload( "res://art/exported/creatures/fish_placeholder.png" ) +const FINAL_CREATURE_TEXTURE_PATHS: Dictionary[StringName, String] = { + &"bowfin": "res://art/exported/creatures/101.png", + &"sturgeon_lake": "res://art/exported/creatures/102.png", + &"gar_longnose": "res://art/exported/creatures/103.png", + &"paddlefish": "res://art/exported/creatures/104.png", + &"sturgeon_shovelnose": "res://art/exported/creatures/105.png", + &"gar_spotted": "res://art/exported/creatures/106.png", + &"lungfish_west_african": "res://art/exported/creatures/107.png", + &"crab_brown": "res://art/exported/creatures/3906.png", + &"salmon_atlantic": "res://art/exported/creatures/4401.png", + &"mahi_mahi": "res://art/exported/creatures/4701.png", + &"clownfish_ocellaris": "res://art/exported/creatures/5702.png", + &"chromis_blue_green": "res://art/exported/creatures/5901.png", + &"hogfish": "res://art/exported/creatures/6103.png", + &"mullet_striped": "res://art/exported/creatures/6804.png", + &"sheepshead": "res://art/exported/creatures/6905.png", + &"ladyfish": "res://art/exported/creatures/7403.png", + &"betta_siamese": "res://art/exported/creatures/7508.png", +} const ACTIVE_CATALOG_COUNT: int = 313 const INACTIVE_CATALOG_COUNT: int = 3 @@ -186,6 +205,8 @@ func _validate_catalog_and_pools() -> void: var active_count: int = 0 var inactive_count: int = 0 var fishing_count: int = 0 + var final_art_count: int = 0 + var placeholder_fishing_count: int = 0 var catalog_numbers: Dictionary[int, bool] = {} for fish: FishDataType in Catalog.candidates: assert(fish != null and not fish.id.is_empty()) @@ -204,13 +225,24 @@ func _validate_catalog_and_pools() -> void: inactive_count += 1 assert(not fish.is_selectable()) assert(fish.display_texture == null) + if FINAL_CREATURE_TEXTURE_PATHS.has(fish.id): + var expected_texture: Texture2D = load( + FINAL_CREATURE_TEXTURE_PATHS[fish.id] + ) as Texture2D + assert(expected_texture != null) + assert(fish.display_texture == expected_texture) + final_art_count += 1 if fish.collection_method == FishDataType.CollectionMethod.FISHING: fishing_count += 1 assert(fish.active) - assert(fish.display_texture == SharedFishPlaceholder) + if not FINAL_CREATURE_TEXTURE_PATHS.has(fish.id): + assert(fish.display_texture == SharedFishPlaceholder) + placeholder_fishing_count += 1 assert(active_count == ACTIVE_CATALOG_COUNT) assert(inactive_count == INACTIVE_CATALOG_COUNT) assert(fishing_count == FISHING_SPECIES_COUNT) + assert(final_art_count == FINAL_CREATURE_TEXTURE_PATHS.size()) + assert(placeholder_fishing_count == 294) var chum: FishDataType = Catalog.get_fish_by_id(&"salmon_chum") assert(chum != null) assert(chum.get_season_text() == "fall") diff --git a/tools/art/export_creature_art.py b/tools/art/export_creature_art.py new file mode 100644 index 0000000..fb44e52 --- /dev/null +++ b/tools/art/export_creature_art.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +"""Export cataloged creature artwork with consistent transparent margins.""" + +from __future__ import annotations + +import argparse +import hashlib +import re +import sys +import zipfile +import xml.etree.ElementTree as ET +from pathlib import Path + +from PIL import Image + + +TABLE_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:table:1.0" +TABLE_ATTRIBUTE = "{%s}" % TABLE_NAMESPACE +NAMESPACES = {"table": TABLE_NAMESPACE} +VALID_EXPORT_SIZES = {64, 128, 256, 512} +SAFE_AREA_RATIO = 0.875 +KNOWN_SOURCE_ALIASES = { + # The delivered filename predates the catalog's authoritative species ID. + "bowfish": "bowfin", +} + + +def parse_arguments() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description=( + "Export PNG creature art according to the catalog's recommended " + "canvas size, using alpha-bound trimming and nearest-neighbor scaling." + ) + ) + parser.add_argument("--tracker", required=True, type=Path) + parser.add_argument("--source", required=True, type=Path) + parser.add_argument("--output", required=True, type=Path) + parser.add_argument( + "--skip", + action="append", + default=[], + help="Catalog creature ID or source filename stem to skip; repeat as needed.", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Validate and report the batch without writing output files.", + ) + return parser.parse_args() + + +def normalize_name(value: str) -> str: + normalized = value.strip().lower().replace("&", " and ") + normalized = re.sub(r"[^a-z0-9]+", "_", normalized) + return normalized.strip("_") + + +def expanded_row_values(row: ET.Element) -> list[str]: + values: list[str] = [] + for cell in row.findall("table:table-cell", NAMESPACES): + repeat = int( + cell.attrib.get( + TABLE_ATTRIBUTE + "number-columns-repeated", + "1", + ) + ) + values.extend(["".join(cell.itertext()).strip()] * repeat) + return values + + +def load_catalog(tracker_path: Path) -> list[dict[str, str]]: + with zipfile.ZipFile(tracker_path) as archive: + root = ET.fromstring(archive.read("content.xml")) + table = root.find(".//table:table", NAMESPACES) + if table is None: + raise ValueError("tracker does not contain a table") + rows = table.findall("table:table-row", NAMESPACES) + if not rows: + raise ValueError("tracker table is empty") + headers = expanded_row_values(rows[0]) + required_headers = { + "catalog_number", + "display_name", + "id", + "recommended_export_canvas_px", + } + missing_headers = required_headers.difference(headers) + if missing_headers: + raise ValueError( + "tracker is missing required columns: " + + ", ".join(sorted(missing_headers)) + ) + records: list[dict[str, str]] = [] + for row in rows[1:]: + values = expanded_row_values(row) + if not any(values): + continue + record = dict(zip(headers, values)) + if record.get("id", "").strip(): + records.append(record) + return records + + +def catalog_lookup(records: list[dict[str, str]]) -> dict[str, dict[str, str]]: + lookup: dict[str, dict[str, str]] = {} + for record in records: + keys = { + normalize_name(record["id"]), + normalize_name(record["display_name"]), + } + for key in keys: + previous = lookup.get(key) + if previous is not None and previous["id"] != record["id"]: + raise ValueError( + f"ambiguous normalized catalog name {key!r}: " + f"{previous['id']} and {record['id']}" + ) + lookup[key] = record + return lookup + + +def resolve_record( + source_path: Path, + lookup: dict[str, dict[str, str]], +) -> dict[str, str]: + source_key = normalize_name(source_path.stem) + catalog_key = KNOWN_SOURCE_ALIASES.get(source_key, source_key) + record = lookup.get(catalog_key) + if record is None: + raise ValueError( + f"cannot map source {source_path.name!r} to one catalog creature" + ) + return record + + +def normalize_artwork(source_path: Path, canvas_size: int) -> tuple[Image.Image, tuple[int, int, int, int], tuple[int, int]]: + with Image.open(source_path) as source_image: + artwork = source_image.convert("RGBA") + alpha_bounds = artwork.getchannel("A").getbbox() + if alpha_bounds is None: + raise ValueError(f"source {source_path.name!r} is fully transparent") + visible = artwork.crop(alpha_bounds) + safe_long_side = round(canvas_size * SAFE_AREA_RATIO) + scale = safe_long_side / max(visible.width, visible.height) + scaled_size = ( + max(1, round(visible.width * scale)), + max(1, round(visible.height * scale)), + ) + visible = visible.resize(scaled_size, Image.Resampling.NEAREST) + canvas = Image.new("RGBA", (canvas_size, canvas_size), (0, 0, 0, 0)) + offset = ( + (canvas_size - scaled_size[0]) // 2, + (canvas_size - scaled_size[1]) // 2, + ) + canvas.alpha_composite(visible, offset) + return canvas, alpha_bounds, scaled_size + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def main() -> int: + arguments = parse_arguments() + records = load_catalog(arguments.tracker) + lookup = catalog_lookup(records) + skip_keys = {normalize_name(value) for value in arguments.skip} + source_paths = sorted(arguments.source.glob("*.png")) + if not source_paths: + raise ValueError(f"no PNG files found under {arguments.source}") + + resolved: list[tuple[Path, dict[str, str]]] = [] + output_names: set[str] = set() + for source_path in source_paths: + record = resolve_record(source_path, lookup) + source_key = normalize_name(source_path.stem) + creature_key = normalize_name(record["id"]) + if source_key in skip_keys or creature_key in skip_keys: + print(f"SKIP {source_path.name} -> {record['id']}") + continue + output_name = f"{record['catalog_number']}.png" + if output_name in output_names: + raise ValueError(f"duplicate output filename {output_name}") + output_names.add(output_name) + resolved.append((source_path, record)) + + if not arguments.dry_run: + arguments.output.mkdir(parents=True, exist_ok=True) + + for source_path, record in resolved: + canvas_size = int(record["recommended_export_canvas_px"]) + if canvas_size not in VALID_EXPORT_SIZES: + raise ValueError( + f"{record['id']} has invalid export size {canvas_size}" + ) + image, alpha_bounds, scaled_size = normalize_artwork( + source_path, + canvas_size, + ) + output_path = arguments.output / f"{record['catalog_number']}.png" + if not arguments.dry_run: + image.save(output_path, format="PNG", optimize=False, compress_level=6) + output_hash = sha256(output_path) + else: + output_hash = "dry-run" + print( + "EXPORT " + f"{source_path.name} -> {output_path.name} " + f"id={record['id']} canvas={canvas_size}x{canvas_size} " + f"alpha_bounds={alpha_bounds} visible={scaled_size[0]}x{scaled_size[1]} " + f"source_sha256={sha256(source_path)} output_sha256={output_hash}" + ) + + print( + f"Complete: {len(resolved)} export(s), " + f"{len(source_paths) - len(resolved)} skipped." + ) + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except (OSError, ValueError, zipfile.BadZipFile) as error: + print(f"ERROR: {error}", file=sys.stderr) + raise SystemExit(1)